1、定义sftp的数据目录
mkdir -p /data/sftp
2、将目录归到root用户,否则无法chroot
chown root. -R /data/sftp/或者chown root:root -R /data/sftp/
3、权限设置为755,不能超过755,保证普通用户可以进入
chmod 755 -R /data/sftp/
4、添加sftp服务组,sftp服务可以设置匹配组或单个用户来设置,如果是单个用户可以忽略
groupadd sftp
5、添加用户
useradd -d /data/sftp/clptsftp -m -g sftp -s /sbin/nologin clptsftp
验证用户
id clptsftp
添加密码 #添加密码。测试环境从简,生产不建议此密码,可以通过网页 https://suijimimashengcheng.51240.com/ 或mkpasswd命令生成密码(需要安装expect软件包)
echo "123456" | passwd --stdin clptsftp
或者通过passwd clptsftp (推荐)
sftp组的用户的home目录统一指定到/data/sftp下,按用户名区分,这里先新建一下clptsftp
下面三行的操作可通过添加用户的时候指定-d来指定,如上面第五步,如果第五步使用useradd g sftp -s /sbin/nogin clptsftp命令的话,就要使用下面三行
mkdir -p /data/sftp/clptsftp
使用usermod 命令,更改用户的home目录,且以用户名区分,
usermod -d /data/sftp/clptsftp clptsftp
cd /data/sftp
ls
chown root:sftp clptsftp或者这里可以使用root:root,需要验证一下
chmod 755 clptsftp
cd clptsftp
mkdir resourceupload
chown clptsftp:sftp resourceupload/
修改sshd服务配置文件,以组的方式管理sftp用户权限
vi /etc/ssh/sshd_config
注释掉:Subsystem sftp /usr/libexec/openssh/sftp-server行
Subsystem sftp internal-sftp #使用sftp服务使用系统自带的internal-sftp
Match Group sftp #匹配sftp组的用户,如果要匹配多个组,多个组之间用逗号分割
ChrootDirectory /data/sftp/%u #用chroot将用户的根目录指定到/data/sftp/%u,%u代表用户名,这样用户就只能在/data/sftp/%u下活动
ForceCommand internal-sftp #强制执行内部sftp,并忽略任何~/.ssh/rc文件中的命令
AllowTcpForwarding no #不允许转发TCP协议,默认是yes,如果用户可以shell访问则建议为yes
X11Forwarding no #是否允许进行 X11 转发。默认值是"no",设为"yes"表示允许。如果允许X11转发并且sshd(8)代理的显示区被配置为在含有通配符的地址(X11UseLocalhost)上监听。那么将可能有额外的信息被泄漏。由于使用X11转发的可能带来的风险,此指令默认值为"no"。需要注意的是,禁止X11转发并不能禁止用户转发X11通信,因为用户可以安装他们自己的转发器。如果启用了 UseLogin ,那么X11转发将被自动禁止。
在文件最后面添加如下几行内容,然后保存。
Subsystem sftp internal-sftp
Match Group sftp
匹配sftp组的用户,如果有多个组用逗号分割 也可以使用“Match User mysftp”匹配用户,多个用户之间也是用逗号分割
ChrootDirectory /data/sftp/%u
用chroot将用户的根目录指定到/data/ftp/%u,%u代表用户名,%h表示用户根目录
ForceCommand internal-sftp
指定sftp命令
AllowTcpForwarding no
X11Forwarding no
禁止用户使用端口转发 建立用户和组放
------------------
5、设定Chroot目录权限
chown root:sftp /data/sftp/clptsftp
chmod 755 /data/sftp/clptsftp
6、建立SFTP用户登入后可写入的目录
照上面设置后,在重启sshd服务后,用户mysftp已经可以登录。但使用chroot指定根目录后,根应该是无法写入的,所以要新建一个目录供mysftp上传文件。这个目录所有者为mysftp,所有组为sftp,所有者有写入权限,而所有组无写入权限。命令如下:
mkdir /data/sftp/clptsftp/resourcesupload
chown clptsftp:sftp /data/sftp/clptsftp/resourcesupload
chmod 755 /data/sftp/clptsftp/resourcesupload
7、修改/etc/selinux/config
文本编辑器打开/etc/selinux/config
vi /etc/selinux/config
将文件中的SELINUX=enforcing 修改为 SELINUX=disabled ,然后保存。
在输入命令
setenforce 0
8、重启sshd服务
输入命令重启服务。
service sshd restart
9、验证sftp环境
用mysftp用户名登录,yes确定,回车输入密码。
sftp mysftp@127.0.0.1
显示 sftp> 则sftp搭建成功。
10、使用FileZilla FTP Client连接SFTP服务器
输入主机IP地址、用户名、密码、端口连接SFTP服务器,端口默认为22。