Pourquoi ne puis-je pas attribuer d'autorisations d'exécution à un fichier sur la carte 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 # 

Pourquoi ne puis-je pas attribuer d'autorisations d'exécution à un fichier sur la carte 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

Maintenant, il semble remonter avec succès.

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

mais le fichier ne peut pas encore être affecté au mode 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

Les informations de montage ne changent pas par rapport à avant le remontage.

$ 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
la source

Réponses:

15

Sauf si vous avez fait quelque chose d'inhabituel avec votre appareil, la carte SD sera formatée en tant que système de fichiers FAT, qui ne prend pas en charge les autorisations de fichiers * nix. Cette entrée de la FAQ Linux d'un des professeurs du MIT l'explique un peu et explique également comment vous pouvez potentiellement utiliser des options de montage pour changer le mode d'autorisation du périphérique (cela nécessiterait cependant la racine et affecterait tous les fichiers / dossiers sur le périphérique) . De plus, la carte SD dans Android est montée par défaut avec le -noexecdrapeau.

Pour le bit d'exécution, vous voudrez probablement remonter avec un umask 0000, car le umask est essentiellement un binaire NON des autorisations que vous souhaitez (donc umask 0000dit de ne masquer aucune autorisation, autorisez-les toutes). Non testé, mais le faire temporairement serait quelque chose comme:

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

Le point de montage peut devoir être changé de /mnt/sdcardquelque chose de légèrement différent selon votre appareil. Encore une fois, cependant, je pense mountque vous devez disposer des autorisations root pour cela.

eldarerathis
la source
J'essaie de remonter en utilisant votre commande donnée, mais a échoué, veuillez consulter le supplément de ma question.
Victor S
veuillez voir la mise à jour de ma question.
Victor S
1
@VictorS: Il semble que vous ayez une carte SD interne et externe. Celui interne n'est pas traité de la même manière, et je ne sais pas s'il existe un moyen de le remonter avec les autorisations que vous souhaitez. Sinon, cependant, vous pouvez exécuter votre script en appelant sh: sh usb0config.sh.
eldarerathis