Perché non posso assegnare le autorizzazioni exec a un file sulla scheda 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 # 

Perché non posso assegnare le autorizzazioni exec a un file sulla scheda 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

Ora sembra rimontare con successo.

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

ma al file non è ancora possibile assegnare la modalità 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

Le informazioni sul montaggio non cambiano rispetto a prima del remaunt.

$ 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

Risposte:


15

A meno che tu non abbia fatto qualcosa di insolito con il tuo dispositivo, la scheda SD verrà formattata come un file system FAT, che non supporta le autorizzazioni per i file * nix. Questa voce delle domande frequenti su Linux di uno dei professori del MIT lo spiega un po 'e spiega anche come è possibile utilizzare potenzialmente le opzioni di montaggio per modificare la modalità di autorizzazione del dispositivo (ciò richiederebbe comunque il root e influirebbe su tutti i file / cartelle sul dispositivo) . Inoltre, la scheda SD in Android è montata di default con il -noexecflag.

Per il bit exec probabilmente vorrai rimontare con un umask di 0000, poiché umask è essenzialmente un binario NON dei permessi che vuoi (quindi umask 0000dice di non mascherare alcun permesso, consentili tutti). Non testato, ma farlo temporaneamente sarebbe qualcosa sulla falsariga di:

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

Potrebbe essere necessario cambiare il punto di montaggio /mnt/sdcardin qualcosa di leggermente diverso a seconda del dispositivo. Ancora una volta, però, credo mountche tu abbia i permessi di root per questo.


Provo a rimontare usando il tuo comando dato, ma non ci riesco, vedi il supplemento alla mia domanda.
Victor S,

si prega di consultare l'aggiornamento della mia domanda.
Victor S,

1
@VictorS: sembra che tu abbia una scheda SD sia interna che esterna. Quello interno non è trattato allo stesso modo e non so se c'è un modo per rimontarlo con le autorizzazioni desiderate. In alternativa, però, si potrebbe eseguire lo script invocando sh: sh usb0config.sh.
eldarerathis,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.