Rah*_*hul 11
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
Run Code Online (Sandbox Code Playgroud)
创建仅用于 SFTP 的组
$ sudo groupadd sftp_users
Run Code Online (Sandbox Code Playgroud)
添加到foo
仅 SFTP 组的用户
$ sudo usermod -G sftp_users foo
Run Code Online (Sandbox Code Playgroud)
更改所有者,因为读/写权限
sudo chown root.root /var/www/vhosts/
Run Code Online (Sandbox Code Playgroud)
添加权限
sudo chmod 755 /var/www/vhosts/
Run Code Online (Sandbox Code Playgroud)
编辑 /etc/ssh/sshd_config
sudo vi /etc/ssh/sshd_config
注释掉并添加如下一行
#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp
Run Code Online (Sandbox Code Playgroud)
最后添加
Match Group sftp_users
X11Forwarding no
AllowTcpForwarding no
ChrootDirectory /var/www/vhosts/
ForceCommand internal-sftp
Run Code Online (Sandbox Code Playgroud)
(注:Match
块必须在END中的sshd_config
文件。)
重启ssh
服务
sudo service ssh restart
Run Code Online (Sandbox Code Playgroud)
通过此配置,您可以通过 ssh 进入文件夹ubuntu
并获取文件。不能put
或delete
要在右侧文件夹中进行 sftp 编辑/etc/passwd
。更改用户的行foo
看起来像这样
$ sudo vi /etc/passwd
..
foo:x:1001:1001::/var/www/vhosts/:
..
Run Code Online (Sandbox Code Playgroud)
这会将用户foo
主文件夹更改为您的 sftp 服务器文件夹。