天天看点

centos6下的vsftpd配置

文章允许转载,请注明来源:https://blog.csdn.net/feiniao8651/article/details/96039205

背景

ftp是大家常用的一个文件传输工具,自己有过多次搭建ftp的经历,但是每次环境都多少有些区别,搭建的时候往往还是会遇到不同的问题,不能做到得心应手。网上的资料也是参差不齐,大多数都是一个操作的步骤,但是有的关键步骤,为什么这么做的原因却没有说清楚,这里做一个总结,也便于自己以后处理类似的问题。

这里的应用场景是在nginx目录下配置的php工程,因为有其他人需要通过ftp访问修改php文件,所以需要有一个ftp服务能提供对应目录下的文件下载及上传,同时也不能影响到ngnix对工程的访问。

环境:CentOS 6.9

安装vsftp

安装很简单,就是通过yum来安装

$sudo yum install vsftpd
           

安装完成后,接下来就需要进行相应的配置了。主要是对用户及对应访问路径的配置。

配置vsftp

用户配置

ftp支持配置的用户分为三种,分别是:

本地用户(local):用户在FTP服务器拥有账号,且该账号为本地用户的账号,可以通过自己的账号和口令进行授权登录,登录目录为自己的home目录$HOME

虚拟用户(guest):用户在FTP服务器上拥有账号,但该账号只能用于文件传输服务。登录目录为某一特定的目录,通常可以上传和下载

匿名用户(anonymous):用户在FTP服务器上没有账号,登录目录为/var/ftp

(数据来自https://blog.csdn.net/kxwinxp/article/details/78595044)

我们是要访问特定的目录,所以可以配置虚拟用户。

1. 安装虚拟用户验证所需要的依赖包

$sudo yum install db4 db4-utils
           

2. 创建虚拟用户账号及密码

$sudo vim /etc/vsftpd/virtualusers
           

按以下格式添加内容(奇数行为账号,账号后的偶数行为密码)

testuser
123456
           

3. 生成虚拟用户认证的db文件

$sudo db_load -T -t hash -f /etc/vsftpd/virtualusers /etc/vsftpd/virtualusers_passwd.db
$sudo chmod 600 /etc/vsftpd/virtualusers_passwd.db
           

4. 配置PAM信息

PAM(Pluggable Authentication Modules)即可插拔式认证模块,它是一种高效而且灵活便利的用户级别的认证方式,它也是当前Linux服务器普遍使用的认证方式。

PAM 是关注如何为服务验证用户的API,通过提供一些动态链接库和一套统一的API,将系统提供的服务和该服务的认证方式分离,使得系统管理员可以灵活地根据需要给不同的服务配置不同的认证方式而无需更改服务程序,同时,PAM是一种认证框架,自身不做认证。

配置过程就是修改原有vsftp的PAM配置文件

$sudo vim /etc/pam.d/vsftpd
           

注释掉文件中原有的规则,添加以下两条规则

auth required pam_userdb.so db=/etc/vsftpd/virtualusers_passwd
account required pam_userdb.so db=/etc/vsftpd/virtualusers_passwd
           

注意:这里的db=后面其实就是对应我们刚才在第3步生成的db文件,但是这里不能带文件后缀名,否则系统会报错

pam_userdb(vsftpd:auth): user_lookup: could not open database `/etc/vsftpd/virtualusers_passwd.db': No such file or directory
           

原因是这里使用的pam_userdb.so库会自动在文件后面加.db的后缀,所以我们如果路径里写了.db,反而就是冗余了。有一篇文章提到了这个问题。

5. 配置vsftpd.conf

这个文件是vsftpd的核心配置文件,基本上大多数常用的设置都在这里面。

我这里设置的主要是以下几点:

anonymous_enable=NO
#设置虚拟用户一定要把local_enable设为yes,否则不能登录
local_enable=YES
write_enable=NO
chroot_local_user=YES
chroot_list_file=/etc/vsftpd/chroot_list
#这里的username,可以理解成虚拟账号需要绑定的一个服务器上的用户
guest_username=www
guest_enable=YES
user_config_dir=/etc/vsftpd/virtualusers_conf
virtual_use_local_privs=YES
# 以下是开启被动模式,可以解决部分因网络引起的访问异常
pasv_enable=YES
pasv_min_port=4000
pasv_max_port=5000
           

guest_username这里特别强调一下,这里填写用户需要有对我们要访问的资源的读写权限,比如我这里nginx下的资源,所有者都是www用户,所以我绑定的用户名是www。同时要设置virtual_use_local_privs为yes,即虚拟用户享有和绑定用户同样的权限。

6. 创建虚拟用户对应的配置文件

为了对不同的虚拟用户做权限划分,每个虚拟用户都有一个单独的配置文件,接下来我们就为刚才创建的testuser用户添加配置文件。所有的虚拟用户配置文件都是在上面配置的user_config_dir目录下,文件名称即为用户名。

$sudo vim /etc/vsftpd/virtualusers_conf
           

文件中添加以下内容

#local_root即为想让虚拟用户访问的目录
local_root=/home/aaa/php
write_enable=yes
download_enable=yes
           

这里为每一个虚拟用户创建单独的文件,主要目的就是为了能够灵活配置不同虚拟用户的权限。比如可以在vsftpd.conf里将write_enable都设置为NO,然后在需要有写权限的虚拟用户配置文件中配置write_enable为YES即可。

配置完之后重启vsftpd即可。

$sudo service vsftpd restart
           

ps:一定要在创建完对应用户配置文件后再去访问ftp。如果在创建用户配置文件前就去登录,会导致该用户访问到绑定用户的用户目录下,而且这个初始路径即使再增加单用户配置文件也无法修改,只能将该用户删除。

虚拟用户的增加和删除

  1. 增加虚拟用户

    添加新的虚拟用户账号和密码到/etc/vsftpd/virtualusers,在/etc/vsftpd/virtualusers_conf目录下添加对应账号名的配置文件。使用以下命令重新生成验证用的db文件

$sudo db_load -T -t hash -f /etc/vsftpd/virtualusers /etc/vsftpd/virtualusers_passwd.db
           
  1. 删除虚拟用户

    删除/etc/vsftpd/virtualusers中的账号和密码,删除/etc/vsftpd/virtualusers_conf下对应用户的配置文件,使用命令重新生成验证用的db文件即可。

后记

通过虚拟用户配置文件,既能保证一定的系统安全性,实现灵活的用户权限控制,可谓一举两得。但是配置过程中,容易出现一些配置上的问题,导致ftp访问异常。在查资料的过程中,网上大部分解决问题的方式都是简单粗暴的chmod 777,但是却没有想一下为什么会出现权限的问题。其实vsftp已经提供了很完善的权限配置支持,我们只需要稍微花费点时间了解和配置一下,就能体会到他的灵活性和便利性。

参考:

linux下WEB服务器安装、配置VSFTP

vsftp日志xferlog格式分析

vsftpd setup – the missing information

Centos6.9安装vsftpd并配置虚拟多用户

centos 7基于虚拟用户配置vsftpd

CentOS 7 安装FTP服务器(vsftpd)

继续阅读