简介
SFTP即安全文件传输协议(Secure File Transfer Protocol),一个独立的SSH封装协议包,SFTP本身没有单独的守护进程,必须使用sshd守护进程(端口号默认是22)来完成相应的连接操作,使用加密传输认证信息和传输的数据,所以SFTP是一种比较安全的传输方式。 但由于这种传输方式使用了加密/解密技术,效率比普通的FTP要低得多。在对网络安全性要求更高时,可代替FTP使用。
SFTP搭建
查看配置
当我们为SFTP配置chroot环境后,只有被许可的用户可以访问,并被限制到他们的家目录(“chroot监狱”,chroot jail或chroot prison)中,所以需要确认是否支持chroot。
服务器OpenSSH-Server版本最低4.8p1,因为配置权限需要版本添加的新配置项 ChrootDirectory 来完成。
查看OpenSSH版本,命令如下:
$ ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
创建用户信息
添加用户组:
groupadd sftpusers
添加用户:
useradd -g sftpusers -d /download -s /sbin/nologin -M jason #单个用户
useradd -g sftpusers -d /download -s /sbin/nologin -M jack #单个用户
useradd -d /files -s /sbin/nologin -M manager #作为管理员角色
# 参数注解
-g # 加入用户组
-d # 指定用户登入时的目录
-s # 指定用户登入后所使用的shell
/sbin/nologin # 用户不允许登录
-M # 不要自动建立用户的登入目录
修改用户的主目录
# id 命令查看用户名、UID、GID
id jason
uid=1014(jason) gid=1009(beecloud) groups=1009(beecloud)
#修改用户目录
usermod -d /upload -u 1014 jason
修改sshd_config配置文件(重点)
$ vim /etc/ssh/sshd_config
#Subsystem sftp /usr/libexec/openssh/sftp-server #此行注释
Subsystem sftp internal-sftp # 指定使用sftp服务使用系统自带的internal-sftp
AllowTcpForwarding no # 禁止用户使用端口转发
X11Forwarding no # 禁止用户使用端口转发
#适用于多用户/组情况
Match Group sftpusers # 匹配sftpusers组的用户,若要匹配多个组,可用逗号分开
ChrootDirectory /home/sftpdir/files/u% # 限制用户的根目录(非文件所在目录), %u 代表用户名, %h 表示用户根目录
ForceCommand internal-sftp # 只能用于sftpusers登录
#适用于单个用户情况
Match User manager # 匹配manager用户,若要匹配多个用户,可用逗号分开
ChrootDirectory /home/sftpdir # 限制用户的根目录(非文件所在目录)
ForceCommand internal-sftp # 只能用于manager登录
通过如上配置,即可将组(即组内用户)限定在/home/sftpdir/files/u%目录下,管理员用户限定在/home/sftpdir目录下
配置目录和权限(重点)
mkdir -p /home/sftpdir/files/jason/download
mkdir -p /home/sftpdir/files/jack/download
chmod -R 755 /home/sftpdir/files/jason/download
chmod -R 755 /home/sftpdir/files/jack/download
chown -R root:root /home/sftpdir/files/jason
chown -R root:root /home/sftpdir/files/jack
# 普通用户下载的文件所在的目录download,chown设置的两种情况:
# 1.涉及到管理员角色,chown设置
# 由于上述755权限设置,即可满足普通用户(sftpusers组,r-x)仅仅可以下载,不能上传,管理员角色(manager,rw-)可上传下载
chown -R manager:sftpusers /home/sftpdir/files/jason/download
chown -R manager:sftpusers /home/sftpdir/files/jack/download
# 2.不涉及到管理员角色,仅仅是普通用户,chown设置
# 由于上述755权限设置,即可满足普通用户(sftpusers组,rw-)可上传下载
chown -R jason:sftpusers /home/sftpdir/files/jason/download
chown -R jack:sftpusers /home/sftpdir/files/jack/download
目录的权限设定有两个要点,遵循这两个原则:
1.由ChrootDirectory指定的目录开始一直往上到系统根目录为止的目录拥有者都只能是root
2.由ChrootDirectory指定的目录开始一直往上到系统根目录为止都不可以具有群组写入权限(最大权限755)
配置完成后重启ssh
service sshd reload
或
systemctl reload sshd.service
测试
不涉及管理员,测试普通用户:
$ sftp jason@192.168.1.58
jason@192.168.1.58's password:
Connected to 192.168.1.58.
sftp> pwd
Remote working directory: /download
sftp> ls -al
drwxr-xr-x 2 1002 1003 21 Jun 23 08:52 .
drwxr-xr-x 3 0 0 20 Jun 23 08:49 ..
-rw-r--r-- 1 1002 1002 0 Jun 23 06:28 test.txt
sftp> put /Users/jason/Sites/zabbix.tar.gz zabbix.tar.gz
Uploading /Users/jason/Sites/zabbix.tar.gz to /download/zabbix.tar.gz
/Users/jason/Sites/zabbix.tar.gz 100% 6862KB 2.2MB/s 00:03
sftp> ls -al
drwxr-xr-x 2 1002 1003 21 Jun 23 08:52 .
drwxr-xr-x 3 0 0 20 Jun 23 08:49 ..
-rw-r--r-- 1 1002 1002 0 Jun 23 06:28 test.txt
-rw-r--r-- 1 1002 1002 7026672 Jul 6 04:13 zabbix.tar.gz
测试管理员:
$ sftp manager@192.168.1.58
manager@192.168.1.58's password:
Connected to 192.168.1.58.
sftp> pwd
Remote working directory: /files
sftp> ls -al
drwxr-xr-x 2 1002 1003 21 Jun 23 08:52 .
drwxr-xr-x 3 0 0 20 Jun 23 08:49 ..
-rw-r--r-- 1 1002 1002 0 Jun 23 06:28 test.txt
sftp> put /Users/jason/Sites/zabbix.tar.gz jason/download/zabbix.tar.gz
Uploading /Users/jason/Sites/zabbix.tar.gz to /files/jason/download/zabbix.tar.gz
/Users/jason/Sites/zabbix.tar.gz 100% 6862KB 2.2MB/s 00:03
sftp> ls -al jason/download
drwxr-xr-x 2 1002 1003 21 Jun 23 08:52 .
drwxr-xr-x 3 0 0 20 Jun 23 08:49 ..
-rw-r--r-- 1 1002 1002 0 Jun 23 06:28 test.txt
-rw-r--r-- 1 1008 1009 7026672 Jul 6 04:13 zabbix.tar.gz