Warum kann ich einer Datei auf der SD-Karte keine Exec-Berechtigungen zuweisen?

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 # 

Warum kann ich einer Datei auf der SD-Karte keine Exec-Berechtigungen 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 wieder zu montieren.

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

Der Datei kann jedoch 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-Informationen ändern sich nicht im Vergleich zu vor dem Remount.

$ 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.
quelle

Antworten:

15

Sofern Sie mit Ihrem Gerät nichts Ungewöhnliches gemacht haben, wird die SD-Karte als FAT-Dateisystem formatiert, das keine * nix-Dateiberechtigungen unterstützt. Dieser Linux-FAQ- Eintrag von einem MIT-Professor 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 ist die SD-Karte in Android standardmäßig mit dem -noexecFlag versehen.

Für das Exec-Bit möchten Sie wahrscheinlich mit einer Umask von erneut bereitstellen 0000, da die Umask im Wesentlichen ein binäres NICHT der gewünschten Berechtigungen ist (also 0000sagt Umask, dass Sie keine Berechtigungen maskieren, alle zulassen). Ungetestet, aber vorübergehend zu tun wäre etwas in der Art von:

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

/mnt/sdcardJe nach Gerät muss der Einhängepunkt möglicherweise von einem etwas anderen geändert werden. Ich glaube mountjedoch erneut, dass Sie über Root-Berechtigungen verfügen müssen.

Eldarerathis
quelle
Ich versuche erneut mit Ihrem Befehl zu montieren, bin jedoch fehlgeschlagen. Weitere Informationen finden Sie in der Ergänzung zu meiner Frage.
Victor S
Bitte sehen Sie das Update meiner Frage.
Victor S
1
@ Victor: Es sieht so aus, als hätten Sie sowohl eine interne als auch eine externe SD-Karte. Das interne wird nicht auf die gleiche Weise behandelt, und ich weiß nicht, ob es eine Möglichkeit gibt, es mit den gewünschten Berechtigungen erneut bereitzustellen. Alternativ können Sie Ihr Skript auch ausführen, indem Sie sh: aufrufen sh usb0config.sh.
eldarerathis