vsftp配置大全---超完整版,首發CU之FTP區

火星人 @ 2014-03-04 , reply:0
←手機掃碼閱讀

vsftp配置大全---超完整版,首發CU之FTP區

人來瘋技術文檔之vsftp配置大全
人來瘋 adminxu
人來瘋論壇 http://www.d-1701.com/bbs
MSN:xu1701@hotmail.com
                                                                 
版權信息:未經許可不得轉載,轉載本文章請與人來瘋論壇壇主adminxu聯繫!
聯繫方法:使用msn
環境:
RedHat  AS4
說明:
如果不做說明,一般安裝命令均使用ROOT許可權,用 # 表示

特別說明:無

以下文章介紹Liunx 環境下vsftpd的三種實現方法

一、前言
Vsftp(Very Secure FTP)是一種在Unix/Linux中非常安全且快速穩定的FTP伺服器,目前已經被許多大型站點所採用,如ftp.redhat.com,ftp.kde.org,ftp.gnome.org.等。Vsftpd的實現有三種方式
1、匿名用戶形式:在默認安裝的情況下,系統只提供匿名用戶訪問
2、本地用戶形式:以/etc/passwd中的用戶名為認證方式
3、虛擬用戶形式:支持將用戶名和口令保存在資料庫文件或資料庫伺服器中。相對於FTP的本地用戶形式來說,虛擬用戶只是FTP伺服器的專有用戶,虛擬用戶只能訪問FTP伺服器所提供的資源,這大大增強系統本身的安全性。相對於匿名用戶而言,虛擬用戶需要用戶名和密碼才能獲取FTP伺服器中的文件,增加了對用戶和下載的可管理性。對於需要提供下載服務,但又不希望所有人都可以匿名下載;既需要對下載用戶進行管理,又考慮到主機安全和管理方便的FTP站點來說,虛擬用戶是一種極好的解決方案。
   
二、獲取最新版的Vsftp程序
Vsftp官方下載:ftp://vsftpd.beasts.org/users/cevans/vsftpd-2.0.3.tar.gz,目前已經到2.0.3版本。假設我們已經將vsftpd-2.0.3.tar.gz文件下載到伺服器的/home/xuchen目錄
# cd /home/xuchen
# tar xzvf vsftpd-2.0.3.tar.gz //解壓縮程序
# cd vsftpd-2.0.3
《解決方案》

vsftp配置大全---超完整版,首發CU之FTP區

三、三種方式的實現                                       
1、匿名用戶形式實現
# vi builddefs.h  \\編輯builddefs.h 文件,文件內容如下:

#ifndef VSF_BUILDDEFS_H

#define VSF_BUILDDEFS_H
#undef VSF_BUILD_TCPWRAPPERS
#define VSF_BUILD_PAM
#undef VSF_BUILD_SSL

#endif /* VSF_BUILDDEFS_H */
將以上undef的都改為define,支持tcp_wrappers,支持PAM認證方式,支持SSL

# make  //直接在vsftpd-2.0.3里用make編譯
# ls -l vsftpd
-rwxr-xr-x  1 root root 86088 Jun  6 12:29 vsftpd  //可執行程序已被編譯成功

創建必要的帳號,目錄:
# useradd nobody  //可能你的系統已經存在此帳號,那就不用建立
# mkdir /usr/share/empty  //可能你的系統已經存在此目錄,那就不用建立
# mkdir /var/ftp  //可能你的系統已經存在此目錄,那就不用建立
# useradd -d /var/ftp ftp  //可能你的系統已經存在此帳號,那就不用建立
# chown root:root /var/ftp
# chmod og-w /var/ftp
請記住,如果你不想讓用戶在本地登陸,那麼你需要把他的登陸SHELL設置成/sbin/nologin,比如以上的nobody和ftp我就設置成/sbin/nologin

安裝vsftp配置文件,可執行程序,man等:
# install -m 755 vsftpd /usr/local/sbin/vsftpd-ano
# install -m 644 vsftpd.8 /usr/share/man/man8
# install -m 644 vsftpd.conf.5 /usr/share/man/man5
# install -m 644 vsftpd.conf /etc/vsftpd-ano.conf
這樣就安裝完成了,那麼我們開始進行簡單的配置

# vi /etc/vsftpd-ano.conf ,將如下三行加入文件
listen=YES
listen_port=21
tcp_wrappers=YES
anon_root=/var/ftp //設置匿名用戶本地目錄,和ftp用戶目錄必須相同
listen=YES的意思是使用standalone啟動vsftpd,而不是super daemon(xinetd)控制它 (vsftpd推薦使用standalone方式)
# /usr/local/sbin/vsftpd-ano /etc/vsftpd-ano.conf &  //以後台方式啟動vsftpd
注意:每行的值都不要有空格,否則啟動時會出現錯誤,舉個例子,假如我在listen=YES后多了個空格,那我啟動時就出現如下錯誤:
500 OOPS: bad bool value in config file for: listen

測試搭建好的匿名用戶方式
# ftp 127.0.0.1
Connected to 127.0.0.1.
220 (vsFTPd 2.0.3)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (127.0.0.1:root): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>; pwd
257 "/"
ftp>; quit
221 Goodbye.
#
OK,已經完成了,very nice.

高級配置
細心的朋友可能已經看出來我們只在默認配置文件增加了四行,就實現了FTP連接(也證明了vsftpd的易用性),那麼讓我們傳個文件吧,呀!!傳輸失敗了(見圖1)
為什麼呢?因為 vsftpd 是為了安全需要,/var/ftp目錄不能把所有的許可權打開,所以我們這時要建一個目錄pub,當然也還是需要繼續修改配置文件的。
# mkdir /var/ftp/pub
# chmod -R 777 /var/ftp/pub

