测试环境:
1、创建两台centos7服务器,一台作为ftp和mariadb的服务端,另一台做测试端
2、服务端IP192.168.10.20:提供vsftpd程序包,mariadb-server程序包,pam_mysql(需要自行编译,centos7yum仓库不提供) mariadb-devel pam-devel 以及开发环境(gcc)
3、测试端IP192.168.10.30:lftp程序包
关闭服务端和测试端的防火墙和SELinux
# systemctl stop firewalld
# setenforce 0
(1)服务器端安装和配置
安装vsftpd
# yum -y install vsftpd
安装mariadb-server
# yum -y install mariadb-server
安装开发环境
# yum groupinstall "Development Tools" "Server Platform Development" -y
安装开发包
# yum -y install mariadb-devel pam-devel
安装pam_mysql,由于centos7仓库没有,需自行下载编译;
下载源码包pam_mysql-0.7RC1.tar
# ./configure --with-pam=/usr --with-mysql=/usr --with-pam-mods-dir=/usr/lib64/security
# make && make install
生成以下模块说明安装成功
初始化配置mariadb
# vim /etc/my.cnf.d/server.cnf
启动mariadb服务
# systemctl start mariadb
对Mysql进行安全加固
# mysql_secure_installation
连入Mysql
# mysql
创建授权用户、创建账号和密码
MariaDB [(none)]> GRANT ALL ON vsftpd.* TO vsftpd@'127.0.0.1' IDENTIFIED BY 'vsftpd';
刷新授权表
MariaDB [(none)]> FLUSH PRIVILEGES;
用vsftpd账号重新连接数据库并创建新的数据库和表以及对应字段
MariaDB [(none)]> exit
# mysql -uvsftpd -pvsftpd -h127.0.0.1
MariaDB [(none)]> CREATE DATABASE vsftpd;
MariaDB [(none)]> use vsftpd;
MariaDB [vsftpd]> CREATE TABLE users(id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100) NOT NULL, password CHAR(48) NOT NULL,UNIQUE KEY(name));
MariaDB [vsftpd]> DESC users;
插入用户tom和jeryy,密码同名
MariaDB [vsftpd]> INSERT INTO users(name,password) VALUES ('tom',PASSWORD('magedu')),('jerry',PASSWORD('jerry'));
MariaDB [vsftpd]> SELECT * FROM users;
创建ftp本地用户vuser,家目录为/ftproot/vuser,以它来当作虚拟用户映射到本地
# mkdir /ftproot/
# useradd -d /ftproot/vuser vuser
# mkdir /ftproot/vuser/pub 创建pub目录,ftp约定俗成的一个目录
# tail /etc/passwd
创建pam配置文件/etc/pam.d/vsftpd.vusers,内容为用mysql来做ftp的pam验证
# vim /etc/pam.d/vsftpd.vusers
auth required /usr/lib64/security/pam_mysql.so user=vsftpd passwd=vsftpd host=127.0.0.1 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required /usr/lib64/security/pam_mysql.so user=vsftpd passwd=vsftpd host=127.0.0.1 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
修改vsftpd的配置文件内容
# vim /etc/vsftpd/vsftpd.conf
pam_service_name=vsftpd.vusers pam验证的文件为此前创建的/etc/pam.d/vsftpd.vusers
guest_enable=YES 允许来宾访问
guest_username=vuser 来宾映射的本地用户为vuser
anonymous_enable=NO 禁止匿名用户登陆
使用测试端登陆ftp验证
提示刚才创建的用户vuser不能对自己的家目录拥有写权限
修改目录权限
# chmod a-w /ftproot/vuser/
# ls -ld /ftproot/vuser/
重启vsftpd服务,再次测试
# systemctl restart vsftpd
提示登陆成功,但是没发打开目录,原因是刚才的目录pub是以root身份创建的
再次创建一个目录/ftproot/vuser/upload,修改属主属组为vuser
# mkdir /ftproot/vuser/upload
# chown vuser.vuser upload/
再次测试
仍然无法拥有写权限,原因:虚拟用户没有共享vsftpd的权限
定义虚拟用户权限
# vim /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/vusers_config/
创建/etc/vsftpd/vusers_config/目录并添加内容,允许tom上传文件,允许jerry创建目录,上传文件,删除目录文件等操作
# mkdir /etc/vsftpd/vusers_config/
# vim /etc/vsftpd/vusers_config/tom 每个虚拟用户都需要创建对应其name的文件
anon_upload_enable=YES 允许上传
# cd /etc/vsftpd/vusers_config/
# cp tom jerry
# vim jerry
anon_upload_enable=YES
anon_mkdir_write_enable=YES 允许创建目录
anon_other_write_enable=YES 允许其他写操作
重启vsftpd服务,再次测试
# systemctl restart vsftpd