一 vsftpd搭建步骤
1、首先安装vsftpd,并设置开机启动
yum -y install vsftpd
chkconfig vsftpd on
2、基于虚拟用户配置,(所谓虚拟用户就是没有使用真实的帐户,只是通过映射到真实帐户和设置权限的目的。虚拟用户不能登录CentOS系统)
2.1 配置参数
[root@ftp vuser_conf]# sed -n '/^[^#]/P' /etc/vsftpd/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/xferlog
xferlog_std_format=YES
idle_session_timeout=600
data_connection_timeout=120
ascii_upload_enable=YES
ascii_download_enable=YES
chroot_list_enable=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
guest_enable=YEs
guest_username=ftp
user_config_dir=/etc/vsftpd/vuser_conf
pasv_enable=YES
pasv_min_port=40000
pasv_max_port=40080
pasv_promiscuous=YES
accept_timeout=60
connect_timeout=60
2.2 参数解释
[root@ftp /]# sed -n '/^[^#]/P' /etc/vsftpd/vsftpd.conf
#设定不允许匿名访问
anonymous_enable=NO
#设定本地用户可以访问。注:如使用虚拟宿主用户,在该项目设定为NO的情况下所有虚拟用户将无法访问
local_enable=YES
#允许用户上传数据(包括文档与目录)
write_enable=YES
#建立新目录(775)与档案(644)的权限
local_umask=022
#若目录下有.message则显示该文档内容
dirmessage_enable=YES
#启动登录文件记录,记录于 /var/log/xferlog
xferlog_enable=YES
#支持主动式联机功能
connect_from_port_20=YES
#如果上一个xferlog_enable=YES的话,这里可以设定了!这个是登录档案的档名。
xferlog_file=/var/log/xferlog
#是否设定为 wu ftp 相同的登录档格式?预设为 NO ,因为登录档会比较容易读! 不过,如果你有使用 wu ftp 登录文件的分析软件,这里才需要设定为 YES
xferlog_std_format=YES
#若匿名者发呆超过 10 分钟就断线
idle_session_timeout=600
#如果服务器与客户端的数据联机已经成功建立 (不论主动还是被动联机),但是可能由于线路问题导致 120 秒内还是无法顺利的完成数据的传送,那客户端的联机就会被我们的 vsftpd 强制剔除!
data_connection_timeout=120
#如果设定为 YES ,那么 client 就优先 (预设) 使用 ASCII 格式上传文件。
ascii_upload_enable=YES
#如果设定为 YES ,那么 client 就优先 (预设) 使用 ASCII 格式下载文件。
ascii_download_enable=YES
#是否启用 chroot 写入列表的功能?与底下的 chroot_list_flie 有关!这个项目得要开启,否则底下的列表档案会无效。
chroot_list_enable=YES
#若设定为 YES 表示 vsftpd 是以 standalone 的方式来启动的!预设是 NO !所以我们的 CentOS 将它改为 YES !这样才能使用 stand alone 的方式来唤醒。
listen=YES
#这个是 pam 模块的名称,我们放置在 /etc/pam.d/vsftpd 即是这个。
pam_service_name=vsftpd
#支持 /etc/vsftpd/user_list 档案内的账号登入管控!
userlist_enable=YES
#支持 TCP Wrappers 的防火墙机制
tcp_wrappers=YES
#若这个值设定为 YES 时,那么任何实体账号,均会被假设成为 guest (所以预设是不开放的)! 至于访客在 vsftpd 当中,预设会取得 ftp 这个使用者的相关权限。但可以透过 guest_username 来修改。
guest_enable=YES
#指定虚拟用户的宿主用户,CentOS中已经有内置的ftp用户了
guest_username=ftp
# FTP服务文件(配置文件名=虚拟用户名)
user_config_dir=/etc/vsftpd/vuser_conf
#支持数据流的被动式联机模式(passive mode),一定要设定为 YES
pasv_enable=YES
#在防火墙配置内开启40000到40080端口(没有测试过)
-A INPUT -m state --state NEW -m tcp -p -dport 40000:40080 -j ACCEPT
pasv_min_port=40000
pasv_max_port=40080
#是否屏蔽对pasv进行安全检查,(当有安全隧道时可禁用)
pasv_promiscuous=YES
#当用户以被动式 PASV 来进行数据传输时,如果服务器启用 passive port 并等待 client 超过 60 秒而无回应, 那么就给他强制断线!这个设定值与 connect_timeout
accept_timeout=60
#单位是秒,在数据连接的主动式联机模式下,我们发出的连接讯号在 60 秒内得不到客户端的响应,则不等待并强制断线
connect_timeout=60
2.3 FTP协议有两种工作方式:PORT方式和PASV方式,中文意思为主动式和被动式。
一、PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。
当需要传送数据时,客户端在命令链路上用 PORT命令告诉服务器:“我打开了****端口,你过来连接我”。于是服务器从20端口向客户端的****端口发送连接请求,建立一条数据链路来传送数据。
二、PASV(被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。
当需要传送数据时,服务器在命令链路上用 PASV命令告诉客户端:“我打开了****端口,你过来连接我”。于是客户端向服务器的****端口发送连接请求,建立一条数据链路来传送数据。
从上面可以看出,两种方式的命令链路连接方法是一样的,而数据链路的建立方法就完全不同。而FTP的复杂性就在于此。
3 进行认证
安装Berkeley DB工具,很多人找不到db_load的问题就是没有安装这个包
yum install db4 db4-utils
创建用户密码文本,注意奇行是用户名,偶行是密码
[root@ftp /]# cat /etc/vsftpd/vuser_passwd.txt
lixiang
8qu.com.cn
shuaicong
8qu.com.cn
gaojingyuan
8qu.com.cn
生成虚拟用户认证的db文件
db_load -T -t hash -f /etc/vsftpd/vuser_passwd.txt /etc/vsftpd/vuser_passwd.db
注:(每添加一用户和秘密就得生成一次)
编辑认证文件,全部注释掉原来语句,再增加以下两句
[root@ftp /]# cat /etc/pam.d/vsftpd
#%PAM-1.0
#session optional pam_keyinit.so force revoke
#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 include password-auth
#session required pam_loginuid.so
#session include password-auth
auth required pam_userdb.so db=/etc/vsftpd/vuser_passwd
account required pam_userdb.so db=/etc/vsftpd/vuser_passwd
创建虚拟用户配置文件
mkdir /etc/vsftpd/vuser_conf/ -p
[root@ftp /]# cd /etc/vsftpd/vuser_conf/
文件名等于vuser_passwd.txt里面的账户名,否则下面设置无效
[root@ftp /]# cat /etc/vsftpd/vuser_passwd.txt
lixiang
8qu.com.cn
shuaicong
8qu.com.cn
gaojingyuan
8qu.com.cn
[root@ftp /]# cd /etc/vsftpd/vuser_conf/
[root@ftp vuser_conf]# ll
total 12
-rw-r--r-- 1 root root 159 Apr 1 17:57 gaojingyuan
-rw-r--r-- 1 root root 161 Apr 1 16:27 lixiang
-rw-r--r-- 1 root root 161 Apr 1 17:00 shuaicong
虚拟用户根目录,根据实际情况修改
#指定虚拟用户的具体主路径。
local_root=/data/ftp
#设定可以进行写操作
write_enable=YES
# umask = 022 时,新建的目录 权限是755,文件的权限是 644 umask = 077 时,新建的目录 权限是700,文件的权限时 600。这里应该是anonymous用户创建的文件权限。
anon_umask=022
#仅允许 anonymous 具有下载可读档案的权限
anon_world_readable_only=NO
#是否让 anonymous 具有上传数据的功能,默认是 NO,如果要设定为 YES ,则 anon_other_write_enable=YES 必须设定
anon_upload_enable=YES
#是否让 anonymous 具有建立目录的权限?默认值是 NO!如果要设定为 YES, 那么 anony_other_write_enable 必须设定为 YES !
anon_mkdir_write_enable=YES
#是否允许 anonymous 具有除了写入之外的权限?包括删除与改写服务器上的档案及档名等权限。预设当然是 NO!如果要设定为 YES,
anon_other_write_enable=YES
4 设置FTP根目录权限
最新的vsftpd要求对主目录不能有写的权限所以ftp为755,主目录下面的子目录再设置777权限
mkdir /data/ftp
chmod -R 755 /data
chmod -R 777 /data/ftp
[root@ftp data]# ls -ld /data/
drwxr-xr-x 3 root root 4096 Apr 1 16:25 /data/
[root@ftp data]# ll
total 4
drwxrwxrwx 2 root root 4096 Apr 1 17:21 ftp
建立限制用户访问目录的空文件(不需要也得创建)
touch /etc/vsftpd/chroot_list
如果启用vsftpd日志需手动建立日志文件
touch /var/log/xferlog
touch /var/log/vsftpd.log
重启iptabls和vsftpd
service iptables restart
service vsftpd restart
5 Selinux和防火墙
该关闭的关闭,该放行的放行
1
2
3
4
5 #关闭selinux/iptables
sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config
setenforce 0
chkconfig iptables off
service iptables stop
常见问题
如果登录时出现
500 OOPS: priv_sock_get_result. Connection closed by remote host.
这样的错误,需要升级pam
yum update pam
6日志分析
vsftpd的两个日志文件分析如下:
/var/log/xferlog
记录内容举例
/var/log/vsftpd.log
Sat Apr 1 16:34:14 2017 1 10.13.98.101 55 /vsftpd(1).txt b _ i g lixiang ftp 0 * c
/var/log/xferlog日志文件中数据的分析和参数说明
记录数据 参数名称 参数说明
Thu Sep 6 09:07:48 2007 当前时间 当前服务器本地时间,格式为:
DDD MMM dd hh:mm:ss YYY
7 传输时间 传送文件所用时间,单位为秒
192.168.57.1 远程主机名称/IP 远程主机名称/IP
4323279 文件大小 传送文件的大小,单位为byte
/home/student/phpMyadmin-
2.11.0-all-languages.tar.gz 文件名 传输文件名,包括路径
b 传输类型 传输方式的类型,包括两种:
a以ASCII传输 b以二进制文件传输
– 特殊处理标志 特殊处理的标志位,可能的值包括:
_ 不做任何特殊处理
C 文件是压缩格式
U 文件是非压缩格式
T 文件是tar格式
i 传输方向 文件传输方向,包括两种:
o 从FTP服务器向客户端传输
i 从客户端向FTP服务器传输
r 访问模式 用户访问模式,包括:
a 匿名用户
g 来宾用户
r 真实用户,即系统中的用户
student 用户名 用户名称
ftp 服务名 所使用的服务名称,一般为FTP
0 认证方式 认证方式,包括:
0 无
1 RFC931认证
* 认证用户id 认证用户的id,如果使用*,则表示无法获得该id
c 完成状态 传输的状态:
c 表示传输已完成
i 表示传输示完成
2021-12-19 00:57:32
34KB
vsftpd
1