我想创建特定的 SFTP 用户,该用户有权仅读取/var/www/vhosts
.对此有什么帮助吗?
答案1
Unix 系统提供的chroot
命令允许您将/
用户重置到文件系统层次结构中的某个目录,在该目录中用户无法访问“更高层”的文件和目录。
但是,就您的情况而言,提供由远程 shell 服务实现的虚拟 chroot 是合适的。 sftp 可以轻松配置为将本地用户限制为文件系统的特定子集。
因此,在您的情况下,您想要chroot
将用户foo
user 放入/var/www/vhosts/
目录中。
您可以为您的用户设置一个 chroot 目录,将其限制在子目录中,/var/www/vhosts/
如下所示/etc/ssh/sshd_config
;
创建用户foo
并设置密码
sudo useradd foo
sudo passwd foo
仅为 SFTP 创建组
$ sudo groupadd sftp_users
foo
添加到仅 SFTP 组的用户
$ sudo usermod -G sftp_users foo
更改所有者,因为读/写权限
sudo chown root.root /var/www/vhosts/
添加权限
sudo chmod 755 /var/www/vhosts/
编辑/etc/ssh/sshd_config
sudo vi /etc/ssh/sshd_config
注释掉并添加如下行
#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp
添加在最后
Match Group sftp_users
X11Forwarding no
AllowTcpForwarding no
ChrootDirectory /var/www/vhosts/
ForceCommand internal-sftp
(注意:Match
块需要位于结尾文件的sshd_config
。)
重启ssh
服务
sudo service ssh restart
通过此配置,您可以 ssh 进入文件夹ubuntu
并获取文件。不能put
或delete
在右侧文件夹中编辑 sftp /etc/passwd
。将用户的行更改foo
为如下所示
$ sudo vi /etc/passwd
..
foo:x:1001:1001::/var/www/vhosts/:
..
这会将用户主文件夹更改foo
为您的 sftp 服务器文件夹。