¿Por qué no puedo asignar permisos de ejecución a un archivo en la tarjeta 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 # 

¿Por qué no puedo asignar permisos de ejecución a un archivo en la tarjeta 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

Ahora parece remontarse con éxito.

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

pero el archivo aún no puede asignarse al modo 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

La información de montaje no cambia en comparación con antes de volver a montar.

$ 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
fuente

Respuestas:

15

A menos que haya hecho algo inusual con su dispositivo, la tarjeta SD se formateará como un sistema de archivos FAT, que no admite permisos de archivos * nix. Esta entrada de preguntas frecuentes de Linux de uno de los profesores del MIT lo explica un poco, y también explica cómo potencialmente puede usar las opciones de montaje para cambiar el modo de permiso del dispositivo (sin embargo, esto requeriría root y afectaría a todos los archivos / carpetas en el dispositivo) . Además, la tarjeta SD en Android se monta de forma predeterminada con la -noexecbandera.

Para el bit ejecutivo probablemente querrás volver a montar con una umask 0000, ya que la umask es esencialmente un NOT binario de los permisos que deseas (por lo que umask 0000dice que no ocultes ningún permiso, permite todos). No probado, pero hacerlo temporalmente sería algo similar a:

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

Es posible que sea necesario cambiar el punto de montaje de /mnt/sdcardalgo ligeramente diferente dependiendo de su dispositivo. Sin embargo, de nuevo, creo mountque requiere que tenga permisos de root para esto.

eldarerathis
fuente
Intento volver a montar usando su comando dado, pero falló, consulte el suplemento de mi pregunta.
Victor S
por favor vea la actualización de mi pregunta.
Victor S
1
@VictorS: Parece que tiene una tarjeta SD interna y una externa. El interno no se trata de la misma manera, y no sé si hay una manera de volver a montarlo con los permisos que desea. Alternativamente, sin embargo, se podría ejecutar su guión de invocación sh: sh usb0config.sh.
eldarerathis