该平台是已root的Android 8.1手机(马吉斯克)与特穆克斯 Android终端模拟器和Linux环境应用程序安装。我用它作为移动服务器。
连接 USB 智能卡读卡器后,以 root 身份我可以正常查看其 USB 设备文件。然而,作为普通用户,即使在使用户成为包含目录的所有者之后,我也看不到这些文件:
$ whoami
u0_a88
$ ls -l /sys/bus/usb/devices
ls: cannot open directory '/sys/bus/usb/devices': Permission denied
$ ls -ld /sys/bus/usb/devices
drwxr-xr-x 2 root root 0 Aug 20 08:48 /sys/bus/usb/devices
$ su
# whoami
root
# ls -l /sys/bus/usb/devices/
total 0
lrwxrwxrwx 1 root root 0 Aug 20 08:49 1-0:1.0 -> ../../../devices/soc/a800000.ssusb/a800000.dwc3/xhci-hcd.0.auto/usb1/1-0:1.0
lrwxrwxrwx 1 root root 0 Aug 20 08:49 1-1 -> ../../../devices/soc/a800000.ssusb/a800000.dwc3/xhci-hcd.0.auto/usb1/1-1
lrwxrwxrwx 1 root root 0 Aug 20 08:49 1-1:1.0 -> ../../../devices/soc/a800000.ssusb/a800000.dwc3/xhci-hcd.0.auto/usb1/1-1/1-1:1.0
lrwxrwxrwx 1 root root 0 Aug 20 08:49 2-0:1.0 -> ../../../devices/soc/a800000.ssusb/a800000.dwc3/xhci-hcd.0.auto/usb2/2-0:1.0
lrwxrwxrwx 1 root root 0 Aug 20 08:49 usb1 -> ../../../devices/soc/a800000.ssusb/a800000.dwc3/xhci-hcd.0.auto/usb1
lrwxrwxrwx 1 root root 0 Aug 20 08:49 usb2 -> ../../../devices/soc/a800000.ssusb/a800000.dwc3/xhci-hcd.0.auto/usb2
# chown u0_a88.u0_a88 /sys/bus/usb/devices
# exit
$ ls -ld /sys/bus/usb/devices
drwxr-xr-x 2 u0_a88 u0_a88 0 Aug 20 08:54 /sys/bus/usb/devices
~$ ls -l /sys/bus/usb/devices
ls: cannot open directory '/sys/bus/usb/devices': Permission denied
这里发生了什么?
答案1
据我发现,这可能与SELinux:
$ su
# getenforce
Enforcing
常规文件可以被授予普通用户访问权限,如下例所示:
$ su
# echo foo >bar
# exit
$ cat foo
cat: bar: Permission denied
$ su
# ls -Z bar
u:object_r:app_data_file:s0 bar
# restorecon bar
SELinux: Loaded file_contexts
# ls -Z bar
u:object_r:app_data_file:s0:c512,c768 bar
# chown u0_a88.u0_a88 bar
# exit
$ cat bar
foo
然而,仅仅使用restorecon
andchmod
不足以让我访问/sys/bus/usb/devices
:
# restorecon /sys/bus/usb/devices
# chown u0_a88.u0_a88 /sys/bus/usb/devices
# ls -Zd /sys/bus/usb/devices
u:object_r:sysfs:s0
# exit
$ ls -ld /sys/bus/usb/devices
drwxr-xr-x 2 u0_a88 u0_a88 0 Aug 23 11:49 /sys/bus/usb/devices
$ ls -l /sys/bus/usb/devices
ls: cannot open directory '/sys/bus/usb/devices': Permission denied
我没有尝试更改路径上方的权限,因为我担心会破坏系统。
(我认为我的解释是正确的。如果有了解 SELinux 的人来回答就好了。)
答案2
里面的一切
/sys/总线/USB/设备/
包含软链接。软链接默认权限始终为 777。
但真正的文件位于里面
/devices/soc/a800000.ssusb/a800000.dwc3/xhci-hcd.0.auto/
是真实的文件。需要先将真实位置的权限修改为777,才能让用户u0_a88打开该目录/文件。