超完整RedHat9.0-vsftp配置大全(轉)

BSDLite發表於2007-08-11
超完整RedHat9.0-vsftp配置大全(轉)[@more@]3.2 VSFTP 安全與效能兼備的ftp 伺服器
3.2.1 VSFTP 概述
FTP,file transfer protocol,這是檔案傳輸的通訊協議,也是一般最常用來傳送檔案的方式。讀者在使用RedHat9 的時候,可能會感受到ftp server 有一些改變:第一,就是ftp server 只剩下vsftp,原有的wuftp 等都沒放入 第二,就是vsftp 從XINETD 中獨立出來,並將設定檔從/etc/vsftpd.conf 之中移到/etc/vsftpd/vsftpd.conf。
為什麼做這樣的改變?可以想見的是vsftp 已有獨立運作的能力,不需要XINETD 來做更進一步的管控,並且類似sendmail、httpd、ssh、samba 等,將設定檔案的放入/etc 下獨立的目錄。
FTP 分為兩類,一種為PORT FTP,也就是一般的FTP 另一類是PASVFTP,分述如下:
PORT FTP
這是一般形式的FTP,首先會建立控制頻道,預設值是port 21,也就是跟port 21 建立聯機,並透過此聯機下達指令。第二,由FTP server 端會建立資料傳輸頻道,預設值為20,也就是跟port 20 建立聯機,並透過port 20 作資料的傳輸。
PASV FTP
跟PORT FTP 類似,首先會建立控制頻道,預設值是port 21,也就是跟port 21 建立聯機,並透過此聯機下達指令。第二,會由client 端做出資料傳輸的請求,包括資料傳輸port 的數字。
這兩者的差異為何?PORT FTP 當中的資料傳輸port 是由FTP server 指定,而PASV FTP 的資料傳輸port 是由FTP client 決定。通常我們使用PASV FTP,是在有防火牆的環境之下,透過client 與server 的溝通,決定資料傳輸的port。

3.2.2 範例

3.2.1. 直接啟動VSFTP 服務
這個範例是套用RedHat 的預設範例,直接啟動vsftp。
[root@relay vsftpd]# /sbin/service vsftpd start
Starting vsftpd for vsftpd: OK ]

3.2.2. 更換port 提供服務:將預設的port 21 更換為2121
為了安全,或是以port 來區隔不同的ftp 服務,我們可能會將ftp port 改為21 之外的port,那麼,可參考以下步驟。
Step1. 修改/etc/vsftpd/vsftpd.conf
新增底下一行
listen_port=2121
Step2. 重新啟動vsftpd
[root@home vsftpd]# /sbin/service vsftpd restart
Shutting down vsftpd: OK ]
Starting vsftpd for vsftpd: OK ]

3.2.3. 特定使用者peter、john 不得變更目錄
使用者的預設目錄為/home/username,若是我們不希望使用者在ftp 時能夠
切換到上一層目錄/home,則可參考以下步驟。
Step1. 修改/etc/vsftpd/vsftpd.conf
將底下三行
#chroot_list_enable=YES
# (default follows)
#chroot_list_file=/etc/vsftpd.chroot_list
改為
chroot_list_enable=YES
# (default follows)
chroot_list_file=/etc/vsftpd/chroot_list
Step2. 新增一個檔案: /etc/vsftpd/chroot_list
內容增加兩行:
peter
john
Step3. 重新啟動vsftpd
[root@home vsftpd]# /sbin/service vsftpd restart
Shutting down vsftpd: OK ]
Starting vsftpd for vsftpd: OK ]
若是peter 欲切換到根目錄以外的目錄,則會出現以下警告:
ftp> cd /home
550 Failed to change directory.

3.2.4. 取消anonymous 登入
若是讀者的主機不希望使用者匿名登入,則可參考以下步驟。
Step1. 修改/etc/vsftpd/vsftpd.conf

anonymous_enable=YES
改為
anonymous_enable=NO
Step2. 重新啟動vsftpd
[root@home vsftpd]# /sbin/service vsftpd restart
Shutting down vsftpd: OK ]
Starting vsftpd for vsftpd: OK ]

