实验记录:vsftp整合mysql-pam管理虚拟账号

为了提高系统的安全性,我们采用虚拟用户而非系统(匿名)用户的形式访问FTP。整体思路是通过开启vsftp中的虚拟账户功能并调用新的pam认证模块,然后再修改pam模块使得可以通过mysql验证用户的合法性。以下为实验过程。

第一步装包:

yum install -y vsftpd mysql-server mysql-devel pam-devel

yum groupinstall -y Development tools

tar -xf pam_mysql-0.7RC1.tar.gz -C /usr/src/

cd /usr/src/pam_mysql-0.7RC1

./configure

make && make install

第二步配置mysql

service mysqld start

mysql -p

create database ftpusers;

use ftpusers;

create table users( id int AUTO_INCREMENT NOT NULL,name char(20) NOT NULL UNIQUE KEY, passwd char(48) NOT NULL, primary key(id) );

insert into users(name,passwd)values('nick',password('redhat'));

grant select on ftpusers.* to virftp@localhost identified by 'vftpadm';

flush privileges;

第三步编辑vsftpd.conf,以下是我的配置:

anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
anon_upload_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
xferlog_std_format=YES
connect_from_port_20=YES
xferlog_std_format=YES
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
listen=YES
user_config_dir=/etc/vsftpd/user_config
local_root=/var/ftp/pub
guest_enable=YES
guest_username=virftp
pam_service_name=vftp
userlist_enable=YES
tcp_wrappers=YES
userlist_deny=YES

第四步编辑pam文件:vim /etc/pam.d/vftp

session optional pam_keyinit.so force revoke
auth sufficient /lib64/security/pam_mysql.so user=virftp passwd=vftpadm host=localhost db=ftpusers table=users usercolumn=name passwdcolumn=passwd crypt=2
auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth required pam_shells.so
auth include password-auth
account sufficient /lib64/security/pam_mysql.so user=virftp passwd=vftpadm host=localhost db=ftpusers table=users usercolumn=name passwdcolumn=passwd crypt=2
account include password-auth
session required pam_loginuid.so
session include password-auth

上面红色字体是验证虚拟账户用的,其余为默认vsftpd验证,local账户验证时用得到。

第五步:添加虚拟账户

useradd virftp -s /sbin/nologin -d /home/virftp virftp

chown virftp. -R /home/virftp/

第六步:创建虚拟账户配置文件

mkdir /etc/vsftpd/user_config

cd /etc/vsftpd/user_config

创建虚拟账户nick:

vim nick

local_root=/home/virftp/

这里只限制了其根目录,这里不定义的一律继承主配置文件的设定(/etc/vsftp/vsftpd.conf)

cp一个文件到此目录来验证试验

cp /etc/inittab /home/virftp

service vsftpd restart

最后登陆账户nick 密码redhat 查看结果

试验总结:开始我在pam文件中mysql验证没用sufficient而用了required,直接导致不能用local账户登录。

这里解释下两者的含义,sufficient代表一旦满足这条规则,则直接退出不往下匹配了,如果不满足,则往下继续匹配。

required说明如果不匹配则直接退出,如果匹配则继续往下匹配。

所以当我用required时,local账户不匹配直接退出。 

原文地址:https://www.cnblogs.com/nickqian/p/3860043.html