mysql认证vsftpd虚拟用户

说明:
本文通过mysql认证虚拟用户,实现vsftpd内部文件共享。
匿名用户,依托于ftp,对于/www/download可浏览,可下载,不可上传,不可删除,可通过ftp://dl.greatwall.com使用
虚拟用户admin,依托于本地用户vsftpd,对于/www/download可浏览,可上传,可下载,可删除。虚拟用户采用mysql认证。

实现:
1.yum安装vsftpd

yum install -y vsftpd

 
2.添加共享文件,及新建用户vsftpd。

# mkdir /www/download
# /usr/sbin/useradd -d /www/download -s /sbin/nologin -M vsftpd
# chown -R vsftpd.vsftpd /www/download
# chmod 755 /www/download

系统本身已经有个ftp账号,供ftp匿名用户使用。虚拟用户admin,依托于本地用户vsftpd。必须新建设个vsftpd。如果虚拟用户,匿名用户都依托于某一账号,如ftp。当需要ftp到相同文件夹(/www/download时),如果设置/www/download为ftp:ftp,755,使用匿名登陆ftp://dl.greatwall.com会提示无法登陆,vsftpd refusing to run with writable anonymous root。匿名用户无法登陆;如果设置/www/download为root:root,555,则虚拟用户admin无法上传,删除文件。
因此这里,想了个折衷方案,设置/www/download为vsftpd:vsftpd,755,让虚拟用户admin依托系统用户vsftpd,这样虚拟用户admin对/www/download就有写权限,而匿名用户也可以浏览下载。

3.安装及设备vsftpd的pam认证文件

# yum install -y pam-devel
# cd /usr/local/src
# wget http://heanet.dl.sourceforge.net/sourceforge/pam-mysql/pam_mysql-0.7RC1.tar.gz
# tar zxvf pam_mysql-0.7RC1.tar.gz
# cd pam_mysql-0.7RC1
# ./configure --with-mysql=/usr/local/mysql
# make &&make install

# vim /etc/pam.d/vsftpd  //设置vsftpd的pam验证文件,将原来的注释,添加以下行
auth required /lib/security/pam_mysql.so user=vsftpd passwd=123456 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=passwd crypt=0
account required /lib/security/pam_mysql.so user=vsftpd passwd=123456 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=passwd crypt=0

上面涉及到的参数,只要对应前面数据库的设置就可以明白它们的含义。这里需要说明的是crypt参数。crypt表示口令字段中口令的加密方式:crypt=0,口令以明文方式(不加密)保存在数据库中;crypt=1,口令使用UNIX系统的DES加密方式加密后保存在数据库中;crypt=2,口令经过MySQL的password()函数加密后保存。

4.建立vsftpd的pam认证数据库vsftpd,表users,字段name和passwd用于保存虚拟用户的用户名和口令,同时增加两个虚拟用户benet和admin

# /usr/local/mysql/bin/mysql -uroot -p
> create database vsftpd;
> use vsftpd;
> create table users(name char(16) binary,passwd char(16) binary);
> insert into users (name,passwd) values ('benet','123456');
> insert into users (name,passwd) values ('admin','123456');
> grant select on vsftpd.users to vsftpd@localhost identified by '123456';  //授权vsftpd读vsftpd数据库的users表
> quit
# /usr/local/mysql/bin/mysql -uvsftpd -p  //验证刚才的操作是否成功
> show databases;
> use vsftpd;
> select * from users;

 
5.修改vsftpd.conf的主配置文件,确认有以下内容

# vim /etc/vsftd/vsftpd.conf
anonymous_enable=YES
local_enable=YES
write_enable=YES  //允许命令执行(不确定,忘了)
chroot_local_user=YES  //限定虚拟用户无法切出/www/download目录
guest_enable=YES  //开启虚拟用户
guest_username=vsftpd  //设置虚拟用户依托在vsftpd
pam_service_name=vsftpd
user_config_dir=/etc/vsftpd/user_conf  //针对虚拟用户,添加独立的配置文件
userlist_enable=YES  //userlist是用于限制用户接入的,还未完成
#userlist_deny=NO

pasv_enable=YES  //允许被动ftp,端口号为30000-30999
pasv_min_port=30000
pasv_max_port=30999

 

6.添加虚拟用户的独立配置文件

# mkdir /etc/vsftpd/user_conf
# cd /etc/vsftpd/user_conf
# vim admin,添加以下内容
virtual_use_local_privs=NO  //virtual_use_local_privs参数为YES时,虚拟用户使用与本地用户相同的权限。为NO,虚拟用户使用与匿名用户相同的权限
local_root=/www/download
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_world_readable_only=YES
anon_other_write_enable=YES
anon_umask=022

 
7.主动、被动ftp防火墙设置
主动、被动ftp(INPUT默认DROP,OUTPUT默认ACCEPT)

# iptables -A INPUT -p tcp  -m multiport --dport 20,21  -m state --state NEW -j ACCEPT
# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
# iptables -A INPUT -p tcp --dport 30000:30999 -j ACCEPT

 
防火墙设置,主动、被动ftp(INPUT,OUTPUT默认DROP)

# iptables -A INPUT -p tcp --dport 21  -m state --state NEW -j ACCEPT
# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# iptables -A INPUT -p tcp --dport 30000:30999 -m state --state NEW -j ACCEPT
# iptables -A OUTPUT -p tcp --sport 20  -m state --state NEW -j ACCEPT
# iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

 
附录:
考虑添加ssl增加安装性

发表评论

邮箱地址不会被公开。 必填项已用*标注