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


10

我想创建一个特定的SFTP用户,该用户将有权只读取中的所有文件夹和子文件夹/var/www/vhosts。有什么帮助吗?

Answers:


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

仅针对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块必须在END中的sshd_config文件。)

重新启动ssh服务

sudo service ssh restart

通过这种配置,您可以将其放入文件夹ubuntu并获取文件。不能putdelete

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

$ sudo vi /etc/passwd

..
foo:x:1001:1001::/var/www/vhosts/:
..

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


因此,我Match Group sftp ChrootDirectory /var/www/vhosts AllowTcpForwarding no 在sshd_config中添加了 文件,并像您一样创建了用户和组,但是用户foo拥有对所有文件夹的权限:(
Delirium

@Delirium查看我的最新答案
Rahul

非常感谢您的协助。但是肯定有一些错误。.我添加了,Subsystem sftp internal-sftp Match Group sftp ChrootDirectory /var/www/vhosts AllowTcpForwarding no ForceCommand internal-sftp但是当我想重新启动ssh时出错/etc/ssh/sshd_config line 92: Directive 'UsePAM' is not allowed within a Match block
Delirium

2
@Delirium我已经明确提到把Match.....部分在END文件。将该代码放在文件末尾,然后重新启动。
Rahul

1
对不起,我的双眼失灵,但是可以用,非常感谢。
Delirium
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.