centos 创建sftp用户访问特定目录

 

#创建sftp组
groupadd sftp

#新增sftp方式登录用户sftpuser,限制用户无法ssh登录服务器
useradd -g sftp -s /bin/false sftpuser &&  echo "1234!@#$"|passwd sftpuser --stdin

#创建sftpuser目录data目录,sftpuser登录直接显示的是data目录 并且无法删除data,但data目录下增删改权限#都有
mkdir -p /sftpuser/data
# chown root:root /sftpuser/
# chown root:sftp /sftpuser/
# chown sftpuser:sftp /sftpuser/data 
# chmod 755 /sftpuser/


vim /etc/ssh/sshd_config

Subsystem    sftp    internal-sftp
Match User sftpuser
    ChrootDirectory /sftpuser/
    ForceCommand    internal-sftp
    AllowTcpForwarding no
    X11Forwarding no 


systemctl restart sshd


1 所需实现功能: 
 userA用户: 对/opt/sftp/userA/UploadFiles目录有读写权限,限制其只能通过sftp登录服务器,且只能在userA目录下操作 
 userB用户: 对/opt/sftp/userB/UploadFiles目录有读写权限,限制其只能通过sftp登录服务器,且只能在userB目录下操作 
 userB-r用户: 对/opt/sftp/userB/UploadFiles目录只有只读(下载)权限,限制其只能通过sftp登录服务器,且只能在userB目录下操做 

2 创建sftpuser组,新增sftp登录用户userA、userB、userB-r,限制用户无法ssh登录服务器
# groupadd sftpuser 
# useradd -g sftpuser -s /bin/false userA &&  echo "userA@123"|passwd userA --stdin
# useradd -g sftpuser -s /bin/false userB && echo "userB@123"|passwd userB --stdin
# useradd -g sftpuser -s /bin/false userB-r  && echo "userB-r@123"|passwd userB-r --stdin


3创建两个用户的登录目录,设定目录权
mkdir -p /opt/sftp/{userA,userB}/UploadFiles
# chown root:root /opt/sftp/
# chown root:sftpuser /opt/sftp/{userA,userB}/
# chown userA:sftpuser /opt/sftp/userA/UploadFiles
# chown userB:sftpuser /opt/sftp/userB/UploadFiles
# chmod 755 /opt/sftp/{userA,userB}


4修改sshd_config文件,指定不同用户登录不同目录
# vim /etc/ssh/sshd_config

注释掉下面一行
#Subsystem sftp /usr/libexec/openssh/sftp-server

#添加
Subsystem    sftp    internal-sftp
Match User userB-r
    ChrootDirectory /opt/sftp/userB
    ForceCommand    internal-sftp
    AllowTcpForwarding no
    X11Forwarding no  
Match Group sftpuser  
    ChrootDirectory /opt/sftp/%u  
    ForceCommand    internal-sftp  
    AllowTcpForwarding no  
    X11Forwarding no

5 目录权限设置要点: ChrootDirectory参数指定的目录,其权限及其所有的上级文件夹权限,属主必须是root,且只有属主能拥有写权限,即权限最大设置只能是755。
 上面之所以要创建UploadFiles目录,是因为无论userA还是userB对自己的登录目录userA和userB都只有只读权限,而通过上面第3步的权限设置,我们可以让这两个用户对自己目录下的UploadFiles拥有读写权限,而使得userB-r对UploadFiles目录只有只读权限,从而达到不同用户拥有不同的权限设定需求。
 上面配置中,userB-r的配置必须在sftpuser组配置之前,以后添加新的用户也是如此,否则会因为参数“/opt/sftp/%u”优先匹配/opt/sftp/userB-r目录,而实际中userB-r目录是不存在,造成登录失败。

重启sshd服务: 
 # service sshd restart
 #systemctl restart sshd
 

你可能感兴趣的:(centos)