Mengapa saya tidak bisa memberikan izin exec ke file pada kartu 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 # 

Mengapa saya tidak bisa memberikan izin exec ke file pada kartu 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

Sekarang tampaknya berhasil kembali.

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

tetapi file belum dapat diberikan 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

Info pemasangan tidak berubah dibandingkan dengan sebelum 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
sumber

Jawaban:

15

Kecuali Anda telah melakukan sesuatu yang tidak biasa dengan perangkat Anda, kartu SD akan diformat sebagai sistem file FAT, yang tidak mendukung * nix file permissions. Entri FAQ Linux ini dari salah satu profesor MIT menjelaskannya sedikit, dan juga menjelaskan bagaimana Anda berpotensi menggunakan opsi pemasangan untuk mengubah mode izin perangkat (meskipun ini akan memerlukan root, dan memengaruhi semua file / folder pada perangkat) . Selain itu, kartu SD di Android dipasang secara default dengan -noexecbendera.

Untuk bit exec Anda mungkin ingin melakukan remount dengan umask 0000, karena umask pada dasarnya adalah biner BUKAN dari izin yang Anda inginkan (jadi umask 0000mengatakan jangan tutupi izin apa pun, biarkan semuanya). Belum diuji, tetapi melakukannya sementara waktu akan menjadi sesuatu seperti:

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

Titik pemasangan mungkin perlu diubah dari /mnt/sdcardsesuatu yang sedikit berbeda tergantung pada perangkat Anda. Namun, sekali lagi, saya percaya mountmengharuskan Anda memiliki izin root untuk ini.

eldarerathis
sumber
Saya mencoba remount menggunakan perintah yang Anda berikan, tetapi gagal, lihat suplemen pertanyaan saya.
Victor S
silakan lihat pembaruan pertanyaan saya.
Victor S
1
@ Viktor: Sepertinya Anda memiliki kartu SD internal dan eksternal. Yang internal tidak diperlakukan dengan cara yang sama, dan saya tidak tahu apakah ada cara untuk memasangnya kembali dengan izin yang Anda inginkan. Atau, meskipun, Anda bisa menjalankan script Anda dengan memohon sh: sh usb0config.sh.
eldarerathis