為了測試方便,我們先建立一個名為kill-ano的腳本,是為了殺掉FTP程序的
#!/bin/bash
a=`/bin/ps -A | grep vsftpd-ano | awk '{print $1}'`
kill -9 $a

那麼現在大家看看我的匿名伺服器配置文件吧
anonymous_enable=YES  //允許匿名訪問,這是匿名伺服器必須的
write_enable=YES  //全局配置可寫
no_anon_password=YES //匿名用戶login時不詢問口令
anon_umask=077  //匿名用戶上傳的文件許可權是-rw----
anon_upload_enable=YES  //允許匿名用戶上傳文件
anon_mkdir_write_enable=YES  //允許匿名用戶建立目錄
anon_other_write_enable=YES  //允許匿名用戶具有建立目錄,上傳之外的許可權,如重命名,刪除
dirmessage_enable=YES  //當使用者轉換目錄,則會顯示該目錄下的.message信息
xferlog_enable=YES   //記錄使用者所有上傳下載信息
xferlog_file=/var/log/vsftpd.log  //將上傳下載信息記錄到/var/log/vsftpd.log中
xferlog_std_format=YES   //日誌使用標準xferlog格式
idle_session_timeout=600  //客戶端超過600S沒有動作就自動被伺服器踢出
data_connection_timeout=120  //數據傳輸時超過120S沒有動作被伺服器踢出
chown_uploads=YES
chown_username=daemon  //上傳文件的屬主
ftpd_banner=Welcome to d-1701.com FTP service.  //FTP歡迎信息
anon_max_rate=80000  //這是匿名用戶的下載速度為80KBytes/s
check_shell=NO  //不檢測SHELL

現在再測試,先kill掉再啟動FTP程序
# ./kill-ano
# /usr/local/sbin/vsftpd-ano /etc/vsftpd-ano.conf &
上傳一個文件測試一下,怎麼樣?OK了吧,下載剛上傳的那個文件,恩?不行,提示
550 Failed to open file.
傳輸已失敗!
傳輸隊列已完成
1 個文件傳輸失敗

沒有關係,你記得咱們設置了anon_umask=077了嗎?所以你下載不了,如果你到伺服器上touch 一個文件(644),測試一下,是可以被下載下來的,好了,匿名伺服器就說到這裡了。


2、本地用戶形式實現
# cd /home/xuchen/vsftpd-2.0.3  //進入vsftpd-2.0.3的源代碼目錄
# make clean  //清除編譯環境
# vi builddefs.h  \\繼續編輯builddefs.h 文件,文件內容如下:
#ifndef VSF_BUILDDEFS_H

#define VSF_BUILDDEFS_H
#define VSF_BUILD_TCPWRAPPERS
#define VSF_BUILD_PAM
#define VSF_BUILD_SSL

#endif /* VSF_BUILDDEFS_H */
將以上define VSF_BUILD_PAM行的define改為undef,支持tcp_wrappers,不支持PAM認證方式,支持SSL,記住啊,如果支持了PAM認證方式,你本地用戶是不能登陸的。

# make  //直接在vsftpd-2.0.3里用make編譯
# ls -l vsftpd
-rwxr-xr-x  1 root root 84712 Jun  6 18:56 vsftpd  //可執行程序已被編譯成功

創建必要的帳號,目錄:
# useradd nobody  //可能你的系統已經存在此帳號,那就不用建立
# mkdir /usr/share/empty  //可能你的系統已經存在此目錄,那就不用建立
# mkdir /var/ftp  //可能你的系統已經存在此目錄,那就不用建立
# useradd -d /var/ftp ftp  //可能你的系統已經存在此帳號,那就不用建立
# chown root:root /var/ftp
# chmod og-w /var/ftp
請記住,如果你不想讓用戶在本地登陸,那麼你需要把他的登陸SHELL設置成/sbin/nologin,比如以上的nobody和ftp我就設置成/sbin/nologin

安裝vsftp配置文件,可執行程序,man等:
# install -m 755 vsftpd /usr/local/sbin/vsftpd-loc
# install -m 644 vsftpd.8 /usr/share/man/man8
# install -m 644 vsftpd.conf.5 /usr/share/man/man5
# install -m 644 vsftpd.conf /etc/vsftpd-loc.conf
這樣就安裝完成了,那麼我們開始進行簡單的配置

# vi /etc/vsftpd-loc.conf ,將如下三行加入文件
listen=YES
listen_port=21
tcp_wrappers=YES //支持tcp_wrappers,限制訪問(/etc/hosts.allow,/etc/hosts.deny)
listen=YES的意思是使用standalone啟動vsftpd,而不是super daemon(xinetd)控制它 (vsftpd推薦使用standalone方式),注意事項請參看匿名用戶的配置。
anonymous_enable=NO
local_enable=YES  //這兩項配置說不允許匿名用戶登陸,允許本地用戶登陸
# /usr/local/sbin/vsftpd-loc /etc/vsftpd-loc.conf &   //以後台方式啟動vsftpd

