如果我开始 -
sudo groupadd test_group
sudo useradd -g test_group -s /sbin/nologin test_user
sudo passwd test_user
...(some password)...
sudo mkdir -p /testdir/dev
我也有 '/etc/ssh/sshd_config' 如下 -
Include /etc/ssh/sshd_config.d/*.conf
ChallengeResponseAuthentication no
UsePAM yes
X11Forwarding no
PrintMotd no
AcceptEnv LANG LC_*
Subsystem sftp internal-sftp
Match User test_user
ChrootDirectory /testdir
PermitTunnel no
ForceCommand internal-sftp -d /dev
X11Forwarding no
AllowTcpForwarding no
也没有任何“iptables”规则,然后我可以成功地从另一台机器进行 SFTP 连接(在这种情况下,它是一台 windows pc,使用 filezilla),指定“test_user”用户名和密码,它会显示并限制我仅到 /testdir/dev 目录的内容。
但是,我注意到 SFTP 会话仅列出目录内容;它没有实际发送/写入文件的权限。即我有 -
drwxr-xr-x root root ... /testdir
drwxr-xr-x root root ... /testdir/dev
很公平。所以现在我想加强所有权和权限,以便我的“test_user”可以在“/testdir”下读写,任何“test_group”用户都可以读取,其他人没有任何访问权限。然后我做 -
sudo chown -R test_user:test_group /testdir
sudo chmod -R 640 /testdir
现在,我之前成功的 SFTP 连接现在失败了,说“错误:无法连接到服务器”。
不知道为什么,但更自由、免费的所有权限怎么样 -
sudo chown -R test_user:test_group /testdir
sudo chmod -R 777 /testdir
我的“test_user”连接同样的 sftp 失败。
有点困惑,我把所有权放回原来的情况,但现在有了更广泛的访问权限——
sudo chown -R root:root /testdir
sudo chmod -R 775 /testdir
这仍然无法连接,记住之前使用user:rwx, group:rx, other:rx root root成功,我现在有user:rwx, group:rwx, other:rx root root,它更广泛但现在 SFTP 失败。
然后,为了确认,我通过 -
sudo chown -R root:root /testdir
sudo chmod -R 755 /testdir
我的 sftp/filezilla 'test_user' + pw 连接再次成功,显示 /testdir/dev 目录的内容,尽管仍然不允许写入权限。
我显然误解了所有权和访问权限,可能还有 sftp 服务最终试图在这里做的事情的机制。有人可以解释 -
- 'chmod -R 640 /testdir' 和所有者 'test_user:test_group' (rw- r-- --- test_user test_group) 情况似乎是我应该需要的('test_user' 可以读写以及 'test_group' 的其他成员可以阅读)-对吗?- 但是为什么这会导致 sftp 连接失败呢?
- 如果“d rwx rx rx root root”案例启用成功的 sftp 连接,与用户“test_user”连接,那么为什么只将权限扩大到“d rwx r w x rx root root”(775)然后导致 sftp 连接失败?
- 什么是允许我的“test_user”通过 SFTP 连接对这些“/testdir/...”目录进行读/写访问而不能访问其他(非 root)用户的正确/最佳方式?
- 在 sftp 服务器上的整个 SFTP 连接/身份验证阶段,是否有更详细的步骤和过程序列(可能在不同用户下运行)的描述,可以更清晰、更直观地了解这里发生的情况?
sshd 选项的文档
ChrootDirectory
部分说明:换句话说,您的
/testdir
目录必须由 root 拥有,没有组或其他的写权限。如果不满足这些条件,我相信sshd
会放弃会议。这些限制仅适用于 chroot 目录及其父目录。
/testdir
您可以在其中创建具有您喜欢的任何所有权和权限的文件和目录。