3.2.5. 安排歡迎話語
若是我們希望使用者在登入時,能夠看到歡迎話語,可能包括對該主機的說明,或是目錄的介紹,可參考以下步驟。
首先確定在/etc/vsftpd/vsftpd.conf 當中是否有底下這一行
dirmessage_enable=YES
RedHat9 的預設值是有上面這行的。
接著,在各目錄之中,新增名為.message 的檔案,再這邊假設有一個使用者test1,且此使用者的根目錄下有個目錄名為abc,那首先我們在/home/test1
之下新增.message,內容如下:
Hello~ Welcome to the home directory
This is for test only...
接著,在/home/test1/abc 的目錄下新增.message,內容如下:
Welcome to abc's directory
This is subdir...
那麼,當使用者test1 登入時,會看到以下訊息:
230- Hello~ Welcome to the home directory
230-
230- This is for test only...
230-
若是切換到abc 的目錄,則會出現以下訊息:
250- Welcome to abc's directory
250-
250- This is subdir ...

3.2.6. 對於每一個聯機,以獨立的process 來運作
一般啟動vsftp 時,我們只會看到一個名為vsftpd 的process 在運作,但若是讀者希望每一個聯機,都能以獨立的process 來呈現,則可執行以下步驟。
Step1. 修改/etc/vsftpd/vsftpd.conf
新增底下一行
setproctitle_enable=YES
Step2. 重新啟動vsftpd
[root@home vsftpd]# /sbin/service vsftpd restart
Shutting down vsftpd: OK ]
Starting vsftpd for vsftpd: OK ]
使用ps -ef 的指令,可以看告不同使用者聯機的情形,如下圖所示:
[root@home vsftpd]# ps -ef|grep ftp
root 2090 1 0 16:41 pts/0 00:00:00 vsftpd: LISTENER
nobody 2120 2090 0 17:18 ? 00:00:00 vsftpd: 192.168.10.244:
connected
test1 2122 2120 0 17:18 ? 00:00:00 vsftpd: 192.168.10.244/test1:
IDLE
nobody 2124 2090 0 17:19 ? 00:00:00 vsftpd: 192.168.10.244:
connected
test2 2126 2124 0 17:19 ? 00:00:00 vsftpd: 192.168.10.244/test2:
IDLE
root 2129 1343 0 17:20 pts/0 00:00:00 grep ftp
[root@home vsftpd]#

3.2.7. 限制傳輸檔案的速度:
本機的使用者最高速度為200KBytes/s,匿名登入者所能使用的最高速度為50KBytes/s
Step1. 修改/etc/vsftpd/vsftpd.conf
新增底下兩行
anon_max_rate=50000
local_max_rate=200000
Step2. 重新啟動vsftpd
[root@home vsftpd]# /sbin/service vsftpd restart
Shutting down vsftpd: OK ]
Starting vsftpd for vsftpd: OK ]
在這邊速度的單位為Bytes/s,其中anon_max_rate 所限制的是匿名登入的
使用者,而local_max_rate 所限制的是本機的使用者。VSFTPD 對於速度的限
制,範圍大概在80%到120%之間,也就是我們限制最高速度為100KBytes/s,
但實際的速度可能在80KBytes/s 到120KBytes/s 之間,當然,若是頻寬不足
時,數值會低於此限制。

3.2.8. 針對不同的使用者限制不同的速度:
假設test1 所能使用的最高速度為250KBytes/s,test2 所能使用的最高速度為500KBytes/s。
Step1. 修改/etc/vsftpd/vsftpd.conf
新增底下一行
user_config_dir=/etc/vsftpd/userconf
Step2. 新增一個目錄:/etc/vsftpd/userconf
mkdir /etc/vsftpd/userconf
Step3. 在/etc/vsftpd/userconf 之下新增一個名為test1 的檔案
內容增加一行:
local_max_rate=250000
Step4. 在/etc/vsftpd/userconf 之下新增一個名為test2 的檔案
內容增加一行:
local_max_rate=500000
Step5. 重新啟動vsftpd
[root@home vsftpd]# /sbin/service vsftpd restart
Shutting down vsftpd: OK ]
Starting vsftpd for vsftpd: OK ]

3.2.9-1. 建置一個防火牆下的ftp server,使用PORT FTP mode:
預設的ftp port:21 以及ftp data port:20
啟動VSFTPD 之後執行以下兩行指令,只允許port 21 以及port 20 開放,其它關閉。
iptables -A INPUT -p tcp -m multiport --dport 21,20 -j ACCEPT
iptables -A INPUT -p tcp -j REJECT --reject-with tcp-reset

