在我的 Debian 11 系统上,我有一个文件夹的权限明显被破坏。作为 root,我可以看到该文件夹属于用户 ansible(所有者),并且具有正确的权限集 (0644),这样用户应该可以轻松地看到这些文件。
ansible@BACKUP:~$ sudo -s
root@BACKUP:/home/ansible# cd /opt/docker/config/opensearch/
root@BACKUP:/opt/docker/config/opensearch# ls -al
total 32
drw-r--r-- 3 ansible root 4096 Jun 8 15:38 .
drwxr-xr-x 7 ansible root 4096 Jun 8 13:28 ..
drw-r--r-- 2 ansible root 4096 Jun 8 14:14 certs
-rw-r--r-- 1 ansible root 14150 Jun 8 15:38 custom-opensearch.yml
-rw-r--r-- 1 ansible root 536 Jun 8 13:28 internal_users.yml
回到用户 ansible,但我无权访问该文件夹:
ansible@BACKUP:~$ whoami
ansible
ansible@BACKUP:~$ cd /opt/docker/config/opensearch/
-bash: cd: /opt/docker/config/opensearch/: Permission denied
此外,在尝试列出目录时,我得到了一些奇怪的输出,因为我可以看到文件名,但仅此而已:
ansible@BACKUP:~$ ls -al /opt/docker/config/opensearch/
ls: cannot access '/opt/docker/config/opensearch/custom-opensearch.yml': Permission denied
ls: cannot access '/opt/docker/config/opensearch/certs': Permission denied
ls: cannot access '/opt/docker/config/opensearch/.': Permission denied
ls: cannot access '/opt/docker/config/opensearch/internal_users.yml': Permission denied
ls: cannot access '/opt/docker/config/opensearch/..': Permission denied
total 0
d????????? ? ? ? ? ? .
d????????? ? ? ? ? ? ..
d????????? ? ? ? ? ? certs
-????????? ? ? ? ? ? custom-opensearch.yml
-????????? ? ? ? ? ? internal_users.yml
操作系统版本:
ansible@BACKUP:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 11 (bullseye)
Release: 11
Codename: bullseye
我该如何修复这些权限?尝试了通常的嫌疑人(作为root):
root@BACKUP:/home/ansible# chown -R ansible:root /opt/docker/config/opensearch/
root@BACKUP:/home/ansible# chmod -R 0644 /opt/docker/config/opensearch/
这些没有什么区别。
//编辑1:ls -alZ
添加输出
root@BACKUP:/opt/docker/config/opensearch# ls -laZ
total 36
drw-r--r-- 3 ansible root ? 4096 Jun 8 15:59 .
drwxr-xr-x 7 ansible root ? 4096 Jun 8 13:28 ..
drw-r--r-- 2 ansible root ? 4096 Jun 8 14:14 certs
-rw-r--r-- 1 root root ? 399 Jun 8 15:59 config.yml
-rw-r--r-- 1 ansible root ? 14150 Jun 8 15:38 custom-opensearch.yml
-rw-r--r-- 1 ansible root ? 536 Jun 8 13:28 internal_users.yml
答案1
原因如下:
root@BACKUP:/opt/docker/config/opensearch# ls -al
total 32
drw-r--r-- 3 ansible root 4096 Jun 8 15:38 . <--- 'x' permissions missing
drwxr-xr-x 7 ansible root 4096 Jun 8 13:28 ..
drw-r--r-- 2 ansible root 4096 Jun 8 14:14 certs <--- 'x' permissions missing
目录和目录中x
缺少权限。/opt/docker/config/opensearch
certs
对于普通文件,x
权限意味着执行。对于目录来说,这意味着访问内容。如果您没有r
目录x
的权限,则可以读取其中的文件和子目录的名称,但无法读取与它们关联的元数据 - 导致ls -l
此类目录的列表如下所示:
d????????? ? ? ? ? ? .
d????????? ? ? ? ? ? ..
d????????? ? ? ? ? ? certs
-????????? ? ? ? ? ? custom-opensearch.yml
-????????? ? ? ? ? ? internal_users.yml
从技术上讲,文件名是目录本身的一部分,因此您可以看到它们,但因为您无权访问索引节点代表文件和子目录,您将无法看到所有权/权限/时间戳/大小信息。
修理:
chmod a+x /opt/docker/config/opensearch /opt/docker/config/opensearch/certs
有时,可能需要一个具有x
权限但没有权限的目录r
,因此用户只有事先知道需要访问的文件或子目录的确切名称才能访问其中的文件。但相反的情况,即具有r
权限但没有相应权限的目录x
- 据我所知 - 对于任何正常使用来说都没有真正的用处。