測試搭建好的匿名用戶方式,先測試root用戶吧 :)
# ftp 127.0.0.1
Connected to 127.0.0.1.
220 (vsFTPd 2.0.3)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (127.0.0.1:root): root
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>; pwd
257 "/root"
ftp>; quit
221 Goodbye.
我們看到root用戶可以登陸到ftp,他的登陸目錄就是自己的主目錄。
再測試一個系統用戶,那我們先建立一個用戶名叫xuchen的
# useradd xuchen
# passwd xuchen
Changing password for user xuchen.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
建立好了,讓我們開始測試吧!!
# ftp 127.0.0.1
Connected to 127.0.0.1.
220 (vsFTPd 2.0.3)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (127.0.0.1:root): xuchen
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>; pwd
257 "/home/xuchen"
ftp>; quit
221 Goodbye.
我們看到xuchen用戶可以登陸到ftp,他的登陸目錄也是自己的主目錄。哈哈,又完成了!
高級配置
細心的朋友可能已經看出來如果我們不支持PAM認證方式,那麼本地用戶就可以登陸,而默認編譯的vsftpd支持PAM認證方式,所以是不支持本地用戶登陸的。恩,從這點說,這也是vsftp安全的一個表現----禁止本地用戶登陸。
我們登陸後進行測試,傳一個文件上去,得,失敗了,那下載個文件下來吧,恩,這是成功的(見圖2),而且我們發現我們可以進入到系統根目錄(見圖3),這樣很危險。



那麼改配置文件吧,為了測試方便,我們先建立一個名為kill-loc的腳本,也是為了殺掉FTP程序的
#!/bin/bash
a=`/bin/ps -A | grep vsftpd-loc | awk '{print $1}'`
kill -9 $a

現在提供我的本地用戶驗證伺服器配置文件吧(在匿名里寫過的註釋我就不在這裡寫了)
listen=YES
listen_port=21
tcp_wrappers=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022  //本地用戶文件上傳后的許可權是-rw-r-r
anon_upload_enable=NO
anon_mkdir_write_enable=NO
dirmessage_enable=YES
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
connect_from_port_20=YES
chroot_local_user=YES //限制用戶在自己的主目錄
#local_root=/ftp  //你可以指定所有本地用戶登陸后的目錄,如果不設置此項,用戶都會登陸於自己的主目錄,就跟咱們前面測試的結果是一樣的
local_max_rate=500000  //本地用戶的下載速度為500KBytes/s
idle_session_timeout=600
data_connection_timeout=120
nopriv_user= nobody   //設定服務執行者為nobody,vsftpd推薦使用一個許可權很低的用戶,最好是沒有家目錄(/dev/null),沒有登陸shell(/sbin/nologin),系統會更安全
ftpd_banner=Welcome to d-1701.com FTP service.
check_shell=NO

userlist_enable=YES
userlist_deny=YES
userlist_file=/etc/vsftpd.denyuser
以上三條設定不允許登陸的用戶,用戶列表存放在/etc/vsftpd.denyuser中,一行一個帳號如果我把xuchen這個用戶加到vsftpd.denyuser里,那麼登陸時會出現如下錯誤:
# ftp 127.0.0.1
Connected to 127.0.0.1.
220 Welcome to d-1701.com FTP service.
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (127.0.0.1:root): xuchen
530 Permission denied.
Login failed.
呵呵,有意思吧,自己測試吧,本地用戶登陸方式就介紹到這裡吧!

3、虛擬用戶形式實現(db及mysql形式)
# cd /home/xuchen/vsftpd-2.0.3  //進入vsftpd-2.0.3的源代碼目錄
# make clean  //清除編譯環境
# vi builddefs.h  \\繼續編輯builddefs.h 文件,文件內容如下:
#ifndef VSF_BUILDDEFS_H

#define VSF_BUILDDEFS_H
#define VSF_BUILD_TCPWRAPPERS
#undef VSF_BUILD_PAM
#define VSF_BUILD_SSL

#endif /* VSF_BUILDDEFS_H */
將以上define VSF_BUILD_PAM行的undef改為define,支持tcp_wrappers,支持PAM認證方式,支持SSL,和匿名用戶形式是一樣的。

# make  //直接在vsftpd-2.0.3里用make編譯
# ls -l vsftpd
-rwxr-xr-x  1 root root 86088 Jun  6 22:26 vsftpd  //可執行程序已被編譯成功

創建必要的帳號,目錄:
# useradd nobody  //可能你的系統已經存在此帳號,那就不用建立
# mkdir /usr/share/empty  //可能你的系統已經存在此目錄,那就不用建立
# mkdir /var/ftp  //可能你的系統已經存在此目錄,那就不用建立
# useradd -d /var/ftp ftp  //可能你的系統已經存在此帳號,那就不用建立
# chown root:root /var/ftp
# chmod og-w /var/ftp
請記住,如果你不想讓用戶在本地登陸,那麼你需要把他的登陸SHELL設置成/sbin/nologin,比如以上的nobody和ftp我就設置成/sbin/nologin

安裝vsftp配置文件,可執行程序,man等:
# install -m 755 vsftpd /usr/local/sbin/vsftpd-pam
# install -m 644 vsftpd.8 /usr/share/man/man8
# install -m 644 vsftpd.conf.5 /usr/share/man/man5
# install -m 644 vsftpd.conf /etc/vsftpd-pam.conf
這樣就安裝完成了,那麼我們開始進行簡單的配置

對於用DB庫存儲用戶名及密碼的方式來說:
(1)查看系統是否有相應軟體包

# rpm –qa | grep db4
db4-devel-4.2.52-7.1
db4-4.2.52-7.1
db4-utils-4.2.52-7.1
(2)建立一個logins.txt的文件,單行為用戶名,雙行為密碼,例如
# vi /home/logins.txt

xuchen
12345

