想在CentOS服务器上搭建一个安全、高性能、稳定性好的FTP服务器,vsftpd是我的首选应用。vsftpd意思为“very secure FTP daemon(非常安全的FTP进程)”,是一个基于GPL发布的类UNIX类操作系统上运行的服务器的名字(是一种守护进程),可以运行在诸如Linux、BSD、Solaris、HP-UX以及Irix等系统上面。vsftpd支持很多其他传统的FTP服务器不支持的良好特性。
最新的vsftpd版本可在其官网获取:vsftpd.beasts.org(可能需要翻牆)

安装VSFtpd

不管安裝什麽版本,確保系統里沒有安裝vsftpd,否則可能會很麻煩。
yum
安裝:yum install vsftpd
卸載:yum -y remove usftpd

还需要安装一些其他程序:
yum install pam*
yum install db4*

編譯安裝
# cd /usr/local/src
# wget https://security.appspot.com/downloads/vsftpd-3.0.0.tar.gz
# tar -zxvf vsftpd-3.0.0.tar.gz
# cd vsftpd-3.0.0
...

配置VSftpd

文件地址描述
/etc/vsftpd/vsftpd.conf主配置文件
/usr/sbin/vsftpdVsftpd的主程序
/etc/rc.d/init.d/vsftpd启动脚本
/etc/pam.d/vsftpdPAM认证文件(此文件中file=/etc/vsftpd/ftpusers字段,指明阻止访问的用户来自/etc/vsftpd/ftpusers文件中的用户)
/etc/vsftpd/ftpusers禁止使用vsftpd的用户列表文件。记录不允许访问FTP服务器的用户名单,管理员可以把一些对系统安全有威胁的用户账号记录在此文件中,以免用户从FTP登录后获得大于上传下载操作的权利,而对系统造成损坏。(注意:linux-4中此文件在/etc/目录下)
/etc/vsftpd/user_list禁止或允许使用vsftpd的用户列表文件。这个文件中指定的用户缺省情况(即在/etc/vsftpd/vsftpd.conf中设置userlist_deny=YES)下也不能访问FTP服务器,在设置了userlist_deny=NO时,仅允许user_list中指定的用户访问FTP服务器。(注意:linux-4中此文件在/etc/目录下)
/var/ftp匿名用户主目录;本地用户主目录为:/home/用户主目录,即登录后进入自己家目录
/var/ftp/pub匿名用户的下载目录,此目录需赋权根chmod 1777 pub(1为特殊权限,使上载后无法删除)
/etc/logrotate.d/vsftpd.logVsftpd的日志文件

VSFtp服务有standalone模式与xined模式,前者随时待命,速度快,即时不工作也常駐系统。后者接到连接请求才響應,适用于FTP使用频率不高的情况。

standalone模式
# vi /etc/vsftpd/vsftpd.conf

VSFtp工作在 standalone 模式下
listen=YES
listen_address=监听ip
listen_ipv6=YES
listen_address6=监听ip
listen_port=端口号

主動模式(Port模式)
port_enable=YES #启用port模式
connect_from_port_20=YES #port模式下默认使用固定的20端口
ftp_data_port=port_number #指定port模式的端口号
port_promiscuous=YES #使用安全的port模式

被動模式(Passive模式)
pasv_enable=YES #啟用Passive模式
pasv_min_port=3000 #被動模式最小端口
pasv_max_port=4000 #被動模式最大端口
pasv_promiscuous=YES #使用安全的Passive模式
pasv_address=ip_address #指定pasv打开端口的ip地址,一般不設置

vi /etc/sysconfig/iptables #需要在ip規則里添加端口
-A OUTPUT -p tcp --sport 3000:4000 -j ACCEPT
-A INPUT -p tcp --dport 3000:4000 -j ACCEPT
service iptables restart #重啟IP規則

連接控制
max_clients=数字 #幷發鏈接控制,0表示無限制
max_per_ip=数字 #幷發鏈接控制,0表示無限制
accept_timeout=数字 #以pasv数据连接模式的时候,数据连接的超时;
connect_timeout=数字 #以port模式连接数据连接时的超时时间
data_connection_timeout=数字 #数据连接后数据连接等待的空闲时间超时
idle_session_timeout=数字 #发呆时间,也就是客户端隔多长时间不与服务器有交互ftp命令,将自动断开ftp服务连接

