pam_mysql认证ftp虚拟用户账号,且拥有不同的权限

测试环境:

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

tom可以上传文件

tom无法创建目录和删除文件

用jerry测试,可以上传,也能创建目录

也可以删除创建的目录

也可以删除文件


你可能感兴趣的:(pam_mysql认证ftp虚拟用户账号,且拥有不同的权限)