1. 程式人生 > >在CentOS 6.3 64bit上安裝FTP伺服器vsftpd 2.2.2

在CentOS 6.3 64bit上安裝FTP伺服器vsftpd 2.2.2

vsftpd是一款在Linux發行版中最受推崇的FTP伺服器程式。特點是小巧輕快,安全易用。並且是一個完全免費開放原始碼的ftp軟體

根據業務需要,要求支援ftp和sftp,我需要在Linux上架設一個ftp伺服器,來存放CDN線上節點的使用者訪問日誌。我選擇在CentOS 6.3 64bit上使用vsftpd來完成這個任務,伺服器ip是10.10.110.158。
sftp是與SSH相關的,與ftp沒有任何關係,我採用python中的paramiko模組實現了一個包裝類,這裡只談ftp。
下面是安裝詳細過程實錄,僅作參考。
1.檢查server上是否已經安裝了vsftpd
rpm -qa | grep vsftpd

2.假如沒有相應的vsftpd rpm包,我們需要下載安裝
yum install vsftpd

3.新增虛擬主機使用者

業務要求:被限制使用者名稱為test,被限制路徑為/home/test
新增使用者test,使用者目錄指定為/home/test,且此使用者不能登陸系統.
#useradd –s /sbin/nologin –d /home/test test
注意-s /sbin/nologin是讓其不能登陸系統,-d是指定使用者主目錄為/home/test,如果不存在會自動建立
#passwd test

輸入密碼tao_627,並確認


4.配置vsftpd配置檔案,這裡是關鍵點
# ls /etc/vsftpd/
ftpusers user_list vsftpd.conf vsftpd_conf_migrate.sh

首先了解vsftpd主配置檔案vsftpd.conf,更全面的功能和選項介紹參見vsftpd.conf.5的man page頁面,使用命令列
man vsftpd.conf

vim /etc/vsftpd/vsftpd.conf
修改對應的值如下:
anonymous_enable=NO #禁止匿名使用者登入,預設允許 
local_enable=YES #允許本地實體使用者登入 
write_enable=YES #允許使用者上傳資料,開啟寫許可權 
local_umask=022 #對本地使用者建立新目錄(755)與檔案(644)的許可權,上傳檔案的許可權掩碼  
dirmessage_enable=YES #若登入目錄下有.message則會顯示該檔案內容 可以自己在登入目錄下建立.message檔案並寫入資訊 
xferlog_enable=YES #啟動日誌檔案記錄,預設記錄於/var/log/vsftpd.log,可用使用vsftpd_log_file改寫 
xferlog_file=/var/log/xferlog
connect_from_port_20=YES #支援主動式連線功能,預設20,可用使用ftp_data_port指定為其他埠號 
xferlog_std_format=YES #支援WuFTP的日誌檔案格式 
local_root=/home/test #限制登入使用者只能在/home/test目錄下操作,該使用者一登入就切換到該目錄下面 
chroot_local_user=YES #禁使用者離開主目錄
chroot_list_enable=YES #不允許FTP使用者離開自己的主目錄
listen=YES #使用stand alone方式啟動vsftpd 
pam_service_name=vsftpd #支援PAM模組的管理
userlist_enable=YES #支援/etc/vsftpd/user_list檔案內的賬號登入控制,禁止其登陸
tcp_wrappers=YES #支援TCP Wrappers的防火牆機制
這裡為了安全,我們可以編輯 user_list這個檔案,把禁止通過FTP登入系統的賬號新增進去。這樣的話,這些賬戶嘗試遠端登入的時候。會被拒絕登入。

實際修改配置項如下
anonymous_enable=NO
xferlog_file=/var/log/xferlog
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list

新建一個檔案/etc/vsftpd/chroot_list,因為上面的配置檔案,在其中增加test

開放21和20埠
修改iptables檔案,然後儲存重啟
vim /etc/sysconfig/iptables

5.新增系統服務vsftpd,讓系統服務隨著系統啟動而啟動
chkconfig vsftpd on
使用下面的命令檢視修改是否成功
chkconfig vsftpd --list
啟動vsftpd服務,嘗試使用ftp傳輸檔案。
service vsftpd start
檢視系統埠狀態:
netstat -tulnp
如果能看到21埠正在被vsftpd呼叫說明啟動成功。

6.安裝ftp客戶端元件(用來驗證是否vsftpd)
yum -y install ftp
執行命令嘗試登陸
ftp localhost
輸入使用者和密碼,如果登陸成功,說明ftp服務可用了。下面是最簡單的線上ftp功能測試


7.命令列操作示例


假設vsftpd所在的伺服器的地址是10.10.110.158,在另外的機器上開啟命令列(需要事先安裝ftp客戶端):
ftp 10.10.110.158
輸入使用者名稱test,密碼為tao_627
ftp>ls
ftp>put /usr/local/src/Python-2.7.10.tgz /home/test/Python-2.7.10.tgz

ftp>quit

