Dlaczego nie mogę przypisać uprawnień do wykonania do pliku na karcie SD?

10
shell@android:/sdcard/SW # ls -l
-rw-rw-r-- root     sdcard_rw      128 2012-09-22 11:42 usb0config.sh
shell@android:/sdcard/SW # chmod 777 usb0config.sh                             
shell@android:/sdcard/SW # ls -l
-rw-rw-r-- root     sdcard_rw      128 2012-09-22 11:42 usb0config.sh
shell@android:/sdcard/SW # 

Dlaczego nie mogę przypisać uprawnień do wykonania do pliku na karcie SD?

$ adb shell su -c mount |grep -si sdcard
/dev/block/vold/179:97 /mnt/ext_sdcard vfat rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1015,fmask=0002,dmask=0002,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0
tmpfs /mnt/ext_sdcard/.android_secure tmpfs ro,relatime,size=0k,mode=000 0 0
/dev/fuse /mnt/sdcard fuse rw,nosuid,nodev,relatime,user_id=1023,group_id=1023,default_permissions,allow_other 0 0


$ adb shell su -c "mount -t vfat -o umask=0000 /dev/fuse /mnt/sdcard"
mount: Block device required

Teraz wydaje się, że ponownie zamontowano.

$ adb shell su -c "mount -t vfat -o remount,umask=0000 /dev/fuse /mnt/sdcard"

ale plikowi nie można jeszcze przypisać trybu 777.

shell@android:/sdcard/Sw # ls -l
-rw-rw-r-- root     sdcard_rw      128 2012-09-22 11:42 usb0config.sh
shell@android:/sdcard/Sw # chmod 777 usb0config.sh                             
shell@android:/sdcard/Sw # ls -l
-rw-rw-r-- root     sdcard_rw      128 2012-09-22 11:42 usb0config.sh

Informacje o montażu nie zmieniają się w porównaniu do danych przed ponownym zamontowaniem.

$ adb shell su -c mount |grep -si sdcard
/dev/block/vold/179:97 /mnt/ext_sdcard vfat rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1015,fmask=0002,dmask=0002,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0
tmpfs /mnt/ext_sdcard/.android_secure tmpfs ro,relatime,size=0k,mode=000 0 0
/dev/fuse /mnt/sdcard fuse rw,relatime,user_id=1023,group_id=1023,default_permissions,allow_other 0 0
Victor S.
źródło

Odpowiedzi:

15

O ile nie zrobiłeś czegoś niezwykłego z urządzeniem, karta SD zostanie sformatowana jako system plików FAT, który nie obsługuje uprawnień do plików * nix. Ten wpis w Linux FAQ od jednego z profesorów MIT trochę to wyjaśnia, a także wyjaśnia, w jaki sposób możesz potencjalnie użyć opcji montowania, aby zmienić tryb uprawnień urządzenia (wymagałoby to jednak rootowania i wpłynęłoby na wszystkie pliki / foldery na urządzeniu) . Ponadto karta SD w systemie Android jest domyślnie montowana z -noexecflagą.

W przypadku bitu exec, który prawdopodobnie chciałbyś ponownie zamontować za pomocą umask 0000, ponieważ umask jest w zasadzie binarnym NIE żądanych uprawnień (więc umask 0000mówi, że nie maskuj żadnych uprawnień, zezwól na wszystkie). Nieprzetestowane, ale wykonanie tego tymczasowo byłoby czymś w rodzaju:

mount -t vfat -o umask=0000 /dev/your/sdcard/device /mnt/sdcard

Punkt montowania może wymagać zmiany z /mnt/sdcardnieco innego w zależności od urządzenia. Ponownie jednak uważam, że mountwymaga do tego uprawnień użytkownika root.

eldarerathis
źródło
Próbuję ponownie zamontować za pomocą podanego polecenia, ale nie powiodło się, proszę zobaczyć suplement mojego pytania.
Victor S
proszę zobaczyć aktualizację mojego pytania.
Victor S
1
@VictorS: Wygląda na to, że masz zarówno wewnętrzną, jak i zewnętrzną kartę SD. Wewnętrzny nie jest traktowany w ten sam sposób i nie wiem, czy istnieje sposób, aby ponownie go zamontować przy użyciu wymaganych uprawnień. Alternatywnie, choć można wykonać skrypt powołując sh: sh usb0config.sh.
eldarerathis