centos7 创建 sftp 用户 并指定访问特定目录
-
所需实现功能:
user1用户:
对/opt/sftp/user1/UploadFiles目录有读写权限,限制其只能通过sftp登录服务器,且只能在user1目录下操作user2用户:
对/opt/sftp/user2/UploadFiles目录有读写权限,限制其只能通过sftp登录服务器,且只能在user2目录下操作user2-r用户:
对/opt/sftp/user2/UploadFiles目录只有只读(下载)权限,限制其只能通过sftp登录服务器,且只能在user2目录下操做 -
创建sftpuser组,新增sftp登录用户user1、user2、user2-r,限制用户无法ssh登录服务器
# groupadd sftpuser # user1dd -g sftpuser -s /bin/false user1 && echo "user1@123"|passwd user1 --stdin # user1dd -g sftpuser -s /bin/false user2 && echo "user2@123"|passwd user2 --stdin # user1dd -g sftpuser -s /bin/false user2-r && echo "user2-r@123"|passwd user2-r --stdin
-
创建两个用户的登录目录,设定目录权
mkdir -p /opt/sftp/{user1,user2}/UploadFiles # chown root:root /opt/sftp/ # chown root:sftpuser /opt/sftp/{user1,user2}/ # chown user1:sftpuser /opt/sftp/user1/UploadFiles # chown user2:sftpuser /opt/sftp/user2/UploadFiles # chmod 755 /opt/sftp/{user1,user2}
-
修改sshd_config文件,指定不同用户登录不同目录
# vi /etc/ssh/sshd_config
-
修改sshd_config文件,指定不同用户登录不同目录
# vi /etc/ssh/sshd_config 注释掉下面一行 #Subsystem sftp /usr/libexec/openssh/sftp-server 添加以下内容 Subsystem sftp internal-sftp Match User user2-rChrootDirectory /opt/sftp/user2ForceCommand internal-sftpAllowTcpForwarding noX11Forwarding no Match Group sftpuserChrootDirectory /opt/sftp/%uForceCommand internal-sftpAllowTcpForwarding noX11Forwarding no
-
目录权限设置要点: ChrootDirectory参数指定的目录,其权限及其所有的上级文件夹权限,属主必须是root,且只有属主能拥有写权限,即权限最大设置只能是755。上面之所以要创建UploadFiles目录,是因为无论user1还是user2对自己的登录目录user1和user2都只有只读权限,而通过上面第3步的权限设置,我们可以让这两个用户对自己目录下的UploadFiles拥有读写权限,而使得user2-r对UploadFiles目录只有只读权限,从而达到不同用户拥有不同的权限设定需求。 上面配置中,user2-r的配置必须在sftpuser组配置之前,以后添加新的用户也是如此,否则会因为参数“/opt/sftp/%u”优先匹配/opt/sftp/user2-r目录,而实际中user2-r目录是不存在,造成登录失败。
-
重启sshd服务:
#service sshd restart#systemctl restart sshd