使用PAM认证
pam_service_name=vsftpd
#需要設置 /etc/vsftpd/vsftpd-pam.conf,方法和vsftpd.conf一樣 

local_enable=yes #允许本地用户登录到服务器
write_enable=YES #允许全局可写
download_enable=YES #允许全局下載
dirlist_enable=YES #允许全局瀏覽目錄

匿名用戶設置
anonymous_enable=NO #允许匿名用户登陆服务器
anon_upload_enable=NO #是否允許匿名帳戶上傳
anon_mkdir_write_enable=NO #是否允許匿名用戶新建目錄和寫操作
anon_other_write_enable=yes/no #是否允许匿名用户可以使用除了建立文件夹和上传文件以外其他的ftp写操作命令.例如:delete、rename等等
anon_world_readable_only=YES #允许匿名用户下载所有用户都可以访问的文件

欢迎语字符串
ftpd_banner=Welcome to QQWorld FTP
banner_file=/home/qqworld/welcome

啟用目錄信息
dirmessage_enable=NO
message_file=/home/qqworld/welcome

用戶目錄設置
local_root=/path #本地用户登陆服务器后直接进入的目录
local_umask=022 #本地用户上传档案权限的umask值
local_max_rate=20000 #本地用户传输速率单位为bps
chmod_enable=YES #是否允许本地用户改变ftp服务器上档案的权限
user_config_dir=/etc/vsftpd/vsftpd_user_config #設置用戶設置目錄
舉例:
新建一个普通用户qqworld,再新建一个目录/etc/vsftpd/vsftpd_user_config,其下建一个文件qqworld,里面加入下面几行:
local_root=/home/qqworld
local_umask=022
local_max_rate=50000
chown qqworld:qqworld /home/qqworld #把/var/www/html的所有者改为qqworld
使用qqworld用户登录后就直接进入var/www/qqworld了,上传的文件(夹)权限为644(755),传输速率为50k,自定义的设置覆盖了主配置文件中的设置。

用戶權限設置
userlist_enable=YES #启用userlist功能模块,默認是/etc/vsftpd/ftpusers
userlist_deny=YES #拒绝userlist文件中用户登陆ftp服务,默認是/etc/vsftpd/user_list
userlist_file=/path/to/file #指定的userlist文件名
chroot_list_enable=YES #是否启用chroot_list文件
chroot_local_user=YES #是否限制本地用户的根目录为自己的主目录
chroot_list_file=/etc/vsftpd/chroot_list #设置 chrootlist 文件名
舉例:
我们新建一个用户qqworld,再新建一个文件/etc/vsftpd/chroot_list,其中加入qqworld.然后在配置文件中添加以下几行:
chroot_list_enable=YES
chroot_local_user=YES
chroot_list_file=/etc/vsftpd/vsftpd.chroot_list
再测试时,可以看到在文件/etc/vsftpd/vsftpd.chroot_list中的用户qqworld根目录仍然是系统根目录,但不在文件中的用户根目录已经变成了"/",就是说列在文件外的用户已经不能在自己主目录范围外浏览了。

變量組合功能
Userlist_enable=YESFtpusers中用户允许访问
User_list中用户允许访问
Userlist_enable=NOFtpusers中用户禁止访问
User_list中用户允许访问
Userlist_deny=YESFtpusers中用户禁止访问(登录时可以看到密码输入提示,但仍无法访问)
user_list 中用户禁止访问
Userlist_deny=NOftpusers中用户禁止访问
user_list中用户允许访问
Userlist_enable=YES
Userlist_deny=YES
Ftpusers中用户禁止访问
User_list中用户禁止访问(登录时不会出现密码提示,直接被服务器拒绝)
Userlist_enable=YES
Userlist_deny=NO
Ftpusers中用户禁止访问
User_list中用户允许访问
喜欢这篇文章吗,不妨分享给朋友们吧!