创建sftp组
[root@bogon ~]# groupadd sftp
创建一个sftp用户test并加入到穿件sftp组中,同时修改test用户的密码
[root@bogon opt]# useradd -g sftp -s /bin/false test
-g 加入到sftp组
-s 禁止使用命令
两种写法的区别: Linux /sbin/nologin与/bin/false的对比 https://blog.youkuaiyun.com/liupeifeng3514/article/details/79054550
[root@bogon opt]# passwd test
新建/opt/sftp目录,并将它指定为test组用户的home目录
[root@bogon opt]# mkdir -p /opt/sftp
[root@bogon opt]# usermod -d /opt/sftp test
编辑/etc/ssh/sshd_config
[root@bogon opt]#vim /etc/ssh/sshd_config
将如下这行用#符号注释掉
#Subsystem sftp /usr/libexec/openssh/sftp-server
并在文后添加如下几行内容然后保存
Subsystem sftp internal-sftp
Match Group sftp
ChrootDirectory /opt/sftp
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
ChrootDirectory 指定登录后的根目录,并且将用户限制在该目录及其子目录下。
这里有条规则
1、由 ChrootDirectory 指定的目录开始一直往上到系统根目录为止的目录拥有者都只能是 root
2、由 ChrootDirectory 指定的目录开始一直往上到系统根目录为止都不可以具有群组写入权限(最大权限 755)
ChrootDirectory设置的目录权限及其所有的上级文件夹权限,属主和属组必须是root;
ChrootDirectory设置的目录权限及其所有的上级文件夹权限,只有属主能拥有写权限,也就是说权限最大设置只能是755。
设置Chroot目录权限
[root@bogon opt]# chown root:sftp /opt/sftp/
[root@bogon opt]# chmod 755 /opt/sftp/
新建一个目录sftp用户test上传文件,这个目录所有者为test所有组为sftp,所有者写入权限所有组无写入权限
[root@bogon opt]# mkdir /opt/sftp/upload
[root@bogon opt]# chown test:sftp /opt/sftp/upload/
[root@bogon opt]# chmod 755 /opt/sftp/upload/
重启ssh服务
[root@bogon opt]#systemctl restart sshd.service
验证:
可以通过Xftp、Winscp等工具登入验证上传、新建、下载等,Xftp登陆如下:
跟着彬哥混饭吃
拓展:
###目录结构
/home
--sftp( root:root ) 必须是root用户
----admin( sftp_admin:sftp ) admin用户专属目录
----gropu( root:root ) sftp组用户的共用根目录 只能在linux系统中添加目录,文件 如: 帮助手册.text
------data( sftp_admin:sftp )sftp组用户的共用目录: sftp_admin, sftp_tom都拥有读写权限