何为vsftpd?
vsftpd:very secure ftp daemon
程序:/usr/sbin/vsftpd
配置文件:/etc/vsftpd/vsftpd.conf
其用户分为:匿名用户(映射至某一固定的系统用户),本地用户(root及系统用户),虚拟用户(存储在文件或其他服务器端数据库中的用户);
以下将以CentOS 7 讲解具体配置过程:
[此机制需要pam_mysql.so]
主要分为以下几个步骤:
1.运行环境准备和配置
2.mysql数据库配置
3.pam配置
4.细节优化
1.运行环境准备和配置
由于CentOS 7yum源中没有pam-mysql,故需自己编译安装;
首先安装开发环境:
# yum -y groupinstall "Development Tools" "Server Platform Development"
另外还需要的程序包有:openssl-devel pam-devel mariadb-devel
下载好pam-mysql后解压缩,开始编译:
# ./configure --with-openssl=/usr --with-mysql=/usr --with-pam=/usr --with-pam-mods-dir=/lib64/security
# make && make install
安装完成后,在/lib64/security目录下可以看到:
2.数据库配置
安装mariadb-server
创建一个测试库/表,填入数据,如图所示:
(此处用的数据库是test,表是vsftpd)
并授权一个用户vsftpd,使其有查权限:
mysql> GRANT select ON test.* TO vsftpd@localhost IDENTIFIED BY '123456';
mysql> GRANT select ON test.* TO vsftpd@127.0.0.1 IDENTIFIED BY '123456';
自行测试一下此用户,没问题进入下一步。
3.pam配置
# cd /etc/pam.d
# vim vsftpd.mysql
写入
auth required pam_mysql.so user=vsftpd passwd=123456 host=localhost db=test table=vsftpd usercolumn=name passwdcolumn=passwd crypt=2account required pam_mysql.so user=vsftpd passwd=123456 host=localhost db=test table=vsftpd usercolumn=name passwdcolumn=passwd crypt=2
其中:
pam_mysql.so //相对路径,如果此模块置于/lib64/security目录下,则可直接写文件名,当然,写全路径也没问题;
user=vsftpd
passwd=123456 //授权登陆mysql时的用户
host=localhost //本地主机
db=test //存放虚拟用户的数据库名
table=vstfpd
usercolumn=name
passwdcolumn=passwdcrypt=2 //密码加密方式代号
//0:不加密
//1:使用crypt(3)加密
//2:mysql函数加密password();
//3:md5加密
//4:SHA1加密
4.细节优化
创建系统用户作为映射:
# useradd -s /sbin/login -d /ftproot vuser
修改其权限,使其他用户有读、执行权限:
# chmod go+rx /ftproot
编辑配置文件/etc/vsftpd/vsftpd.conf:
添加: guest_enable=YES
guest_username=vuser
修改此项为:pam_service_name=vsftpd.mysql
确保这些为YES:
anonymous_enable=YES
local_enable=YES
write_enable=YES
保存退出,启动服务:
# systemctl start vsftpd.service
效果如下: