#创建sftp组
groupadd sftp
#新增sftp方式登录用户sftpuser,限制用户无法ssh登录服务器
useradd -g sftp -s /bin/false sftpuser && echo "usermima1234"|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目录只有只读权限,从而达到不同用户拥有不同的权限设定需求。</span></li>
上面配置中,userB-r的配置必须在sftpuser组配置之前,以后添加新的用户也是如此,否则会因为参数“/opt/sftp/%u”优先匹配/opt/sftp/userB-r目录,而实际中userB-r目录是不存在,造成登录失败。
重启sshd服务:
# service sshd restart
#systemctl restart sshd