文章目录
1. 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。
2. SFTP搭建
sftp服务器有两种搭建方式,下面介绍一下
- 直接在系统上新建一个用户即可,此种方式最简单,但最不安全,用户sftp登陆之后可以随意切换目录,切用户可以ssh登陆到系统,很不安全,生产环境中没这么干的,故不详细介绍了。
- 标准sftp的搭建
2.1. 标准sftp的搭建
我们使用的系统是CentOS 7.2,关闭Selinux和防火墙
2.1.1. 查看OpenSSH版本
~]# ssh -V
OpenSSH_6.6.1p1, OpenSSL 1.0.1e-fips 11 Feb 2013
注意:OpenSSH版本必须大于4.8p1,低于这个版本需要升级
2.1.2. 创建sftp组
~]# groupadd sftp
~]# grep sftp /etc/group
sftp:x:10000:
2.1.3. 创建用户组为sftp
useradd命令参数:
-d: 指定用户家目录
-g: 指定用户组
-s: 指定用户默认shell
创建一个sftp用户,名称为mysftp并将组设置为sftp
~]# useradd -d /data/sftp/mysftp -g sftp -s /bin/false mysftp
~]# grep mysftp /etc/passwd
mysftp:x:10000:10000::/data/sftp/mysftp:/bin/false
~]# id mysftp
uid=10000(mysftp) gid=10000(sftp) groups=10000(sftp)
~]# ll /data/sftp/
total 0
drwx------ 2 mysftp sftp 59 Feb 25 15:36 mysftp
Changing password for user mysftp.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
~]# chown root:sftp /data/sftp/mysftp
2.1.4. 修改sshd_config
我们修改 /etc/ssh/sshd_config
文件,限制用户访问sftp的目录
-
Subsystem sftp /usr/libexec/openssh/sftp-server
这行的注释 -
在文件最后面添加如下几行内容,然后保存
Subsystem sftp internal-sftp # 配置一个外部子系统(例如,一个文件传输守护进程)。仅用于SSH-2协议。值是一个子系 # 统的名字和对应的命令行(含选项和参数)。比如"sftp /usr/libexec/openssh/sftp-server"。, # 这里配置为内部的 Match Group sftp # 限定只有sftp组的才能访问 ChrootDirectory /data/sftp/%u # 由ChrootDirectory指定的目录开始一直往上到系统根目录的目录属主都是root. # 由ChrootDirectory指定的目录开始一直往上到系统根目录都不可以具有群组写入权限. # 强制执行内部SFTP,并忽略任何~/.ssh/rc中的命令 ForceCommand internal-sftp # 禁用端口转发 AllowTcpForwarding no X11Forwarding no
2.1.5. 重启SSHd服务
~]# systemctl restart sshd
2.1.6. 创建可写目录
建立SFTP用户登入后可写入的目录,照上面设置后,在重启sshd服务后,用户mysftp已经可以登录。但使用chroot指定根目录后,根应该是无法写入的,所以要新建一个目录供mysftp上传文件。这个目录所有者为mysftp,所有组为sftp,所有者有写入权限,而所有组无写入权限。命令如下:
~]# mkdir /data/sftp/mysftp/upload
~]# chown mysftp:sftp /data/sftp/mysftp/upload
~]# chmod 755 /data/sftp/mysftp/upload
2.2. 访问SFTP服务
~]# sftp mysftp@192.168.66.11
mysftp@192.168.66.11's password:
Connected to 192.168.66.11.
sftp> ls
upload
sftp> ls -l
drwxr-xr-x 2 10000 10000 6 Feb 25 09:48 upload
sftp> cd upload/
sftp> pwd
Remote working directory: /upload
sftp> mkdir sftp
sftp> ls -l
drwxr-xr-x 2 10000 10000 6 Feb 25 09:51 sftp