VSFTPD官方資料翻譯版(不完整版)---
翻譯了部分VSFTPD的官方資料。有些知道是什么意思,但難于翻譯。有些涉及專業的知識,我自己也不懂,只好按字面翻譯。有些我自己看不懂,只好盡量翻譯。
如果看了其中一部分覺得糊涂,請參閱官方文擋。
安裝篇
===============
這個文件詳細介紹了如何從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"察看相關文檔:
http://www.sleepycat.com/docs/utility/index.html
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就可以.
試圖刪除一個文件--噢,你們倆都不行!
posted on 2010-03-14 16:55 旅途 閱讀(765) 評論(0) 編輯 收藏 引用 所屬分類: LINUX基礎、管理