我创建了用户 MY_USER。将他的主目录设置为 /var/www/RESTRICTED_DIR,这是他应该被限制到的路径。然后我编辑了 sshd_config 并设置:
Match user MY_USER
ChrootDirectory /var/www/RESTRICTED_DIR
然后我重启了 ssh。将 MY_USER 设为 RESTRICTED_DIR 的所有者(和组所有者),并将其 chmodded 为 755。我得到了
Accepted password for MY_USER
session opened for user MY_USER by (uid=0)
fatal: bad ownership or modes for chroot directory component "/var/www/RESTRICTED_DIR"
pam_unix(sshd:session): session closed for user MY_USER
如果我从 sshd_config 中删除了这两行,用户就可以成功登录。当然,它可以访问所有服务器。有什么问题?我甚至尝试将 RESTRICTED_DIR 更改为 root(因为我在某处读到有人通过这种方式解决了同样的问题)。但没成功。
答案1
从这一man
页:
Chroot目录
指定验证后 chroot(2) 到的目录的路径名。 路径名的所有组件都必须是根目录拥有的目录,并且任何其他用户或组都无法写入. chroot 之后,sshd(8) 将工作目录更改为用户的主目录。
我猜路径上的一个或多个目录不符合这些要求(我怀疑是www
您的 Web 用户拥有或可写入的,而不是 root)。
返回并按照说明操作,确保满足上述要求粗斜体得到满足。
答案2
ChrootDirectory 目录必须由 root 拥有并具有 755 模式:
sudo chown root:root /var/www/RESTRICTED_DIR
sudo chmod 755 /var/www/RESTRICTED_DIR
好的,现在所有文件都放入/var/www/RESTRICTED_DIR
必须由MY_USER
,必须属于www-data
组,并具有 775 模式以允许组权限,如下所示:
sudo usermod -a -G www-data MY_USER
sudo chown MY_USER:www-data /var/www/RESTRICTED_DIR/*
sudo chmod 775 -R /var/www/RESTRICTED_DIR/*
笔记:记住,如果您正在配置 apache,那么很好的做法是只允许访问 htdocs 文件夹。
答案3
今天经过一些故障排除后,我意识到 root 也必须能够写到目录。
以下操作无效:
$ ls -ld /mnt/synology03/files/
dr-xr-xr-x 1 root root 156 Oct 8 20:10 /mnt/synology03/files/
$ ls -ld /mnt/synology03
drwxr-xr-x 7 root root 4096 Oct 1 21:26 /mnt/synology03
$ ls -ld /mnt
drwxr-xr-x 6 root root 4096 Feb 8 10:01 /mnt
$ ls -ld /
drwxr-xr-x 24 root root 4096 Jan 14 09:22 /
一旦我修复了这个问题,我的 chroot 就开始工作了。
$ sudo chmod 755 /mnt/synology03/files/
$ ls -ld /mnt/synology03/files/
drwxr-xr-x 1 root root 156 Oct 8 20:10 /mnt/synology03/files/
答案4
让它/a/b/c/CHROOT/stuff
像这样工作:
a
、、b
和- 755c
CHROOT
root:root
stuff
-root:CHROOTED_USER_GROUP
775
然后用户可以使用 sftp 登录并将文件上传到/stuff
目录。