既然說 FTP 真的很危險,那麼不要開啟也罷!不過,偏偏很多時候我們又得使用到 FTP 的功能。這個時候選擇一個比較安全的 FTP 伺服器軟體就很重要啦!除了 proftpd 可以取代 Wu FTP 之外,另一個蠻安全的 vsftpd 也可以用來取代喔!這個章節我們就來談一談 vsftpd 的設定吧! |
[root@test
root]# vi /etc/pam.d/vsftpd
#%PAM-1.0 auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd.ftpusers onerr=succeed auth required pam_stack.so service=system-auth auth required pam_shells.so account required pam_stack.so service=system-auth session required pam_stack.so service=system-auth |
關於主機的設定值
connect_from_port_20=YES (NO) 還記得 wu ftp 那篇文章提到的,關於主動連線的 ftp-data 嗎? 這個設定項目在啟動主動連線的 port 20 咯! listen_port=21 使用的 vsftpd 命令通道的 port number 設定,如果您想要使用非 正規的 ftp port,在這個設定項目修改吧! dirmessage_enable=YES (NO) 當使用者進入某個目錄時,會顯示該目錄需要注意的內容,顯示的 檔案預設是 .message ,當然,可以使用底下的設定項目來修訂! message_file=.message 當 dirmessage_enable=YES 時,可以設定這個項目來讓 vsftpd 尋找該檔案來顯示訊息!您也可以設定其他檔名喔! listen=YES (NO) 若設定為 YES 表示 vsftpd 是以 standalone 的方式來啟動的! pasv_enable=YES (NO) 啟動被動式連線(passive mode),一定要設定為 YES 的啦! use_localtime=YES (NO) 是否使用主機的時間?!預設使用 GMT 時間(格林威治),會比台灣 時間晚 8 小時,一般來說,建議設定為 YES 吧! write_enable=YES (NO) 是否允許使用者具有寫入的權限?!這包括刪除與修改等功能喔! connect_timeout=60 單位是秒,如果 client 嘗試連接我們的 vsftpd 命令通道超過 60 秒, 則不等待,強制斷線咯。 accept_timeout=60 當使用者以被動式 PASV 來進行資料傳輸時,如果主機啟用 passive port 並等待 client 超過60 秒,那麼就給他強制斷線!您可以修改 60 這個數值。 data_connection_timeout=300 如果 client 與 Server 間的資料傳送在 300 秒內都無法傳送成功, 那 Client 的連線就會被我們的 vsftpd 強制剔除! idle_session_timeout=300 如果使用者在 300 秒內都沒有命令動作,強制離線! max_clients=0 如果 vsftpd 是以 stand alone 方式啟動的,那麼這個設定項目可以設定 同一時間,最多有多少 client 可以同時連上 vsftpd 哩!? max_per_ip=0 與上面 max_clients 類似,這裡是同一個 IP 同一時間可允許多少連線? pasv_max_port=0 pasv_min_port=0 上面兩個是與 passive mode 使用的 port number 有關,如果您想要使用 65400 到 65410 這 11 個 port 來進行被動式資料的連接,可以這樣設定 pasv_max_port=65410 以及 pasv_min_port=65400 ftpd_banner=一些文字說明 當使用者無法順利連上我們的主機,例如連線數量已經超過 max_clients 的設定了,那麼 client 的畫面就會顯示『一些文字說明』的字樣,您可以修改 關於實體用戶登入者的設定值 guest_enable=YES (NO) 若這個值設定為 YES 時,那麼任何非 anonymous 登入的帳號,均會被 假設成為 guest (訪客) 喔! local_enable=YES (NO) 這個設定值必須要為 YES 時,在 /etc/passwd 內的帳號才能以 實體用戶的方式登入我們的 vsftpd 主機喔! local_max_rate=0 實體用戶的傳輸速度限制,單位為 bytes/second, 0 為不限制。 chroot_local_user=YES (NO) 將使用者限制在自己的家目錄之內(chroot)!這個設定在 vsftpd 當中預設是 NO,因為有底下兩個設定項目的輔助喔! 所以不需要啟動他! chroot_list_enable=YES (NO) 是否啟用將某些實體用戶限制在他們的家目錄內?!預設是 NO , 不過,如果您想要讓某些使用者無法離開他們的家目錄時, 可以考慮將這個設定為 YES ,並且規劃下個設定值 chroot_list_file=/etc/vsftpd.chroot_list 如果 chroot_list_enable=YES 那麼就可以設定這個項目了!他裡面可以規定 那一個實體用戶會被限制在自己的家目錄內而無法離開!(chroot) 一行一個帳號即可! userlist_deny=YES (NO) 若此設定值為 YES 時,則當使用者帳號被列入到某個檔案時,在該檔案內 的使用者將無法登入 vsftpd 伺服器!該檔案檔名與下列設定項目有關。 userlist_file=/etc/vsftpd.user_list 若上面 userlist_deny=YES 時,則這個檔案就有用處了!在這個檔案內的 帳號都無法使用 vsftpd 喔! 關於匿名者登入的設定值 anonymous_enable=YES (NO) 設定為允許 anonymous 登入我們的 vsftpd 主機!預設是 YES ,底下的所有 相關設定都需要將這個設定為 anonymous_enable=YES 之後才會生效! anon_world_readable_only=YES (NO) 僅允許 anonymous 具有下載可讀檔案的權限,預設是 YES。 anon_other_write_enable=YES (NO) 是否允許 anonymous 具有寫入的權限?預設是 NO!如果要設定為 YES, 那麼開放給 anonymous 寫入的目錄亦需要調整權限,讓 vsftpd 的 PID 擁有者可以寫入才行! anon_mkdir_write_enable=YES (NO) 是否讓 anonymous 具有建立目錄的權限?預設值是 NO!如果要設定為 YES, 那麼 anony_other_write_enable 必須設定為 YES ! anon_upload_enable=YES (NO) 是否讓 anonymous 具有上傳資料的功能,預設是 NO,如果要設定為 YES , 則 anon_other_write_enable=YES 必須設定。 deny_email_enable=YES (NO) 將某些特殊的 email address 抵擋住,不讓那些 anonymous 登入! 如果以 anonymous 登入主機時,不是會要求輸入密碼嗎?密碼不是要您 輸入您的 email address 嗎?如果你很討厭某些 email address , 就可以使用這個設定來將他取消登入的權限!需與下個設定項目配合: banned_email_file=/etc/vsftpd.banned_emails 如果 deny_email_enable=YES 時,可以利用這個設定項目來規定那個 email address 不可登入我們的 vsftpd 喔!在上面設定的檔案內, 一行輸入一個 email address 即可! no_anon_password=YES (NO) 當設定為 YES 時,表示 anonymous 將會略過密碼檢驗步驟, 而直接進入 vsftpd 伺服器內喔!所以一般預設都是 NO 的! anon_max_rate=0 這個設定值後面接的數值單位為 bytes/秒 ,限制 anonymous 的傳輸速度, 如果是 0 則不限制(由最大頻寬所限制),如果您想讓 anonymous 僅有 30 KB/s 的速度,可以設定『anon_max_rate=30000』 anon_umask=077 限制 anonymous 的權限!如果是 077 則 anonymous 傳送過來的檔案 權限會是 -rw------- 喔! 關於系統安全的設定值: ascii_download_enable=YES (NO) 如果設定為 YES ,那麼 client 就可以使用 ASCII 格式下載檔案。 一般來說,由於啟動了這個設定項目可能會導致 DoS 的攻擊,因此預設是NO。 ascii_upload_enable=YES (NO) 與上一個設定類似的,只是這個設定針對上傳而言!預設是 NO。 async_abor_enable=YES (NO) 如果您的 FTP client 會下達 "async ABOR" 這個指令時,這個設定才需要啟用 一般來說,由於這個設定並不安全,所以通常都是將他取消的! check_shell=YES (NO) 如果您想讓擁有任何奇怪的 shell 的使用者(在 /etc/passwd 的 shell 欄位) 可以使用 vsftpd 的話,這個設定可以設定為 NO 喔! one_process_model=YES (NO) 這個設定項目比較危險一點∼當設定為 YES 時,表示每個建立的連線 都會擁有一支 process 在負責,可以增加 vsftpd 的效能。不過, 除非您的系統比較安全,而且硬體配備比較高,否則容易耗盡系統資源喔! 一般建議設定為 NO 的啦! tcp_wrappers=YES (NO) 當然我們都習慣支援 TCP Wrappers 的啦!所以設定為 YES 吧! xferlog_enable=YES (NO) 當設定為 YES 時,使用者上傳與下載檔案都會被紀錄起來。記錄檔案 與下一個設定項目有關: xferlog_file=/var/log/vsftpd.log 如果上一個 xferlog_enable=YES 的話,這裡就可以設定了! 這個是登錄檔的檔名啦! xferlog_std_format=YES (NO) 是否設定為 wu ftp 相同的登錄檔格式?!預設為 NO ,因為登錄檔會比較容易讀! 不過,如果您有使用 wu ftp 登錄檔的分析軟體,這裡才需要設定為 YES nopriv_user=nobody 我們的 vsftpd 預設以 nobody 作為此一服務執行者的權限。因為 nobody 的權限 相當的低,因此即使被入侵,入侵者僅能取得 nobody 的權限喔! pam_service_name=vsftpd 這個是 pam 模組的名稱,我們放置在 /etc/pam.d/vsftpd 即是這個咚咚! |
[root@test
root]# vi /etc/xinetd.d/vsftpd
service ftp { socket_type = stream wait = no user = root server = /usr/local/sbin/vsftpd server_args = /etc/vsftpd.conf # 上面這個請依照您的主機環境來設定!尤其是 server_args 請設定您的 # vsftpd.conf 所在目錄的完整檔名(含目錄名稱)! log_on_success += DURATION USERID log_on_failure += USERID nice = 10 disable = no } [root@test root]# vi /etc/vsftpd/vsftpd.conf # (或 /etc/vsftpd.conf) # 關於主機與安全性的設定 use_localtime=YES dirmessage_enable=YES connect_from_port_20=YES xferlog_enable=YES xferlog_std_format=YES pam_service_name=vsftpd tcp_wrappers=YES # 關於 anonymous 的設定 anonymous_enable=YES # 關於 real user 的設定 local_enable=YES write_enable=YES local_umask=022 userlist_enable=YES # 以上設定值的意義請往前翻到 vsftpd.conf 設定值的意義 章節去察看! [root@test root]# /etc/rc.d/init.d/xinetd restart |
1. 基礎設定檔
[root@test root]# vi /etc/vsftpd/vsftpd.conf (或 /etc/vsftpd.conf) # 關於主機與安全性的設定 use_localtime=YES dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES pam_service_name=vsftpd tcp_wrappers=YES # 關於 anonymous 的設定 anonymous_enable=NO # 關於 Real User 的設定 local_enable=YES write_enable=YES local_umask=022 chroot_list_enable=YES chroot_list_file=/etc/vsftpd.chroot_list userlist_deny=YES userlist_file=/etc/vsftpd.user_list local_max_rate=100000 # 以上設定值的意義請往前翻到 vsftpd.conf 設定值的意義 章節去察看! 2. 限制實體用戶在自己的家目錄內 (chroot) 的設定檔 [root@test root]# vi /etc/vsftpd.chroot_list badbird nogoodbird # 沒有寫到這個檔案內的其他用戶,就可以離開自己的家目錄, # 而到其他目錄裡面去瀏覽了! 3. 以 PAM 模組限制某些帳號無法登入主機的設定: [root@test root]# vi /etc/pam.d/vsftpd # 會發現這樣的字句: auth ..... file=/etc/vsftpd.ftpusers .... # 那個 file=.. 後面接的檔名就是以 PAM 模組抵擋的帳號內容了! [root@test root]# vi /etc/vsftpd.ftpusers # 底下列出的帳號將無法使用 vsftpd 喔!與 wu ftp 的 /etc/ftpusers 相同功能 root bin daemon adm lp sync shutdown halt news uucp operator games nobody 4. 以 userlist_file 抵擋某些帳號的登入: # 事實上,這個功能與上面的 PAM 功能相似啦!只是 PAM 是外掛的,而 # 這個設定是 vsftpd 預設提供的就是了! [root@test root]# vi /etc/vsftpd.user_list # 這個檔案的設定與上面 /etc/vsftpd.ftpusers 相同即可! root bin daemon adm lp sync shutdown halt news uucp operator games nobody 5. 設定進入目錄時,顯示的訊息: [root@test root]# vi /home/.message 一般使用者家目錄 6. 重新啟動 xinetd 囉! [root@test root]# /etc/rc.d/init.d/xinetd restart |
1. 基礎設定檔
[root@test root]# vi /etc/vsftpd/vsftpd.conf (或 /etc/vsftpd.conf) # 與主機與安全性有關的設定 use_localtime=YES write_enable=YES dirmessage_enable=YES xferlog_enable=YES xferlog_file=/var/log/vsftpd.log data_connection_timeout=60 idle_session_timeout=600 max_clients=50 max_per_ip=5 ascii_upload_enable=NO ascii_download_enable=NO connect_from_port_20=YES pasv_min_port=65400 pasv_max_port=65420 pam_service_name=vsftpd tcp_wrappers=YES nopriv_user=ftp # 關於 anonymous 的設定 anonymous_enable=YES anon_other_write_enable=YES anon_mkdir_write_enable=YES anon_upload_enable=YES deny_email_enable=YES banned_email_file=/etc/vsftpd.banned_emails anon_max_rate=30000 # 關於 real user 的設定 local_enable=NO # 以上設定值的意義請往前翻到 vsftpd.conf 設定值的意義 章節去察看! 2. 建立抵擋不當 email address 的檔案 [root@test root]# vi /etc/vsftpd.banned_emails linux.vbird.org # 一行寫一個 email 名稱喔! 3. 建立可以上傳的目錄! # 因為我們的 nopriv_user 設定為 ftp ,所以上傳的目錄擁有者為 ftp 喔 [root@test root]# mkdir -p /var/ftp/upload [root@test root]# chown ftp /var/ftp/upload 4. 重新啟動 xinetd 囉! [root@test root]# /etc/rc.d/init.d/xinetd restart |
Client 端並沒有什麼好設定的地方,主要就是 ftp 的使用了,請參考 wu FTP 主機設定一節!
/sbin/iptables -A INPUT -p TCP -i eth0 --dport 21 -j ACCEPT |
[root@test
root]# vi /etc/hosts.deny
vsftpd: 192.168.1.2 |
[root@test
root]# vi /etc/xinetd.d/vsftpd
# vsftpd is the secure FTP server. service ftp { disable = no socket_type = stream wait = no user = root server = /usr/local/sbin/vsftpd server_args = /etc/vsftpd.conf # 上面這個 server 的設定請依照您的主機環境來設定! # 至於 server_args 則請寫入您的 vsftpd 的設定檔完整檔名即可! per_source = 5 # 與同一 IP 的連線數目有關 instances = 200 # 同一時間最多的連線數目 no_access = 192.168.1.3 banner_fail = /etc/vsftpd.busy_banner # 上面這個檔案就是當主機忙碌中,則在 Client 端顯示的內容! log_on_success += PID HOST DURATION log_on_failure += HOST } [root@test root]# vi /etc/vsftpd.busy.banner 421 很抱歉,伺服器忙碌中! [root@test root]# /etc/rc.d/init.d/xinetd restart |