1. 程式人生 > >tar包安裝vsftpd

tar包安裝vsftpd

由於之前使用的vsftpd版本是vsftpd-2.2.2-24.el6.x86_64,被掃描出來存在安全漏洞,需要進行版本升級,檢視伺服器的系統資訊:

cat /etc/issue

或者

cat /etc/redhat-release

或者

head -n 1 /etc/issue

是centos6.5,在http://rpmfind.net/查詢vsftpd的rpm包,發現只有CentOS 7.5.1804 for x86_64的安裝包,如果使用這個安裝包需要升級glibc庫版本至2.14、2.15,不想做這個操作,因此打算使用tar包的方式編譯安裝3.0.0版本的vsftpd。

1、首先停止正在啟動的vsftpd服務,並解除安裝軟體

service vsftpd stop

#檢視已安裝的版本

rpm –qa|grep vsftpd

#刪除已安裝的版本

rpm –e vsftpd-2.2.2-24.el6.x86_64

可以看到已經查詢不到安裝的vsftpd軟體了,並將vsftpd.conf進行了備份。

2、先將下載的vsftpd-3.0.2.tar.gz包上傳至伺服器然後解壓縮至目標目錄

tar –zxvf vsftpd-3.0.2.tar.gz

然後進入目錄vsftpd-3.0.2:cd vsftpd-3.0.2

3、進行編譯安裝前的準備工作

1)新增nobody使用者

useradd nobody

一般情況下是已經存在了,可以通過vim /etc/pass檔案確認

2)建立/usr/share/empty目錄

mkdir /usr/share/empty

如果存在了就不需要建立

3)建立匿名使用者登入的目錄

mkdir /var/ftp

如果已存在就不需要建立

4)建立ftp使用者並指定家目錄為/var/ftp

useradd –d 家目錄 使用者名稱:

useradd –d /var/ftp ftp

如果已存在就不需要建立:

cat /etc/pass|grep ftp

5) 修改builddefs.h 檔案,新增需要的功能

在vsftpd-3.0.2目錄下vim builddefs.h

如果需要某個功能就將undef修改為define

比如其中的undef VSF_BUILD_TCPWRAPPERS,如果在vsftpd.conf中增加tcp_wrappers=YES的配置就需要將這項改為define VSF_BUILD_TCPWRAPPERS

可以看到已經開啟的有ftp登入驗證方式pam,建議將SSL驗證方式也加上

4、開始編譯安裝

1)編譯:

make

可以看到如下報錯:

tcpwrap.c:16:20: error: tcpd.h: No such file or directory
tcpwrap.c: In function ‘vsf_tcp_wrapper_ok’:
tcpwrap.c:29: error: storage size of ‘req’ isn’t known
cc1: warnings being treated as errors
tcpwrap.c:31: error: implicit declaration of function ‘request_init’
tcpwrap.c:31: error: ‘RQ_DAEMON’ undeclared (first use in this function)
tcpwrap.c:31: error: (Each undeclared identifier is reported only once
tcpwrap.c:31: error: for each function it appears in.)
tcpwrap.c:31: error: ‘RQ_FILE’ undeclared (first use in this function)
tcpwrap.c:32: error: implicit declaration of function ‘fromhost’
tcpwrap.c:33: error: implicit declaration of function ‘hosts_access’
tcpwrap.c:29: error: unused variable ‘req’
make: *** [tcpwrap.o] Error 1

通過rpm –qa|grep tcp_wrappers,可以發現缺少tcp_wrappers-devel包,可以通過yum install tcp_wrappers-devel進行安裝。由於伺服器在內網,需要在外網下載安裝包然後通過rpm –Uvh tcp_wrappers-7.6-58.el6.x86_64.rpm進行升級安裝,注意需要同時下載tcp_wrappers-libs-7.6-58.el6.x86_64.rpm安裝包,因為依賴於它。

繼續編譯報如下錯誤:

