Чому я не можу призначити дозволи на виконання файлу на 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 # 

Чому я не можу призначити дозволи на виконання файлу на 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

Зараз, здається, перебудова успішно.

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

але файл ще не може бути призначений режиму 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

Інформація про змонтування не змінюється порівняно з попередньою перезарядкою.

$ 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

Відповіді:


15

Якщо ви не зробили щось незвичне зі своїм пристроєм, SD-карта буде відформатована у вигляді файлової системи FAT, яка не підтримує * nix дозволу на файл. Цей запис у FAQ щодо одного з професорів MIT трохи пояснює це, а також пояснює, як можна потенційно використовувати параметри монтажу, щоб змінити режим дозволу пристрою (для цього потрібен root, але це вплине на всі файли / папки на пристрої) . Також SD-карта в Android за замовчуванням монтується з -noexecпрапором.

Для біта exec ви, мабуть, хочете повторно за допомогою umask 0000, оскільки umask - це по суті бінарний НЕ потрібних дозволів (тому umask 0000каже, що не маскувати жодних дозволів, дозволити їх усі). Неперевірене, але робити це тимчасово буде щось за принципом:

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

Точку монтажу, можливо, потрібно буде змінити /mnt/sdcardна щось дещо інше, залежно від вашого пристрою. Знову ж таки, я вважаю, mountщо для цього потрібно мати кореневі дозволи.


Я намагаюся зробити перерахунок за допомогою вашої команди, але не вдалося, будь ласка, дивіться додаток до мого запитання.
Victor S

дивіться оновлення мого питання.
Victor S

1
@VictorS: Схоже, у вас є і внутрішня, і зовнішня SD-карта. Внутрішній не трактується так само, і я не знаю, чи є спосіб відновити його за допомогою потрібних дозволів. Однак ви можете виконати свій скрипт, посилаючись на sh : sh usb0config.sh.
eldarerathis
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.