实验环境:CentOS6.0
命令通道端口:21
数据通道端口:20
# yum install vsftpd -y
# vim /etc/vsftpd/vsftpd.conf (详解)
**********************************************************************************************
connect_from_port_20=YES #主动式连接使用的数据通道
listen_port=21 #命令通道端口
dirmessage_enable=YES #显示该目录需要注意的内容
message_file=.message #显示信息所在的文件
listen=YES #vsftpd以stand alone的方式启动(值为NO时,采用super daemon方式启动)
pasv_enable=YES #支持数据流的被动式连接模式
use_localtime=YES #使用本地时间(默认使用GTM时间)
write_enable=YES #允许用户上传时所必须的条件
connect_timeout=60 #数据连接的主动模式下,60秒内客户端无响应则断开
accept_timeout=60 #被动模式下的数据连接端口在60秒内无响应时断开
data_connection_timeout=300 #300秒内无法完成数据传输,则断开连接
idle_session_timeout=300 #300秒内无命令输入则强行脱机
max_clients=0 #不限制客户端数量
max_per_ip=0 #不限制每个IP的连接数
pasv_min_port=0 #不限制被动模式下随机使用的最小端口
pasv_max_port=0 #不限制被动模式下随机使用的最大端口
ftpd_banner="XXXXX" #客户端连接服务器时显示的欢迎信息
#banner_file=/path/bannerfile #可以取代上面的选项,用文件内容显示欢迎信息
guest_enable=YES #任何实体帐号都被设置成guest,默认用户名为guest_username
guest_username=ftp #guest的名字是ftp
local_enable=YES #/etc/passwd内的帐号才能以实体用户的方式登录
local_max_rate=0 #不限制本地账户的传输速率(bytes/s)
chroot_local_user=YES #用户默认被chroot
chroot_list_enable=YES #是否启用chroot写入列表的功能
chroot_list_file=/etc/vsftpd/chroot_list#不被chroot的用户列表(需要chroot_list_enable=YES)
userlist_enable=YES #vsftpd的阻挡机制
userlist_deny=YES #拒绝user_list内用户登录ftp服务器
userlist_file=/etc/vsftpd/user_file #指定被拒绝用户的文件列表
anonymous_enable=YES #允许匿名用户登录
anon_world_readable_only=YES #允许匿名用户下载可读取
anon_other_write_enable=YES #允许匿名用户对服务器上的文件增、删、改
anon_mkdir_write_enable=YES #允许匿名用户创建目录
anon_upload_enable=YES #允许匿名用户上传文件
deny_email_enable=YES #拒绝密码是指定email的用户登录(有时候匿名用户需要输入email地址作为密码)
banned_email_file=/etc/vsftpd/banned_emails#指定拒绝的email地址
no_anon_password=YES #忽略对匿名用户密码的检测
anon_max_rate=0 #不限制匿名用户的传输速率
anon_umask=077 #匿名用户传上来的权限为-rw------
ascii_download_enable=YES #客户端优先使用ascii格式下载文件
ascii_upload_enable=YES #客户端优先使用ascii格式上传文件
#one_process_model=YES #每个连接都采用一个process处理(危险)
tcp_wrappers=YES #采用tcp_wrappers进行控制访问
xferlog_enable=YES #用户操作的记录日志
xferlog_file=/var/log/xferlog #日志文件的文件名
#xferlog_std_format=YES #与wu-ftp相同的日志文件格式(使用wu-ftp日志分析软件时才用)
dual_log_enable=YES #具有vsftpd独特的日志文件
vsftpd_log_file=/var/log/vsftpd.log
nopriv_user=nobody #vsftpd默认以nobody作为服务的执行者
pam_service_name=vsftpd #vsftpd服务中PAM验证模块的名称
#######仅允许user_file内的用户访问ftp服务器############
#userlist_enable=YES
#userlist_deny=NO
#userlist_file=/etc/vsftpd/user_file
#######################################################
######使匿名用户上传后文件默认的user是daemon,且上传后无法下载和修改########
#删除anon_other_write_enable=YES
#添加:
# write_enable=YES
# anon_mkdir_write_enable=YES
# anon_upload_enable=YES
# chown_uploads=YES
# chown_username=daemon
#######################################################
############针对SSL所加入的特别参数##############
#ssl_enable=YES #启动SSL的支持
#allow_anon_ssl=NO #不允许匿名用户使用SSL
#force_local_data_ssl=YES #强制实体用户数据传输加密
#force_local_logins_ssl=YES #强制实体用户帐号密码传输也加密
#ssl_tlsv1=YES #支持TLS方式
#ssl_tlsv2=NO
#ssl_tlsv3=NO
#rsa_cert_file=/etc/vsftpd/vsftpd.pem #默认RSA加密的证书所在的文件(在/etc/pki/tls/certs内创建后copy到指定目录)
####################################################
*********************************************************************************************
# cd /etc/pki/tls/certs
# make vsftpd.pem(根据提示建立证书)
# cp -a vsftpd.pem /etc/vsftpd/
对于FTP的主动式连接、FTP服务器主动向客户端传输数据,NAT防火墙问题的解决:
#vim /etc/sysconfig/iptables-config
************************************************************************
添加:
IPTABLES_MODULES="ip_conntrack_ftp ip_nat_ftp"
************************************************************************
#/etc/init.d/iptables restart
#iptables -A INPUT -p TCP -i $EXTIF --dport 21 --sport 1024:65534 -j ACCEPT
#iptables -A INPUT -p TCP -i $EXTIF --dport 65400:65410 --sport 1024:65534 -j ACCEPT (dport的范围依据ftp配置文件中pasv的值而定)
注:
1.数据通道只有在传输数据时才建立,并非一连接到FTP服务器就建立;FTP并不安全,原因是FTP使用明文传输数据;
2.FTP的被动式连接,即客户端通过命令通道向服务器发送PASV的被动式连接请求,FTP服务器响应后,随机选取一定范围内的端口后通过命令通道告知客户端已经监听的端口,客户端随机开启一个大于1024的端口连接FTP服务器进行数据传输;
3.被写入/etc/vsftpd/ftpusers内的账户一律不允许登录FTP服务器;而user_list内的账户是否被拒绝还需要配置文件内的userlist_deny的值来决定;
4.当vsFTP服务使用super daemon启动时,/etc/xinetd.d/vsftpd文件需要自己手动建立,且vsftpd.conf内,listen=NO才行;
5.SELinux默认情况下不允许实体帐号登录并取得用户主目录的数据,修改即可:#setsebool -P ftp_home_dir=1
6.chroot_list_file的文件内,写入的内容是不被chroot限制的用户,而不是被chroot的用户,默认情况下,所有的帐号都会被chroot;
7.匿名用户取得的用户名是ftp,注意对匿名用户使用权限的问题;
8.为了让匿名用户访问方便和具有upload权限,须放行SELinux匿名用户的限制规则:
#setsebool -P allow_ftpd_anon_write=1
#setsebool -P allow_ftpd_full_access=1