(3)建立資料庫文件並設置文件屬性
# db_load -T -t hash -f /home/logins.txt /etc/vsftpd_login.db
# chmod 600 /etc/vsftpd_login.db
(4)建立認證文件
# vi /etc/pam.d/ftp 插入如下兩行
auth required /lib/security/pam_userdb.so db=/etc/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd_login
(5)建立一個虛擬用戶
useradd -d /home/vsftpd -s /sbin/nologin vsftpd
ls -ld /home/vsftpd
drwx------  3 vsftpd vsftpd 1024 Jun  6 22:55 /home/vsftpd/
(6)編寫配置文件(注意事項請參看匿名用戶的配置,這裡不再贅述)
# vi /etc/vsftpd-pam.conf
listen=YES
listen_port=21
tcp_wrappers=YES //支持tcp_wrappers,限制訪問(/etc/hosts.allow,/etc/hosts.deny)
listen=YES的意思是使用standalone啟動vsftpd,而不是super daemon(xinetd)控制它 (vsftpd推薦使用standalone方式)
anonymous_enable=NO
local_enable=YES  //PAM方式此處必須為YES,如果不是將出現如下錯誤:
500 OOPS: vsftpd: both local and anonymous access disabled!
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=vsftpd //這兩行的意思是採用虛擬用戶形式
virtual_use_local_privs=YES //虛擬用戶和本地用戶許可權相同

pasv_enable=YES //建立資料聯機採用被動方式
pasv_min_port=30000 //建立資料聯機所可以使用port 範圍的上界,0表示任意。默認值為0。
pasv_max_port=30999 //建立資料聯機所可以使用port 範圍的下界,0表示任意。默認值為0。
(7)啟動程序
# /usr/local/sbin/vsftpd-pam /etc/vsftpd-pam.conf &
(8)測試連通及功能
# vi /home/vsftpd/test //建立一個文件,內容如下
1234567890
# chown vsftpd.vsftpd /home/vsftpd/test

# ftp 127.0.0.1
Connected to 127.0.0.1.
220 (vsFTPd 2.0.3)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (127.0.0.1:root): xuchen
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>; pwd
257 "/"
ftp>; size test
213 11
ftp>; quit
221 Goodbye.
OK,用戶名為xuchen,密碼為12345可以連接到FTP伺服器,看不到文件列表,但可以下載已知文件名的文件,不能上傳文件,非常安全吧!!

如果我們需要用戶看到文件,怎麼辦?也好辦,在配置文件中加入如下語句:
anon_world_readable_only=NO  //匿名登入者不能下載可閱讀的檔案,默認值為YES

如果需要讓用戶上傳文件和下載文件分開,建議如下這麼做
# vi /home/logins.txt
xuchen
12345
upload
45678
//首先建立虛擬用戶upload,密碼為45678
# db_load -T -t hash -f /home/logins.txt /etc/vsftpd_login.db //更新數據文件

# mkdir /home/vsftpd/upload
# vi /etc/vsftpd-pam.conf 加入如下語句
user_config_dir=/etc/vsftpd_user_conf
# mkdir /etc/vsftpd_user_conf
# vi /etc/vsftpd_user_conf/upload 文件內容如下
local_root=/home/vsftpd/upload
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

# chmod 700 /home/vsftpd/upload
# chown vsftpd.vsftpd /home/vsftpd/upload/

這樣,xuchen用戶可以下載/home/vsftpd里的文件及upload里的文件,而upload用戶可以上傳和下載/home/vsftpd/upload文件夾的東西,但不能到/home/vsftpd里下載文件,很簡單得實現了分用戶上傳和下載

對於用Mysql庫存儲用戶名及密碼的方式來說:
就是把用戶名和密碼放在mysql庫里,實現起來也相當簡單
(1)建立一個庫並設置相應許可權
# mysql –p
mysql>;create database ftpd;
mysql>;use ftpd;
mysql>;create table user(name char(20) binary,passwd char(20) binary);
mysql>;insert into user (name,passwd) values ('test1','12345');
mysql>;insert into user (name,passwd) values ('test2','54321');
mysql>;grant select on ftpd.user to ftpd@localhost identified by '123456';
mysql>;flush privileges; 刷新許可權設置
mysql>;quit
(2)下載libpam-mysql進行安裝編譯
下載地址如下:
http://nchc.dl.sourceforge.net/sourceforge/pam-mysql/pam_mysql-0.5.tar.gz
假設我們把它放在了/home/xuchen目錄下
# cd /home/xuchen
# tar xzvf pam_mysql-0.5.tar.gz
# cd pam_mysql
# make
# cp pam_mysql.so /lib/security
(3)建立PAM認證信息
# vi /etc/pam.d/ftp ,內容如下
auth required /lib/security/pam_mysql.so user=ftpd passwd=123456 host=localhost db=ftpd table=user usercolumn=name passwdcolumn=passwd crypt=0

account required /lib/security/pam_mysql.so user=ftpd passwd=123456 host=localhost db=ftpd table=user usercolumn=name passwdcolumn=passwd crypt=0

注意:
crypt= n
crypt=0: 明文密碼
crypt=1: 使用crpyt()函數(對應SQL數據里的encrypt(),encrypt()隨機產生salt)
crypt=2: 使用MYSQL中的password()函數加密
crypt=3:表示使用md5的散列方式
(4)建立本地虛擬用戶
# useradd -d /home/ftpd -s /sbin/nologin ftpd

(5)下面就差修改vsftpd.conf文件了,我把我的提供給大家參考吧:)
# vi /etc/vsftpd-pam1.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
chroot_local_user=YES
guest_enable=YES
guest_username=ftpd
listen=YES
listen_port=21
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=30999
anon_world_readable_only=NO
virtual_use_local_privs=YES

#user_config_dir=/etc/vsftpd_user_conf
可以看出,和前面的用db庫來驗證沒有多大區別,其實就是一個東西,一個用mysql來驗證,一個用db庫,我個人比較傾向於用db庫來驗證,在這個環境下,相對於Mysql來說,安全係數更高一點。

