10 votes

Pourquoi ne puis-je pas attribuer des permissions d'exécution à un fichier sur la carte SD ?

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 des permissions 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 toujours pas être attribué en 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

14voto

David Negron Points 971

À moins que vous n'ayez 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 de permission de l'appareil (cela nécessiterait des autorisations root, cependant, et affecterait tous les fichiers/dossiers sur l'appareil). De plus, la carte SD dans Android est montée par défaut avec le drapeau -noexec.

Pour le bit exécutable, vous voudriez probablement remonter avec un umask de 0000, puisque l'umask est essentiellement un NOT binaire des autorisations que vous voulez (donc umask 0000 dit ne pas masquer les autorisations, laissez-les toutes). Non testé, mais le faire temporairement serait quelque chose comme :

mount -t vfat -o umask=0000 /dev/votre/appareil/carte/sd /mnt/carte_sd

Le point de montage peut devoir être modifié de /mnt/carte_sd à quelque chose de légèrement différent en fonction de votre appareil. Encore une fois, cependant, je crois que mount nécessite que vous ayez des autorisations root pour cela.

0 votes

J'essaie de remonter en utilisant la commande que vous avez donnée, mais cela a échoué, veuillez consulter le supplément de ma question.

0 votes

Veuillez consulter la mise à jour de ma question.

1 votes

@VictorS: Il semble que vous ayez à la fois une carte SD interne et une externe. La carte interne n'est pas traitée de la même manière et je ne sais pas s'il existe un moyen de la remonter avec les autorisations souhaitées. Alternativement, cependant, vous pourriez exécuter votre script en invoquant sh: sh usb0config.sh.

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X