我创build了用户MY_USER。 将他的主目录设置为/ var / www / RESTRICTED_DIR,这是他应该限制的path。 然后我编辑sshd_config并设置:
Match user MY_USER ChrootDirectory /var/www/RESTRICTED_DIR
然后我重新启动了ssh。 使MY_USER所有者(和组所有者)RESTRICTED_DIR,并将其改为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中删除了2行,用户可以成功login。 当然,它可以访问所有的服务器。 有什么问题? 我甚至尝试将RESTRICTED_DIR改为root(当我读某个地方某人解决了同样的问题时)。 没有运气..
从man
页 :
ChrootDirectory
指定要validation后chroot(2)的目录的path名。 path名的所有组件都必须是不能由任何其他用户或组写入的根拥有的目录 。 在chroot之后,sshd(8)将工作目录更改为用户的主目录。
我的猜测是path上的一个或多个目录不符合这些要求(我的怀疑是www
是由您的Web用户拥有或可写的,而不是根)。
返回并按照指示进行操作,确保满足上面粗体斜体的要求。
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 MY_USER www-data sudo chown MY_USER:www-data /var/www/RESTRICTED_DIR/* sudo chmod 775 -R /var/www/RESTRICTED_DIR/*
注意: 如果您正在configurationapache,记住是一个很好的做法,只允许访问htdocs文件夹。