vsftpd安装配置
一、什么是FTP?
FTP (File Transfer Protocol) 件传输协议的缩写,在RFC 959中具体说明。
FTP会话时包含了两个通道,一个叫控制通道,一个叫数据通道。
控制通道:控制通道是和FTP服务器进行沟通的通道,连接FTP,发送FTP指令都是通过控制通道来完成的。
数据通道:数据通道是和FTP服务器进行文件传输或者列表的通道。
FTP协议中,控制连接均有客户端发起,而数据连接有两种工作方式:PORT方式和PASV方式。
PORT模式(主动方式)
FTP 客户端首先和FTP Server的TCP 21端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。 PORT命令包含了客户端用什么端口(一个大于1024的端口)接收数据。在传送数据的时候,服务器端通过自己的TCP 20端口发送数据。 FTP server必须和客户端建立一个新的连接用来传送数据。
PASV模式(被动方式)
在建立控制通道的时候和PORT模式类似,当客户端通过这个通道发送PASV 命令的时候,FTP server打开一个位于1024和5000之间的随机端口并且通知客户端在这个端口上传送数据的请求,然后FTP server 将通过这个端口进行数据的传送,这个时候FTP server不再需要建立一个新的和客户端之间的连接传送数据。
如果从C/S模型这个角度来说,PORT对于服务器来说是OUTBOUND,而PASV模式对于服务器是INBOUND,这一点请特别注意,尤其是在使用防火墙的企业里,这一点非常关键,如果设置错了,那么客户将无法连接。
二、什么是vsftpd ?
vsftpd意思为“very secure FTP daemon(非常安全的FTP进程)”,是一个基于GPL发布的类UNIX类操作系统上运行的服务器的名字(是一种守护进程),可以运行在诸如Linux、BSD、Solaris、HP-UX以及Irix等系统上面。vsftpd支持很多其他传统的FTP服务器不支持的良好特性。
三、安装方式(两种)
包安装:(rpm,简单)
yum install vsftpd
rpm -ql vsftpd(查看安装了什么文件)
编译安装:(make,需求个性化)
http://down1.chinaunix.net/distfiles/vsftpd-3.0.2.tar.gz
tar -zxf vsftpd-3.0.2.tar.gz
cd vsftpd-3.0.2
less INSTALL
make
make install
四、配置认证方式(三种)
匿名认证
echo “anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES” >/etc/vsftpd/vsftpd.conf
本地用户认证
echo “listen=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
anonymous_enable=NO
local_enable=YES” >/etc/vsftpd/vsftpd.conf
虚拟用户认证
1.配置认证模块
32位系统
echo “auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login”>/etc/pam.d/vsftpd.vu
64位系统
echo “auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login”>/etc/pam.d/vsftpd.vu
2.配置指向认证模块
pam_service_name=vsftpd.vu
3.生成虚拟用户库
db_load -T -t hash -f /etc/vsftpd/login.txt /etc/vsftpd/vsftpd_login.db
chmod 600 /etc/vsftpd/vsftpd_login.db
4.创建虚拟用户配置文件
echo “write_enable=YES
local_root=/home/vsftpd/dbzh3″>/etc/vsftpd/virtual_user
5.vsftpd.conf配置
echo “listen=YES
listen_port=21
write_enable=YES
local_umask=022
dirmessage_enable=YES
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
chroot_local_user=YES
guest_enable=YES
guest_username=vsftpd
virtual_use_local_privs=YES
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=30999
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
pam_service_name=vsftpd.vu
user_config_dir=/etc/vsftpd/
userlist_enable=YES
tcp_wrappers=YES
anonymous_enable=NO
local_enable=YES” >/etc/vsftpd/vsftpd.conf
五、配置主被动模式
1.主动
listen_port=21
connect_from_port_20=YES
2.被动
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=30999
六、权限限制
chroot_local_user=YES
tcp_wrappers=YES
七、配置文件注解
匿名ftp的以上控制分别为:
用户控制
anonymous_enable=YES 启用匿名用户
no_anon_password=YES 需要密码
anon_root=/var/ftp 匿名用户的主目录(默认为/var/ftp)
local_enable=NO 禁用本地用户
guest_enable=NO 禁用gust用户
ftp_username=ftp 匿名用户的用户名(默认还有anonymous可使用)
权限控制
write_enable=NO 匿名用户不可写
local_umask=022 上传文件的umask
file_open_mode=0666 上传文件的总权限,与umask共同决定了上传文件的实际权限
anon_upload_enable=NO 匿名用户不可以上传
anon_mkdir_write_enable=NO 匿名用户不可以建目录等写操作
anon_other_write_enable=NO 匿名用户不可以做其他的写操作
anon_world_readable_only=YES 匿名用户可以读文件
#chown_uploads=YES 修改上传的文件的属主
#chown_username=ftpadmin 修改上传的文件的属主为XXX
ascii_upload_enable=NO 不使用ascii上传文件
ascii_download_enable=NO 不使用ascii下载文件
userlist_enable=YES 启动用户限制功能
userlist_deny=YES userlist 文件中的用户禁止登录,NO的话则只有userlist中用户可以登录
userlist_file=/etc/vsftpd/denyuser 禁止登录用户列表文件名和位置(在denyuser文件中加入一行denyuser1)
chroot_list_enable=YES 启动用户目录限制功能
chroot_list_file=/etc/vsftpd/unchroot 此文件中的用户不能改变到其他外层目录中。(加入一行unchrootuser)
超时控制
idle_session_timeout=600 空闲超时600秒
data_connection_timeout=120 传输超时120秒
accept_timeout=60 pasv 模式等待时间60秒
connect_timeout=60 port 模式等待时间60秒
服务控制
xferlog_enable=YES 启动日志功能
xferlog_std_format=YES 使用标准日志格式
xferlog_file=/var/log/vsftpd.log 日志默认的位置
pasv_enable=YES 启用被动模式
#port_enable=YES 启用主动模式
tcp_wrappers=YES 启用tcp_wrappers功能
nopriv_user=nobody 最低权限用户
listen=YES 使用standalone 模式(推荐的)
显示信息
ftpd_banner=welcome to ftp. 登录时的欢迎信息
dirmessage_enable=YES 启动切换目录时提示目录信息的功能
message_file=.message 目录提示信息的内容文件
连接选项
max_clients=100 最大连接数
max_per_ip=5 每个ip最大连接数
connect_from_port_20=YES 启用20端口传输数据
#listen_address=192.168.0.2 限制只有指定此ip地址可以访问
listen_port=21 监听的端口号
ftp_data_port=20 数据传输端口号
pasv_max_port=0 被动模式的端口号的上限(0为不限)
pasv_min_port=0 被动模式的端口号的下限(0为不限)
数据传输速度
anon_max_rate=51200 匿名用户最大传输率
local_max_rate=5120000 本地用户最大传输率
八、FTP与iptables防火墙
1、加载模块:
modprobe ip_nat_ftp
modprobe ip_conntrack
modprobe ip_conntrack_ftp
2,加上一条规则:
server
iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
client
iptables -A OUTPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
允许连接保持的被动访问。
其实这样在重启iptables的时候所需的模块又不见了,通过不懈的努力终于找到了最终的解决方法,编辑/etc/sysconfig/iptables-config:
IPTABLES_MODULES=”ip_conntrack_ftp”
IPTABLES_MODULES=”ip_nat_ftp”
把需要加载的模块加入,无论重启系统还是iptables但ftp模块始终还是加载的。
搞定就这样哈哈哈,希望能在以后帮助大家来解决ftp上的问题。
浙公网安备 33010602011771号