一、安装
yum install vsftpd -y
二、配置vsftpd.conf
先备份一个配置文件,然后再修改,注意所有配置行尾不能有空格,否则启动ftp会报错,提示不识别参数
基本配置:
anonymous_enable=no #禁止匿名登录 local_enable=YES #允许本地账户登录 write_enable=YES #允许本地账户写权限 local_umask=022 dirmessage_enable=YES xferlog_enable=YES #开启日志 connect_from_port_20=YES #表面vsftp使用主动模式 xferlog_file=/var/log/vsftp #日志文件 xferlog_std_format=YES chroot_local_user=YES #将所有用户限制在主目录,YES为启用 NO禁用 见注1 allow_writeable_chroot=YES #拥有写权限 local_root=/data1/vsftp/data #ftp主目录位置,默认为各个用户的home目录 chroot_list_enable=YES #是否启动限制用户的名单 YES为启用 NO禁用(包括注释掉也为禁用) chroot_list_file=/etc/vsftpd/chroot_list
userlist_enable=YES #启用user_list文件 见注2
listen=YES pasv_enable=NO pam_service_name=vsftpd tcp_wrappers=YES
注1:
chroot_local_user #是否将所有用户限制在主目录,YES为启用 NO禁用.(该项默认值是NO,即在安装vsftpd后不做配置的话,ftp用户是可以向上切换到要目录之外的)
chroot_list_enable #是否启动限制用户的名单 YES为启用 NO禁用(包括注释掉也为禁用)
chroot_list_file=/etc/vsftpd/chroot_list #是否限制在主目录下的用户名单,至于是限制名单还是排除名单,这取决于chroot_local_user的值,我们可以这样记忆: chroot_local_user总是一个全局性的设定,其为YES时,全部用户被锁定于主目录,其为NO时,全部用户不被锁定于主目录。那么我们势必需要在全局设定下能做出一些“微调”,即,我们总是需要一种“例外机制",所以当chroot_list_enable=YES时,表示我们“需要例外”。而”例外“的含义总是有一个上下文的,即,当”全部用户被锁定于主目录“时(即chroot_local_user=YES),"例外"就是:不被锁定的用户是哪些;当"全部用户不被锁定于主目录"时(即chroot_local_user=NO),"例外"“就是:要被锁定的用户是哪些。这样解释和记忆两者之间的关系就很清晰了!
对于chroot_local_user与chroot_list_enable的组合效果,可以参考下表:
注2:
vsftpd有两个默认存放用户名单的文件(默认在/etc/vsftpd/ 目录下),来对访问FTP服务的用户身份进行管理和限制。vsftpd会分别检查两个配置文件,只要是被任何一个文件所禁止的用户,FTP访问到本机的请求都会被拒。
user_list:可以作为用户白名单,或者是黑名单,或者无效名单。完全由userlist_enable和userlist_deny这两个参数决定。
ftpusers:只能是用户黑名单,不受任何参数限制。
决定user_list文件性质的参数 userlist_enable和userlist_deny
userlist_enable=YES userlist_deny=YES 启用user_list文件,但文件是黑名单,拒绝文件中的用户FTP访问 userlist_enable=YES userlist_deny=NO 启用user_list文件,但文件是白名单,拒绝除文件中的用户外的用户FTP访问 userlist_enable=NO userlist_deny=YES/NO 无效名单,表示没有对任何用户限制FTP访问
三、新增虚拟用户
1、修改vsftpd.conf配置文件,增加虚拟用户相关的配置
pam_service_name=vsftpd #设置PAM使用的名称,该名称就是/etc/pam.d/目录下vsfptd文件的文件名 guest_enable=YES #表示是否开启vsftpd虚拟用户的功能,yes表示开启,no表示不开启。 user_config_dir= /etc/vsftpd/vmuser_conf #指定每个虚拟用户账号配置目录
2、然后创建虚拟用户目录
mkdir /etc/vsftpd/vmuser_conf
3、创建虚拟用户文件,把这些用户名和密码存放在一个文件中。该文件内容格式是:用户名占用一行,密码占一行,且奇数行为用户名,偶数行为密码。如下:
vim /etc/vsftpd/vmuser_list
#虚拟用户列表
test
test123
这个文件的虚拟用户和密码的文本文件无法被系统帐号直接调用,所以我们需要使用db_load命令生成db口令数据库文件,命令如下:
db_load -T -t hash -f /etc/vsftpd/vmuser_list /etc/vsftpd/vmuser_list.db
4、为了使服务器能够使用上述生成的数据库文件,对客户端进行身份验证,需要调用系统的PAM模块。PAM(Plugable Authentication Module)为可插拔认证模块,不必重新安装应用系统,通过修改指定的配置文件,调整对该程序的认证方式。PAM模块配置文件路径为/etc/pam.d/目录,此目录下保存着大量与认证有关的配置文件,并以服务名称命名。
我们现在切换到/etc/pam.d/ 目录下,编辑vsfptd文件,如下图:
主要是注销原有的配置并增加如下俩行:
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vmuser_list
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vmuser_list
auth是指对用户的用户名口令进行验证。
accout是指对用户的帐户有哪些权限哪些限制进行验证。
再后面的/lib64/security/pam_userdb.so表示该条审核将调用pam_userdb.so这个库函数进行。
注意该函数会根据系统的位数而所在位置不同。
5、虚拟用户权限配置
PAM配置完毕后,我们现在开始创建虚拟用户与系统用户对应的文件。切换到/etc/vsftpd/vmuser_conf目录下,并创建test文件。
注意该文件名称一定要与vmuser_list中的虚拟用户要对应。比如现在vmuser_list文件有test用户,那么在 /etc/vsftpd/vmuser_conf目录下创建一个文件名为test的文件。设置权限有三种方法,
1、设置虚拟用户和本地用户有相同的权限,这种无需刻意修改ftp目录权限
[root@test-03 vsftpd]# cat /etc/vsftpd/vmuser_list #虚拟用户列表
test test123
[root@test-03 vsftpd]# vim /etc/vsftpd/vmuser_conf/test local_root=/data1/vsftp/data #虚拟用户登录到ftp时的默认目录 virtual_use_local_privs=YES #虚拟用户和本地用户有相同的权限 guest_username=www #设置虚拟用户对应的系统用户为www,www对/data1/vsftp/data有什么权限,虚拟用户就有什么权限
anon_umask=022
test虚拟用户,故不需要事先创建系统用户。
2、也可以单独配置权限,但这种单独配置权限,需要给ftp目录/data1/vsftp/data赋权为777
chmod -R 777 /data1/vsftp/data
然后编辑用户权限文件 /etc/vsftpd/vmuser_conf/test
local_root=/data1/vsftp/data write_enable=YES #开启写权限 anon_umask=022 # anon_world_readable_only=YES #用户可以浏览目录和下载文件 anon_upload_enable=YES #上传权限 anon_mkdir_write_enable=YES #创建目录权限 anon_other_write_enable=YES #修改文件名和删除权限
3、可以设置虚拟用户和本地用户有相同的权限,但用参数限制详细权限,这种就不用设置ftp目录权限是777了,这个方法最安全,推荐此方法。
local_root=/data1/vsftp/data virtual_use_local_privs=YES guest_username=www anon_umask=022 write_enable=NO #禁止写入 anon_world_readable_only=NO anon_upload_enable=YES anon_mkdir_write_enable=NO #禁止 anon_other_write_enable=NO
四、启动
systemctl start vsftpd && systemctl enable vsftpd
五、客户端登录
win ,下载ftp客户端,我用的是FileZilla Client
六、添加新用户
1、在vmuser_list 添加新用户账户密码,记住奇数行账户 偶数行密码
2、加密文件
db_load -T -t hash -f /etc/vsftpd/vmuser_list /etc/vsftpd/vmuser_list.db
3、在user_list添加一行 内容为新用户,这是允许新用户可以访问ftp
4、在vmuser_conf下添加文件,文件名就是用户名,内容为相关权限控制
5、重启ftp即可
七、其他知识
1、ftp主动模式及被动模式
默认为主动模式,如若修改成被动模式,
pasv_enable=YES pasv_min_port=3000 pasv_max_port=3999 pasv_promiscuous=YES
工作的原理: FTP客户端连接到FTP服务器的21端口,发送用户名和密码,客户端随机开放一个端口(1024以上),发送 PORT命令到FTP服务器,告诉服务器客户端采用主动模式并开放端口;FTP服务器收到PORT主动模式命令和端口号后,通过服务器的20端口和客户端开放的端口连接,发送数据,原理如下图:
被动模式:
PASV是Passive的缩写,中文成为被动模式,工作原理:FTP客户端连接到FTP服务器的21端口,发送用户名和密码,发送PASV命令到FTP服务器, 服务器在本地随机开放一个端口(1024以上),然后把开放的端口告诉客户端, 客户端再连接到服务器开放的端口进行数据传输,原理如下图: