web项目的上传大多数人还是习惯用ftp,当然也有git和svn这些上传方式,该文章主要讲到ftp的上传,sftp在ftp当中是相当配置简单的一种,它主要是依赖SSH的,所以一般系统都会自带的,而且由于它依赖SSH所以也可以进行证书验证登陆,所以安全性还是比较高的。
从技术角度来分析,几个要求:
1、从安全方面看,sftp会更安全一点
2、线上服务器提供在线服务,对用户需要控制,只能让用户在自己的home目录下活动
3、用户只能使用sftp,不能ssh到机器进行操作
下面开始讲解sftp的配置
1、创建sftp组
# groupadd sftp
2、创建一个不能登陆ssh的sftp用户,名为amaple
#useradd -G sftp -s/sbin/nologin amaple
3、设置amaple账号的密码,然后自己输入自己的密码就行了
# passwd amaple
4、sftp组的用户的目录统一指定到/sftp下,所以首先我们要先创建/sftp,并赋值权限
# mkdir /sftp
# chown -R root:root /sftp
# chmod 755 /sftp
5、在/sftp目录下按用户名区分创建属于自己的目录,这里我们先创建一个amaple的目录,并赋值权限
# mkdir /sftp/amaple
# chown -R root:root /sftp/amaple
# chmod 755 /sftp/amaple
6、配置sshd_config
# vi /etc/ssh/sshd_config
找到如下这行,并注释掉
Subsystem sftp /usr/libexec/openssh/sftp-server
添加如下几行
Subsystem sftp internal-sftp
Match Group sftp
ChrootDirectory /sftp/%u
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
7、创建存放web项目的目录,并且赋值权限
# mkdir /sftp/amaple/web
# chown -R amaple:sftp /sftp/amaple/web
# chmod -R 755 /sftp/amaple/web
8、重启sshd服务
s
ervice sshd restart
9、然后试着用ftp工具上传,而且选择项要是sftp才可以。
注、
a)如果懂得setfacl和getfacl个人建议用这种方式赋值权限更加妥当。
b)解释一下添加的几行的意思
Subsystem sftp internal-sftp
这行指定使用sftp服务使用系统自带的internal-sftp
Match Group sftp
这行用来匹配sftp组的用户,如果要匹配多个组,多个组之间用逗号分割
当然,也可以匹配用户
Match User amaple
这样就可以匹配用户了,多个用户名之间也是用逗号分割,但我们这里按组匹配更灵活和方便
ChrootDirectory /sftp/%u
用chroot将用户的根目录指定到/sftp/%u,%u代表用户名,这样用户就只能在/sftp/%u下活动,chroot的含义
ForceCommand internal-sftp
指定sftp命令
AllowTcpForwarding no
X11Forwarding no
这两行,如果不希望该用户能使用端口转发的话就加上,否则删掉