(6)# /usr/local/sbin/vsftpd-pam /etc/vsftpd-pam1.conf &   //以後台方式啟動

(7)測試連通
# ftp 127.0.0.1
Connected to 127.0.0.1.
220 (vsFTPd 2.0.3)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (127.0.0.1:root): test1
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>; pwd
257 "/"
ftp>; quit
221 Goodbye.
看,成功了!!這樣就實現了mysql的認證方式,很簡單吧??

4、為FTP增加磁碟配額,從而避免惡意用戶用垃圾數據塞滿你的硬碟
我首先要說的是這個功能是系統自帶的,而不是vsftp 的功能之一,千萬別搞混了。好了,我們先假設我們的系統用戶ftpd的主目錄是/home/ftpd,它是建立在/home分區中,那麼如果我們要對ftpd用戶進行磁碟限額,那我們需要修改/etc/fstab中根分區的記錄,將/home分區的第4個欄位改成defaults,usrquota,如下:
LABEL=/home   /home   ext3    defaults,usrquota     1 2
# reboot  //重新啟動系統使設置生效
也可以用
# mount -o remount /dev/sda6  ///dev/sda6的掛接點就是/home,這樣可以不用啟動系統。
這裡我還要說明一下,如果我們對一個組進行磁配額,那我們需要增加參數grpquota,例如
LABEL=/home   /home   ext3    defaults,grpquota     1 2
也可以
LABEL=/home   /home   ext3    defaults,usrquota,grpquota     1 2
你想怎麼限制都可以,自己組合參數吧。
# quotacheck -avu
說明:a-自動開啟掛載文件系統的配額,v-顯示信息,u-啟用用戶配額or g-啟用組配額
# edquota ftpd //為用戶ftpd設置磁碟配額
OR
# edquota -g grp  //為組grp設置磁碟配額
系統會自動打開配額文件,如下:
Disk quotas for user ftpd (uid 502):
  Filesystem         blocks       soft       hard     inodes     soft     hard
  /dev/sda6           424          0          0         13        0        0
第一列是啟用了配額的文件系統的名稱。第二列顯示了用戶當前使用的塊數,單位為KB。隨後的兩列用來設置用戶在該文件系統上的軟硬塊限度。inodes 列顯示了用戶當前使用的i節點數量。最後兩列用來設置用戶在該文件系統上的軟硬i節點限度.硬限是用戶或組群可以使用的磁碟空間的絕對最大值。達到了該限度后,磁碟空間就不能再被用戶或組群使用了。軟限定義可被使用的最大磁碟空間量。和硬限不同的是,軟限可以在一段時期內被超過。這段時期被稱為過渡期(grace period),默認七天的超越。過渡期可以用秒鐘、分鐘、小時、天數、周數、或月數表示。如果以上值中的任何一個被設置為 0,那個限度就不會被設置。我設置了硬塊限度為1KB,是為了測試方便。
# quotaon  -avu  //打開磁碟配額監控進程,u是用戶g是組,這裡我沒設置g參數
要校驗用戶的配額是否被設置,我們可以使用以下命令:
# quota ftpd
Disk quotas for user ftpd (uid 502):
  Filesystem  blocks   quota   limit    grace   files   quota   limit   grace
/dev/sda6     424*    0      1            13      0      0        
# edquota –t(-g)來設置過渡期(grace period) //當然只針對軟限制而言
和另一個 edquota 命令相似,這個命令也會在文本編輯器中打開當前的文件系統配額:
Grace period before enforcing soft limits for users:
Time units may be: days, hours, minutes, or seconds
  Filesystem             Block grace period     Inode grace period
/dev/sda6                     7days                  7days
按你的需要修改後存檔退出
用以下命令顯示磁碟配額使用狀態
# repquota  -a  或 repquota  /dev/sda6(用戶配額)
# repquota -g -a 或 repquota -a /dev/sda6 (組的配額)
如果一切按照你的意思實施了,那麼我們就進行測試了!如下圖4

我們傳了一個>;1k的文件,沒有成功,這樣我們就成功的為用戶ftpd增添了磁碟配額,要是哪一天你不想加磁碟配額了,怎麼辦?參看如下命令:
取消某個文件系統的配額限制
#quotaoff  -vug /dev/sda6  //刪除home分區的磁碟限額
#刪除/etc/fstab中設置配額的部分
修改軟配額的最大超越時間
注意:
/,/boot/,/proc,/mnt/cdrom等不要使用配額,沒用。而且磁碟配額不適合FAT和FAT32系統。
以後當新設置了某個用戶的配額,可以使用如下命令,馬上生效。
# quotacheck -auvgm       --是不嘗試重新掛載文件系統

備註:
1、vsftpd配置參數詳細整理
#接受匿名用戶
anonymous_enable=YES
#匿名用戶login時不詢問口令
no_anon_password=YES
#匿名用戶主目錄
anon_root=(none)
#接受本地用戶
local_enable=YES
#本地用戶主目錄
local_root=(none)
#如果匿名用戶需要密碼,那麼使用banned_email_file裡面的電子郵件地址的用戶不能登錄
deny_email_enable=YES
#僅在沒有pam驗證版本時有用,是否檢查用戶有一個有效的shell來登錄
check_shell=YES
#若啟用此選項,userlist_deny選項才被啟動
userlist_enable=YES
#若為YES,則userlist_file中的用戶將不能登錄,為NO則只有userlist_file的用戶可以登錄
userlist_deny=NO
#如果和chroot_local_user一起開啟,那麼用戶鎖定的目錄來自/etc/passwd每個用戶指定的目錄(這個不是很清楚,很哪位熟悉的指點一下)
passwd_chroot_enable=NO
#定義匿名登入的使用者名稱。默認值為ftp。
ftp_username=FTP