3.2.9-2. 建置一個防火牆下的ftp server,使用PORT FTP mode:
ftp port:2121 以及ftp data port:2020
Step1. 執行以下兩行指令,只允許port 2121 以及port 2020 開放,其它關閉。
iptables -A INPUT -p tcp -m multiport --dport 2121,2020 -j ACCEPT
iptables -A INPUT -p tcp -j REJECT --reject-with tcp-reset
Step2. 修改/etc/vsftpd/vsftpd.conf
新增底下兩行
listen_port=2121
ftp_data_port=2020
Step3. 重新啟動vsftpd
[root@home vsftpd]# /sbin/service vsftpd restart
Shutting down vsftpd: OK ]
Starting vsftpd for vsftpd: OK ]
在這邊要注意,8、9 兩個例子中,ftp client(如cuteftp)的聯機方式不能夠選擇passive mode,否則無法建立資料的聯機。也就是讀者可以連上ftp
server,但是執行ls、get 等等的指令時,便無法運作。

3.2.10. 建置一個防火牆下的ftp server,使用PASS FTP mode:
ftp port:2121 以及ftp data port 從9981 到9986。
Step1. 執行以下兩行指令,只允許port 2121 以及port 9981-9990 開放,其它關閉。
iptables -A INPUT -p tcp -m multiport --dport
2121,9981,9982,9983,9984,9985,9986,9987,9988,9989,9990 -j ACCEPT
iptables -A INPUT -p tcp -j REJECT --reject-with tcp-reset
Step2. 修改/etc/vsftpd/vsftpd.conf
新增底下四行
listen_port=2121
pasv_enable=YES
pasv_min_port=9981
pasv_max_port=9986
Step3. 重新啟動vsftpd
[root@home vsftpd]# /sbin/service vsftpd restart
Shutting down vsftpd: OK ]
Starting vsftpd for vsftpd: OK ]
在這邊要注意,在10 這個例子中,ftp client(如cuteftp)的聯機方式必須選擇passive mode,否則無法建立資料的聯機。也就是讀者可以連上ftp server,但是執行ls,get 等等的指令時,便無法運作

3.2.11. 將vsftpd 與TCP_wrapper 結合
若是讀者希望直接在/etc/hosts.allow 之中定義允許或是拒絕的來源地址,可執行以下步驟。這是簡易的防火牆設定。
Step1. 確定/etc/vsftpd/vsftpd.conf 之中tcp_wrappers 的設定為YES,如下圖所
示:
tcp_wrappers=YES
這是RedHat9 的預設值,基本上不需修改。
Step2. 重新啟動vsftpd
[root@home vsftpd]# /sbin/service vsftpd restart
Shutting down vsftpd: OK ]
Starting vsftpd for vsftpd: OK ]
Step3. 設定/etc/hosts.allow,譬如提供111.22.33.4 以及10.1.1.1 到10.1.1.254 連
線,則可做下圖之設定:
vsftpd : 111.22.33.4 10.1.1. : allow
ALL : ALL : DENY

3.2.12. 將vsftpd 併入XINETD
若是讀者希望將vsftpd 併入XINETD 之中,也就是7.x 版的預設設定,那
麼讀者可以執行以下步驟。
Step1. 修改/etc/vsftpd/vsftpd.conf

listen=YES
改為
listen=NO
Step2. 新增一個檔案: /etc/xinetd.d/vsftpd
內容如下:
service vsftpd
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/sbin/vsftpd
port = 21
log_on_success += PID HOST DURATION
log_on_failure += HOST
}
Step3. 重新啟動xinetd
[root@home vsftpd]# /sbin/service xinetd restart
Stopping xinetd: OK ]
Starting xinetd: OK ]

