文件服务器--vsftpd的搭建使用
背景
由于内网环境中没有特别适合的大文件共享服务,所以考虑自己搭建一个ftp服务器,用来给团队分享各种安装包以及环境、教程等等。
服务安装
首先查看内网服务器是否已经安装了vsftpd服务, vsftpd是very secure ftp的含义,对安全性支持很好。
rpm -qa|grep vsftpd
如果结果中有相关信息,则已经安装,如果没有,则通过yum进行安装。考虑到vsftpd服务基本上是通用的,所以内网的yum源里面也一般会维护对应的安装包。
yum install -y vsftpd
安装完毕之后,我们通过如下命令启动ftp服务
systemctl start vsftpd.service
服务配置
在安装完毕之后,默认情况下,我们是可以通过服务器的用户名和密码登录到ftp服务的,同时还有匿名用户登录的可能。这样的ftp服务从安全性角度来说是很低的。因此我们要考虑对于登录FTP的用户做些限制。
1、禁止匿名用户登录
通过修改ftp服务的配置文件:/etc/vsftpd/vsftpd.conf
vim /etc/vsftpd/vsftpd.conf
找到并设置匿名用户属性:
anonymous_enable=NO
2、对于本地用户,即linux本来已经存在的用户设定ftp的活动范围,假定已经创建了用户devs,属于devgroup用户组
groupadd devgroup
useradd -s /bin/bash -g devgroup -d /home/devs devs
那么,通过配置/etc/vsftpd.conf文件,设置如下属性可以将ftp登录后的根目录限制为用户的家目录 /home/devs
chroot_local_user=YES #表示改变跟目录为用户家目录 chroot_list_enable=YES #表示启用例外用户列表,在该列表中的用户,将不会变更根目录 chroot_list_file=/etc/vsftpd/chroot_list #用户列表,里面的用户将不会被chroot()所限制 allow_writeable_chroot=YES #新版的vsftp默认要求用户不能对家目录进行写操作,否则会登录认证失败,需要这里显示设置一下,才能登录成功。
另外对于/etc/vsftpd/chroot_list文件,我们需要手动 touch一下生成空文件,否则也会登录失败。
所有配置完成之后,通过命令重启ftp服务即可
systemctl restart vsftpd
重启后,我们通过xftp连接到服务器时,通过本地用户登录之后,看到的根目录就变为了该用户的家目录。无法跳出到其他目录中去了。
3、限制ftp用户ssh登录
有两种方法,第一种是建立虚拟用户,然后通过虚拟用户来完成ftp的功能,整个配置很麻烦,网上的资料乱七八糟,看了下放弃了。
另外一种是修改ftp用户的登录权限,然后通过修改PAM认证方式来允许ftp连接
首先修改用户的登录权限
usermod -s /sbin/nologin devs
在做完这一步之后,我们如果直接尝试ftp登录,会提示身份认证失败,所以需要修改pam认证。
vim /etc/pam.d/vsftpd
找到并注释掉一下内容:
auth required pam_shells.so
然后重启vsftpd即可重新ftp连接上服务了,这个时候,通过devs用户登录ftp,就只能看到该用户家目录下的文件,且不支持该用户ssh登录了。
参考:
vsftp新建用户无法登录? - 白高宁的回答 - 知乎 https://www.zhihu.com/question/268255821/answer/622810196