#################用戶許可權控制###############
#可以上傳(全局控制).
write_enable=YES
#本地用戶上傳文件的umask
local_umask=022
#上傳文件的許可權配合umask使用
#file_open_mode=0666
#匿名用戶可以上傳
anon_upload_enable=NO
#匿名用戶可以建目錄
anon_mkdir_write_enable=NO
匿名用戶其它的寫權利(更改許可權?)
anon_other_write_enable=NO
如果設為YES,匿名登入者會被允許下載可閱讀的檔案。默認值為YES。
anon_world_readable_only=YES
#如果開啟,那麼所有非匿名登陸的用戶名都會被切換成guest_username指定的用戶名
#guest_enable=NO
所有匿名上傳的文件的所屬用戶將會被更改成chown_username
chown_uploads=YES
匿名上傳文件所屬用戶名
chown_username=lightwiter
#如果啟動這項功能,則所有列在chroot_list_file之中的使用者不能更改根目錄
chroot_list_enable=YES
#允許使用"async ABOR"命令,一般不用,容易出問題
async_abor_enable=YES
管控是否可用ASCII 模式上傳。默認值為NO。
ascii_upload_enable=YES
#管控是否可用ASCII 模式下載。默認值為NO。
ascii_download_enable=YES
#這個選項必須指定一個空的數據夾且任何登入者都不能有寫入的許可權,當vsftpd 不需要file system 的許可權時,就會將使用者限制在此數據夾中。默認值為/usr/share/empty
secure_chroot_dir=/usr/share/empty

###################超時設置##################
#空閑連接超時
idle_session_timeout=600
#數據傳輸超時
data_connection_timeout=120
#PAVS請求超時
ACCEPT_TIMEOUT=60
#PROT模式連接超時
connect_timeout=60

################伺服器功能選項###############
#開啟日記功能
xferlog_enable=YES
#使用標準格式
xferlog_std_format=YES
#當xferlog_std_format關閉且本選項開啟時,記錄所有ftp請求和回復,當調試比較有用.
#log_ftp_protocol=NO
#允許使用pasv模式
pasv_enable=YES
#關閉安全檢查,小心呀.
#pasv_promiscuous+NO
#允許使用port模式
#port_enable=YES
#關閉安全檢查
#prot_promiscuous
#開啟tcp_wrappers支持
tcp_wrappers=YES
#定義PAM 所使用的名稱,預設為vsftpd。
pam_service_name=vsftpd
#當伺服器運行於最底層時使用的用戶名
nopriv_user=nobody
#使vsftpd在pasv命令回復時跳轉到指定的IP地址.(伺服器聯接跳轉?)
pasv_address=(none)

#################伺服器性能選項##############
#是否能使用ls -R命令以防止浪費大量的伺服器資源
#ls_recurse_enable=YES
#是否使用單進程模式
#one_process_model
#綁定到listen_port指定的埠,既然都綁定了也就是每時都開著的,就是那個什麼standalone模式
listen=YES
#當使用者登入后使用ls -al 之類的指令查詢該檔案的管理權時,預設會出現擁有者的UID,而不是該檔案擁有者的名稱。若是希望出現擁有者的名稱,則將此功能開啟。
text_userdb_names=NO
#顯示目錄清單時是用本地時間還是GMT時間,可以通過mdtm命令來達到一樣的效果
use_localtime=NO
#測試平台優化
#use_sendfile=YES

################信息類設置################
#login時顯示歡迎信息.如果設置了banner_file則此設置無效
ftpd_banner=歡迎來到湖南三辰Fake-Ta FTP 網站.
#允許為目錄配置顯示信息,顯示每個目錄下面的message_file文件的內容
dirmessage_enable=YES
#顯示會話狀態信息,關!
#setproctitle_enable=YES

############## 文件定義 ##################
#定義不能更改用戶主目錄的文件
chroot_list_file=/etc/vsftpd/vsftpd.chroot_list
#定義限制/允許用戶登錄的文件
userlist_file=/etc/vsftpd/vsftpd.user_list
#定義登錄信息文件的位置
banner_file=/etc/vsftpd/banner
#禁止使用的匿名用戶登陸時作為密碼的電子郵件地址
banned_email_file=/etc/vsftpd.banned_emails
#日誌文件位置
xferlog_file=/var/log/vsftpd.log
#目錄信息文件
message_file=.message

############## 目錄定義 #################
#定義用戶配置文件的目錄
user_config_dir=/etc/vsftpd/userconf
#定義本地用戶登陸的根目錄,注意定義根目錄可以是相對路徑也可以是絕對路徑.相對路徑是針對用戶家目錄來說的.
local_root=webdisk #此項設置每個用戶登陸后其根目錄為/home/username/webdisk
#匿名用戶登陸后的根目錄
anon_root=/var/ftp

#############用戶連接選項#################
#可接受的最大client數目
max_clients=100
#每個ip的最大client數目
max_per_ip=5
#使用標準的20埠來連接ftp
connect_from_port_20=YES
#綁定到某個IP,其它IP不能訪問
listen_address=192.168.0.2
#綁定到某個埠
#listen_port=2121
#數據傳輸埠
#ftp_data_port=2020
#pasv連接模式時可以使用port 範圍的上界,0 表示任意。默認值為0。
pasv_max_port=0
#pasv連接模式時可以使用port 範圍的下界,0 表示任意。默認值為0。
pasv_min_port=0

