VSFTPD官方資料翻譯版(不完整版)---摘自中國Linux公社

suzhouclark發表於2008-10-21
VSFTPD官方資料翻譯版(不完整版)---摘自中國Linux公社[@more@]安裝篇
===============
這個檔案詳細介紹瞭如何從VSFTPD的.tar.gz分發包開始,建立和安裝並執行VSFTPD。

1)建立VSFTPD
先進入解壓.tar.gz檔案後產生的目錄內。如下:
cd vsftpd-2.0.1

編輯"builddefs.h"以操作compile-time設定。(tcp_wrappers build,等)

輸入make,回車(如果它不工作請發郵件通知我 .
這將產生一個二進位制檔案,你可以驗證一下。如下:
[chris@localhost vsftpd]   $ ls -l vsftpd
-rwxrwxr-x 1 chris chris 61748 Sep 27 00:26 vsftpd

2)滿足VSFTPD安裝所需的一些條件
VSFTPD預設設定需要一個"nobody"使用者,如果這個使用者不存在,那麼新增它。如下:
[root@localhost root]# useradd nobody
useradd: user nobody exists

VSFTPD預設設定需要一個空目錄:/usr/share/empty.增加這個目錄,如果它還不存在的話。如下:
[root@localhost root]# mkdir /usr/share/empty/
mkdir: cannot create directory `/usr/share/empty': File exists

如果容許匿名使用者(anonymous),那麼你將需要一個"ftp"使用者和其home目錄(這個home目錄不屬於“ftp”使用者,而且“ftp"使用者也對其沒有寫許可權)在你的系統中存在。
以下命令用來建立一個"ftp"使用者,如果它還不存在的話。
[root@localhost root]# mkdir /var/ftp/
[root@localhost root]# useradd -d /var/ftp ftp

(即使你的"ftp"使用者已經存在,完成以下這兩步也是很有好處的:)
[root@localhost root]# chown root.root /var/ftp
[root@localhost root]# chmod og-w /var/ftp

3)安裝VSFTPD的配置、執行和幫助檔案。
輸入"make install"後會將二進位制檔案和幫助檔案複製到適當的目錄。
你也可以手工複製這些檔案:
cp vsftpd /usr/local/sbin/vsftpd
cp vsftpd.conf.5 /usr/local/man/man5
cp vsftpd.8 /usr/local/man/man8

"make install"不會複製預設的配置檔案,所以建議你手工複製:
cp vsftpd.conf /etc
daidong注:根據你係統版本的不同,也可能是 cp vsftpd.conf /etc/vsftpd

4)測試 (無inetd影響)
VSFTPD能執行在獨立模式(standalone)或者透過inetd(xinetd)來啟動。
你能透過inetd來執行vsftpd以更好地控制它。但我們在首次執行時不這麼做,以便檢查系統是否現在配置正常。
編輯/etc/vsftpd.conf(daidong注:也可能是/etc/vsftpd/vsftpd.conf),並在最下面加入以下這一行:
listen=YES

這將告訴VSFTPD不要從inetd啟動。
OK,現在試著啟動FTP。
以ROOT登入。
確定你沒有執行其他FTP服務(否則VSFTPD不能佔用FTP所需的21埠)。
執行那個二進位制檔案,如下:
[root@localhost root]# /usr/local/sbin/vsftpd &
[1] 2104

如果一切正常,那麼你將連上FTP伺服器,如下:
[chris@localhost chris]   $ ftp localhost
Connected to localhost (127.0.0.1).
220 (vsFTPd 1.1.1)
Name (localhost:chris): ftp
331 Please specify the password.
Password:
230 Login successful. Have fun.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (127,0,0,1,229,133)
150 Here comes the directory listing.
d--x--x--x 2 0 0 4096 Jan 14 2002 bin
d--x--x--x 2 0 0 4096 Apr 21 20:52 etc
drwxr-xr-x 2 0 0 4096 Apr 21 20:52 lib
drwxr-sr-x 2 0 50 4096 Jul 26 22:58 pub
226 Directory send OK.
ftp>

5)從inetd或者類似方式啟動(官方推薦使用standalone方式)
你也許想透過inetd或者類似方式啟動VSFTPD,因為這能給你更多的感受。例如xinetd就有很多的設定。
(注意:VSFTPD的內在機制遮蔽了xinetd的大多數的有用的設定)。

如果使用標準的"inetd",你需要編輯/etc/inetd.conf,在其中加入以下一行:
ftp stream tcp nowait root /usr/sbin/tcpd /usr/local/sbin/vsftpd

(確定你刪除或者註釋掉一些已存在的FTP服務配置行。如果你沒有安裝tcp_wrappers,或者不想使用它們,那麼請去掉/usr/sbin/tcpd part).

inetd需要指定並重新載入它的配置檔案:
kill -SIGHUP `pidof inetd`

如果你想使用"xinetd",請參閱我們提供的範例 /EXAMPLE/INTERNET_SITE/README. 而其他範例檔案將告訴你如何調配出更強大的xinetd功能。

6)為本地登入配置PAM檔案(可選)
如果你在一臺啟用了PAM的裝置上執行VSFTPD,你需要提供一個 /etc/pam.d/ftp 檔案。否則非匿名使用者將無法登入伺服器。
(注:如果你的PAM版本比較老,那麼這個檔案也許是 /etc/pam.conf).

做為一個標準設定,你可以複製一個已提供的範例檔案,如下:
cp RedHat/vsftpd.pam /etc/pam.d/ftp

7)自定義你的配置檔案
完成以上的配置後,建議你安裝一個配置檔案。預設的配置檔案位置是/etc/vsftpd.conf. 在VSFTPD軟體分發包內有一個範例配置檔案。
你可以複製其為/etc/vsftpd.conf以做進一步修改。
cp vsftpd.conf /etc
(daidong注:也可能是 cp vsftpd.conf /etc/vsftpd ).

這個預設配置即不容許本地登入也不容許匿名使用者上傳,也許你希望更改這個配置。


其它
===================
測試平臺 (已透過)
-流行的,功能完善的平臺都能測試透過。在以下平臺的較新版本,VSFTPD工作得很好。在其大部分較早的版本下,也執行正常。
- RedHat Linux
- RedHat Enterprise Linux
- Solaris / GNU tools (Solaris 8 or newer)
- SuSE Linux
- Debian Linux
- OpenBSD
- FreeBSD
- NetBSD
- HP-UX / GNU tools
- IRIX / GNU tools
- Mac OS X (note; older versions have setgroups() problem. 10.3.4 reported OK)
虛擬使用者1
=============
這個例子示範瞭如何為虛擬使用者設定VSFTPD/PAM。
虛擬使用者是一個在系統中並不作為一個登入實體而存在的使用者。使用虛擬使用者比使用真實的使用者更安全,因為這個賬號只能用於FTP伺服器。

虛擬使用者經常用來提供給不大可信任的使用者訪問某些資源,而這些資源通常是其他普通使用者不能訪問的。

1)建立虛擬使用者資料庫
我們將使用pam_userdb來認證虛擬使用者。這需要提供一個“db"格式(一種通用資料庫格式)的使用者名稱/密碼檔案。
建立一個"db"格式的檔案,首先要建立一個標準文字檔案,並把使用者名稱,密碼以豎直排列方式輸入。如logins.txt:
tom
foo
fired
bar
這個例子中,tom使用者的密碼是foo.fired使用者的密碼是bar.
以ROOT登入,建立一個資料庫檔案,如下:
db_load -T -t hash -f logins.txt /etc/vsftpd_login.db
(這要求berkeley db程式已經安裝)
(注:一些系統也許安裝了多個版本的"db",所以某些情況下你可能使用"db3_load"才是正確的。對於一些 Debian系統就是這樣。
關鍵在於要讓pam_userdb相信它的登入資料庫是哪一個db版本所產生(一般都是db3,儘管你的系統裡可能安裝的是db4).)

這將建立/etc/vsftpd_login.db檔案。顯然,你希望設定這個檔案的許可權:
chmod 600 /etc/vsftpd_login.db

要了解更多關於維護你的登入資料庫的資訊,請在"berkeley DB"察看相關文件:


2)用你的新資料庫建立一個PAM檔案
請參考範例vsftpd.pam,它包含2行:
auth required /lib/security/pam_userdb.so db=/etc/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd_login

這是告訴PAM用新的資料庫去驗證使用者。把這個PAM檔案複製到PAM目錄,一般是/etc/pam.d
cp vsftpd.pam /etc/pam.d/ftp

3)為虛擬使用者設定home目錄
useradd -d /home/ftpsite virtual
ls -ld /home/ftpsite
(which should give):
drwx------ 3 virtual virtual 4096 Jul 30 00:39 /home/ftpsite

我們已經建立了一個名叫"virtual"的使用者,home目錄是"/home/ftpsite".
我們複製一些東西到這個下載目錄:
cp /etc/hosts /home/ftpsite
chown virtual.virtual /home/ftpsite/hosts

4)建立你的vsftpd.conf配置檔案
請參考這個目錄下的例子。讓我們一行行地看一看這些配置:
anonymous_enable=NO
local_enable=YES

安全起見,遮蔽了匿名使用者,只啟用了非匿名使用者(即虛擬使用者使用的賬號)

write_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO

為了安全請確認這幾個配置,這將關閉寫的許可權。

chroot_local_user=YES

這將把虛擬使用者鎖定在我們在以上設定的/home/ftpsite目錄內。

guest_enable=YES
guest_username=virtual

guest_enable非常重要-它啟用了虛擬使用者!而guest_username說明所有的虛擬使用者都對應我們在上面設定的真實使用者:“virtual".
這同時確定了虛擬使用者在檔案系統中的位置,也就是說,虛擬使用者的home目錄即"virtual"使用者的home目錄:/home/ftpsite。

listen=YES
listen_port=10021

這讓VSFTPD以獨立模式(standalone)執行,而不是從inetd方式啟動。也就是說,你執行VSFTPD可執行檔案就啟動了FTP服務。
同時也讓VSFTPD啟用非標準埠10021來監聽FTP請求(FTP一般使用21埠)。

pasv_min_port=30000
pasv_max_port=30999

這設定了被動模式的FTP請求埠。當你配置了一個防火牆的時候,這個配置就很好用。

複製範例配置檔案到/etc
cp vsftpd.conf /etc/
(daidong注:也可能是/etc/vsftpd)

5)啟動VSFTPD
到VSFTPD二進位制檔案所在的目錄,輸入:
./vsftpd

如果一切正常,這個命令將生效。否則,你將會看到一些錯誤資訊的反饋。

6)測試
啟動另一個會話。(或者ctrl-z,再輸入"bg",讓VSFTPD在後臺執行)。
這是一個FTP會話的例子:

ftp localhost 10021
Connected to localhost (127.0.0.1).
220 ready, dude (vsFTPd 1.1.0: beat me, break me)
Name (localhost:chris): tom
331 Please specify the password.
Password:
230 Login successful. Have fun.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 "/"
ftp> ls
227 Entering Passive Mode (127,0,0,1,117,135)
150 Here comes the directory listing.
226 Transfer done (but failed to open directory).
ftp> size hosts
213 147
ftp>

註釋:
密碼是"foo"
出現”failed to open directory“的話,別擔心。這是因為/home/ftpsite目錄不容許被任意瀏覽。
(我們可以更改anon_world_readable_only=NO以消除告警,但為了安全,還是保留這個配置)。
我們能透過size命令看到我們已經訪問了被我們複製到這裡的"hosts"檔案。

vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
chroot_local_user=YES
guest_enable=YES
guest_username=virtual
listen=YES
listen_port=10021
pasv_min_port=30000
pasv_max_port=30999
虛擬使用者2
===============
這個例子將演示如何擴充套件“VIRTUAL_USERS”那個範例,從而實現更復雜一點的配置。

讓我們假定我們需要2種不同的虛擬使用者:一種只能瀏覽並下載資源,另一種能上傳檔案並瀏覽站內資源。

要啟用這個設定,我們將使用VSFTPD的強大的“單個使用者配置”功能(是V1.1.0後出現的新功能)。

在前一個虛擬使用者範例中,我們建立了2個使用者-tom和fred.
我們將實現fred有寫許可權以上傳新檔案,同時tom只能下載檔案。

1)啟用單個使用者配置功能。
要啟用這個功能,需要增加以下配置行到配置檔案:

user_config_dir=/etc/vsftpd_user_conf

並且建立目錄:

mkdir /etc/vsftpd_user_conf

2)授予tom讀取所有檔案和目錄的許可權
在上一個例子的最後,我們注意到虛擬使用者只能瀏覽所有的完全可讀屬性的目錄和檔案。我們使/home/ftpsite完全可讀,而且被上傳的檔案也
賦予了完全可讀的許可權(daidong注:意思是說這樣虛擬使用者就能讀取所有的檔案了)。但實現這個目的的另一個方法是授權tom能下載那些非完全可讀的檔案。

對於tom,他的配置檔案中需要修改一個設定:
anon_world_readable_only:

設為"anon_world_readable_only=NO" > /etc/vsftpd_user_conf/tom
(daidong注:既把預設配置修改了anon_world_readable_only後,複製到/etc/vsftpd_user_conf下,名字為tom)

驗證一下結果-以tom登入,“ls”將返回一個目錄列表。如果以fred登入將不會如此。

注意:重啟VSFTPD以啟用配置檔案/etc/vsftpd.conf(高階使用者也可以傳送SIGHUP給VSFTPD的監聽程式).

3)授予freg讀取所有檔案/目錄並建立新檔案/目錄的許可權,但讓他不能對已存在的檔案/目錄進行操作.

echo "anon_world_readable_only=NO" > /etc/vsftpd_user_conf/fred
echo "write_enable=YES" >> /etc/vsftpd_user_conf/fred
echo "anon_upload_enable=YES" >> /etc/vsftpd_user_conf/fred

驗證一下-以tom登入,將不能上傳,而fred就可以.
試圖刪除一個檔案--噢,你們倆都不行!
配置詳解
=============
VSFTPD.CONF.5
================
名字
vsftpd.conf :VSFTPD的配置檔案

描述:
vsftpd.conf 用來控制VSFTPD的各項功能。預設狀態下,它的位置是/etc/vsftpd.conf。
(譯者注:也許老的LINUX版本下,配置檔案是這個位置,但新的LINUX版本,例如FC2,配置檔案是在/etc/vsftpd目錄下。
但是也很可能和安裝方式有關,RPM包安裝,配置檔案是/etc/vsftpd.conf. 原始碼包安裝:/etc/vsftpd/vsftpd.conf.我不確定。
但以後我不再特別指出了,真累!!)
然而,你也可以透過修改配置行來指定到其它目錄。這一點很有用,因為也許你想使用一些高階inetd功能,例如xinetd,在一個多虛擬主機的機器上呼叫不同的配置檔案。

格式
VSFTPD.conf 的格式非常簡單,每行要麼是一個註釋,要麼是一個指令。註釋行以#開
疾⒈緩雎緣簟V噶鈽懈袷餃縵攏
配置項=引數值
很重要的一點是,這個格式裡不存在任何空格。
預設的,每一個配置項在配置檔案裡都佔一編輯行,可以被修改。

布林選項
引數值的布林選項可以是:
YES或者NO

allow_anon_ssl
只有ss1_enable啟用了才可以啟用此項。如果設定為YES,匿名使用者將容許使用安全的SSL連線伺服器。
預設值:NO

anon_mkdir_write_enable
如果設為YES,匿名使用者將容許在指定的環境下建立新目錄。如果此項要生效,那麼配置write_enable必須被啟用,並且匿名使用者必須在其父目錄有寫許可權。
預設值:NO

anon_other_write_enable
如果設定為YES,匿名使用者將被授予較大的寫許可權,例如刪除和改名。一般不建議這麼做,除非想完全授權。
預設值:NO

anon_upload_enable
如果設為YES,匿名使用者就容許在指定的環境下上傳檔案。如果此項要生效,那麼配置write_enable必須啟用。並且匿名使用者必須在相關目錄有寫許可權。
預設值:NO

anon_world_readable_only
啟用的時候,匿名使用者只容許下載完全可讀的檔案,這也就容許了ftp使用者擁有對檔案的所有權,尤其是在上傳的情況下。
預設值:YES

anonymous_enable
控制是否容許匿名使用者登入。如果容許,那麼“ftp”和“anonymous”都將被視為“anonymous"而容許登入。
預設值:YES

ascii_download_enable
啟用時,使用者下載時將以ASCII模式傳送檔案。
預設值:NO

ascii_upload_enable
啟用時,使用者上傳時將以ASCII模式傳送檔案。
預設值:NO

async_abor_enable
啟用時,一個特殊的FTP命令"async ABOR”將容許使用。只有不正常的FTP客戶端要使用這一點。而且,這個功能又難於操作,所以,
預設是把它關閉了。但是,有些客戶端在取消一個傳送的時候會被掛死(daidong注:估計是客戶端無響應了),那你只有啟用這個功能才能避免這種情況。
預設值:NO

background
啟用時,並且VSFTPD是“listen”模式啟動的(daidong注:就是standalone模式),VSFTPD將把監聽程式置於後臺。但訪問VSFTPD時,控制檯將立即被返回到SHELL。
預設值:NO

check_shell
注意:這個選項只對非PAM結構的VSFTPD才有效。如果關閉,VSFTPD將不檢查/etc/shells以判定本地登入的使用者是否有一個可用的SHELL。
預設值:YES

chmod_enable
啟用時,將容許使用SITE CHMOD命令。注意,這隻能用於本地使用者。匿名使用者絕不能使用SITE CHMOD。
預設值:YES

chown_uploads
如果啟用,所以匿名使用者上傳的檔案的所有者將變成在chown_username裡指定的使用者。這對管理FTP很有用,也許也對安全有益。
預設值:NO

chroot_list_enable
如果啟用,你要提供一個使用者列表,表內的使用者將在登入後被放在其home目錄,鎖定在虛根下(daidong注:進入FTP後,PWD一下,可以看到當前目錄是"/",這就是虛根。是FTP的根目錄,並非FTP伺服器系統的根目錄)。如果chroot_local_user設為YES後,其含義會發生一點變化。
在這種情況下,這個列表內的使用者將不被鎖定在虛根下。
預設情況下,這個列表檔案是/etc/vsftpd.chroot_list, 但你也可以透過修改chroot_list_file來改變預設值。
預設值:NO

chroot_local_user
如果設為YES,本地使用者登入後將被(預設地)鎖定在虛根下,並被放在他的home目錄下。
警告:
這個配置項有安全的意味,特別是如果使用者有上傳許可權或者可使用SHELL的話。在你確定的前提下,再啟用它。
注意,這種安全暗示並非只存在於VSFTPD,其實是廣泛用於所有的希望把使用者鎖定在虛根下的FTP軟體。
預設值:NO

connect_from_port_20
這用來控制伺服器是否使用20埠號來做資料傳輸。為安全起見,有些客戶堅持啟用。相反,關閉這一項可以讓VSFTPD更加大眾化。
預設值:NO (但在範例配置檔案中,啟用了,即YES)

deny_email_enable
如果啟用,你要提供一個關於匿名使用者的密碼E-MAIL表(daidong注:我們都知道,匿名使用者是用郵件地址做密碼的)以阻止以這些密碼登入的匿名使用者。
預設情況下,這個列表檔案是/etc/vsftpd.banner_emails,但你也可以透過設定banned_email_file來改變預設值。
預設值:NO

dirlist_enable
如果設定為NO,所有的列表命令(daidong注:如ls)都將被返回“permission denied”提示。
預設值:YES

dirmessage_enable
如果啟用,FTP伺服器的使用者在首次進入一個新目錄的時候將顯示一段資訊。預設情況下,會在這個目錄中查詢.message檔案,但你也可以
透過更改message_file來改變預設值。
預設值:NO (但在配置範例檔案中啟用了它)

download_enable
如果設為NO,下載請求將返回“permission denied”。
預設值:YES

dual_log_enable
如果啟用,兩個LOG檔案會各自產生,預設的是/var/log/xferlog和/var/log/vsftpd.log。前一個是wu-ftpd格式的LOG,能被通用工具分析。
後一個是VSFTPD的專用LOG格式。
預設值: NO

force_dot_files
如果啟用,即使客戶端沒有使用“a”標記,(FTP裡)以.開始的檔案和目錄都會顯示在目錄資源列表裡。但是把"."和".."不會顯示。(daidong注:即LINUX下
的當前目錄和上級目錄不會以‘.’或‘..’方式顯示)。
預設值:NO

force_local_data_ssl
只有在ssl_enable啟用後才能啟用。如果啟用,所有的非匿名使用者將被強迫使用安全的SSL登入以在資料線路上收發資料。
預設值:YES

force_local_logins_ssl
只有在ssl_enable啟用後才能啟用。如果啟用,所有的非匿名使用者將被強迫使用安全的SSL登入以傳送密碼。
預設值:YES

guest_enable
如果啟用,所有的非匿名使用者登入時將被視為”遊客“,其名字將被對映為guest_username裡所指定的名字。
預設值:NO

hide_ids
如果啟用,目錄資源列表裡所有使用者和組的資訊將顯示為"ftp".
預設值:NO

listen
如果啟用,VSFTPD將以獨立模式(standalone)執行,也就是說可以不依賴於inetd或者類似的東東啟動。直接執行VSFTPD
的可執行檔案一次,然後VSFTPD就自己去監聽和處理連線請求了。
預設值:NO

listen_ipv6
類似於listen引數的功能,但有一點不同,啟用後VSFTPD會去監聽IPV6套接字而不是IPV4的。這個設定和listen的設定互相排斥。
預設值:NO

local_enable
用來控制是否容許本地使用者登入。如果啟用,/etc/passwd裡面的正常使用者的賬號將被用來登入。
預設值:NO

log_ftp_protocol
啟用後,如果xferlog_std_format沒有被啟用,所有的FTP請求和反饋資訊將被紀錄。這常用於除錯(debugging)。
預設值:NO

ls_recurse_enable
如果啟用,"ls -R"將被容許使用。這是為了避免一點點安全風險。因為在一個大的站點內,在目錄頂層使用這個命令將消耗大量資源。
預設值:NO

no_anon_password
如果啟用,VSFTPD將不會向匿名使用者詢問密碼。匿名使用者將直接登入。
預設值:NO

no_log_lock
啟用時,VSFTPD在寫入LOG檔案時將不會把檔案鎖住。這一項一般不啟用。它對一些工作區作業系統問題,如Solaris / Veritas檔案系統共存時有用。
因為那在試圖鎖定LOG檔案時,有時候看上去象被掛死(無響應)了。(daidong注:這我也不是很理解。所以翻譯未必近乎原意。原文如下:It exists to workaround
operating system bugs such as the Solaris / Veritas filesystem combination
which has been observed to sometimes exhibit hangs trying to lock log files.)
預設值:NO

one_process_model
如果你的LINUX核心是2.4的,那麼也許能使用一種不同的安全模式,即一個連線只用一個程式。只是一個小花招,但能提高FTP的效能。請確定需要後再啟用它,而且也請確定你的
站點是否會有大量的人同時訪問。
預設值:NO

passwd_chroot_enable (daidong注:這段自己看,無語...)
if enabled, along with
.BR chroot_local_user
, then a chroot() jail location may be specified on a per-user basis. Each
user's jail is derived from their home directory string in /etc/passwd. The
occurrence of /./ in the home directory string denotes that the jail is at that
particular location in the path.
預設值:NO

pasv_enable
如果你不想使用被動方式獲得資料連線,請設為NO。
預設值:YES

pasv_promiscuous
如果你想關閉被動模式安全檢查(這個安全檢查能確保資料連線源於同一個IP地址)的話,設為YES。確定後再啟用它(daidong注:原話是:只有你清楚你在做什麼時才啟用它!)
合理的用法是:在一些安全隧道配置環境下,或者更好地支援FXP時(才啟用它)。
預設值:NO

port_enable
如果你想關閉以埠方式獲得資料連線時,請關閉它。
預設值:YES

port_promiscuous
如果你想關閉埠安全檢查(這個檢查可以確保對外的(outgoing)資料線路只通向客戶端)時,請關閉它。確認後再做!
預設值:NO

run_as_launching_user
如果你想讓一個使用者能啟動VSFTPD的時候,可以設為YES。當ROOT使用者不能去啟動VSFTPD的時候會很有用(daidong注:應該不是說ROOT使用者沒有許可權啟動VSFTPD,
而是因為別的,例如安全限制,而不能以ROOT身份直接啟動VSFTPD)。強烈警告!!別啟用這一項,除非你完全清楚你在做什麼(daidong:無語....)!!!隨意地啟動這一項會導致
非常嚴重的安全問題,特別是VSFTPD沒有或者不能使用虛根技術來限制檔案訪問的時候(甚至VSFTPD是被ROOT啟動的)。有一個愚蠢的替代方案是啟用deny_file,將其設定為{/*,*..*}等,
但其可靠性卻不能和虛根相比,也靠不住。
如果啟用這一項,其他配置項的限制也會生效。例如,非匿名登入請求,上傳檔案的所有權的轉換,用於連線的20埠和低於1024的監聽埠將不會工作。其他一些配置項也可能被影響。
預設值:NO

secure_email_list_enable
如果你想只接受以指定E-MAIL地址登入的匿名使用者的話,啟用它。這一般用來在不必要用虛擬使用者的情況下,以較低的安全限制去訪問較低安全級別的資源。如果啟用它,匿名使用者除非
用在email_password_file裡指定的E-MAIL做為密碼,否則不能登入。這個檔案的格式是一個密碼一行,而且沒有額外的空格(daidong注:whitespace,譯為空格,不知道是否正確)。
預設的檔名是:/etc/vsftpd.email_passwords.
預設值:NO

session_support
這將配置是否讓VSFTPD去嘗試管理登入會話。如果VSFTPD管理會話,它會嘗試並更新utmp和wtmp。它也會開啟一個pam會話(pam_session),直到LOGOUT才會關閉它,如果使用PAM進行認證的話。
如果你不需要會話紀錄,或者想VSFTPD執行更少的程式,或者讓它更大眾化,你可以關閉它。
注:utmp和wtmp只在有PAM的環境下才支援。
預設值:NO

setproctitle_enable
如果啟用,VSFTPD將在系統程式列表中顯示會話狀態資訊。換句話說,程式名字將變成VSFTPD會話當前正在執行的動作(等待,下載等等)。為了安全目的,你可以關閉這一項。
預設值:NO

ssl_enable
如果啟用,vsftpd將啟用openSSL,透過SSL支援安全連線。這個設定用來控制連線(包括登入)和資料線路。同時,你的客戶端也要支援SSL才行。
注意:小心啟用此項.VSFTPD不保證OpenSSL庫的安全性。啟用此項,你必須確信你安裝的OpenSSL庫是安全的。
預設值:NO

ssl_sslv2
要啟用ssl_enable才能啟用它。如果啟用,將容許SSL V2協議的連線。TLS V1連線將是首選。
預設值:NO

ssl_sslv3
要啟用ssl_enable才能啟用它。如果啟用,將容許SSL V3協議的連線。TLS V1連線將是首選。
預設值:NO

ssl_tlsv1
要啟用ssl_enable才能啟用它。如果啟用,將容許TLS V1協議的連線。TLS V1連線將是首選。
預設值:YES

syslog_enable
如果啟用,系統log將取代vsftpd的log輸出到/var/log/vsftpd.log.FTPD的了log工具將不工作。
預設值:NO

tcp_wrappers
如果啟用,vsftpd將被tcp_wrappers所支援。進入的(incoming)連線將被tcp_wrappers訪問控制所反饋。如果tcp_wrappers設定了
VSFTPD_LOAD_CONF環境變數,那麼vsftpd將嘗試呼叫這個變數所指定的配置。
預設值:NO

text_userdb_names
預設情況下,在檔案列表中,數字ID將被顯示在使用者和組的區域。你可以編輯這個引數以使其使用數字ID變成文字。為了保證FTP效能,預設
情況下,此項被關閉。
預設值:NO

tilde_user_enable
如果啟用,vsftpd將試圖解析類似於~chris/pics的路徑名(一個"~"(tilde)後面跟著個使用者名稱)。注意,vsftpd有時會一直解析路徑名"~"和"~/"(在這裡,~被解析成內部登入目錄)。
~使用者路徑(~user paths)只有在當前虛根下找到/etc/passwd檔案時才被解析。
預設值:NO

use_localtime
如果啟用,vsftpd在顯示目錄資源列表的時候,在顯示你的本地時間。而預設的是顯示GMT(格林尼治時間)。透過MDTM FTP命令來顯示時間的話也會被這個設定所影響。
預設值:NO

use_sendfile
一個內部設定,用來測試在你的平臺上使用sendfile()系統呼叫的相關好處(benefit).
預設:YES

userlist_deny
這個設定在userlist_enable被啟用後能被驗證。如果你設定為NO,那麼只有在userlist_file裡明確列出的使用者才能登入。
如果是被拒絕登入,那麼在被詢問密碼前,使用者就將被系統拒絕。
預設值:YES

userlist_enable
如果啟用,vsftpd將在userlist_file裡讀取使用者列表。如果使用者試圖以檔案裡的使用者名稱登入,那麼在被詢問使用者密碼前,他們就將被系統拒絕。
這將防止明文密碼被傳送。參見userlist_deny。
預設值:NO

virtual_use_local_privs
如果啟用,虛擬使用者將擁有和本地使用者一樣的許可權。預設情況下,虛擬使用者就擁有和匿名使用者一樣的許可權,而後者往往有更多的限制(特別是寫許可權)。
預設值:NO

write_enable
這決定是否容許一些FTP命令去更改檔案系統。這些命令是STOR, DELE, RNFR, RNTO, MKD, RMD, APPE 和 SITE。
預設值:NO

xferlog_enable
如果啟用,一個log檔案將詳細紀錄上傳和下載的資訊。預設情況下,這個檔案是/var/log/vsftpd.log,但你也可以透過更改vsftpd_log_file來指定其預設位置。
預設值:NO (但在範例配置檔案中,啟用了這一項)

xferlog_std_format
如果啟用,log檔案將以標準的xferlog格式寫入(wu-ftpd使用的格式),以便於你用現有的統計分析工具進行分析。但預設的格式具有更好的可讀性。預設情況下,log檔案是在/var/log/xferlog。
但是,你可以透過修改xferlog_file來指定新路徑。
預設值:NO

======
數字選項
以下是數字配置項。這些項必須設定為非負的整數。為了方便umask設定,容許輸入八進位制數,那樣的話,數字必須以0開始。

accept_timeout
超時,以秒為單位,設定遠端使用者以被動方式建立連線時最大嘗試建立連線的時間。
預設值:60

anon_max_rate
對於匿名使用者,設定容許的最大傳送速率,單位:位元組/秒。
預設值:0 (無限制)

anon_umask
為匿名使用者建立的檔案設定許可權。注意:如果你想輸入8進位制的值,那麼其中的0不同於10進位制的0。
預設值:077

connect_timeout
超時。單位:秒。是設定遠端使用者必須回應PORT型別資料連線的最大時間。
預設值:60

data_connection_timeout
超時,單位:秒。設定資料傳輸延遲的最大時間。時間一到,遠端使用者將被斷開連線。
預設值:300

file_open_mode
對於上傳的檔案設定許可權。如果你想被上傳的檔案可被執行,umask要改成0777。
預設值:0666

ftp_data_port
設定PORT模式下的連線埠(只要connect_from_port_20被啟用)。
預設值:20

idle_session_timeout
超時。單位:秒。設定遠端客戶端在兩次輸入FTP命令間的最大時間。時間一到,遠端客戶將被斷開連線。
預設值:300

listen_port
如果vsftpd處於獨立執行模式,這個埠設定將監聽的FTP連線請求。
預設值:21

local_max_rate
為本地認證使用者設定最大傳輸速度,單位:位元組/秒。
預設值:0(無限制)

local_umask
設定本地使用者建立的檔案的許可權。注意:如果你想輸入8進位制的值,那麼其中的0不同於10進位制的0。
預設值:077

max_clients
如果vsftpd執行在獨立執行模式,這裡設定了容許連線的最大客戶端數。再後來的使用者端將得到一個錯誤資訊。
預設值:0(無限制)

max_per_ip
如果vsftpd執行在獨立執行模式,這裡設定了容許一個IP地址的最大接入客戶端。如果超過了最大限制,將得到一個錯誤資訊。
預設值:0(無限制)

pasv_max_port
指定為被動模式資料連線分配的最大埠。可用來指定一個較小的範圍以配合防火牆。
預設值:0(使用任何埠)

pasv_min_port
指定為被動模式資料連線分配的最小埠。可用來指定一個較小的範圍以配合防火牆。
預設值:0(使用任何埠)

trans_chunk_size
你一般不需要改這個設定。但也可以嘗試改為如8192去減小頻寬限制的影響。
預設值:0(讓vsftpd自行選擇)

===========
STRING 配置項
以下是STRING 配置項

anon_root
設定一個目錄,在匿名使用者登入後,vsftpd會嘗試進到這個目錄下。如果失敗則略過。
預設值:無

banned_email_file
deny_email_enable啟動後,匿名使用者如果使用這個檔案裡指定的E-MAIL密碼登入將被拒絕。
預設值:/etc/vsftpd.banned_emails

banner_file
設定一個文字,在使用者登入後顯示文字內容。如果你設定了ftpd_banner,ftpd_banner將無效。
預設值:無

chown_username
改變匿名使用者上傳的檔案的所有者。需設定chown_uploads。
預設值:ROOT

chroot_list_file
這個項提供了一個本地使用者列表,表內的使用者登入後將被放在虛根下,並鎖定在home目錄。這需要chroot_list_enable項被啟用。
如果chroot_local_user項被啟用,這個列表就變成一個不將列表裡的使用者鎖定在虛根下的使用者列表了。
預設值:/etc/vsftpd.chroot_list

cmds_allowed
以逗號分隔的方式指定可用的FTP命令(post login. USER, PASS and QUIT 是始終可用的命令)。
其他命令將被遮蔽。這是一個強有力的locking down一個FTP伺服器的手段。例如:cmds_allowed=PASV,RETR,QUIT
預設值:無

deny_file
這可以設定一個檔名或者目錄名式樣以阻止在任何情況下訪問它們。並不是隱藏它們,而是拒絕任何試圖對它們進行的操作(下載,改變目錄層,
和其他有影響的操作)。這個設定很簡單,而且不會用於嚴格的訪問控制-檔案系統許可權將優先生效。然而,這個設定對確定的虛擬使用者設定很有用。
特別是如果一個檔案能多個使用者名稱訪問的話(可能是透過軟連線或者硬連線),那就要拒絕所有的訪問名。
建議你為使用檔案系統許可權設定一些重要的安全策略以獲取更高的安全性。如deny_file={*.mp3,*.mov,.private}
預設值:無

dsa_cert_file
這個設定為SSL加密連線指定了DSA證書的位置。
預設值:無(有一個RSA證書就夠了)

email_password_file
在設定了secure_email_list_enable後,這個設定可以用來提供一個備用檔案。
預設值:/etc/vsftpd.email_passwords

ftp_username
這是用來控制匿名FTP的使用者名稱。這個使用者的home目錄是匿名FTP區域的根。
預設值:ftp

ftpd_banner
當一個連線首次接入時將現實一個歡迎介面。
預設值:無(預設的介面會被顯示)

guest_username
參見相關設定guest_enable。這個設定設定了遊客進入後,其將會被對映的名字。
預設:ftp

hide_file
設定了一個檔名或者目錄名列表,這個列表內的資源會被隱藏,不管是否有隱藏屬性。但如果使用者知道了它的存在,
將能夠對它進行完全的訪問。hide_file裡的資源和符合hide_file指定的規則表示式的資源將被隱藏。vsftpd的
規則表示式很簡單,例如hide_file={*.mp3,.hidden,hide*,h?}
預設值:無

listen_address
如果vsftpd執行在獨立模式下,本地介面的預設監聽地址將被這個設定代替。
需要提供一個數字化的地址。
預設值:無

listen_address6
如果vsftpd執行在獨立模式下,要為IPV6指定一個監聽地址(如果listen_ipv6被啟用的話)。
需要提供一個IPV6格式的地址。
預設值:無

local_root
設定一個本地(非匿名)使用者登入後,vsftpd試圖讓他進入到的一個目錄。如果失敗,則略過。
預設值:無

message_file
當進入一個新目錄的時候,會查詢這個檔案並顯示檔案裡的內容給遠端使用者。dirmessage_enable需啟用。
預設值:.message

nopriv_user
這是vsftpd做為完全無特權的使用者的名字。這是一個專門的使用者,比nobody更甚。使用者nobody往往用來在一些機器上做一些重要的事情。
預設值:nobody

pam_service_name
設定vsftpd將要用到的PAM服務的名字。
預設值:ftp

pasv_address
當使用PASV命令時,vsftpd會用這個地址進行反饋。需要提供一個數字化的IP地址。
預設值:無(地址將取自進來(incoming)的連線的套接字)

rsa_cert_file
這個設定指定了SSL加密連線需要的RSA證書的位置。
預設值:/usr/share/ssl/certs/vsftpd.pem

secure_chroot_dir
這個設定指定了一個空目錄,這個目錄不容許ftp user寫入。在vsftpd不希望檔案系統被訪問時,目錄為安全的虛根所使用。
預設值: /usr/share/empty

ssl_ciphers
這個設定將選擇vsftpd為加密的SSL連線所用的SSL密碼。詳細資訊參見ciphers。
預設值:DES-CBC3-SHA

user_config_dir
這個強大的設定容許覆蓋一些在手冊頁中指定的配置項(基於單個使用者的)。用法很簡單,最好結合範例。如果你把user_config_dir
改為/etc/vsftpd_user_conf,那麼以chris登入,vsftpd將呼叫配置檔案/etc/vsftpd_user_conf/chris。
預設值:無

user_sub_token
這個設定將依據一個模板為每個虛擬使用者建立home目錄。例如,如果真實使用者的home目錄透過guest_username為/home/virtual/   $USER 指定,
並且user_sub_token設定為    $USER ,那麼虛擬使用者fred登入後將鎖定在/home/virtual/fred下。
預設值:無

userlist_file
當userlist_enable被啟用,系統將去這裡呼叫檔案。
預設值:/etc/vsftpd.user_list

vsftpd_log_file
只有xferlog_enable被設定,而xferlog_std_format沒有被設定時,此項才生效。這是被生成的vsftpd格式的log檔案的名字。
dual_log_enable和這個設定不能同時啟用。如果你啟用了syslog_enable,那麼這個檔案不會生成,而只產生一個系統log.
預設值:/var/log/vsftpd.log

xferlog_file
這個設定是設定生成wu-ftpd格式的log的檔名。只有啟用了xferlog_enable和xferlog_std_format後才能生效。
但不能和dual_log_enable同時啟用。
預設值:/var/log/xferlog

3、未完成的實驗
his example should quickly show you the possibilites of per-IP configuration
with vsftpd's tcp_wrappers integration. This is new with v1.1.3.

To use this, you need vsftpd built with tcp_wrappers! This is accomplished
by editing "builddefs.h" and changing

#undef VSF_BUILD_TCPWRAPPERS
to
#define VSF_BUILD_TCPWRAPPERS

And then rebuild. If you are lucky your vendor will have shipped the vsftpd
binary with this already done for you.

Next, to enable tcp_wrappers integration, you need this in your vsftpd.conf:

tcp_wrappers=YES

And you'll need a tcp_wrappers config file. An example one is supplied in this
directory: hosts.allow. It lives at /etc/hosts.allow.

Let's have a look at the example:

vsftpd: 192.168.1.3: setenv VSFTPD_LOAD_CONF /etc/vsftpd_tcp_wrap.conf
vsftpd: 192.168.1.4: DENY

The first line:
If a client connects from 192.168.1.3, then vsftpd will apply the vsftpd
config file /etc/vsftpd_tcp_wrap.conf to the session! These settings are
applied ON TOP of the default vsftpd.conf.
This is obviously very powerful. You might use this to apply different
access restrictions for some IPs (e.g. the ability to upload).
Or you could give certain classes of IPs the ability to skip connection
limits (max_clients=0).
Or you could increase / decrease the bandwidth limiter for certain classes
of IPs.
You get the point icon_smile.gif

The second line:
Denies the ability of 192.168.1.4 to connect. Very useful to take care of
troublemakers. And now you don't need xinetd to do it - hurrah.


This example shows how you might set up virtual hosts. Virtual hosting is
where different clients access your machine on different IP addresses (virtual
IPs) and get redirected to different ftp sites.

For example, if your machine responds to two IPs - 127.0.0.1 and 127.0.0.2,
you could have the two different IPs represent two totally different FTP sites.

For this example, we are going to build on the "INTERNET_SITE" example.

Step 1) Set up a virtual IP address.

ifconfig eth0:1 192.168.1.10 up
(the standard IP address is 192.168.1.2)
(note - this isn't quite complete, the route for local connects hasn't been
added, but it will do for now)


Step 2) Create a user / location for the new virtual site.

useradd -d /var/ftp_site2 ftp_site2
chown root.root /var/ftp_site2
chmod a+rx /var/ftp_site2
umask 022
mkdir /var/ftp_site2/pub
echo "test" > /var/ftp_site2/pub/content


Step 3) Modify the existing site to respond to the primary IP.

Edit /etc/xinetd.d/vsftpd, and add the config line:
This example shows how you might set up virtual hosts. Virtual hosting is
where different clients access your machine on different IP addresses (virtual
IPs) and get redirected to different ftp sites.

For example, if your machine responds to two IPs - 127.0.0.1 and 127.0.0.2,
you could have the two different IPs represent two totally different FTP sites.

For this example, we are going to build on the "INTERNET_SITE" example.

Step 1) Set up a virtual IP address.

ifconfig eth0:1 192.168.1.10 up
(the standard IP address is 192.168.1.2)
(note - this isn't quite complete, the route for local connects hasn't been
added, but it will do for now)


Step 2) Create a user / location for the new virtual site.

useradd -d /var/ftp_site2 ftp_site2
chown root.root /var/ftp_site2
chmod a+rx /var/ftp_site2
umask 022
mkdir /var/ftp_site2/pub
echo "test" > /var/ftp_site2/pub/content


Step 3) Modify the existing site to respond to the primary IP.

Edit /etc/xinetd.d/vsftpd, and add the config line:

bind = 192.168.1.2


Step 4) Create the new site, responding on the virtual IP.

cp /etc/xinetd.d/vsftpd /etc/xinetd.d/vsftpd2

Edit vsftpd2, and change
- The bind line to refer to the IP address 192.168.1.10
- Add the line
server_args = /etc/vsftpd_site2.conf

This launches this FTP site with a different vsftpd configuration file.

cp /etc/vsftpd.conf /etc/vsftpd_site2.conf

Add two lines:
ftp_username=ftp_site2
ftpd_banner=This is the alternative FTP site.


Step 5) Restart xinetd and test!

/etc/rc.d/init.d/xinetd restart

[chris@localhost vsftpd]   $ ftp 192.168.1.2
Connected to 192.168.1.2 (192.168.1.2).
220 ready, dude (vsFTPd 1.1.0: beat me, break me)
Name (192.168.1.2:chris): [chris@localhost vsftpd]   $
[chris@localhost vsftpd]   $ ftp 192.168.1.2
Connected to 192.168.1.2 (192.168.1.2).
220 ready, dude (vsFTPd 1.1.0: beat me, break me)
Name (192.168.1.2:chris):
530 This FTP server is anonymous only.
Login failed.
ftp> quit
221 Goodbye.

[chris@localhost vsftpd]   $ ftp 192.168.1.10
Connected to 192.168.1.10 (192.168.1.10).
220 This is the alternative FTP site.
Name (192.168.1.10:chris):
530 This FTP server is anonymous only.
Login failed.
ftp>

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9697/viewspace-1012205/,如需轉載,請註明出處,否則將追究法律責任。

相關文章