sftp 用户在特定目录中的只读权限

Del*_*ium 10 sftp permissions

我想创建特定的 SFTP 用户,该用户将有权仅读取/var/www/vhosts. 有什么帮助吗?

Rah*_*hul 11

Unix 系统提供了chroot允许您/将用户重置到文件系统层次结构中的某个目录的命令,在那里他们无法访问“更高级别”的文件和目录。

但是,在您的情况下,提供由远程 shell 服务实现的虚拟 chroot 是合适的。sftp 可以很容易地配置为将本地用户限制为文件系统的特定子集。

因此,在您的情况下,您想让chroot我们说,用户foouser 进入/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并获取文件。不能putdelete

要在右侧文件夹中进行 sftp 编辑/etc/passwd。更改用户的行foo看起来像这样

$ sudo vi /etc/passwd

..
foo:x:1001:1001::/var/www/vhosts/:
..
Run Code Online (Sandbox Code Playgroud)

这会将用户foo主文件夹更改为您的 sftp 服务器文件夹。

  • @Delirium 我已经明确提到将 `Match.....` 部分放在文件的 **END** 中。将该代码放在文件末尾并重新启动它。 (2认同)