歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Unix知識 >> 關於Unix

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

3.2VSFTP安全與效能兼備的ftp 服務器 3.2.1VSFTP概述 FTP,filetransferprotocol,這是檔案傳輸的通訊協議,也是一般最常用來傳送檔案的方式。讀者在使用RedHat9的時候,可能會感受到ftpserver有一些改變:第一,就是ftpserver只剩下vsftp,原有的wuftp等都
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 未執行請求的的命令,名稱不正確。

Copyright © Linux教程網 All Rights Reserved