即使权限正确,“权限被拒绝”也将 CD 放入目录

Smu*_*dge 20 linux permissions

这太奇怪了。以用户“g”的身份登录到 Linux (RHEL) 机器,执行一个ls -lah显示

drwxrwxrwx 6 g    g    4.0K Jun 23 13:27 .
drwxrw-r-x 6 root root 4.0K Jun 23 13:15 ..
-rwxrw---- 1 g    g     678 Jun 23 13:26 .bash_history
-rwxrw---- 1 g    g      33 Jun 23 13:15 .bash_logout
-rwxrw---- 1 g    g     176 Jun 23 13:15 .bash_profile
-rwxrw---- 1 g    g     124 Jun 23 13:15 .bashrc
drw-r----- 2 g    g    4.0K Jun 23 13:25 .ssh
Run Code Online (Sandbox Code Playgroud)

因此,组“g”中的用户“g”/应该能够读取和写入 .ssh 目录,但如果我这样做,ls -lah .ssh/我会得到ls: .ssh/: Permission denied. 如果我尝试cat目录中的任何文件,我也会得到权限被拒绝

如果我去为根用户的权限更改为700744766只要或任何为“用户”的权限是7它的工作原理和我的CD和LS的目录和文件中即可。

id g 返回

uid=504(g) gid=506(g) groups=506(g)
Run Code Online (Sandbox Code Playgroud)

编辑:

我已将这些权限完全复制到另一个相同的框中,并且没有问题。我可以cd进入一个没有执行权限的目录。

wzz*_*zrd 38

该目录需要设置执行位才能进入。我不知道你测试了什么,但是你不能在没有执行位的情况下进入目录,或者读取其中的文件:

$ mkdir foo
$ echo "baz" > foo/bar
$ chmod 660 foo
$ cd foo
bash: cd: foo: Permission denied
$ cat foo/bar
cat: foo/bar: Permission denied
Run Code Online (Sandbox Code Playgroud)

也就是说,除非您的进程设置了 CAP_DAC_OVERRIDE POSIX 功能(就像 root 一样),它允许您进入没有设置可执行位 iirc 的目录。

基本上,为了安全起见,您应该尝试将 .ssh 目录保持在 700,并将其中的所有内容保持在 600。ssh 手册页为每个文件提供了有关 ~/.ssh 中文件所需的所有权和权限模式的说明。


Gra*_*mux 21

目录需要执行权限才能cd进入。这是预期的行为。

  • 您需要对该目录的执行权限才能访问目录中的任何内容。这个答案是正确的。 (4认同)