说明:
本文通过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增加安装性