##############數據傳輸選項#################
#匿名用戶的傳輸比率(b/s)
anon_max_rate=51200
#本地用戶的傳輸比率(b/s)
local_max_rate=5120000

########################################
別外,如果要對每個用戶進行單獨的控制,只需要在user_config_dir中建立username文件,內容為數據傳輸和用戶權利裡面設置個人的合適的選項,用戶自定義文件同樣適合用pam支持的虛擬用戶
附: FTP 數字代碼的意義
110 重新啟動標記應答。
120 服務在多久時間內ready。
125 數據鏈路埠開啟,準備傳送。
150 文件狀態正常,開啟數據連接埠。
200 命令執行成功。
202 命令執行失敗。
211 系統狀態或是系統求助響應。
212 目錄的狀態。
213 文件的狀態。
214 求助的訊息。
215 名稱系統類型。
220 新的聯機服務ready。
221 服務的控制連接埠關閉,可以註銷。
225 數據連結開啟,但無傳輸動作。
226 關閉數據連接埠,請求的文件操作成功。
227 進入passive mode。
230 使用者登入。
250 請求的文件操作完成。
257 顯示目前的路徑名稱。
331 用戶名稱正確,需要密碼。
332 登入時需要賬號信息。
350 請求的操作需要進一部的命令。
421 無法提供服務,關閉控制連結。
425 無法開啟數據鏈路。
426 關閉聯機,終止傳輸。
450 請求的操作未執行。
451 命令終止:有本地的錯誤。
452 未執行命令:磁碟空間不足。
500 格式錯誤,無法識別命令。
501 參數語法錯誤。
502 命令執行失敗。
503 命令順序錯誤。
504 命令所接的參數不正確。
530 未登入。
532 儲存文件需要賬戶登入。
550 未執行請求的操作。
551 請求的命令終止,類型未知。
552 請求的文件終止,儲存位溢出。
553 未執行請求的的命令,名稱不正確。

2、VSFTPD官方資料翻譯版(不完整版)---摘自中國Linux公社
翻譯了部分VSFTPD的官方資料。
有些知道是什麼意思,但難於翻譯。有些涉及專業的知識,我自己也不懂,只好按字面翻譯。有些我自己看不懂,只好盡量翻譯。
如果看了其中一部分覺得糊塗,請參閱官方文擋。

安裝篇
===============
這個文件詳細介紹了如何從VSFTPD的.tar.gz分發包開始,建立和安裝並運行VSFTPD。

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

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

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

2)滿足VSFTPD安裝所需的一些條件
VSFTPD默認設置需要一個"nobody"用戶,如果這個用戶不存在,那麼添加它。如下:
# useradd nobody
useradd: user nobody exists

