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

¿Por qué no puedo asignar permisos ejecutivos 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 volver a montar con éxito.

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

pero el archivo todavía no puede ser asignado 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

Respuestas (1)

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 puede usar potencialmente las opciones de montaje para cambiar el modo de permiso del dispositivo (esto requeriría root, sin embargo, y afectaría a todos los archivos/carpetas en el dispositivo) . Además, la tarjeta SD en Android está montada por defecto con la -noexecbandera.

Para el bit ejecutivo, probablemente desee volver a montar con un umask de 0000, ya que el umask es esencialmente un binario NO de los permisos que desea (por lo que umask 0000dice que no oculte ningún permiso, permítalos todos). No probado, pero hacerlo temporalmente sería algo así como:

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

Es posible que deba cambiar el punto de montaje /mnt/sdcarda algo ligeramente diferente dependiendo de su dispositivo. Una vez más, sin embargo, creo mountque requiere que tenga permisos de root para esto.

Intenté volver a montar usando su comando dado, pero fallé, consulte el suplemento de mi pregunta.
por favor vea la actualización de mi pregunta.
@VictorS: Parece que tiene una tarjeta SD interna y externa. El interno no se trata de la misma manera, y no sé si hay una forma de volver a montarlo con los permisos que desea. Sin embargo, como alternativa, puede ejecutar su secuencia de comandos invocando sh: sh usb0config.sh.