centos7 创建 sftp 用户 并指定访问特定目录
-
场景模拟:
user1用户:
对/home/sftp/user1/files 目录有读写权限,并只能通过sftp登录服务器,不可以ssh登录, 且只能在user1目录下操作user2用户:
对/home/sftp/user2/files 目录有读写权限,并只能通过sftp登录服务器,不可以ssh登录,且只能在user2目录下操作user2-r用户:
对/home/sftp/user2/files 目录只有只读(下载)权限,并只能通过sftp登录服务器,不可以ssh登录,且只能在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 /home/sftp/{user1,user2}/files # chown root:root /home/sftp/ # chown root:sftpuser /home/sftp/{user1,user2}/ # chown user1:sftpuser /home/sftp/user1/files # chown user2:sftpuser /home/sftp/user2/files # chmod 755 /home/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-r ChrootDirectory /home/sftp/user2 ForceCommand internal-sftp AllowTcpForwarding no X11Forwarding no Match Group sftpuser ChrootDirectory /home/sftp/%u ForceCommand internal-sftp AllowTcpForwarding no X11Forwarding no
-
目录权限设置要点: ChrootDirectory参数指定的目录,其权限及其所有的上级文件夹权限,属主必须是root,且只有属主能拥有写权限,即权限最大设置只能是755。上面之所以要创建files目录,是因为无论user1还是user2对自己的登录目录user1和user2都只有只读权限,而通过上面第3步的权限设置,我们可以让这两个用户对自己目录下的files拥有读写权限,而使得user2-r对files目录只有只读权限,从而达到不同用户拥有不同的权限设定需求。 上面配置中,user2-r的配置必须在sftpuser组配置之前,以后添加新的用户也是如此,否则会因为参数“/home/sftp/%u”优先匹配/home/sftp/user2-r目录,而实际中user2-r目录是不存在,造成登录失败。
-
重启sshd服务:
#service sshd restart #systemctl restart sshd