为什么我不能获得我已经加入的组的许可?

为什么我不能获得我已经加入的组的许可?

我已经是“aid_sdcard_rw”组的成员:

android@localhost:~$ whoami
android
android@localhost:~$ groups
android aid_radio ...... aid_sdcard_rw ......

你可以看到我已经在aid_sdcard_rw组中了。然后,当我访问目录 /storage/sdcard0 时:

android@localhost:~$ ls /storage/sdcard0/
ls: cannot open directory '/storage/sdcard0/': Permission denied

但:

android@localhost:~$ ls -l /storage/
total 8
d---rwxr-x 17 android aid_sdcard_rw 8192 1月   1  1970 sdcard0

“aid_sdcard_rw”组成员没有读取权限吗?为什么会发生这个权限被拒绝的情况?


我运行的系统是 ubuntu 16.04,并使用名为 Linux Deploy 的应用程序在我的 Android 手机中运行,并且我的手机插入了外部 SD 卡:

Welcome to Ubuntu 16.04 LTS (GNU/Linux 3.4.5 armv7l)

 * Documentation:  https://help.ubuntu.com/
Ubuntu 16.04 LTS [running via Linux Deploy]

目录 /storage/sdcard0 是我的外部 SD 卡挂载目录(请参见下面的最后一行):

android@localhost:~$ cat /etc/mtab
/dev/loop1 / ext4 rw,relatime,data=ordered 0 0
proc /proc proc rw,relatime 0 0
sys /sys sysfs rw,relatime 0 0
tmpfs /dev tmpfs rw,nosuid,relatime,mode=755 0 0
devpts /dev/pts devpts rw,relatime,gid=5,mode=620 0 0
tmpfs /dev/shm tmpfs rw,relatime 0 0
/dev/block/vold/179:97 /storage/sdcard0 vfat rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0

我尝试过 umount /storage/sdcard0 并使用选项 -o umask=0000 重新安装它,但命令 ls -l /storage 得到与上面相同的结果。

答案1

如果拥有该文件或目录的用户是明确否认通过权限访问文件或目录,则该用户不能访问该文件或目录。所有者是否是有权访问的组的成员并不重要。

或者换句话说,要以所有者身份访问文件或目录,它必须允许所有者访问。

就您而言,您有一个没有x所有者权限的目录。因此所有者无法访问该目录。

要解决此问题,请使用

chmod u+x /storage/sdcard0

如果所有者还需要能够列出目录的内容,也请授予所有者r权限。要创建或删除文件或子目录,您将需要w权限。

您应该能够在未安装卡的情况下设置目录的权限。挂载SD卡时,挂载点的权限应继承目录权限。

答案2

android 用户也是该目录的所有者,没有任何权限的所有者(即使 android 用户是有效组的成员)。解决方案是更改目录的所有者chown或尝试使用另一个用户(属于有效组)。

答案3

文件权限有优先顺序:

  • 用户权限影响文件的所有者。
  • 组权限影响文件组中的每个人。
  • 其他权限影响其他所有人。

权限不会合并——它们会按顺序进行测试。这意味着组权限不会影响所有者,其他权限不会影响所有者和组。这样就允许更广泛的用户组可以拥有的情况更多的权限而不是更具体的权限——当您有一个通常应该可以访问的文件或目录,但您想排除特定的用户或组时,这有时很有用。

然而,当涉及到排除用户时,这基本上是无效的。文件的所有者也有权更改其权限,因此所有者可以执行以下操作

chmod u+rwx /storage/sdcard0

但是,如果用户处于无法使用的受限环境中chmod,这可能会很有效。

答案4

尝试像这样执行:

newgrp aid_sdcard_rw 
ls /storage/sdcard0/

相关内容