Warum kann ich einer Datei auf der SD-Karte keine Ausführungsberechtigungen zuweisen?

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 # 

Warum kann ich einer Datei auf der SD-Karte keine Ausführungsberechtigungen zuweisen?

$ 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

Jetzt scheint es erfolgreich zu remounten.

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

aber der Datei kann noch kein 777-Modus zugewiesen werden.

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

Die Mount-Info ändert sich im Vergleich zu vor dem Remount nicht.

$ 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

Antworten (1)

Sofern Sie nichts Ungewöhnliches mit Ihrem Gerät gemacht haben, wird die SD-Karte als FAT-Dateisystem formatiert, das keine *nix-Dateiberechtigungen unterstützt. Dieser Linux-FAQ -Eintrag von einem der MIT-Professoren erklärt es ein wenig und erklärt auch, wie Sie möglicherweise Mount-Optionen verwenden können, um den Berechtigungsmodus des Geräts zu ändern (dies würde jedoch Root erfordern und alle Dateien/Ordner auf dem Gerät betreffen). . Außerdem wird die SD-Karte in Android standardmäßig mit dem -noexecFlag gemountet.

Für das exec-Bit möchten Sie wahrscheinlich mit einer umask von neu einhängen 0000, da die umask im Wesentlichen ein binäres NICHT der gewünschten Berechtigungen ist (umask 0000sagt also, dass Sie keine Berechtigungen ausblenden, sondern alle zulassen). Ungetestet, aber es vorübergehend zu tun, wäre etwas in der Art von:

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

Je nach Gerät muss der Einhängepunkt möglicherweise /mnt/sdcardin etwas anderes geändert werden. Ich glaube mountjedoch, dass Sie dafür Root-Berechtigungen haben müssen.

Ich versuche, mit Ihrem gegebenen Befehl erneut zu mounten, aber es ist fehlgeschlagen, bitte sehen Sie sich die Ergänzung meiner Frage an.
Bitte sehen Sie sich das Update meiner Frage an.
@ VictorS: Es sieht so aus, als hätten Sie sowohl eine interne als auch eine externe SD-Karte. Der interne wird nicht auf die gleiche Weise behandelt, und ich weiß nicht, ob es eine Möglichkeit gibt, ihn mit den gewünschten Berechtigungen neu zu mounten. Alternativ können Sie Ihr Skript aber auch ausführen, indem Sie sh: aufrufen sh usb0config.sh.