gcc -o vsftpd main.o utility.o prelogin.o ftpcmdio.o postlogin.o privsock.o tunables.o ftpdataio.o secbuf.o ls.o postprivparent.o logging.o str.o netstr.o sysstr.o strlist.o banner.o filestr.o parseconf.o secutil.o ascii.o oneprocess.o twoprocess.o privops.o standalone.o hash.o tcpwrap.o ipaddrparse.o access.o features.o readwrite.o opts.o ssl.o sslslave.o ptracesandbox.o ftppolicy.o sysutil.o sysdeputil.o seccompsandbox.o -Wl,-s -fPIE -pie -Wl,-z,relro -Wl,-z,now `./vsf_findlibs.sh`
/usr/bin/ld: cannot find -lcap
collect2: ld returned 1 exit status
make: *** [vsftpd] Error 1

需要檢視系統是否為64位:

getconf LONG_BIT

可以看到是64位系統,因此需要更改vsf_findlibs.sh檔案庫中lib 路徑:

sed -i 's/lib\//lib64\//g' vsf_findlibs.sh

編譯完成

2)安裝:

make install

完成後將vsftpd.conf檔案複製到/etc目錄下,否則在啟動vsftpd服務時需要指定啟動服務使用的配置檔案:

2.1)cp vsftpd.conf /etc
2.2)cp RedHat/vsftpd.pam /etc/pam.d/vsftpd   //PAM驗證檔案
2.3)修改/etcvsftpd.conf配置檔案,將
local_enable=YES
write_enable=YES
xferlog_enable=YES
xferlog_std_format=YES

解除註釋

如果不使用預設埠20需要將connect_from_port_20=YES註釋掉,並新增下面的配置:

listen_port=14888//使用的連線埠
pasv_min_port=14100//主動模式的埠範圍
pasv_max_port=14200

在配置檔案中新增:

pam_service_name=vsftpd
userlist_enable=YES
#tcp_wrappers=YES

其中pam_service_name是指定pam驗證的檔案是/etc/pam.d/vsftpd

userlist_enable=YES是限制其中的使用者不能ftp登入,這是為了防止許可權過高的使用者登入進行非法操作。

2.4)下面的檔案根據情況進行復制,可以先不復制

cp vsftpd /usr/local/sbin/vsftpd
cp vsftpd.conf.5 /usr/local/man/man5
cp vsftpd.8 /usr/local/man/man8

3)啟動vsftpd服務

/usr/local/sbin/vsftpd &

需要加&進行後臺啟動

3.1)連線ftp

ftp 127.0.0.1 14888

報錯如下:

說明檔案不存在,可以自己手動建立,然後將需要禁止的使用者加入其中

touch /etc/vsftpd.user_list

如果也報vsftpd.ftpusers檔案不存在,同樣的也建立vsftpd.ftpusers檔案。

繼續登入系統報如下錯誤:

530一般有這幾種情況

1、vsftpd.conf中是否添加了如下配置:

local_enable=YES  
pam_service_name=vsftpd
userlist_enable=YES

2、修改/etc/vsftpd/ftpusers

編輯vim /etc/pam.d/vsftpd

其中ftpusers是ftp拒絕的系統使用者,如果需要登入的使用者在其中,將其去掉。

另外,不要把/etc/pam.d/vsftpd裡面的deny改成allow,不然你自己建立的使用者就會報530 Login incorrect。

3、註釋掉

#auth    required pam_shells.so

4、還有一種情況是我遇到到,比較特殊,是/etc/pam.d/vsftpd中配置的檔案目錄是/lib下,而實際上需要修改為lib64下的檔案,如果找不到報530的原因可以嘗試這種方法。

4)500 OOPS: vsftpd: refusing to run with writable anonymous root解決方法

當使用匿名使用者登入時有可能報這種錯,因為vsftpd出於安全考慮對 /home/ftp是不允許沒有限制的,所以需要手動修改許可權:

chown root:root /home/ftp
chmod 755 /home/ftp
chown root:root /var/ftp
chmod 755 /var/ftp

4)這樣自己建立的使用者就可以通過ftp登入了,別忘記修改防火牆配置。

useradd –d /home/ftpuser fuser

5)關閉服務

使用ps –rf|grep vsftpd檢視vsftpd服務程序

然後通過kill -9 PID刪除程序

設定開機自啟動 :用vim開啟etc/rc.local在裡面加入/usr/local/sbin/vsftpd & 即可。

檢視vsftpd版本:vsftpd –version