安裝篇
===============
這個文件詳細介紹了如何從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就可以.
試圖刪除一個文件--噢,你們倆都不行!
[火星人 ] vsftpd配置手冊(2)已經有563次圍觀