sftp简介
sftp是Secure File Transfer Protocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的加密方法。sftp 与 ftp 有着几乎一样的语法和功能。SFTP 为 SSH的一部分,是一种传输档案至 Blogger 伺服器的安全方式。其实在SSH软件包中,已经包含了一个叫作SFTP(Secure File Transfer Protocol)的安全文件传输子系统,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接操作,所以从某种意义上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序。SFTP同样是使用加密传输认证信息和传输的数据,所以,使用SFTP是非常安全的。但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多,如果您对网络安全性要求更高时,可以使用SFTP代替FTP。
准备工作:
使用root用户查看openssh的版本:版本需大于4.8p1
ssh -V // 如果版本过低,可以使用 yun update 进行更新
一、创建sftp组
groupadd sftp
二、创建user用户并设置密码
useradd -g sftp -s /bin/false user
-g 加入到sftp组
-s 禁止使用命令
passwd user
两种写法的区别: /sbin/nologin与/bin/false的对比
三、为sftp组用户建立home目录,并指定根目录为/data/sftp,按用户名区分,为user用户创建user目录,然后指定user的home为/data/sftp/user
# mkdir -p /data/sftp/user
# usermod -d /data/sftp/user user
-d 表示修改用户登录时的目录
四、配置sshd_config
# vim /etc/ssh/sshd_config
注:
1、注掉原有服务使用internal-sftp的好处:https://www.maixj.net/ict/internal-sftp-20597
2、Match用来匹配sftp组的用户,若有多个组可用逗号分割
3、AllowTcpForwarding no 和 X11Forwarding no
这两行,如果不希望该用户能使用端口转发的话就加上,否则删掉
4、ChrootDirectory /data/sftp/%u
chroot将用户的根目录指定到/data/sftp/%u,%u代表用户名,该用户只能在/data/sftp/%u下操作
chroot详解参见:https://blog.51cto.com/rainbird/275162
5、ForCommand internal-sftp
指定sftp命令
五、设置Chroot权限
# chown root:sftp /data/sftp/user
属主:root,属组:sftp
# chmod 755 /data/sftp/user
root有读写执行的权限,sftp组无写的权限,其他用户也无写的权限
六、建立SFTP用户登入后可写入的目录
如上设置后,在重启sshd服务后,用户user已经可以登录,但使用chroot指定根目录后,根应该是无法写入的,所以要新建一个目录供user上传文件。这个目录所有者为user,所有组为sftp,所有者有写入权限,而所有组无写入权限。
# mkdir /data/sftp/user/upload
# chown user:sftp /data/sftp/user/upload
# chmod 755 /data/sftp/user/upload
七、重启sshd服务
# systemctl restart sshd