Tại sao tôi không thể gán quyền thực thi cho một tệp trên thẻ 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 # 

Tại sao tôi không thể gán quyền thực thi cho một tệp trên thẻ 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

Bây giờ có vẻ như thành công.

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

nhưng tập tin chưa thể được gán chế độ 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

Thông tin gắn kết không thay đổi so với trước khi kết thúc.

$ 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

Câu trả lời:


15

Trừ khi bạn đã làm điều gì đó bất thường với thiết bị của mình, thẻ SD sẽ được định dạng dưới dạng hệ thống tệp FAT, không hỗ trợ quyền * tệp nix. Mục Câu hỏi thường gặp về Linux này từ một trong các giáo sư của MIT giải thích một chút và cũng giải thích cách bạn có thể sử dụng các tùy chọn gắn kết để thay đổi chế độ cấp phép của thiết bị (tuy nhiên, điều này sẽ yêu cầu root, và ảnh hưởng đến tất cả các tệp / thư mục trên thiết bị) . Ngoài ra, thẻ SD trong Android được gắn theo mặc định với -noexeccờ.

Đối với bit exec, bạn có thể muốn kết nối lại với một ô 0000, vì um về cơ bản là nhị phân KHÔNG phải là quyền mà bạn muốn (vì vậy umask 0000nói không che giấu bất kỳ quyền nào, cho phép tất cả chúng). Chưa được kiểm tra, nhưng thực hiện nó tạm thời sẽ là một cái gì đó theo dòng:

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

Điểm gắn kết có thể cần được thay đổi từ /mnt/sdcardmột cái gì đó hơi khác nhau tùy thuộc vào thiết bị của bạn. Mặc dù vậy, một lần nữa, tôi tin mountrằng bạn cần có quyền root cho việc này.


Tôi cố gắng sử dụng lại lệnh đã cho của bạn, nhưng không thành công, vui lòng xem bổ sung câu hỏi của tôi.
Victor S

xin vui lòng xem cập nhật câu hỏi của tôi.
Victor S

1
@VictorS: Có vẻ như bạn có cả thẻ SD bên trong và bên ngoài. Cái bên trong không được xử lý theo cùng một cách, và tôi không biết liệu có cách nào để nó được gắn lại với các quyền bạn muốn không. Ngoài ra, mặc dù, bạn có thể thực thi tập lệnh của mình bằng cách gọi sh : sh usb0config.sh.
eldarerathis
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.