3.2.3 設定檔說明
在範例中,有些省略的設定可以在這邊找到,譬如聯機的總數、同一個位址的聯機數、顯示檔案擁有者的名稱等等,希望讀者細讀後,可以做出最適合自己的設定。
格式
vsftpd.conf 的內容非常單純,每一行即為一項設定。若是空白行或是開頭為#的一行,將會被忽略。內容的格式只有一種,如下所示
option=value
要注意的是,等號兩邊不能加空白,不然是不正確的設定。
===ascii 設定=====================
ascii_download_enable
管控是否可用ASCII 模式下載。預設值為NO。
ascii_upload_enable
管控是否可用ASCII 模式上傳。預設值為NO。
===個別使用者設定===================
chroot_list_enable
如果啟動這項功能,則所有的本機使用者登入均可進到根目錄之外的資料夾,除了列
在/etc/vsftpd.chroot_list 之中的使用者之外。預設值為NO。
userlist_enable
用法:YES/NO
若是啟動此功能,則會讀取/etc/vsftpd.user_list 當中的使用者名稱。此項功能可以在詢問密碼前就出現失敗訊息,而不需要檢驗密碼的程式。預設值為關閉。
userlist_deny
用法:YES/NO
這個選項只有在userlist_enable 啟動時才會被檢驗。如果將這個選項設為YES,則在/etc/vsftpd.user_list 中的使用者將無法登入 若設為NO , 則只有在
/etc/vsftpd.user_list 中的使用者才能登入。而且此項功能可以在詢問密碼前就出現錯誤訊息,而不需要檢驗密碼的程式。
user_config_dir
定義個別使用者設定檔案所在的目錄,例如定義user_config_dir=/etc/vsftpd/userconf,且主機上有使用者test1,test2,那我們可以在user_config_dir 的目錄新增檔名為test1 以及test2。若是test1 登入,則會讀取user_config_dir 下的test1 這個檔案內的設定。預設值為無。
===歡迎語設定=====================
dirmessage_enable
如果啟動這個選項,使用者第一次進入一個目錄時,會檢查該目錄下是否有.message這個檔案,若是有,則會出現此檔案的內容,通常這個檔案會放置歡迎話語,或是對該目錄的說明。預設值為開啟。
banner_file
當使用者登入時,會顯示此設定所在的檔案內容,通常為歡迎話語或是說明。預設值為無。
ftpd_banner
這邊可定義歡迎話語的字串,相較於banner_file 是檔案的形式,而ftpd_banner 是字串的格式。預設為無。
===特殊安全設定====================
chroot_local_user
如果設定為YES,那麼所有的本機的使用者都可以切換到根目錄以外的資料夾。預設值為NO。
hide_ids
如果啟動這項功能,所有檔案的擁有者與群組都為ftp,也就是使用者登入使用ls -al之類的指令,所看到的檔案擁有者跟群組均為ftp。預設值為關閉。
ls_recurse_enable
若是啟動此功能,則允許登入者使用ls -R 這個指令。預設值為NO。
write_enable
用法:YES/NO
這個選項可以控制FTP 的指令是否允許更改file system,譬如STOR、DELE、
RNFR、RNTO、MKD、RMD、APPE 以及SITE。預設是關閉。
setproctitle_enable
用法:YES/NO
啟動這項功能,vsftpd 會將所有聯機的狀況已不同的process 呈現出來,換句話說,使用ps -ef 這類的指令就可以看到聯機的狀態。預設值為關閉。
tcp_wrappers
用法:YES/NO
如果啟動,則會將vsftpd 與tcp wrapper 結合,也就是可以在/etc/hosts.allow 與/etc/hosts.deny 中定義可聯機或是拒絕的來源地址。
pam_service_name
這邊定義PAM 所使用的名稱,預設為vsftpd。
secure_chroot_dir
這個選項必須指定一個空的資料夾且任何登入者都不能有寫入的許可權,當vsftpd 不需要file system 的許可權時,就會將使用者限制在此資料夾中。預設值為/usr/share/empty

===紀錄檔案設定=====================
xferlog_enable
用法:YES/NO
如果啟動,上傳與下載的資訊將被完整紀錄在底下xferlog_file 所定義的檔案中。預設為開啟。
xferlog_file
這個選項可設定紀錄檔案所在的位置,預設值為/var/log/vsftpd.log。
xferlog_std_format
如果啟動,則紀錄檔案將會寫為xferlog 的標準格式,如同wu-ftpd 一般。預設值為關閉。

