谢谢@clone45提供这么好的解决方案。但是在他的解决方案的附录b中,我有一个重要的问题。在我将主目录更改为var/www/html后,我无法通过ssh和sftp连接到服务器,因为它总是显示以下错误
permission denied (public key)
或者在FileZilla中,我收到了这个错误:
No supported authentication methods available (server: public key)
但是我可以通过正常的FTP连接访问服务器。
如果你遇到了同样的错误,只需撤销@clone45解决方案的附录b,为用户设置默认的主目录:
sudo usermod -d /home/username/ username
但是当你设置用户的默认主目录时,用户就可以访问除/var/www/ http外的许多其他文件夹。因此,为了保护您的服务器,请遵循以下步骤:
1-创建sftponly组
为所有用户创建一个组,限制他们只能访问ftp, sftp只能访问var/www/html。分组:
sudo groupadd sftponly
2-监禁chroot
为了限制这个组通过sftp访问服务器,你必须限制chroot不让组的用户访问除html文件夹在其主目录内的任何文件夹。要做到这一点,打开/etc/ssh/sshd.在vim中使用sudo进行配置。
在文件的末尾,请注释这一行:
Subsystem sftp /usr/libexec/openssh/sftp-server
然后在下面加上这条线:
Subsystem sftp internal-sftp
所以我们用internal-sftp代替了子系统。然后在下面添加以下几行:
Match Group sftponly
ChrootDirectory /var/www
ForceCommand internal-sftp
AllowTcpForwarding no
添加这一行后,我保存了我的更改,然后重新启动ssh服务:
sudo service sshd restart
3-添加用户到sftponly组
任何想要限制其访问权限的用户必须是sftponly组的成员。因此,我们将它加入到sftponly:
sudo usermod -G sftponly用户名
4-限制用户只能访问var/www/html
为了限制用户对var/www/html文件夹的访问,我们需要在该用户的主目录中创建一个目录(名称为“html”),然后将/var/www挂载到/home/username/html,如下所示:
sudo mkdir /home/username/html
sudo mount --bind /var/www /home/username/html
5-设置写权限
如果用户需要对/var/www/html进行写访问,那么你必须在/var/www上监禁该用户,该用户必须拥有root:root所有权和755的权限。然后你需要给/var/www/html root:sftponly的所有权和权限775添加以下行:
sudo chmod 755 /var/www
sudo chown root:root /var/www
sudo chmod 775 /var/www/html
sudo chown root:www /var/www/html
6-阻止shell访问
如果你想限制访问shell以使其更安全,那么只需将默认shell更改为bin/false,如下所示:
sudo usermod -s /bin/false username