VSFTPD默認設置需要一個空目錄:/usr/share/empty.增加這個目錄,如果它還不存在的話。如下:
# mkdir /usr/share/empty/
mkdir: cannot create directory `/usr/share/empty': File exists

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

(即使你的"ftp"用戶已經存在,完成以下這兩步也是很有好處的:)
# chown root.root /var/ftp
# 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埠)。
運行那個二進位文件,如下:
# /usr/local/sbin/vsftpd &
2104

如果一切正常,那麼你將連上FTP伺服器,如下:
$ 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.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 的格式非常簡單,每行要麼是一個註釋,要麼是一個指令。註釋行以#開始並被忽略掉。指令行格式如下:
配置項=參數值
很重要的一點是,這個格式里不存在任何空格。
默認的,每一個配置項在配置文件里都佔一編輯行,可以被修改。

布爾選項
參數值的布爾選項可以是:
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 :-)

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

$ 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): $
$ 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.

$ 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>;
《解決方案》

vsftp配置大全---超完整版,首發CU之FTP區

本文圖片
《解決方案》

vsftp配置大全---超完整版,首發CU之FTP區

本文圖片
《解決方案》

vsftp配置大全---超完整版,首發CU之FTP區

至此,完成本文編寫,有些功能我還沒實現,但都不是主要功能了,我在本文後均已註明,有時間我會更新文檔的。本文檔完成於為6月11日深夜,如更新將註明。
《解決方案》

vsftp配置大全---超完整版,首發CU之FTP區

剛在linux版跟貼「期待」,轉到ftp版就看到了,呵呵
《解決方案》

vsftp配置大全---超完整版,首發CU之FTP區

強人.
《解決方案》

vsftp配置大全---超完整版,首發CU之FTP區

收,好東西,我看到anonymous登錄的那個地方,先試了一下,還能支持中文,非常好。

不過,樓主?你在KILL-ANO的那個腳本里寫上killall vsftpd不行嗎?幹嘛非要搞得那麼深入?
《解決方案》

vsftp配置大全---超完整版,首發CU之FTP區

收,好東西,我看到anonymous登錄的那個地方,先試了一下,還能支持中文,非常好。

不過,樓主?你在KILL-ANO的那個腳本里寫上killall vsftpd不行嗎?幹嘛非要搞得那麼深入?
《解決方案》

vsftp配置大全---超完整版,首發CU之FTP區

我是redhat as3 原來系統裡面就有vsftp不知道有沒有影響,也許我應該先弄掉。


編譯的時候出現這個錯誤,不知道怎麼回事
# make
make: *** Warning: File `Makefile' has modification time in the future (2005-03-12 03:34:15 >; 2000-01-04 00:32:01.14097)
gcc -c main.c -O2 -Wall -W -Wshadow  -idirafter dummyinc
gcc -c utility.c -O2 -Wall -W -Wshadow  -idirafter dummyinc
gcc -c prelogin.c -O2 -Wall -W -Wshadow  -idirafter dummyinc
gcc -c ftpcmdio.c -O2 -Wall -W -Wshadow  -idirafter dummyinc
gcc -c postlogin.c -O2 -Wall -W -Wshadow  -idirafter dummyinc
gcc -c privsock.c -O2 -Wall -W -Wshadow  -idirafter dummyinc
gcc -c tunables.c -O2 -Wall -W -Wshadow  -idirafter dummyinc
gcc -c ftpdataio.c -O2 -Wall -W -Wshadow  -idirafter dummyinc
gcc -c secbuf.c -O2 -Wall -W -Wshadow  -idirafter dummyinc
gcc -c ls.c -O2 -Wall -W -Wshadow  -idirafter dummyinc
gcc -c postprivparent.c -O2 -Wall -W -Wshadow  -idirafter dummyinc
gcc -c logging.c -O2 -Wall -W -Wshadow  -idirafter dummyinc
gcc -c str.c -O2 -Wall -W -Wshadow  -idirafter dummyinc
gcc -c netstr.c -O2 -Wall -W -Wshadow  -idirafter dummyinc
gcc -c sysstr.c -O2 -Wall -W -Wshadow  -idirafter dummyinc
gcc -c strlist.c -O2 -Wall -W -Wshadow  -idirafter dummyinc
gcc -c banner.c -O2 -Wall -W -Wshadow  -idirafter dummyinc
gcc -c filestr.c -O2 -Wall -W -Wshadow  -idirafter dummyinc
gcc -c parseconf.c -O2 -Wall -W -Wshadow  -idirafter dummyinc
gcc -c secutil.c -O2 -Wall -W -Wshadow  -idirafter dummyinc
gcc -c ascii.c -O2 -Wall -W -Wshadow  -idirafter dummyinc
gcc -c oneprocess.c -O2 -Wall -W -Wshadow  -idirafter dummyinc
gcc -c twoprocess.c -O2 -Wall -W -Wshadow  -idirafter dummyinc
gcc -c privops.c -O2 -Wall -W -Wshadow  -idirafter dummyinc
gcc -c standalone.c -O2 -Wall -W -Wshadow  -idirafter dummyinc
gcc -c hash.c -O2 -Wall -W -Wshadow  -idirafter dummyinc
gcc -c tcpwrap.c -O2 -Wall -W -Wshadow  -idirafter dummyinc
gcc -c ipaddrparse.c -O2 -Wall -W -Wshadow  -idirafter dummyinc
gcc -c access.c -O2 -Wall -W -Wshadow  -idirafter dummyinc
gcc -c features.c -O2 -Wall -W -Wshadow  -idirafter dummyinc
gcc -c readwrite.c -O2 -Wall -W -Wshadow  -idirafter dummyinc
gcc -c ssl.c -O2 -Wall -W -Wshadow  -idirafter dummyinc
In file included from /usr/include/openssl/ssl.h:179,
                 from ssl.c:26:
/usr/include/openssl/kssl.h:72:18: krb5.h: 沒有那個文件或目錄
In file included from /usr/include/openssl/ssl.h:179,
                 from ssl.c:26:
/usr/include/openssl/kssl.h:134: syntax error before "krb5_enctype"
/usr/include/openssl/kssl.h:136: syntax error before '*' token
/usr/include/openssl/kssl.h:137: syntax error before '}' token
/usr/include/openssl/kssl.h:149: syntax error before "kssl_ctx_setstring"
/usr/include/openssl/kssl.h:149: syntax error before '*' token
/usr/include/openssl/kssl.h:150: syntax error before '*' token
/usr/include/openssl/kssl.h:151: syntax error before '*' token
/usr/include/openssl/kssl.h:151: syntax error before '*' token
/usr/include/openssl/kssl.h:152: syntax error before '*' token
/usr/include/openssl/kssl.h:153: syntax error before "kssl_ctx_setprinc"
/usr/include/openssl/kssl.h:153: syntax error before '*' token
/usr/include/openssl/kssl.h:155: syntax error before "kssl_cget_tkt"
/usr/include/openssl/kssl.h:155: syntax error before '*' token
/usr/include/openssl/kssl.h:157: syntax error before "kssl_sget_tkt"
/usr/include/openssl/kssl.h:157: syntax error before '*' token
/usr/include/openssl/kssl.h:159: syntax error before "kssl_ctx_setkey"
/usr/include/openssl/kssl.h:159: syntax error before '*' token
/usr/include/openssl/kssl.h:161: syntax error before "context"
/usr/include/openssl/kssl.h:162: syntax error before "kssl_build_principal_2"
/usr/include/openssl/kssl.h:162: syntax error before "context"
/usr/include/openssl/kssl.h:165: syntax error before "kssl_validate_times"
/usr/include/openssl/kssl.h:165: syntax error before "atime"
/usr/include/openssl/kssl.h:167: syntax error before "kssl_check_authent"
/usr/include/openssl/kssl.h:167: syntax error before '*' token
/usr/include/openssl/kssl.h:169: syntax error before "enctype"
In file included from ssl.c:26:
/usr/include/openssl/ssl.h:909: syntax error before "KSSL_CTX"
/usr/include/openssl/ssl.h:931: syntax error before '}' token
ssl.c: In function `ssl_init':
ssl.c:46: warning: declaration of `options' shadows a global declaration
/usr/include/openssl/ssl.h:925: warning: shadowed declaration is here
make: *** Error 1




[火星人 via ] vsftp配置大全---超完整版,首發CU之FTP區已經有510次圍觀

http://www.coctec.com/docs/service/show-post-11492.html