1. 下载最新版的vsftpd
https://security.appspot.com/downloads/vsftpd-3.0.3.tar.gzlinux
2. 上传到Linux 服务器shell
例如 /app目录bash
3.关闭服务(升级须要)服务器
service vsftpd stopapp
4.关闭SELINUXtcp
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config;ide
5.备份配置文件 (升级须要)
cp -r /etc/vsftpd /app工具
6.检查旧版vsftpd 版本 (升级须要)
vsftpd -v测试
7.卸载旧版vsftpd (升级须要)
yum remove -y vsftpdui
8.编译安装源码包
cd /app
tar -xzvf vsftpd-3.0.3.tar.gz
cd vsftpd-3.0.3
vi builddefs.h
将
#undef VSF_BUILD_TCPWRAPPERS
修改成
#define VSF_BUILD_TCPWRAPPERS
9.修改显示
sed -i 's/UTF8 ON/DISABLE UTF8 ON/g' opts.c
10.编译安装
make && make install
出错的话,若是须要 tcp_wrappers-devel 安装 yum install tcp_wrappers-devel
须要libcap.so的话,选查找系统中的find / -name "*libcap.so*" , 将64位的创建软链接
cd /usr/lib
ln -sv /lib64/libcap.so.2.16 libcap.so
11.复制配置文件
mkdir /etc/vsftpd/
cp vsftpd.conf /etc/vsftpd/
cp RedHat/vsftpd.pam /etc/pam.d/ftp
sed -i 's/lib\//lib64\//g' /etc/pam.d/ftp
12.建立虚拟用户
Useradd –s /sbin/nologin vftp
mkdir /ftproot //建立ftp根目录为/ftproot
建立用户和密码文件,而后用db4工具把用户名和密码转换成系统识别的格式。
vi vftpuser //新建文件写入用户名和密码
注:第一行写用户名,第二行写密码,以此类推,要建立多少虚拟用户,依次写下去。
例如:
abc
123
cba
321
建立了两个用户abc和cba密码分别为123和321
接着使用工具将其转换,而且存放在适当的位置,如将密码文件保存到/etc/vsftpd/:
db_load -T -t hash -f vftpuser.txt /etc/vsftpd/vftpuser.db
命名为vftpuser.db。
注意:此时若是没有安装db4工具会出现错误。
解决方法:安装rpm的db四、db4-util包
修改 /etc/pam.d/vsftpd
在下面添加以下两行,其余所有注释掉。
auth required pam_userdb.so db=/etc/vsftpd/vftpuser
account required pam_userdb.so db=/etc/vsftpd/vftpuser
注意这里是vftpuser,不是vftpuser.db
mkdir –p /etc/vsftpd/vsftpd_user_conf
vi /etc/vsftpd/vsftpd_user_conf/abc //建立名为abc的控制文件。
local_root=/ftproot/ //abc这个用户登录上来的家目录是/ftproot
anon_upload_enable=YES //容许上传
anon_mkdir_write_enable=YES //容许建立目录
anon_other_write_enable=YES //容许删除文件和目录
一样建立cba的配置文件。
13.修改配置文件
vi /etc/vsftpd/vsftpd.conf
anonymous_enable=No
local_enable=YES
write_enable=YES
dirmessage_enable=YES
max_clients=100
local_root=/app
pam_service_name=vsftpd //用vsftpd里的脚本作pam验证
tcp_wrappers=YES //开启ip控制
chroot_local_user=YES //锁定用户根目录
guest_enable=YES //开启虚拟帐户
guest_username=vftp //虚拟帐户使用vftp(刚才建的系统帐户)映射
user_config_dir=etc/vsftpd/vsftp_user_conf //虚拟帐户的控制文件路径
14. 测试是否启动成功
/usr/local/sbin/vsftpd /etc/vsftpd/vsftpd.conf
15.制做启动脚本
cp /usr/local/sbin/vsftpd /usr/sbin/vsftpd
vi /etc/xinetd.d/vsftpd
修改成disable = yes
vi /etc/init.d/vsftpd
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#!/bin/bash # ### BEGIN INIT INFO # Provides: vsftpd # Required-Start: $local_fs $network $named $remote_fs $syslog # Required-Stop: $local_fs $network $named $remote_fs $syslog # Short-Description: Very Secure Ftp Daemon # Description: vsftpd is a Very Secure FTP daemon. It was written completely from # scratch ### END INIT INFO # vsftpd This shell script takes care of starting and stopping # standalone vsftpd. # # chkconfig: - 60 50 # description: Vsftpd is a ftp daemon, which is the program \ # that answers incoming ftp service requests. # processname: vsftpd # config: /etc/vsftpd/vsftpd.conf # Source function library. . /etc/rc.d/init.d/functions # Source networking configuration. . /etc/sysconfig/network RETVAL=0 prog="vsftpd" start() { # Start daemons. if [ -d /etc ] ; then for i in `ls /etc/vsftpd/vsftpd.conf`; do site=`basename $i .conf` echo -n $"Starting $prog for $site: " /usr/local/sbin/vsftpd $i & RETVAL=$? [ $RETVAL -eq 0 ] && { touch /var/lock/subsys/$prog success $"$prog $site" } echo done else RETVAL=1 fi return $RETVAL } stop() { # Stop daemons. echo -n $"Shutting down $prog: " killproc $prog RETVAL=$? echo [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog return $RETVAL } # See how we were called. case "$1" in start) start ;; stop) stop ;; restart|reload) stop start RETVAL=$? ;; condrestart) if [ -f /var/lock/subsys/$prog ]; then stop start RETVAL=$? fi ;; status) status $prog RETVAL=$? ;; *) echo $"Usage: $0 {start|stop|restart|condrestart|status}" exit 1 esac exit $RETVAL
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
16.受权755
chmod 755 /etc/init.d/vsftpd
chkconfig vsftpd on
17.验证 service vsftpd start vsftpd -v