配置順利的話,現在就可以用ftp傳輸檔案了。
8.ftp常用命令介紹
如果沒有遠端機的專用登入帳號,許多ftp站點設有可以使用的特殊帳號。這個帳號的登入名為anonymous(也稱為匿名ftp),當使用這一帳號時,要求輸入email地址作為口令。
如果遠端系統提供匿名ftp服務,使用者使用這項服務可以登入到特殊的,供公開使用的目錄。一般專門提供兩個目錄:pub目錄和incoming目錄。pub目錄包含該站點供公眾使用的所有檔案,incoming目錄存放上載到該站點的檔案。
一旦使用者使用ftp在遠端站點上登入成功,將得到“ftp>”提示符。現在可以自由使用ftp提供的命令,可以用 help命令取得可供使用的命令清單,也可以在 help命令後面指定具體的命令名稱,獲得這條命令的說明。

最常用的命令有:
ls 列出遠端機的當前目錄
cd 在遠端機上改變工作目錄
lcd 在本地機上改變工作目錄
ascii 設定檔案傳輸方式為ASCII模式
binary 設定檔案傳輸方式為二進位制模式
close 終止當前的ftp會話
hash 每次傳輸完資料緩衝區中的資料後就顯示一個#號
get(mget) 從遠端機傳送指定檔案到本地機
put(mput) 從本地機傳送指定檔案到遠端機
open 連線遠端ftp站點
exit 斷開與遠端機的連線並退出ftp
? 顯示本地幫助資訊
! 轉到Shell中

常用命令說明
◆啟動ftp會話
open命令用於開啟一個與遠端主機的會話。該命令的一般格式是:
open 主機名/IP
如果在ftp 會話期間要與一個以上的站點連線,通常只用不帶引數的ftp命令。如果在會話期間只想與一臺計算機連線,那麼在命令列上指定遠端主機名或IP地址作為ftp命令的引數。
◆終止ftp會話
close、disconnect、和bye命令用於終止與遠端機的會話。close和disronnect命令關閉與遠端機的連線,但是使使用者留在本地計算機的ftp程式中。和bye命令都關閉使用者與遠端機的連線,然後退出使用者機上的ftp 程式。
◆改變目錄
“cd [目錄]”命令用於在ftp會話期間改變遠端機上的目錄,lcd命令改變本地目錄,使使用者能指定查詢或放置本地檔案的位置。
◆遠端目錄列表
ls命令列出遠端目錄的內容,就像使用一個互動shell中的ls命令一樣。ls命令的一般格式是:
ls [目錄] [本地檔案]
如果指定了目錄作為引數,那麼ls就列出該目錄的內容。如果給出一個本地檔案的名字,那麼這個目錄列表被放入本地機上您指定的這個檔案中。
◆從遠端系統獲取檔案
get和mget命令用於從遠端機上獲取檔案。get命令的一般格式為:
get 檔名
您還可以給出本地檔名,這個檔名是這個要獲取的檔案在您的本地機上建立時的檔名。如果您不給出一個本地檔名,那麼就使用遠端檔案原來的名字。
mget命令一次獲取多個遠端檔案。mget命令的一般格式為:
mget 檔名列表
使用用空格分隔的或帶萬用字元的檔名列表來指定要獲取的檔案,對其中的每個檔案都要求使用者確認是否傳送。
◆向遠端系統傳送檔案
put和mput命令用於向遠端機發送檔案。Put命令的一般格式為:
put 檔名
mput命令一次傳送多個本地檔案,mput命令的一般格式為:
mput 檔名列表
使用用空格分隔的或帶萬用字元的檔名列表來指定要傳送的檔案。對其中的每個檔案都要求使用者確認是否傳送。
◆改變檔案傳輸模式
預設情況下,ftp按ASCII模式傳輸檔案,使用者也可以指定其他模式。ascii和brinary命令的功能是設定傳輸的模式。用ASCII模式傳輸檔案對純文字是非常好的,但為避免對二進位制檔案的破壞,使用者可以以二進位制模式傳輸檔案。
◆檢查傳輸狀態
傳輸大型檔案時,可能會發現讓ftp提供關於傳輸情況的反饋資訊是非常有用的。hash命令使ftp在每次傳輸完資料緩衝區中的資料後,就在螢幕上列印一個#字元。本命令在傳送和接收檔案時都可以使用。
◆ftp中的本地命令
當您使用ftp時,字元“!”用於向本地機上的命令shell傳送一個命令。如果使用者處在ftp會話中,需要shell做某些事,就很有用。例如使用者要建立一個目錄來儲存接收到的檔案。如果輸入!mkdir new_dir,那麼Linux就在使用者當前的本地目錄中建立一個名為new_dir 的目錄。

9.安裝中出現的問題
1.客戶端報
500 OOPS: could not read chroot() list file:/etc/vsftpd/vsftpd.chroot_list
解決方法:
檢視vsftpd的配置,果然缺少這個檔案,加上了啟動成功。
2.ftplib.error_perm: 553 Could not create file.

發現問題是沒有許可權建立檔案或是目錄,查詢原因 因為我將selinux關閉了。發現上傳的資料夾的許可權不對,在指定使用者test主目錄下,我自己建立了一個root組和使用者名稱的資料夾。將它們改為test後就可以了。 此時,上傳檔案的組和使用者不限制,可以是root超級使用者,也可以是其它普通使用者,比如taoyx,不一定是test,都可以的。
10.參考文獻
[1].http://www.2cto.com/os/201412/359964.html
[2].http://www.php100.com/html/webkaifa/Linux/2009/0811/3169.html