我有一个目录(nobody
由于它是 Docker 绑定挂载的一部分,并结合了用户命名空间重新映射,因此由 拥有)。这是其相关ls -la
输出:
drwxrwxr-x 2 nobody nobody 4096 May 26 14:42 Directory
以 身份运行root
,虽然我不属于目录的所有者或组,但该目录是所有人都可读和可执行的,所以我应该能够进入它。但是,当运行 时cd Directory
,它失败了:
bash: cd: Directory: Permission denied
答案1
我认为您在解决问题后才创建了问题和答案。
请注意,GNUls
长列表-l
将通过在文件模式位列表中附加一个字符来向您显示替代访问方法(例如访问控制列表)是否适用于文件。
而不是:
drwxrwxr-x 2 nobody nobody 4096 May 26 14:42 Directory
您的原始目录列表可能显示:
drwxrwxr-x+ 2 nobody nobody 4096 May 26 14:42 Directory
^
\ Note the extra + character here.
如果你不了解这个惯例,很容易被忽视,但是从手册
当文件模式位后面的字符是空格时,没有其他访问方法。当它是打印字符时,就有这种方法。
GNU‘ls’使用‘
.
’字符来指示具有 SELinux 安全上下文的文件,但没有其他替代访问方法。具有任何其他替代访问方法组合的文件都以“
+
”字符标记。
答案2
就我而言,这是由挥之不去的访问控制列表。我的问题的解决方案是从目录及其子目录中删除所有访问控制列表:
# setfacl -bnR Directory/