Sftp只允许用户访问指定的目录,不能访问其他目录

警告:在操作之前,先打个多个会话窗口,避免操作不当,引起无法登录服务器,例如这样

image.png

 

背景:

1.需要搭建sftp服务器(一般服务器自带sftp服务,此处不再赘述)

2.sftp只允许访问指定目录,不能访问其他目录(重点)

image.png

 

在一些生产环境中,有时,用户需要传数据到服务器,但是配置ftp服务比较麻烦,此时,我们可以为用户创建sftp账户,让用户使用sftp来上传下载所需的数据。Sftp账号即为系统账号,将账户密码给用户,用户除了能登录sftp上传下载数据外,还可以访问系统中的其他目录,由此,给我们的系统带来了安全隐患,再次,我们需要配置用户只能通过sftp登录系统下载上传所需的数据。

 

1.创建sftp用户joshua317

useradd joshua317
echo abc123 | passwd --stdin joshua317

2.设置sftp用户joshua317的账户权限

设置sftp的账号权限需要通过修改sshd_config配置文件进行,sshd_config配置文件修改内容如下:

vi /etc/ssh/sshd_config


#内容修改如下

# Subsystem     sftp    /usr/libexec/openssh/sftp-server   #注释掉此行并添加一下行
Subsystem sftp internal-sftp
Match User joshua317                   #此处设置控制的用户,也可以设置为组
ChrootDirectory /home/joshua317        #允许用户访问的目录,此处我们设置为用户家目录,根据具体情况自己定义
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp

配置完成后需要重启服务:

service sshd reload
或者
systemctl restart sshd   #根据不同的操作系统选择不同命令,这里服务器版本是centos7.X

此处配置完我们用另一台机器测试登录,会出现错误,使用win系统sftp客户端(FileZilla)同样也不能正常登陆

 

[root@iz2ze60f904j9aetyxamj1z ~]# sftp joshua317@172.17.16.89
Connecting to 172.17.16.89...
joshua317@172.17.16.89's password:
Write failed: Broken pipe
Couldn't read packet: Connection reset by peer

 

这是由于没有配置目录的正确权限,我们需要设置用户访问的目录的权限

 

3.设置允许用户访问目录的权限

重点:sftp用户访问目录需要设置所有者和所属组的权限均为root,并设置目录的权限为755,

但此目录下的文件及目录的权限我们可根据自己的需求任意设置。

chown root:root /home/joshua317/   #不要使用chown -R 
chmod 755 /home/joshua317/         #不要使用chmod -R

#设置该sftp账号不允许登录
usermod joshua317 -s /sbin/nologin 

#然后重启
service sshd reload

至此,我们的sftp配置已经完成,

4.测试

使用linux测试:

 

使用windows客户端FileZilla测试: 

 

5.设置用户上传文件权限

经过上面的设置后用户可正常浏览下载目录中的文件,但是用户无法上传文件。

此时需要在/home/joshua317/下建立属主属组为joshua317的目录,并给/home/joshua317下的目录设置acl权限即可。

image.png

image.png

 

mkdir /home/joshua317/test
chown joshua317:joshua317 /home/joshua317/test
chmod 755 /home/joshua317/test

#查看
getfacl /home/joshua317/test

 

image.png

 

测试是否可以在/homne/joshua317/test下面创建文件或者目录

image.png

6.额外:通过用户组处理

 

如果又需要创建一个用户joshua318,可以继续通过匹配用户的形式,只需要进行如下操作

首先创建一个用户

#添加一个用户,指定用户组为joshua317,目录为/home/joshua317,账号不允许登录
useradd -g joshua317 -s /sbin/nologin -m joshua318
echo abc123 | passwd --stdin joshua318

调整sshd_config

vi /etc/ssh/sshd_config 

Match User joshua318
ChrootDirectory /home/joshua317

#重启sshd
service sshd reload

但如果有很多个用户,此时就需要通过组进行匹配

vi /etc/ssh/sshd_config 

Match Group joshua317
ChrootDirectory /home/joshua317

#然后重启
service sshd reload

测试是否成功: 

原文地址:https://www.cnblogs.com/joshua317/p/14253206.html