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