VSFTP是一个基于GPL发布的类Unix系统上使用的FTP服务器软件,它的全称是Very Secure FTP 从此名称可以看出来,编制者的初衷是代码的安全。安全性是编写VSFTP的初衷,除了这与生俱来的安全特性以外,高速与高稳定性也是VSFTP的两个重要特点。
一般来说,我们的系统都是自带了安装包的,事先可以通过下面的命令查看一下是否存在安装包:
rpm -qa |grep vsftpd
如果提示有安装包,即选择安装即可,诸如下面这样
rpm –ivh vsftpd-2.0.5-16.el5_4.1.i386.rpm
接下来我们要认识几个关键的文件:
ftpusers 该文件用来指定那些用户不能访问ftp服务器,通常是一些系统默认的用户
user_list 该文件用来指示的默认账户在默认情况下也不能访问ftp
vsftpd.conf vsftpd的主配置文件
在主配置文件里面添加如下内容:
vi /etc/vsftpd/vsftpd.conf
guest_username=virtual(guoguo是系统用户,ftp根目录的所有者)
user_config_dir=/etc/vsftpd/config (指定虚拟用户 个人 登陆目录权限等 的配置路径)
pam_service_name=vsftpd (vsftpd为自定义名字,放在/etc/pam.d/目录下)
当然,我们可以通过命令的方式来完成,如下所示:
useradd -d /home/ftp -s /sbin/nologin virtual
chmod 777 /home/ftp/
指定了virtual对应的虚拟用户登录进来以后,所在的目录就是/home/ftp/这个目录
生成虚拟用户口令库文件。为了建立此口令库文件,先要生成一个文本文件。该文件的格式如下,单行为用户名,偶行为口令。诸如下面的操作:
vi vuser.list
taoshuiyuan
123456
生成口令库文件,并修改其权限:
db_load -T -t hash -f /etc/vsftpd/vuser.txt /etc/vsftpd/vsftpd_login.db
chmod 600 /etc/vsftpd/vsftpd_login.db
在用户配置文件目录下创建相应的用户配置文件,诸如我们要创建一个用户名为taoshuiyuan的账号,可以这样操作:
vi /etc/vsftpd/vsftpd_config/taoshuiyuan
local_root=/home/ftp/taoshuiyuan(用户登陆后直接进入自己目录不能浏览别家目录)
anon_world_readable_only=NO
write_enable=YES //允许在文件系统写入权限
anon_upload_enable=YES //开启上传权限
anon_mkdir_write_enable=YES //开启创建文件夹权限
anon_other_write_enable=YES //开启其他权限,如重命名,删除文件及文件夹
vi /etc/pam.d/vsftpd
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
在配置文件里面指出配置的虚拟用户的目录所在位置,添加下面的参数:
user_config_dir=/etc/vsftpd/vsftpd_user_conf
service vsftpd restart
推荐使用FlashFXP这个软件,最好是汉化版的
如上图示,输入正确的ip地址,以及之前设置的用户账号以及密码就可以登录了。登录以后的图示如下所示:
在步骤2.3的时候,如果没有db4,yum 安装 db4,db4-devel,db4-utils
yum install db4 db4-devel db4-utils
有些时候db版本可能不是网上说的那样,所以需要根据自己机器上面装的版本来进行封装db的命令,诸如我的机器上面命令就是这样的:
db41_load -T -t hash -f /etc/vsftpd/vuser.list /etc/vsftpd/vsftpd_login.db
我们在/etc/vsftpd/vsftpd_user_conf下面是对每一个虚拟用户的具体情况可以做不同的设置,每一个用户账号对应一个文件,在里面有local_root=/home/ftp/taoshuiyuan 这一参数来指定这个用户进入ftp登入的具体目录,但是在实验的过程中,我发现已经给予了用户读写以及上传下载的权限,但是却无法实现功能,后来发现,是因为对应的目录权限设置有问题,一定要提前检查给这个用户的目录权限是否为777,这样才可以有相应的功能;
还是一种情况值得我们注意,当我们在vuser.txt文件当中增加了一个用户以及密码的时候,同时也通过db4封装成db了,但是没有在/etc/vsftpd/vsftpd_user_conf下面设置对应账号的文件,这个时候账号的默认登入目录在哪?都有哪些默认权限?通过实验发现,我们知道如果在这种情况下,此时新建的账号登入目录是在我们之前建立的系统账号所在目录的,本文当中就是在/home/ftp,而这个账号所拥有的权限是要根据主配置文件vsftpd.conf来决定的。
安全问题是一件至关重要的事情,我们在线上系统当中建立一个用户账号的时候,往往考虑的是系统这个用户只能在我们给定的目录当中进行一些读写以及上传下载操作,对Linux的其他文件目录没有权限进入和读写操作。
在上面这个情况下,我们就需要用到chroot_list_enable=YES 这个参数,表示将用户账号限制在自己的宿主目录,对其他目录没有访问权限,那么,我们再加上chroot_list_file=/etc/vsftpd /chroot_list 这个参数,表示在/etc/vsftpd /chroot_list这个文件里面我们写入了需要禁锢在自己宿主目录的用户账号,我们通过编辑这个文件就ok了,如:
vi chroot_list
taoshuiyuan
yangqixu
说明我们将taoshuiyuan和yangqixu这两个账号限制在自己的宿主目录,实验当中,我们随意登录一个账号看看效果,如下所示:
我们看到,上面的效果正是我们需要的。
我们知道,在日常运维工作当中,ftp配置出现问题最多的就是添加ftp用户账号,或者是配置的账号出现异常时重新配置密码这两种情况,那么都免不了要将修改的虚拟用户封装成db的形式,也就是得有db_load -T -t hash -f /etc/vsftpd/vuser.txt /etc/vsftpd/vsftpd_login.db,但是呢,时间一长往往会忘记,怎么办,比较好的解决办法就是在/etc/vsftpd/ 目录下面建立一个vsftpd.sh的脚本文件,里面就是
db_load -T -t hash -f /etc/vsftpd/vuser.txt /etc/vsftpd/vsftpd_login.db这条命令,下次用到时,直接调用,省事很多。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/30270750/viewspace-1767678/ ,如需转载,请注明出处,否则将追究法律责任。