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

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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.