vsFTPd 伺服器初學者指南(歡迎大家參與補充)
作者:
北南南北,正在修訂之中
來自:
LinuxSir.Org
(此處為文章地址)
摘要:
vsFTPD是一款小巧易用FTP伺服器程式;本文面向初學者的一點疑問,能讓初學者在最短的時間內學會最簡單的vsftpd伺服器的架設;本文應該算是初學者練手篇;正在更新之中;本文基於 vsftpd-2.0.3;
歡迎大家共同修訂本教程,有些功能的實現,需要大家參與;
您可以以留言的形式參與,我會每天把大家的留言整理加入文檔;謝謝。
目錄
1、vsFTPd,目前常用FTP伺服器套件;
2、ftp 使用者管理解說;
2.1、匿名ftp 使用者和使用者組的理解;
2.2、匿名ftp 使用者和ftp使用者組是否可以刪除;
3、vsFTPd的安裝;
4、vsFTPd的伺服器的啟動和關閉;
4.1、vsFTPd伺服器啟動和關閉的通用方法;
4.2、在Fedora/Redhat/CentOS中vsFTPd 伺服器的啟動和關閉:
5、vsFTPd的伺服器和防火牆及SELINUX的關係;
6、500 OOPS: vsftpd: refusing to run with writable anonymous root
7、關於vsFTPd設定檔的說明;
8、關於vsFTPd伺服器的一些常用功能的實現;
8.1、關於匿名上傳下載的實現;
8.2、關於添加本機使用者及開啟讀寫權限樣本;
8.4、如何?虛擬路徑?
8.5、開啟vsFTP伺服器的日誌功能;
8.6、如何定製歡迎資訊;
8.7、硬碟空間有限,如何把帳號ftp預設的路徑/var/ftp更改到別處?
8.8、如何讓vsFTP伺服器限制連結數,以及每個IP最大的連結數?
8.9、如何限制傳輸速度?
8.10、如何有選擇的把使用者限制在家目錄中呢?
+++++++++++++++++++++++++++++++++++++++++++
本文
+++++++++++++++++++++++++++++++++++++++++++
1、vsFTPd,目前常用FTP伺服器套件;
vsFTPd是一款在Linux發行版中最受推崇的FTP伺服器程式;特點是小巧輕快,安全易用;能讓其自身特點得發發揮和掌握,也然最主要的是會用;
目前在開源作業系統中常用的FTPD套件主要有ProFTPD、PureFTPd和wuftpd等;至於哪個FTP伺服器套件更好,哪個是你最熟悉的,哪個就是最好的;
2、ftp 使用者管理解說;
FTP伺服器對使用者的管理,在預設的情況下是根據 /etc/passwd及/etc/group
來進行的,所以我們一定要瞭解Linux系統使用者和使用者組的管理,使用者和使用者組的管理是一切應用的的基礎,有的弟兄不想去瞭解基礎的東西,就想一步成架好
各種伺服器,事實證明這種學習方法是最不明智的;雖然在您可能在幾分鐘啟動了ftp伺服器,但遇到問題時,您不一定能知道是哪裡出錯;所以基礎還是極為重
要的;
推薦文章:
《Linux 使用者(user)和使用者組(group)管理概述》
2.1、匿名ftp 使用者和使用者組的理解;
當我們訪問各大FTP上訪問時,可能我們不去想我們以什麼身份登入的,如果他的FTP允許匿名登入的話;比如我們在瀏覽器上打入;
ftp://mirrors.kernel.org
或
ftp://ftp:ftp@mirrors.kernel.org
我們會發現上面的兩行最終都能訪問,而且顯示的結果也完全一樣,最終都跳到 ftp://mirrors.kernel.org
地址;那我們訪問這個FTP時,是不是有使用者和密碼呢?是的,也是需要在的,只是在伺服器端允許匿名訪問,而匿名訪問的使用者名稱和密碼都是ftp,只是我們
因為匿名訪問,沒有感覺到他有使用者名稱和密碼罷了。第二個地址就是以ftp使用者,密碼也是ftp來訪問
ftp://mirrors.kernel.org;
如果我們以ftp命令串連 mirrors.kernel.org 時,我們會發現需要輸入使用者ftp,密碼ftp才能訪問;
在FTP伺服器中,匿名使用者的使用者名稱和密碼都是ftp ;這個使用者可以在您的作業系統中的 /etc/passwd 中能找得到;可能有類似下面的一行;
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
說明:
/etc/passwd 是系統使用者的設定檔;/etc/group是系統使用者組設定檔,您可以通過 《Linux 使用者(user)和使用者組(group)管理概述》
及其相關文檔中瞭解一些使用者管理的一些基礎知識;
在ftp使用者這行中,我們看到七個欄位,每個欄位寫欄位之間用:號分割;
ftp 是使用者名稱
x 是密碼欄位,是隱藏的;
14 是使用者的UID欄位,可以自己來設定,不要和其它使用者的UID相同,否則會造成系統安全問題;
50 用使用者組的GID,可以自己設定,不要和其它使用者組共用FTP的GID,否則會造成系統全全問題;
FTP User 是使用者說明欄位;
/var/ftp 是ftp使用者的家目錄,可以自己來定義;
/sbin/nologin 這是使用者登入SHELL ,這個也是可以定義的,/sbin/nologin
表示不能登入系統;系統虛擬帳號(也被稱為偽使用者)一般都是這麼設定。比如我們把ftp使用者的/sbin/nologin 改為 /bin/bash
,這樣ftp使用者通過本地或者遠程工具ssh或telnet以真實使用者身份登入到系統。這樣做對系統來說是不安全的;如果您認為一個使用者沒有太大的必要登
錄到系統,就可以只給他FTP帳號的許可權,也就是說只給他FTP的許可權,而不要把他的SHELL設定成 /bin/bash 等;
關於ftp使用者組的理解:
我們查看 /etc/group 的時候,會發現類似這樣一條;
ftp:x:50:
/etc/group 是使用者組的管理設定檔,上面這行表示使用者組ftp,x是密碼段,50是GID;我們對照在/etc/passwd中的ftp那行得知ftp使用者是屬於ftp使用者組的,因為ftp使用者那行中的GID和ftp使用者組的GID是相同的;
2.2、匿名ftp 使用者和ftp使用者組是否可以刪除
在一般情況下是不能把/etc/passwd和/etc/group 中有把ftp使用者和使用者組的行刪除的,因為FTP伺服器是需要他們來對FTP使用者實現管理,在預設的情況下。
雖然不能刪除,但對/etc/passwd及/etc/group中的ftp使用者及ftp使用者組的一些相關的東西是能修改的;比如我們可以把ftp
使用者的家目錄改掉,也可以把ftp使用者的UID改掉 ... ...
前提是你對使用者管理有所瞭解,系統使用者管理是一切應用基礎之一,可能初學Linux的弟兄並不瞭解使用者管理的重要性,但慢慢您就會發現這個道理;
3、vsFTPd的安裝;
在最新的各大發行版中的安裝盤中都有vsFTPd的軟體包,您用相應發行版提供的軟體包管理工具就能安裝上;當然您可以到各大發行版的FTP鏡像中
找到vsftpd的軟體包;當然也能用軟體包的管理工具線上安裝;vsftpd的軟體包本來不大,花不了多長時間,兩分鐘就夠了吧;因為本文是初學者教
程,我嚴重推薦您用發行版提供的軟體來安裝,不推薦您自己來編譯源碼包的安裝方式;
如果您用的是Fedora 或Redhat 系統,可以用下面的命令線上安裝;
[root@localhost ~]# yum install vsftpd
如果是debian 類系統,可以用apt 來線上安裝;
[root@localhost ~]# apt-get install vsftpd
如果您是RPM的系統,也可以找到vsftpd-xxxx.rpm 的包來通過rpm命令來安裝;
[root@localhost ~]# rpm -ivh vsftpd*.rpm
您可以下載源碼包來安裝
比如我們下載的是 vsftpd-2.0.3.tar.gz ;
[root@localhost ~]# tar zxvf vsftpd-2.0.3.tar.gz
[root@localhost ~]# cd vsftpd-2.0.3
[root@localhost ~]# make ;make install
[root@localhost ~]# cp vsftpd.conf /etc
然後修改/etc/vsftpd.conf ,在設定檔的最後一行加入下面一行;
listen=yes
源碼包安裝的方法,如果您的系統是RPM包管理的系統,可以刪除/etc/xinetd.d/vsftpd 這個檔案;然後啟動xinetd 伺服器;
[root@localhost ~]# /etc/init.d/xinetd restart
停止 xinetd: [ 確定 ]
啟動 xinetd: [ 確定 ]
vsFTPd運行有兩種模式,在RPM包管理的系重審統,大多是由Fedora/Redhat
開發而來,對於這樣的系統有xinted伺服器一說;對於非RPM包管理的系統,一般沒有xinted這一說。為了保證本文檔的統一,我們都不要用
xinetd模式,而用initd運行模式來啟動和管理伺服器,也就是獨立運行模式; 至於什麼是xinted和inted 模式,您可以參考《 用vsFTPd自架Linux網路安裝伺服器》
4、vsFTPd的伺服器的啟動和關閉;
vsFTPd伺服器啟動和關閉是極容易的;我們可以直接把伺服器運行調到後台運行;這是幾乎所有伺服器管理的運行方式;
4.1、vsFTPd伺服器啟動和關閉的通用方法;
運行vsftpd命令,要用到root許可權,如果您當前操作使用者並非是root,可以用su切換到root許可權;關於root許可權的切換,您有兩種方式,一種是su,另一種是sudo;請參考:
《Linux 系統中的超級許可權的控制》
vsFTPd伺服器的運行;
[root@localhost ~]# /usr/sbin/vsftpd &
[root@localhost ~]# /usr/local/sbin/vsftpd &
vsFTPd伺服器是否運行起來;
我們可以通過pgrep vsftpd 來查看vsftpd是否運行起來;
[root@localhost ~]# pgrep vsftpd
4248
上面顯示vsFTPd伺服器運行起來了,您可以通過ftp命令、lftp工具或gftp或其它的FTP用戶端來測試連接;
vsFTPd 伺服器關閉:
我們用pkill vsftpd 來殺死vsftpd進程,這樣就把vsFTPd關閉,用psgrep vsftpd 來查看進程,如果沒有進程,證明vsFTPd已經關掉;當然也要用到root許可權。
[root@localhost ~]# pkill vsftpd
[root@localhost ~]# pgrep vsftpd
4.2、在Fedora/Redhat/CentOS中vsFTPd 伺服器的啟動和關閉:
在Fedora/Redhat/CentOS中,也可以用下面的方法來啟動vsFTPd;當然也要用到root許可權;
[root@localhost beinan]# /etc/init.d/vsftpd start
為 vsftpd 啟動 vsftpd: [ 確定 ]
重新啟動vsFTPd用下面的命令;
[root@localhost beinan]# /etc/init.d/vsftpd restart
關閉 vsftpd: [ 確定 ]
為 vsftpd 啟動 vsftpd: [ 確定 ]
關掉vsFTPd伺服器,應該用下面的命令;
[root@localhost beinan]# /etc/init.d/vsftpd stop
關閉 vsftpd: [ 確定 ]
5、vsFTPd的伺服器和防火牆及SELINUX的關係;(重要)
我在論壇上看到有些弟兄說vsFTPd伺服器啟動正常,但卻不能訪問或使用者不能上傳檔案,我感覺應該是防火牆或SELINUX的事;可能FTPD服
務器被防火牆或SELINUX的安全機制防住了。所以您必須要讓防火牆通過ftp,當然也要讓SELINUX通過ftp伺服器才行;
在Fedora/Redhat/CentOS中,您要設定一下防火牆,可以把防火牆關掉,或者在自訂中讓ftp “通過”防火牆;
[root@localhost ~]# system-config-securitylevel-tui
或者運行一下如下的命令,清除防火牆規則(通用);
[root@localhost beinan]# iptables -F
關於SELINUX伺服器的解說 ,可能老手或新手對SELINUX都有點麻煩,建議您SELINUX;或者讓vsFTPd伺服器跳過SELINUX啟動;也就是說要用到 4.1、vsFTPd伺服器啟動和關閉的通用方法;
;這在Fedora/Redhat/CentOS中這樣啟動vsFTPd伺服器是有效;
當然您可也可以關掉SELINUX,在/etc/selinux/config 設定檔如下;
/etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - SELinux is fully disabled.
SELINUX=Disabled #這樣就把SELINUX伺服器關掉了,請重新啟動系統;
# SELINUXTYPE= type of policy in use. Possible values are:
# targeted - Only targeted network daemons are protected.
# strict - Full SELinux protection.
SELINUXTYPE=targeted
6、500 OOPS: vsftpd: refusing to run with writable anonymous root
如果我們已經把vsFTPd伺服器啟動好了,但登入測試是會出現類似下面的提示;
500 OOPS: vsftpd: refusing to run with writable anonymous root
這表示ftp使用者的家目錄的許可權不對,應該改過才對;
[root@localhost ~]# more /etc/passwd |grep ftp
ftp:x:1000:1000:FTP User:/var/ftp:/sbin/nologin
我們發現ftp使用者的家目錄在/var/ftp,就是這個/var/ftp的許可權不對所致,這個目錄的許可權是不能開啟所有許可權的;是您運行了chmod 777 /var/ftp所致;如果沒有ftp使用者這個家目錄,當然您要自己建一個;
如下FTP使用者的家目錄是不能針對所有使用者、使用者組、其它使用者組完全開放;
[root@localhost ~]# ls -ld /var/ftp
drwxrwxrwx 3 root root 4096 2005-03-23 /var/ftp
修正這個錯誤,應該用下面的辦法;
[root@localhost ~]# chown root:root /var/ftp
[root@localhost ~]# chmod 755 /var/ftp
有的弟兄可能會說,那匿名使用者的可讀、可下載、可上傳怎麼辦呢?這也簡單,在/var/ftp下再建一個目錄,許可權是777的就行了,再改一改vsftpd.conf就OK了;沒有什麼難的;
vsFTPd出於安全考慮,是不準讓ftp使用者的家目錄的許可權是完全沒有限制的,您可以去讀一下vsFTPd的文檔就明白的了;否則也不能稱為最安全的FTP伺服器了,對不對?
7、關於vsFTPd設定檔的說明;
vsftpd.conf是vsFTPd伺服器的設定檔,此檔案一般是/etc/vsftpd.conf或/etc/vsftpd/vsftpd.conf ,以系統為準吧。。
vsftpd.conf設定檔就是vsFTPd伺服器的全域控制檔案,此設定檔中,每行應該算做一個規則;前面帶有#號的伺服器不會解釋,這和apache 的設定檔類似;#後所接的內容一般是說明性的,或者是關掉某些功能的選項;
vsftpd.conf
這個設定檔並不包括所有您想實現的功能,有些功能的實現,我們要自己動手來解決,我們要學會查vsFTPd的文檔和FAQ等,雖然是英文的,但都是比較
簡單的;我們要習慣看洋文文檔,為什麼呢?因為Linux本來就是洋人厲害,重量級的軟體都是洋人的。呵,兄弟不要抱怨,誰讓我們落後了呢?
注意:
修改完設定檔後,一定要重啟vsFTPd伺服器才會生效,切記~~
8、關於vsFTPd伺服器的一些常用功能的實現;
8.1、關於匿名上傳下載的實現;
關於匿名上傳,其實也比較簡單,首先我們要修改一下vsftpd.conf ,此檔案位於 /etc/目錄下,可能是/etc/vsftpd.conf,也可能是/etc/vsftpd/vsftpd.conf檔案。以您的系統內容為準;
首先:我們要改一下vsftpd.conf,確保有以下幾行;
anonymous_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_umask=022
其次:在ftp使用者家目錄的下建一個檔案夾,並修改其許可權為完全開放;
ftp使用者的家目錄在哪?我們前面已經說了,要通過/etc/passwd來查看;也可以通過finger ftp來查看;
[root@localhost beinan]# finger ftp
Login: ftp Name: FTP User
Directory: /var/ftp Shell: /sbin/nologin
這說明ftp使用者的家目錄在/var/ftp
,我們要在這個目錄下建一個目錄,然後把他的使用權限設定為任何使用者可讀可寫可執行就行了;一般的情況下,在發行版中,有一個/var/ftp/pub的目
錄,如果沒有,您也可以自己建一個;把設定檔改好後,只要把/var/ftp下的任何一個目錄的許可權開啟,都可以用來匿名上傳和下載;
比如您想讓匿名使用者上傳和下載都在/var/ftp/pub,就可以把/var/ftp/pub的許可權開啟,如果沒有這個目錄,您要自己建一個;
[root@localhost ~]# mkdir /var/ftp/pub
[root@localhost ~]# chmod 777 /var/ftp/pub
這樣上傳的時候傳到pub目錄就OK了,對不對??
8.2、關於添加本機使用者及開啟讀寫權限樣本;
FTP使用者一般是不能登入系統的,這也是為了安全。在系統中,沒有許可權登入系統的使用者一般也被稱之為虛擬使用者;虛擬使用者也是要寫進/etc
/passwd中;這隻是一種虛擬使用者的方法,但說實在的並不是真正的虛擬使用者,只是把他登入SHELL的許可權去掉了,所以他沒有能力登入系統;
如果我們想把beinan這個使用者目錄定位在/opt/beinan這個目錄中,並且不能登入系統;我們應該如下操作
[root@localhost ~]# adduser -d /opt/beinan -g ftp -s /sbin/nologin beinan
[root@localhost ~]# passwd beinan
Changing password for user beinan.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
[root@localhost ~]#
其實這還是不夠的,還要改一下設定檔vsftpd.conf ,以確保本地虛擬使用者能有讀寫權限;
local_enable=YES
write_enable=YES
local_umask=022
8.4、如何?虛擬路徑?
比如:
/home/a 映射為 ftp://localhost/a
/home/b/c 則為 ftp://localhost/c
其實這個不能說是vsFTPd的內容,其實我們早就接觸過了,可能我們沒有注意,我們可以通過如下的方法來實現。
[root@localhost ~]# mount --bind [原有的目錄] [新目錄]
比如我的ftp的預設目錄是/var/ftp,我想把/mnt/LinG/WinSoft檔案夾,映射到/var/ftp目錄中,我就如下操作
我們要先在/var/ftp目錄中建一個目錄
[root@localhost ~]# mkdir /var/ftp/WinSoft
然後執行mount命令
[root@localhost ~]# mount --bind /mnt/LinG/WinSoft /var/ftp/WinSoft
這樣就OK了。
8.5、開啟vsFTP伺服器的日誌功能;
把下面xferlog_file前面的#號對掉,也就是把vsftp的log功能開啟,這樣我們就能在/var/log目錄下查看vsftpd.log。這是vsFTP的日誌功能,這對於我們來說是極為重要的。
xferlog_file=/var/log/vsftpd.log
8.6、如何定製歡迎資訊;
如何定製歡迎資訊,也就是我們登入有些FTP之後,會出現類似:歡迎您來到LinuxSir FTP,在這裡,您會得到最真誠的協助,如果有什麼問題和建議,請來信,多謝。
實現這個並不難,我們可以查看vsftpd.conf檔案中,是否有這行。
dirmessage_enable=YES
message_file=.message
如果沒有就加上,如果dirmessage_enable=YES前面有#號,就把#號去掉。其實FTP資訊預設的就是.message,所以可以不加 message_file= 來指定。自己指定也行,無所謂的事;
然後我們制定一個.message檔案,寫上您想要寫的東西,比如是.message的內容是如下的:
--歡迎您來到LinuxSir FTP!
--在這裡,您會得到最真誠的協助;
--如果有什麼問題和建議,請來信,多謝。
我們可以用編輯器來寫這個.message,我想這個過程就不用說了吧。
然後我們把.message這個檔案複製到各個使用者的家目錄中。比如我的FTP的一個使用者是beinan,這個使用者所在的家目錄是/opt/beinan
我們就要把.message放在/opt/beinan這個目錄下。如果系統使用者ftp,他的目錄就是/var/ftp這個目錄,這個是預設的,當匿名用
戶登入時就訪問的是/var/ftp這個目錄。我們要讓匿名使用者能看到歡迎資訊。就要把.message放在/var/ftp目錄中。其它的使用者,也無非
就是類似的操作。
8.7、硬碟空間有限,如何把帳號ftp預設的家目錄更改到別處?
我的硬碟空間有限,如何把帳號ftp預設的路徑/var/ftp更改到別處?或者是,我的linux所有的目錄都放在/根分區,因為空白間緊張,我能否把ftp這個使用者的預設路徑放到別的分區??
對於ftp這個使用者的管理,我們應該查看/etc/passwd ,然後修改ftp使用者那行;
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
比如我們想把ftp使用者的家目錄改為/opt/ftp,則要把類似上一行改為
ftp:x:14:50:FTP User:/opt/ftp:/sbin/nologin
然後我們要建立ftp使用者的新的家目錄;
[root@localhost ~]# mkdir /opt/ftp
[root@localhost ~]# chmod 755 /opt/ftp
[root@localhost ~]# chown root:root /opt/ftp
如果預設的ftp磁碟空間緊張,我們其實也可以用虛擬路徑映射的方法來解決;也就是mount --bind的辦法;看情況吧,哪個適合就是最好的方法;
8.8、如何讓vsFTP伺服器限制連結數,以及每個IP最大的連結數?
應該改vsFTPd伺服器的配製檔案vsftpd.conf,加入下面的兩行:
max_clients=數字
max_per_ip=數字
舉例:
我想讓我的vsFTP最大支援連結數為100個,每個IP,最多能支援5個連結,所以我應該在vsftpd.conf中加上如下的兩行:
max_clients=100
max_per_ip=5
改好了配製檔案,不要忘記啟動vsftp伺服器。
8.9、如何限制傳輸速度?
anon_max_rate=數字
註:這是匿名的速度
local_max_rate=數字
註:這是vsFTP伺服器上本機使用者的速度
註:這個數位單位是byte,所以我們要計算一下。比如我想讓匿名使用者和vsFTP上的使用者都以80KB下載,所以這個數字應該是1024x80=81920
所以我們要在vsftpd.conf中加入下面的兩行
anon_max_rate=81920
local_max_rate=81920
8.10、如何有選擇的把使用者限制在家目錄中呢?
我們要自己建一個檔案,在/etc目錄中或/etc/vsftpd目錄中(假如您的vsftpd設定檔都是放在這個目錄的話);
#touch /etc/vsftpd.chroot_list
以beinan和nanbei這兩個使用者限制在他們所在的家目錄中,而其它的FTP使用者不做此限制。
在vsftpd.chroot_list這個檔案中,把beinan和nanbei添上去就行,注意,每個使用者佔一行。
beinan
nanbei
然後改/etc/vsftpd/vsftpd.conf檔案,找如下的兩行
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
如果沒有這樣的兩行,就可以自己添加上去也是一樣的。
設定好後,重新vsFTPD伺服器。
補充一之補充:如何把系統內所有的FTP使用者都限制在家目錄中呢??經juliaugong兄的提示,我尋找了vsFTPd的洋文說明,證明這個選項是一刀切的解決所有的使用者都能限制在家目錄中
我們可以通過更改vsftpd.conf檔案,加入如下的一行
chroot_local_user=YES
改完配製檔案,不要忘記重啟vsFTPd伺服器;
8.11、如何讓綁定IP到vsFTPd?
如何讓綁定IP到vsFTPd?也就是說,如何讓使用者只能通過某個IP來訪問FTP。其實這個功能很有意思。如果綁定的是內網的IP,外部是沒有辦法訪問的。如果綁定的是對外服務的IP,內網也只能通過對外服務的IP來訪問FTP
在vsftpd.conf中加一行,以我的區域網路為例,請看第一帖中的作業環境,這樣外網就不能訪問我的FTP了,內網也可能通過192.168.0.2來訪問FTP;
listen_address=192.168.0.2
註:近來
使用centos配置ftp,很是不順。第一次怎麼連都連不上,好像沒有設定listen連接埠。第二次本機可以連,其他機器不能連。第三次看了此篇文章,原來防火牆沒有開放ftp.