如何修复 Debian 中损坏的权限

如何修复 Debian 中损坏的权限

在我的 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/opensearchcerts

对于普通文件,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- 据我所知 - 对于任何正常使用来说都没有真正的用处。

相关内容