sftp服务器配置指北

本来安装sftp服务器就不是什么事,按照网上的文档就能搞定了,结果有一个需求,网上的文章说的不清不楚的,于是我研究了一番,实现了指定的用户能登录fstp服务器,而
未指定的系统用户禁止登录sftp服务器.

步骤

  • 创建一个用户和一个用户组
1
2
3
4
5
6
7
8
9
10
# 创建一个用户组
groupadd sftpusers

# 创建一个用户,设置用户的属组,shell,目录(用这个目录来作为用户的sftp服务器目录)
useradd -s /bin/false -d /home/sftpusers/share/test/ -G sftpusers test

# 修改该目录的属组和属主,设置权限,这样一来,用户登录到这里就没有权限做什么了
chown root:root /home/sftpusers/share/
# 于是test目录就属于test用户了
chmod 700 /home/sftpusers/share/test

这些都不是关键,中心思想是:让某个用户组的成员有访问sftp服务器的权限,其他系统用户访问sftp服务器,服务端会断开连接.

sftp是基于ssh的,因此,最终还是要配置ssh的配置文件.

一般在/etc/ssh/sshd_config 这里,用vim直接编辑.

1
2
3
4
5
6
7
Subsystem sftp /usr/libexec/openssh/sftp-server
# Subsystem sftp internal-sftp
Match Group sftpusers
ChrootDirectory /home/sftpusers/share/
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no

我的理解是,Match用户组sftpusers的配置如下,意味着这个match下的配置只对这个用户组生效.所以就实现了指定用户等登录sftp服务器,并且全部将登录目录设置为/home/sftpusers/share下

并且强制这些用户组内的用户在登录时运行SFTP服务器,禁止shell访问。关闭X11转发和TCP转发.

据说子系统这里这样设置,用户登录到服务器使用cd / 可以切换到根目录,我试过之后发现设置了chroot目录指定之后,根本看不到根目录,因为这个被指定的目录就是根目录.

重点:

修改了ssh配置需要重启sshd服务

修改ssh配置之前,最好备份这个配置文件

结果测试

只有这个用户组内的用户能登录sftp服务器,而其他系统用户无法登录sftp服务器,ssh服务不受影响.

记录在此.