===逾時設定======================
accept_timeout
接受建立聯機的逾時設定,單位為秒。預設值為60。
connect_timeout
響應PORT 方式的資料聯機的逾時設定,單位為秒。預設值為60。
data_connection_timeout
建立資料聯機的逾時設定。預設值為300 秒。
idle_session_timeout
發呆的逾時設定,若是超出這時間沒有資料的傳送或是指令的輸入,則會強迫斷線,單位為秒。預設值為300。
===速率限制======================
anon_max_rate
匿名登入所能使用的最大傳輸速度,單位為每秒多少bytes,0 表示不限速度。預設值為0。
local_max_rate
本機使用者所能使用的最大傳輸速度,單位為每秒多少bytes,0 表示不限速度。預設值為0。
===新增檔案許可權設定==================
anon_umask
匿名登入者新增檔案時的umask 數值。預設值為077。
file_open_mode
上傳檔案的許可權,與chmod 所使用的數值相同。預設值為0666。
local_umask
本機登入者新增檔案時的umask 數值。預設值為077。
===port 設定======================
connect_from_port_20
用法:YES/NO
若設為YES,則強迫ftp-data 的資料傳送使用port 20。預設值為YES。
ftp_data_port
設定ftp 資料聯機所使用的port。預設值為20。
listen_port
FTP server 所使用的port。預設值為21。
pasv_max_port
建立資料聯機所可以使用port 範圍的上界,0 表示任意。預設值為0。
pasv_min_port
建立資料聯機所可以使用port 範圍的下界,0 表示任意。預設值為0。
===其它========================
anon_root
使用匿名登入時,所登入的目錄。預設值為無。
local_enable
用法:YES/NO
啟動此功能則允許本機使用者登入。預設值為YES。
local_root
本機使用者登入時,將被更換到定義的目錄下。預設值為無。
text_userdb_names
用法:YES/NO
當使用者登入後使用ls -al 之類的指令查詢該檔案的管理權時,預設會出現擁有者的UID,而不是該檔案擁有者的名稱。若是希望出現擁有者的名稱,則將此功能開啟。預設值為NO。
pasv_enable
若是設為NO,則不允許使用PASV 的模式建立資料的聯機。預設值為開啟。
===更換檔案所有權===================
chown_uploads
用法:YES/NO
若是啟動,所有匿名上傳資料的擁有者將被更換為chown_username 當中所設定的使用者。這樣的選項對於安全及管理,是很有用的。預設值為NO。
chown_username
這裡可以定義當匿名登入者上傳檔案時,該檔案的擁有者將被置換的使用者名稱。預設值為root。
===guest 設定=====================
guest_enable
用法:YES/NO
若是啟動這項功能,所有的非匿名登入者都視為guest。預設值為關閉。
guest_username
這裡將定義guest 的使用者名稱。預設值為ftp。
===anonymous 設定==================
anonymous_enable
用法:YES/NO
管控使否允許匿名登入,YES 為允許匿名登入,NO 為不允許。預設值為YES。
no_anon_password
若是啟動這項功能,則使用匿名登入時,不會詢問密碼。預設值為NO。
anon_mkdir_write_enable
用法:YES/NO
如果設為YES,匿名登入者會被允許新增目錄,當然,匿名使用者必須要有對上層目錄的寫入權。預設值為NO。
anon_other_write_enable
用法:YES/NO
如果設為YES,匿名登入者會被允許更多於上傳與建立目錄之外的許可權,譬如刪除或是更名。預設值為NO。
anon_upload_enable
用法:YES/NO
如果設為YES,匿名登入者會被允許上傳目錄的許可權,當然,匿名使用者必須要有對上層目錄的寫入權。預設值為NO。
anon_world_readable_only
用法:YES/NO
如果設為YES,匿名登入者會被允許下載可閱讀的檔案。預設值為YES。
ftp_username
定義匿名登入的使用者名稱。預設值為ftp。
deny_email_enable
若是啟動這項功能,則必須提供一個檔案/etc/vsftpd.banner_emails,內容為email
address。若是使用匿名登入,則會要求輸入email address,若輸入的email address 在此檔案內,則不允許聯機。預設值為NO。
===Standalone 選項==================
listen
用法:YES/NO
若是啟動,則vsftpd 將會以獨立運作的方式執行,若是vsftpd 獨立執行,如RedHat9的預設值,則必須啟動 若是vsftpd 包含在xinetd 之中,則必須關閉此功能,如RedHat8。在RedHat9 的預設值為YES。
listen_address
若是vsftpd 使用standalone 的模式,可使用這個引數定義使用哪個IP address 提供這項服務,若是主機上只有定義一個IP address,則此選項不需使用,若是有多個IP address,可定義在哪個IP address 上提供ftp 服務。若是不設定,則所有的IP address均會提供此服務。預設值為無。
max_clients
若是vsftpd 使用standalone 的模式,可使用這個引數定義最大的總聯機數。超過這個數目將會拒絕聯機,0 表示不限。預設值為0。
max_per_ip
若是vsftpd 使用standalone 的模式,可使用這個引數定義每個ip address 所可以聯機的數目。超過這個數目將會拒絕聯機,0 表示不限。預設值為0。
=============================

3.2.4 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 未執行請求的的命令,名稱不正確。

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

相關文章