天天看点

基于虚拟用户的vsftp架设

一、安装vsftp

1.查看有无安装vsftp

rpm -qa | grep vsftpd

2.如果没有安装的话,则要先安装,我采用的是yum的方式安装

yum -y install vsftpd

3.创建vsftp的日志文件

touch /var/log/vsftpd.log

二、修改vsftp的配置文件

vi /etc/vsftpd/vsftpd.conf

请参照以下配置修改vsftpd.conf文件,没有的行请添加进去

anonymous_enable=NO     #设定不允许匿名用户访问

local_enable=YES        #设定本地用户可以访问

write_enable=YES        #设定本地用户有写入的权限

local_umask=022

dirmessage_enable=YES

xferlog_enable=YES

connect_from_port_20=YES

xferlog_file=/var/log/vsftpd.log       #设定vsftp的服务日志保存路径

xferlog_std_format=YES

ascii_upload_enable=YES        #设定支持ASCII模式上传

ascii_download_enable=YES      #设定支持ASCII模式下载

chroot_list_enable=YES      #设定用户登录后不能离开主目录

chroot_local_user=YES

chroot_list_file=/etc/vsftpd/chroot_list

listen=YES

pam_service_name=vsftpd      #PAM认证文件名,PAM根据/etc/pam.d/vsftpd进行认证

guest_enable=YES         #设定启用虚拟用户

guest_username=ftp       #指定虚拟用户的宿主用户

user_config_dir=/etc/vsftpd/vuser_conf       #设定虚拟用户个人服务文件存放路径

userlist_enable=YES

tcp_wrappers=YES

三、进行认证

1.创建chroot_list文件,并加入ftp用户

touch /etc/vsftpd/chroot_list

echo ftp >> /etc/vsftpd/chroot_list

2.安装Berkeley DB工具

yum install db4 db4-utils

3.创建用户密码文件

vi /etc/vsftpd/vuser_passwd.txt

添加以下行,注意前一行是用户名,后一行是密码

ftpuser1

ftppass1

ftpuser2

ftppass2

4.生成虚拟用户认证的db文件

db_load -T -t hash -f /etc/vsftpd/vuser_passwd.txt /etc/vsftpd/vuser_passwd.db

5.编辑认证文件/etc/pam.d/vsftpd

vi /etc/pam.d/vsftpd

将原来的语句全部注释掉,并增加以下两行

auth required pam_userdb.so db=/etc/vsftpd/vuser_passwd

account required pam_userdb.so db=/etc/vsftpd/vuser_passwd

6.创建虚拟用户个性ftp服务文件

mkdir /etc/vsftpd/vuser_conf

vi /etc/vsftpd/vuser_conf/ftpuser1

内容如下:

local_root=/opt/var/ftp    #虚拟用户的根目录(根据实际修改)

write_enable=YES

anon_umask=022

anon_world_readable_only=NO

anon_upload_enable=YES

anon_mkdir_write_enable=YES

anon_other_write_enable=YES

四、启动vsftp

mkdir /opt/var/ftp/ftpuser1

chmod 777 /opt/var/ftp/ftpuser1

service vsftpd start

五、错误分析

1. 553 Could not create file

一般都是SELinux的问题,设置SELinux的一个值,重启服务器即可

setsebool -P ftpd_disable_trans 1

service vsftpd restart

2. 500 OOPS:bad bool value in config file for: write_enable

注意你的服务文件中保证每一行最后没有任何空格,一般出错就是在多余的空格上。

六、iptables开放ftp端口

    因为ftp端口真的比较特殊,并不像80,22这些端口。它分为连接用的端口,还有当你上传下载文件的传输数据用的端口。所以开启了iptables防火墙的话,不仅需要开放20和21这两个端口,还需要开放一些端口用于数据传输,比如上传、下载文件都要用到这些端口。iptables很难对任意端口开放的,如果不指定一个端口范围,让iptables允许任意端口访问,那和不设置防火墙没什么区别,那么我们的解决办法就是指定这个数据传输端口一个范围。

1.查看iptables的设置,确认INPUT、FORWARD、OUTPUT的设置状态是DROP还是ACCEPT

iptables -L -n

2.开放20和21端口

iptables -A INPUT -p tcp --dport 21 -j ACCEPT     (如果INPUT是DROP的话)

iptables -A INPUT -p tcp --dport 20 -j ACCEPT     (如果INPUT是DROP的话)

iptables -A OUTPUT -p tcp --sport 21 -j ACCEPT    (如果OUTPUT是DROP的话)

iptables -A OUTPUT -p tcp --sport 20 -j ACCEPT    (如果OUTPUT是DROP的话)

3.修改vsftpd的配置文件

添加下面两行

pasv_min_port=30001

pasv_max_port=30100

这两句话的意思是告诉vsftpd, 要传输数据的端口范围就在30001到30100 这个范围内传送。注意这个范围不能设置得太大,也不能设置的太小,只要足够数据传输用就行了。

4.开放30001-30100这些端口

iptables -A INPUT -p tcp --dport 30001:30100 -j ACCEPT     (如果INPUT是DROP的话)

iptables -A OUTPUT -p tcp --sport 30001:30100 -j ACCEPT    (如果OUTPUT是DROP的话)

5.将规则写入/etc/sysconfig/iptables文件里

/etc/rc.d/init.d/iptables save

现在可以用个账号登录测试一下,看上传、下载是否正常。