众所周知,ftp是文件传输协议,在服务器中可以安装ftp服务,从而可以上传和下载文件。
我们需要传输文件到服务器当中,很多人习惯用ftp来传输,其实Linux默认是不提供ftp的,需要你额外安装FTP服务器,而且ftp服务器端会占用一定的VPS服务器资源。
何为SFTP
SFTP(SSH File Transfer Protocol)是安全文件传送协议,可以为传输文件提供一种安全的网络的加密方法。sftp 与ftp 有着几乎一样的语法和功能。
使用SFTP主要因有:
1、可以不用额外安装任何服务器端程序
2、会更省系统资源
3、SFTP使用加密传输认证信息和传输数据,相对来说会更安全
4、也不需要单独配置
在计算机领域,SSH 文件传输协议(英语:SSH File Transfer Protocol,也称 Secret File Transfer Protocol,中文:安全文件传送协议,英文:Secure FTP 或字母缩写:SFTP)是一数据流连线,提供文件访问、传输和管理功能的网络传输协议。由互联网工程任务组(IETF)设计,透过 SSH 2.0 的扩展提供安全文件传输能力,但也能够被其他协议使用。
SFTP正是因为他的这个S,代表了Security,被大众所使用。
正片开始
1、创建SFTP组和用户
请在搭建前进入root权限下!!!
[root@localhost ~]#groupadd sftpgroup //创建sftp组
[root@localhost ~]# useradd -g sftpgroup -s /bin/false sftp //创建sftp用户到sftpgroup组下,-g 添加到组,-s 禁止该用户使用命令
[root@localhost ~]# passwd sftp //为sftp用户创建密码
2、创建sftp目录
[root@localhost ~]# cd /home
[root@localhost home]#mkdir sftp //创建sftp文件夹作为SFTP服务文件夹
[root@localhost home]#usermod -d /home/sftp sftp //将它指定为sftpgroup组用户sftp的home目录
3、编辑配置文件/etc/ssh/sshd_config,vi /etc/ssh/sshd_config
将如下这行用#符号注释掉
# Subsystem sftp /usr/libexec/openssh/sftp-server
并在文件最后面添加如下几行内容然后保存
Subsystem sftp internal-sftp
Match Group sftp
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
4、接下来指定登录后的根目录
ChrootDirectory指定登陆后的根目录,并且将用户限制在该目录及其子目录下。
这里有些许规则
1、由ChrootDirectory指定的目录一开始一直往上到系统根目录为止的目录拥有者都只能是root
2、由ChrootDirectory指定的目录一开始一直往上到系统根目录为止都不可以具有群组写入权限(权限最大为755)
3、ChrootDirectory设置的目录权限及其所有的上级文件夹权限,属主和属组都必须为root
4、ChrootDirectory设置的目录权限及其所有的上机文件夹权限,只有属主能拥有写权限,也就是说权限最大只能设置为755
[root@localhost home]#chown root:sftpgroup sftp/
[root@localhost home]# chmod 755 sftp/
5、接下来给upload文件夹权限
[root@localhost home]#mkdir -p /home/sftp/upload //创建sftp用户上传文件夹
[root@localhost sftp]# chown sftp:sftpgroup upload/ //将upload目录所有者为sftp,所有组为sftpgroup
[root@localhost sftp]# chmod 755 upload/ //所有者有写入权限,所有组无写入权限
6、重启sshd服务
[root@localhost sftp]# systemctl restart sshd
大功告成
使用XFTP登陆并且查看目录和上传情况
可以看到上传完成,并且目录隔离,看不到upload以外的目录。(其实就是/home/sftp下的upload目录
设置sftp登陆日志
打开sshd_config
vim /etc/ssh/sshd_config
注释掉Subsystem行,然后写入新Subsystem,信息如下
#Subsystem sftp internal-sftp
Subsystem sftp internal-sftp -l INFO -f local5
LogLevel INFO
然后修改syslogs
vim /etc/rsyslog.conf
在最后增加如下配置
auth,authpriv.*,local5.* /var/log/sftp.log
最后重启服务查看日志
systemctl restart sshd //CentOS7
systemctl restart rsyslog.service
/etc/init.d/rsyslog restart //CentOS6
/etc/init.d/sshd restart