1. 前言编辑
SFTP是Secure File Transfer Protocol的缩写,中文名为”安全文件传送协议“,可以为文件传输提供一种安全的加密方法,与FTP有着几乎一样的语法和功能。SFTP为SSH的一部分,其本身并没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接和答复操作,所以从某种意义上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序。SFTP同样是使用加密传输认证信息和传输数据,所以,使用SFTP是非常安全的。
注意:由于SFTP的传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多。
2. 配置SFTP编辑
2.1 使用root用户查看openssh的版本
ssh -V #版本需大于4.8p1,如果版本过低,需要及时进行更新
2.2 建立用户组和用户
建立一个专门管理sftp用户的用户组,方便我们管理权限(如果root用户可用,则sftp只需要保证22端口可用即可)
sudo groupadd sftp-users #建立一个名为sftp-users的sftp用户组
sudo useradd -g sftp-users -m admin #在该组建立需要登录sftp的用户,新建用户名为admin的用户
passwd admin #设置admin的密码
然后连续两次输入你要给该用户设置的密码即可。
#如果该用户已存在,但是不在sftp-users组中,可以移动用户到该组:usermod –g sftp_users admin #
2.3 配置ssh和权限
1)打开/etc/ssh/sshd_config文件
vi /etc/ssh/sshd_config
2)修改X11Forwarding的值为no,原来可能是:X11Forwarding yes,现在修改为X11Forwarding no,如果X11Forwarding不存在,就在文件最后添加上面的代码。
修改AllowTcpForwarding的值为no,原来可能是AllowTcpForwarding yes,现在修改为AllowTcpForwarding no,如果AllowTcpForwarding不存在,就在文件最后添加上面的代码。
3)修改Subsystem sftp为internal-sftp
Subsystem sftp /usr/libexec/openssh/sftp-server# 或者Subsystem sftp /usr/lib/openssh/sftp-server |
现在修改为:
Subsystem sftp internal-sftp |
4)在文件末尾增加内容:
Match Group sftp-users #这一行是指定以下的子行配置是匹配sftp-users用户组的,多个用户组用英文逗号分隔 ChrootDirectory %h #该行指定Match Group行指定的用户组验证后用于chroot环境的路径,%h也就是默认的用户目录,比如/home/admin;也可以写明确路径,例如/data/www ForceCommand internal-sftp #该行强制执行内部sftp,并忽略任何~/.ssh/rc文件中的命令 |
特别注意,因为ChrootDirectory %h模式,所以我们等下要设置sftp-users中的所有用户的用户目录权限为root拥有,否则sftp-users组中的用户无法用sftp登录。
2.4 修改sftp-users用户组用户目录权限
因为使用了ChrootDirectory %h,现在来修改权限.
1)修改权限为root用户拥有
chown root /home/admin
2)修改权限为root可读写执行,其它用户可读
chmod 755 /home/admin
3)重启ssh,登录sftp
sudo service sshd restart
现在就可以使用sftp登录了,但是我们发现,我们不能上传文件,那是因为登录后默认是用户目录,比如/home/admin,但是该目录是root用户拥有,因此我们还要修改权限。
注意:centos7重启ssh的命令是sudo systemctl restart sshd.service,另外可以设置ssh为开机启动,命令是sudo systemctl enable sshd.service。
4)在用户目录下建立子目录,让sftp-users中的用户可读写文件
在/home/admin目录下新建一个upload文件夹
cd /home/admin/
mkdir upload
5)授权upload文件夹读写
chown admin /home/admin/upload #让子文件夹upload属于admin
chmod 755 /home/admin/upload #让子文件夹upload被admin读写
6)重启ssh,登录sftp,现在全部都配置完了,如果在上面第3步没有重启ssh的话,现在重启后即可以登录使用了
sudo service sshd restart
centos7.x的系统如果执行上面这个命令提示不存在,执行:
sudo systemctl restart sshd
3. 使用SFTP编辑
3.1 拷贝WEB-INF
拷贝正式环境web工程里的 WEB-INF文件夹,并粘贴到/home/admin/upload目录下。
在平台开启文件服务器时,选择sftp,并且sftp路径填写/upload/WEB-INF。(注意路径写对)
3.2测试是否成功
用ftp工具连接,比如Xftp之类的进行登录sftp用户。新建和删除文件夹确认有读写权限,则表明sftp部署成功,如果测试报错,查看下面的FAQ文档。
4.运维知识编辑
4.1 常用命令
service sshd status #查看sftp的状态
service sshd start #启动服务
service sshd stop #停止服务
service sshd restart #重启sftp
说明:sftp默认是随系统启动而启动的
更多运维知识参见:集群运维手册-Linux版
5. FAQ文档编辑
5.1 无法上传文件或者无法重启sshd服务
参考linux系统安装配置FTP中5.1关闭SELinux的操作,即可解决。