我正在使用 Chromebook,并且想通过 shell 在 Android 容器内导航。容器安装在路径上/run/containers/android_XXXXX
。当尝试cd
进入目录时,我被告知Permission Denied
。我尝试将命令运行为sudo
,但由于某种原因该cd
命令变得无法访问。我已经运行chmod u+x
了目录,但没有骰子。
从这里我可以采取什么步骤?
stat
我已经在目录上运行,它返回以下内容:
File: ‘android_XXXXXX/’
Size: 80 Blocks: 0 IO Block: 4096 directory
Device: fh/15d Inode: 59640 Links: 3
Access: (0700/drwx------) Uid: (655360/ UNKNOWN) Gid: (655360/ UNKNOWN)
Context: u:object_r:tmpfs:s0
Access: 2016-10-31 04:04:52.680000040 +0000
Modify: 2016-10-31 04:04:52.200000040 +0000
Change: 2016-10-31 04:44:54.990001186 +0000
Birth: -
答案1
该目录drwx------
只有 uid 为655350
(未在密码文件中列出)的人才能读取或进入它。
sudo cd
无法找到该cd
命令是预料之中的,它是 shell 的内置命令。如果它不是内置的,那么它就无法工作。假设你当前的 shell 的进程 ID 为 54000,你运行 /bin/cd 命令,它的 PID 可能是 54309。它会更改进程 54309 的目录,然后退出。进程 54000 仍位于其原始目录中。
chmod u+x
改变user (owner)
许可。
你想要的是sudo chmod go+rx /run/containers/android_XXXXX
答案2
除了像 @icarus 提到的那样检查权限之外,您还需要检查 ACL(访问控制列表),以getfacl
确保没有任何规则覆盖基本文件访问权限。
注意:如果getfacl
您的系统上不存在,则可能不是问题所在。
示例 ACL 应该不是问题。
$ getfacl test/
# file: test/
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
这表明除了标准 POSIX 访问规则之外,没有应用其他 ACL 规则。您可以看到它ls -ald
在权限方面与的输出匹配。 ( 的-d
参数ls
告诉它向您显示目录本身,而不是其内容。)
$ ls -ald test/
drwxr-xr-x 2 root root 4096 May 8 19:11 test/
可能给您带来问题的 ACL 示例。
$ getfacl test/
# file: test/
# owner: root
# group: root
user::rwx
user:mc:r--
group::r-x
mask::r-x
other::r-x
$ ls -ald test/
drwxr-xr-x+ 2 root root 4096 May 8 19:11 test/
在这种情况下,查看 的输出ls -ald
,您不会认为会有问题。但是,由于 ACL 规则适用于 POSIX 规则,因此用户mc
将无法更改到该目录,因为他缺乏可执行权限,尽管其他权限集本来会将其授予mc
.
但需要注意的是,所有者权限似乎优先于所有其他 ACL 规则,我相信组所有者权限也是如此。
Arch Wiki 有有关 ACL 的更多信息。查看https://wiki.archlinux.org/title/Access_Control_Lists如果您有兴趣了解更多有关它们的信息。
可以理解的是,您可能不想总是检查getfacl
这是否是您的问题,或者您可能会忘记这样做。幸运的是,ls -al
它会告诉您何时应用其他 ACL 规则。如果您查看 的输出ls -al
,只要应用了 ACL 规则,您就可以+
在权限位列表的末尾看到 a,否则不会显示(至少在我的简短测试中是这样) 。
+
TLDR:如果您在 的权限列表中看到ls -al
,请检查访问控制列表 ( getfacl
)。