終于要來聊一聊這個(gè)簡(jiǎn)單的 vsftpd 啰!vsftpd 的全名是『Very Secure FTP Daemon 』的意思,
換句話說,vsftpd 最初發(fā)展的理念就是在建構(gòu)一個(gè)以安全為重的 FTP 服務(wù)器呢!我們先來聊一聊為什么 vsftpd
號(hào)稱『非常安全』呢?然后再來談設(shè)定吧!
21.2.1 為何使用 vsftpd
為了建構(gòu)一個(gè)安全為主的 FTP 服務(wù)器, vsftpd 針對(duì)操作系統(tǒng)的『程序的權(quán)限 (privilege)』概念來設(shè)計(jì),
如果你讀過基礎(chǔ)篇的十七章程序與資源管理的話,
應(yīng)該會(huì)曉得系統(tǒng)上面所執(zhí)行的程序都會(huì)引發(fā)一個(gè)程序,我們稱他為 PID (Process ID),
這個(gè) PID 在系統(tǒng)上面能進(jìn)行的任務(wù)與他擁有的權(quán)限有關(guān)。也就是說, PID 擁有的權(quán)限等級(jí)越高,
他能夠進(jìn)行的任務(wù)就越多。舉例來說,使用 root 身份所觸發(fā)的 PID 通常擁有可以進(jìn)行任何工作的權(quán)限等級(jí)。
不過,萬一觸發(fā)這個(gè) PID 的程序 (program) 有漏洞而導(dǎo)致被網(wǎng)絡(luò)怪客 (cracker) 所攻擊而取得此 PID 使用權(quán)時(shí),
那么網(wǎng)絡(luò)怪客將會(huì)取得這個(gè) PID 擁有的權(quán)限吶!所以,近來發(fā)展的軟件都會(huì)盡量的將服務(wù)取得的 PID
權(quán)限降低,使得該服務(wù)即使不小心被入侵了,入侵者也無法得到有效的系統(tǒng)管理權(quán)限,這樣會(huì)讓我們的系統(tǒng)較為安全的啦。
vsftpd 就是基于這種想法而設(shè)計(jì)的。
除了 PID 方面的權(quán)限之外, vsftpd 也支持 chroot 這個(gè)函式的功能,chroot
顧名思義就是『 change root directory 』的意思,那個(gè) root 指的是『根目錄』而非系統(tǒng)管理員。
他可以將某個(gè)特定的目錄變成根目錄,所以與該目錄沒有關(guān)系的其他目錄就不會(huì)被誤用了。
舉例來說,如果你以匿名身份登入我們的 ftp 服務(wù)的話,通常你會(huì)被限定在 /var/ftp 目錄下工作,
而你看到的根目錄其實(shí)就只是 /var/ftp ,至于系統(tǒng)其他如 /etc, /home, /usr... 等其他目錄你就看不到了!
這樣一來即使這個(gè) ftp 服務(wù)被攻破了,沒有關(guān)系,入侵者還是僅能在 /var/ftp 里面跑來跑去而已,而無法使用
Linux 的完整功能。自然我們的系統(tǒng)也就會(huì)比較安全啦!
vsftpd 是基于上面的說明來設(shè)計(jì)的一個(gè)較為安全的 FTP 服務(wù)器軟件,他具有底下的特點(diǎn)喔:
- vsftpd 這個(gè)服務(wù)的啟動(dòng)者身份為一般用戶,所以對(duì)于 Linux 系統(tǒng)的權(quán)限較低,對(duì)于
Linux 系統(tǒng)的危害就相對(duì)的減低了。此外, vsftpd 亦利用 chroot()
這個(gè)函式進(jìn)行改換根目錄的動(dòng)作,使得系統(tǒng)工具不會(huì)被 vsftpd 這支服務(wù)所誤用;
- 任何需要具有較高執(zhí)行權(quán)限的 vsftpd 指令均以一支特殊的上層程序所控制,
該上層程序享有的較高執(zhí)行權(quán)限功能已經(jīng)被限制的相當(dāng)?shù)牡?,并以不影?Linux 本身的系統(tǒng)為準(zhǔn);
- 絕大部分 ftp 會(huì)使用到的額外指令功能 (dir, ls, cd ...) 都已經(jīng)被整合到 vsftpd 主程序當(dāng)中了,因此理論上
vsftpd 不需要使用到額外的系統(tǒng)提供的指令,所以在 chroot 的情況下,vsftpd
不但可以順利運(yùn)作,且不需要額外功能對(duì)于系統(tǒng)來說也比較安全。
- 所有來自客戶端且想要使用這支上層程序所提供的較高執(zhí)行權(quán)限之 vsftpd 指令的需求,
均被視為『不可信任的要求』來處理,必需要經(jīng)過相當(dāng)程度的身份確認(rèn)后,方可利用該上層程序的功能。
例如 chown(), Login 的要求等等動(dòng)作;
- 此外,上面提到的上層程序中,依然使用 chroot() 的功能來限制用戶的執(zhí)行權(quán)限。
由于具有這樣的特點(diǎn),所以 vsftpd 會(huì)變的比較安全一些咯!底下就開始來談如何設(shè)定吧!
21.2.2 所需要的軟件以及軟件結(jié)構(gòu)
vsftpd 所需要的軟件只有一個(gè),那就是 vsftpd ??!^_^!如果你的 CentOS 沒有安裝,請(qǐng)利用 yum install vsftpd
來安裝他吧!軟件很小,下載連同安裝不需要幾秒鐘就搞定了!而事實(shí)上整個(gè)軟件提供的配置文件也少的令人高興!簡(jiǎn)單易用就是
vsftpd 的特色?。∵@些設(shè)定數(shù)據(jù)比較重要的有:
- /etc/vsftpd/vsftpd.conf
嚴(yán)格來說,整個(gè) vsftpd 的配置文件就只有這個(gè)檔案!這個(gè)檔案的設(shè)定是以
bash 的變量設(shè)定相同的方式來處理的,
也就是『參數(shù)=設(shè)定值』來設(shè)定的,注意,
等號(hào)兩邊不能有空白喔!至于詳細(xì)的 vsftpd.conf 可以使用
『 man 5 vsftpd.conf 』來詳查。
- /etc/pam.d/vsftpd
這個(gè)是 vsftpd 使用 PAM 模塊時(shí)的相關(guān)配置文件。主要用來作為身份認(rèn)證之用,還有一些用戶身份的抵擋功能,
也是透過這個(gè)檔案來達(dá)成的。你可以察看一下該檔案:
[root@www ~]# cat /etc/pam.d/vsftpd
#%PAM-1.0
session optional pam_keyinit.so force revoke
auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth required pam_shells.so
auth include password-auth
account include password-auth
session required pam_loginuid.so
session include password-auth
|
上面那個(gè) file 后面接的檔案是『限制使用者無法使用 vsftpd 』之意,
也就是說,其實(shí)你的限制檔案不見得要使用系統(tǒng)默認(rèn)值,也可以在這個(gè)檔案里面進(jìn)行修改啦! ^_^
- /etc/vsftpd/ftpusers
與上一個(gè)檔案有關(guān)系,也就是 PAM 模塊 (/etc/pam.d/vsftpd) 所指定的那個(gè)無法登入的用戶配置文件啊!
這個(gè)檔案的設(shè)定很簡(jiǎn)單,你只要將『不想讓他登入 FTP 的賬號(hào)』寫入這個(gè)檔案即可。一行一個(gè)賬號(hào),看起來像這樣:
[root@www ~]# cat /etc/vsftpd/ftpusers
# Users that are not allowed to login via ftp
root
bin
daemon
....(底下省略)....
|
瞧見沒有?絕大部分的系統(tǒng)賬號(hào)都在這個(gè)檔案內(nèi)喔,也就是說,系統(tǒng)賬號(hào)默認(rèn)是沒有辦法使用 vsftpd 的啦!
如果你還想要讓某些使用者無法登入,寫在這里是最快的!
- /etc/vsftpd/user_list
這個(gè)檔案是否能夠生效與 vsftpd.conf 內(nèi)的兩個(gè)參數(shù)有關(guān),分別是『 userlist_enable, userlist_deny 』。
如果說 /etc/vsftpd/ftpusers 是 PAM 模塊的抵擋設(shè)定項(xiàng)目,那么這個(gè) /etc/vsftpd/user_list
則是 vsftpd 自定義的抵擋項(xiàng)目。事實(shí)上這個(gè)檔案與 /etc/vsftpd/ftpusers 幾乎一模一樣,
在預(yù)設(shè)的情況下,你可以將不希望可登入 vsftpd 的賬號(hào)寫入這里。不過這個(gè)檔案的功能會(huì)依據(jù) vsftpd.conf 配置文件內(nèi)的
userlist_deny={YES/NO} 而不同,這得要特別留意喔!
- /etc/vsftpd/chroot_list
這個(gè)檔案預(yù)設(shè)是不存在的,所以你必須要手動(dòng)自行建立。這個(gè)檔案的主要功能是可以將某些賬號(hào)的使用者 chroot
在他們的家目錄下!但這個(gè)檔案要生效與 vsftpd.conf 內(nèi)的『 chroot_list_enable, chroot_list_file 』兩個(gè)參數(shù)有關(guān)。
如果你想要將某些實(shí)體用戶限制在他們的家目錄下而不許到其他目錄去,可以啟動(dòng)這個(gè)設(shè)定項(xiàng)目喔!
- /usr/sbin/vsftpd
這就是 vsftpd 的主要執(zhí)行檔咯!不要懷疑, vsftpd 只有這一個(gè)執(zhí)行檔而已??!
- /var/ftp/
這個(gè)是 vsftpd 的預(yù)設(shè)匿名者登入的根目錄喔!其實(shí)與 ftp 這個(gè)賬號(hào)的家目錄有關(guān)啦!
大致上就只有這幾個(gè)檔案需要注意而已,而且每個(gè)檔案的設(shè)定又都很簡(jiǎn)單!真是不錯(cuò)啊!
21.2.3 vsftpd.conf 設(shè)定值說明
事實(shí)上,/etc/vsftpd/vsftpd.conf 本身就是一個(gè)挺詳細(xì)的配置文件,且使用『 man 5 vsftpd.conf 』則可以得到完整的參數(shù)說明。
不過我們這里依舊先將 vsftpd.conf 內(nèi)的常用參數(shù)給他寫出來,希望對(duì)你有幫助:
與服務(wù)器環(huán)境較相關(guān)的設(shè)定值
- connect_from_port_20=YES (NO)
記得在前一小節(jié)提到的主動(dòng)式聯(lián)機(jī)使用的 FTP 服務(wù)器的 port 嗎?這就是 ftp-data 的埠號(hào);
- listen_port=21
vsftpd 使用的命令通道 port,如果你想要使用非正規(guī)的埠號(hào),在這個(gè)設(shè)定項(xiàng)目修改吧!
不過你必須要知道,這個(gè)設(shè)定值僅適合以 stand alone 的方式來啟動(dòng)喔!(對(duì)于 super daemon 無效)
- dirmessage_enable=YES (NO)
當(dāng)用戶進(jìn)入某個(gè)目錄時(shí),會(huì)顯示該目錄需要注意的內(nèi)容,顯示的檔案默認(rèn)是
.message ,你可以使用底下的設(shè)定項(xiàng)目來修訂!
- message_file=.message
當(dāng) dirmessage_enable=YES 時(shí),可以設(shè)定這個(gè)項(xiàng)目來讓 vsftpd 尋找該檔案來顯示訊息!
- listen=YES (NO)
若設(shè)定為 YES 表示 vsftpd 是以 standalone 的方式來啟動(dòng)的!預(yù)設(shè)是 NO 呦!所以我們的 CentOS
將它改為 YES 哩!這樣才能使用 stand alone 的方式來喚醒。
- pasv_enable=YES (NO)
支持?jǐn)?shù)據(jù)流的被動(dòng)式聯(lián)機(jī)模式(passive mode),一定要設(shè)定為 YES 的啦!
- use_localtime=YES (NO)
是否使用本地時(shí)間?vsftpd 預(yù)設(shè)使用 GMT 時(shí)間(格林威治),所以預(yù)設(shè)的 FTP 內(nèi)的檔案日期會(huì)比臺(tái)灣晚 8
小時(shí),建議修改設(shè)定為 YES 吧!
- write_enable=YES (NO)
如果你允許用戶上傳數(shù)據(jù)時(shí),就要啟動(dòng)這個(gè)設(shè)定值;
- connect_timeout=60
單位是秒,在數(shù)據(jù)連接的主動(dòng)式聯(lián)機(jī)模式下,我們發(fā)出的連接訊號(hào)在 60 秒內(nèi)得不到客戶端的響應(yīng),則不等待并強(qiáng)制斷線咯。
- accept_timeout=60
當(dāng)用戶以被動(dòng)式 PASV 來進(jìn)行數(shù)據(jù)傳輸時(shí),如果服務(wù)器啟用 passive port 并等待 client 超過 60 秒而無回應(yīng),
那么就給他強(qiáng)制斷線!這個(gè)設(shè)定值與 connect_timeout 類似,不過一個(gè)是管理主動(dòng)聯(lián)機(jī),一個(gè)管理被動(dòng)聯(lián)機(jī)。
- data_connection_timeout=300
如果服務(wù)器與客戶端的數(shù)據(jù)聯(lián)機(jī)已經(jīng)成功建立 (不論主動(dòng)還是被動(dòng)聯(lián)機(jī)),但是可能由于線路問題導(dǎo)致
300 秒內(nèi)還是無法順利的完成數(shù)據(jù)的傳送,那客戶端的聯(lián)機(jī)就會(huì)被我們的 vsftpd 強(qiáng)制剔除!
- idle_session_timeout=300
如果使用者在 300 秒內(nèi)都沒有命令動(dòng)作,強(qiáng)制脫機(jī)!避免占著茅坑不拉屎~
- max_clients=0
如果 vsftpd 是以 stand alone 方式啟動(dòng)的,那么這個(gè)設(shè)定項(xiàng)目可以設(shè)定同一時(shí)間,最多有多少
client 可以同時(shí)連上 vsftpd 哩!限制使用 FTP 的用量!
- max_per_ip=0
與上面 max_clients 類似,這里是同一個(gè) IP 同一時(shí)間可允許多少聯(lián)機(jī)?
- pasv_min_port=0, pasv_max_port=0
上面兩個(gè)是與 passive mode 使用的 port number 有關(guān),如果你想要使用 65400 到
65410 這 11 個(gè) port 來進(jìn)行被動(dòng)式聯(lián)機(jī)模式的連接,可以這樣設(shè)定 pasv_max_port=65410 以及 pasv_min_port=65400。
如果是 0 的話,表示隨機(jī)取用而不限制。
- ftpd_banner=一些文字說明
當(dāng)使用者聯(lián)機(jī)進(jìn)入到 vsftpd 時(shí),在 FTP 客戶端軟件上頭會(huì)顯示的說明文字。不過,這個(gè)設(shè)定值數(shù)據(jù)比較少啦!
建議你可以使用底下的 banner_file 設(shè)定值來取代這個(gè)項(xiàng)目;
- banner_file=/path/file
這個(gè)項(xiàng)目可以指定某個(gè)純文本檔作為使用者登入 vsftpd 服務(wù)器時(shí)所顯示的歡迎字眼。同時(shí),也能夠放置一些讓使用者知道本 FTP
服務(wù)器的目錄架構(gòu)!
與實(shí)體用戶較相關(guān)的設(shè)定值
- guest_enable=YES (NO)
若這個(gè)值設(shè)定為 YES 時(shí),那么任何實(shí)體賬號(hào),均會(huì)被假設(shè)成為 guest 喔 (所以預(yù)設(shè)是不開放的)!
至于訪客在 vsftpd 當(dāng)中,預(yù)設(shè)會(huì)取得 ftp 這個(gè)使用者的相關(guān)權(quán)限。但可以透過 guest_username 來修改。
- guest_username=ftp
在 guest_enable=YES 時(shí)才會(huì)生效,指定訪客的身份而已。
- local_enable=YES (NO)
這個(gè)設(shè)定值必須要為 YES 時(shí),在 /etc/passwd 內(nèi)的賬號(hào)才能以實(shí)體用戶的方式登入我們的 vsftpd 服務(wù)器喔!
- local_max_rate=0
實(shí)體用戶的傳輸速度限制,單位為 bytes/second, 0 為不限制。
- chroot_local_user=YES (NO)
在預(yù)設(shè)的情況下,是否要將使用者限制在自己的家目錄之內(nèi)(chroot)?如果是 YES 代表用戶默認(rèn)就會(huì)被 chroot,如果是 NO,
則預(yù)設(shè)是沒有 chroot。不過,實(shí)際還是需要底下的兩個(gè)參數(shù)互相參考才行。為了安全性,這里應(yīng)該要設(shè)定成 YES
才好。
- chroot_list_enable=YES (NO)
是否啟用 chroot 寫入列表的功能?與底下的 chroot_list_flie 有關(guān)!這個(gè)項(xiàng)目得要開啟,否則底下的列表檔案會(huì)無效。
- chroot_list_file=/etc/vsftpd.chroot_list
如果 chroot_list_enable=YES 那么就可以設(shè)定這個(gè)項(xiàng)目了!這個(gè)項(xiàng)目與 chroot_local_user 有關(guān),詳細(xì)的設(shè)定狀態(tài)請(qǐng)參考
21.2.6 chroot 的說明。
- userlist_enable=YES (NO)
是否藉助 vsftpd 的抵擋機(jī)制來處理某些不受歡迎的賬號(hào),與底下的參數(shù)設(shè)定有關(guān);
- userlist_deny=YES (NO)
當(dāng) userlist_enable=YES 時(shí)才會(huì)生效的設(shè)定,若此設(shè)定值為 YES 時(shí),則當(dāng)使用者賬號(hào)被列入到某個(gè)檔案時(shí),
在該檔案內(nèi)的使用者將無法登入 vsftpd 服務(wù)器!該檔案文件名與下列設(shè)定項(xiàng)目有關(guān)。
- userlist_file=/etc/vsftpd/user_list
若上面 userlist_deny=YES 時(shí),則這個(gè)檔案就有用處了!在這個(gè)檔案內(nèi)的賬號(hào)都無法使用 vsftpd 喔!
- anonymous_enable=YES (NO)
設(shè)定為允許 anonymous 登入我們的 vsftpd 主機(jī)!預(yù)設(shè)是 YES ,底下的所有相關(guān)設(shè)定都需要將這個(gè)設(shè)定為
anonymous_enable=YES 之后才會(huì)生效!
- anon_world_readable_only=YES (NO)
僅允許 anonymous 具有下載可讀檔案的權(quán)限,預(yù)設(shè)是 YES。
- anon_other_write_enable=YES (NO)
是否允許 anonymous 具有除了寫入之外的權(quán)限?包括刪除與改寫服務(wù)器上的檔案及檔名等權(quán)限。預(yù)設(shè)當(dāng)然是
NO!如果要設(shè)定為 YES,那么開放給 anonymous 寫入的目錄亦需要調(diào)整權(quán)限,讓 vsftpd 的 PID
擁有者可以寫入才行!
- anon_mkdir_write_enable=YES (NO)
是否讓 anonymous 具有建立目錄的權(quán)限?默認(rèn)值是 NO!如果要設(shè)定為 YES,
那么 anony_other_write_enable 必須設(shè)定為 YES !
- anon_upload_enable=YES (NO)
是否讓 anonymous 具有上傳數(shù)據(jù)的功能,默認(rèn)是 NO,如果要設(shè)定為 YES ,則 anon_other_write_enable=YES
必須設(shè)定。
- deny_email_enable=YES (NO)
將某些特殊的 email address 抵擋住,不讓那些 anonymous 登入!如果以 anonymous
登入服務(wù)器時(shí),不是會(huì)要求輸入密碼嗎?密碼不是要你輸入你的 email address 嗎?如果你很討厭某些 email address,
就可以使用這個(gè)設(shè)定來將他取消登入的權(quán)限!需與下個(gè)設(shè)定項(xiàng)目配合:
- banned_email_file=/etc/vsftpd/banned_emails
如果 deny_email_enable=YES 時(shí),可以利用這個(gè)設(shè)定項(xiàng)目來規(guī)定哪個(gè) email address 不可登入我們的 vsftpd
喔!在上面設(shè)定的檔案內(nèi),一行輸入一個(gè) email address 即可!
- no_anon_password=YES (NO)
當(dāng)設(shè)定為 YES 時(shí),表示 anonymous 將會(huì)略過密碼檢驗(yàn)步驟,而直接進(jìn)入 vsftpd 服務(wù)器內(nèi)喔!所以一般預(yù)設(shè)都是
NO 的!(登入時(shí)會(huì)檢查輸入的 emai)
- anon_max_rate=0
這個(gè)設(shè)定值后面接的數(shù)值單位為 bytes/秒 ,限制 anonymous 的傳輸速度,如果是 0 則不限制(由最大帶寬所限制),如果你想讓
anonymous 僅有 30 KB/s 的速度,可以設(shè)定『anon_max_rate=30000』
- anon_umask=077
限制 anonymous 上傳檔案的權(quán)限!如果是 077 則 anonymous 傳送過來的檔案權(quán)限會(huì)是 -rw------- 喔!
關(guān)于系統(tǒng)安全方面的一些設(shè)定值
- ascii_download_enable=YES (NO)
如果設(shè)定為 YES ,那么 client 就優(yōu)先 (預(yù)設(shè)) 使用 ASCII 格式下載文件。
- ascii_upload_enable=YES (NO)
與上一個(gè)設(shè)定類似的,只是這個(gè)設(shè)定針對(duì)上傳而言!預(yù)設(shè)是 NO
- one_process_model=YES (NO)
這個(gè)設(shè)定項(xiàng)目比較危險(xiǎn)一點(diǎn)~當(dāng)設(shè)定為 YES 時(shí),表示每個(gè)建立的聯(lián)機(jī)都會(huì)擁有一支 process 在負(fù)責(zé),可以增加 vsftpd 的效能。不過,
除非你的系統(tǒng)比較安全,而且硬件配備比較高,否則容易耗盡系統(tǒng)資源喔!一般建議設(shè)定為 NO 的啦!
- tcp_wrappers=YES (NO)
當(dāng)然我們都習(xí)慣支持 TCP Wrappers
的啦!所以設(shè)定為 YES 吧!
- xferlog_enable=YES (NO)
當(dāng)設(shè)定為 YES 時(shí),使用者上傳與下載文件都會(huì)被紀(jì)錄起來。記錄的檔案與下一個(gè)設(shè)定項(xiàng)目有關(guān):
- xferlog_file=/var/log/xferlog
如果上一個(gè) xferlog_enable=YES 的話,這里就可以設(shè)定了!這個(gè)是登錄檔的檔名啦!
- xferlog_std_format=YES (NO)
是否設(shè)定為 wu ftp 相同的登錄檔格式?預(yù)設(shè)為 NO ,因?yàn)榈卿洐n會(huì)比較容易讀!
不過,如果你有使用 wu ftp 登錄文件的分析軟件,這里才需要設(shè)定為 YES
- dual_log_enable=YES,
vsftpd_log_file=/var/log/vsftpd.log
除了 /var/log/xferlog 的 wu-ftp 格式登錄檔之外,還可以具有 vsftpd 的獨(dú)特登錄檔格式喔!如果你的 FTP 服務(wù)器并不是很忙碌,
或許訂出兩個(gè)登錄檔的撰寫 (/var/log/{vsftpd.log,xferlog) 是不錯(cuò)的。
- nopriv_user=nobody
我們的 vsftpd 預(yù)設(shè)以 nobody 作為此一服務(wù)執(zhí)行者的權(quán)限。因?yàn)?nobody 的權(quán)限相當(dāng)?shù)牡停虼思词贡蝗肭?,入侵者僅能取得
nobody 的權(quán)限喔!
- pam_service_name=vsftpd
這個(gè)是 pam 模塊的名稱,我們放置在 /etc/pam.d/vsftpd 即是這個(gè)咚咚!
上面這些是常見的 vsftpd 的設(shè)定參數(shù),還有很多參數(shù)我沒有列出來,你可以使用 man 5 vsftpd.conf
查閱喔!不過,基本上上面這些參數(shù)已經(jīng)夠我們?cè)O(shè)定 vsftpd 啰。
21.2.4 vsftpd 啟動(dòng)的模式
vsftpd 可以使用 stand alone 或 super daemon 的方式來啟動(dòng),我們 CentOS 預(yù)設(shè)是以 stand alone 來啟動(dòng)的。
那什么時(shí)候應(yīng)該選擇 stand alone 或者是 super daemon 呢?如果你的 ftp
服務(wù)器是提供給整個(gè)因特網(wǎng)來進(jìn)行大量下載的任務(wù),例如各大專院校的 FTP 服務(wù)器,那建議你使用 stand alone 的方式,
服務(wù)的速度上會(huì)比較好。如果僅是提供給內(nèi)部人員使用的 FTP 服務(wù)器,那使用 super daemon 來管理即可啊。
利用 CentOS 提供的 script 來啟動(dòng) vsftpd (stand alone)
其實(shí) CentOS 不用作任何設(shè)定就能夠啟動(dòng) vsftpd 啰!是這樣啟動(dòng)的啦:
[root@www ~]# /etc/init.d/vsftpd start
[root@www ~]# netstat -tulnp| grep 21
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 11689/vsftpd
# 看到啰,是由 vsftpd 所啟動(dòng)的呢!
|
自行設(shè)定以 super daemon 來啟動(dòng) (有必要再進(jìn)行,不用實(shí)作)
如果你的 FTP 是很少被使用的,那么利用 super daemon 來管理不失為一個(gè)好主意。
不過若你想要使用 super daemon 管理的話,那就得要自行修改一下配置文件了。其實(shí)也不難啦,你應(yīng)該要這樣處理的:
[root@www ~]# vim /etc/vsftpd/vsftpd.conf
# 找到 listen=YES 這一行:大約在 109 行左右啦,并將它改成:
listen=NO
|
接下來修改一下 super daemon 的配置文件,底下這個(gè)檔案你必須要自行建立的,原本是不存在的喔:
[root@www ~]# yum install xinetd <==假設(shè) xinetd 沒有安裝時(shí)
[root@www ~]# vim /etc/xinetd.d/vsftpd
service ftp
{
socket_type = stream
wait = no
user = root
server = /usr/sbin/vsftpd
log_on_success += DURATION USERID
log_on_failure += USERID
nice = 10
disable = no
}
|
然后嘗試啟動(dòng)看看呢:
[root@www ~]# /etc/init.d/vsftpd stop
[root@www ~]# /etc/init.d/xinetd restart
[root@www ~]# netstat -tulnp| grep 21
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 32274/xinetd
|
有趣吧!兩者啟動(dòng)的方式可不一樣啊!管理的方式就會(huì)差很多的呦!不管你要使用哪種啟動(dòng)的方式,切記不要兩者同時(shí)啟動(dòng),否則會(huì)發(fā)生錯(cuò)誤的!你應(yīng)該使用 chkconfig --list
檢查一下這兩種啟動(dòng)的方式,然后依據(jù)你的需求來決定用哪一種方式啟動(dòng)。鳥哥底下的設(shè)定都會(huì)以
stand alone 這個(gè) CentOS 默認(rèn)的啟動(dòng)模式來處理,所以趕緊將剛剛的動(dòng)作給他改回來喔!
21.2.5 CentOS 的 vsftpd 默認(rèn)值
在 CentOS 的默認(rèn)值當(dāng)中,vsftpd 是同時(shí)開放實(shí)體用戶與匿名用戶的,CentOS 的默認(rèn)值如下:
[root@www ~]# vim /etc/vsftpd/vsftpd.conf
# 1. 與匿名者有關(guān)的信息:
anonymous_enable=YES <==支持匿名者的登入使用 FTP 功能
# 2. 與實(shí)體用戶有關(guān)的設(shè)定
local_enable=YES <==支持本地端的實(shí)體用戶登入
write_enable=YES <==允許用戶上傳數(shù)據(jù) (包括檔案與目錄)
local_umask=022 <==建立新目錄 (755) 與檔案 (644) 的權(quán)限
# 3. 與服務(wù)器環(huán)境有關(guān)的設(shè)定
dirmessage_enable=YES <==若目錄下有 .message 則會(huì)顯示該檔案的內(nèi)容
xferlog_enable=YES <==啟動(dòng)登錄文件記錄,記錄于 /var/log/xferlog
connect_from_port_20=YES <==支持主動(dòng)式聯(lián)機(jī)功能
xferlog_std_format=YES <==支持 WuFTP 的登錄檔格式
listen=YES <==使用 stand alone 方式啟動(dòng) vsftpd
pam_service_name=vsftpd <==支持 PAM 模塊的管理
userlist_enable=YES <==支持 /etc/vsftpd/user_list 檔案內(nèi)的賬號(hào)登入管控!
tcp_wrappers=YES <==支持 TCP Wrappers 的防火墻機(jī)制
|
上面各項(xiàng)設(shè)定值請(qǐng)自行參考 21.2.3 的詳細(xì)說明吧。而通過這樣的設(shè)定值咱們的
vsftpd 可以達(dá)到如下的功能:
- 你可以使用 anonymous 這個(gè)匿名賬號(hào)或其他實(shí)體賬號(hào) (/etc/passwd) 登入;
- anonymous 的家目錄在 /var/ftp ,且無上傳權(quán)限,亦已經(jīng)被 chroot 了;
- 實(shí)體用戶的家目錄參考 /etc/passwd,并沒有被 chroot,可前往任何有權(quán)限可進(jìn)入的目錄中;
- 任何于 /etc/vsftpd/ftpusers 內(nèi)存在的賬號(hào)均無法使用 vsftpd (PAM);
- 可利用 /etc/hosts.{allow|deny} 來作為基礎(chǔ)防火墻;
- 當(dāng)客戶端有任何上傳/下載信息時(shí),該信息會(huì)被紀(jì)錄到 /var/log/xferlog 中;
- 主動(dòng)式聯(lián)機(jī)的埠口為 port 20;
- 使用格林威治時(shí)間 (GMT)。
所以當(dāng)你啟動(dòng) vsftpd 后,你的實(shí)體用戶就能夠直接利用 vsftpd 這個(gè)服務(wù)來傳輸他自己的數(shù)據(jù)了。
不過比較大的問題是,因?yàn)?vsftpd 預(yù)設(shè)使用 GMT 時(shí)間,因?yàn)槟阍诳蛻舳耸褂?ftp
軟件連接到 FTP 服務(wù)器時(shí),會(huì)發(fā)現(xiàn)每個(gè)檔案的時(shí)間都慢了八小時(shí)了!真是討厭??!
所以建議你加設(shè)一個(gè)參數(shù)值,就是『 use_localtime=YES 』啰!
[root@www ~]# vim /etc/vsftpd/vsftpd.conf
# 在這個(gè)檔案當(dāng)中的最后一行加入這一句即可
use_localtime=YES
[root@www ~]# /etc/init.d/vsftpd restart
[root@www ~]# chkconfig vsftpd on
|
如此一來你的 FTP 服務(wù)器不但可以提供匿名賬號(hào)來下載 /var/ftp 的數(shù)據(jù),如果使用實(shí)體賬號(hào)來登入的話,
就能夠進(jìn)入到該用戶的家目錄底下去了!真是很簡(jiǎn)單方便的一個(gè)設(shè)定??!且使用本地端時(shí)間呢! ^_^
另外,如果你預(yù)計(jì)要將 FTP 開放給 Internet 使用時(shí),請(qǐng)注意得要開放防火墻喔!關(guān)于防火墻的建置情況,
由于牽涉到數(shù)據(jù)流的主動(dòng)、被動(dòng)聯(lián)機(jī)方式,因此,還得要加入防火墻模塊。這部份我們?cè)诤罄m(xù)的
21.2.8 小節(jié)再加以介紹,反正,最終記得要開放 FTP
的聯(lián)機(jī)要求就對(duì)了!
21.2.6 針對(duì)實(shí)體賬號(hào)的設(shè)定
雖然在 CentOS 的默認(rèn)情況當(dāng)中實(shí)體用戶已經(jīng)可以使用 FTP 的服務(wù)了,不過我們可能還需要一些額外的功能來限制實(shí)體用戶。
舉例來說,限制用戶無法離開家目錄 (chroot)、限制下載速率、限制用戶上傳檔案時(shí)的權(quán)限 (mask) 等等。
底下我們先列出一些希望達(dá)到的功能,然后再繼續(xù)進(jìn)行額外功能的處理:
- 希望使用臺(tái)灣本地時(shí)間取代 GMT 時(shí)間;
- 用戶登入時(shí)顯示一些歡迎訊息的信息;
- 系統(tǒng)賬號(hào)不可登入主機(jī) (亦即 UID 小于 500 以下的賬號(hào));
- 一般實(shí)體用戶可以進(jìn)行上傳、下載、建立目錄及修改檔案等動(dòng)作;
- 用戶新增的檔案、目錄之 umask 希望設(shè)定為 002;
- 其他主機(jī)設(shè)定值保留默認(rèn)值即可。
你可以自行處理 vsftpd.conf 這個(gè)檔案,以下則是一個(gè)范例。注意,如果你的 vsftpd.conf 沒有相關(guān)設(shè)定值,
請(qǐng)自行補(bǔ)上吧!OK!讓我們開始一步一步來依序處理先:
- 先建立主配置文件 vsftpd.conf,這個(gè)配置文件已經(jīng)包含了主要設(shè)定值:
[root@www ~]# vim /etc/vsftpd/vsftpd.conf
# 1. 與匿名者相關(guān)的信息,在這個(gè)案例中將匿名登錄取消:
anonymous_enable=NO
# 2. 與實(shí)體用戶相關(guān)的信息:可寫入,且 umask 為 002 喔!
local_enable=YES
write_enable=YES
local_umask=002
userlist_enable=YES
userlist_deny=YES
userlist_file=/etc/vsftpd/user_list <==這個(gè)檔案必須存在!還好,預(yù)設(shè)有此檔案!
# 3. 與服務(wù)器環(huán)境有關(guān)的設(shè)定
use_localtime=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
tcp_wrappers=YES
banner_file=/etc/vsftpd/welcome.txt <==這個(gè)檔案必須存在!需手動(dòng)建立!
[root@www ~]# /etc/init.d/xinetd restart <==取消 super dameon
[root@www ~]# /etc/init.d/vsftpd restart
|
- 建立歡迎訊息:
當(dāng)我們想讓登入者可查閱咱們系統(tǒng)管理員所下達(dá)的『公告』事項(xiàng)時(shí),可以使用這個(gè)設(shè)定!那就是
banner_file=/etc/vsftpd/welcome.txt 這個(gè)參數(shù)的用途了!我們可以編輯這個(gè)檔案即可。
好了,開始來建立歡迎畫面吧!
[root@www ~]# vim /etc/vsftpd/welcome.txt
歡迎光臨本小站,本站提供 FTP 的相關(guān)服務(wù)!
主要的服務(wù)是針對(duì)本機(jī)實(shí)體用戶提供的,
若有任何問題,請(qǐng)與鳥哥聯(lián)絡(luò)!
|
- 建立限制系統(tǒng)賬號(hào)登入的檔案
再來是針對(duì)系統(tǒng)賬號(hào)來給予抵擋的機(jī)制,其實(shí)有兩個(gè)檔案啦,一個(gè)是 PAM 模塊管的,一個(gè)是 vsftpd 主動(dòng)提供的,
在預(yù)設(shè)的情況下這兩個(gè)檔案分別是:
- /etc/vsftpd/ftpusers:就是 /etc/pam.d/vsftpd 這個(gè)檔案的設(shè)定所影響的;
- /etc/vsftpd/user_list:由 vsftpd.conf 的 userlist_file 所設(shè)定。
這兩個(gè)檔案的內(nèi)容是一樣的哩~并且這兩個(gè)檔案必須要存在才行。請(qǐng)你參考你的 /etc/passwd 配置文件,
然后將 UID 小于 500 的賬號(hào)名稱給他同時(shí)寫到這兩個(gè)檔案內(nèi)吧!一行一個(gè)賬號(hào)!
[root@www ~]# vim /etc/vsftpd/user_list
root
bin
....(底下省略)....
|
- 測(cè)試結(jié)果:
你可以使用圖形接口的 FTP 客戶端軟件來處理,也可以透過 Linux 本身提供的 ftp 客戶端功能哩!
關(guān)于 ftp 指令我們已經(jīng)在第五章談過了,你可以自行前往參考。這里直接測(cè)試一下吧:
# 測(cè)試使用已知使用者登入,例如 dmtsai 這個(gè)實(shí)體用戶:
[root@www ~]# ftp localhost
Trying 127.0.0.1...
Connected to localhost (127.0.0.1).
220-歡迎光臨本小站,本站提供 FTP 的相關(guān)服務(wù)! <==剛剛建立的歡迎訊息
220-主要的服務(wù)是針對(duì)本機(jī)實(shí)體用戶提供的,
220-若有任何問題,請(qǐng)與鳥哥聯(lián)絡(luò)!
220
Name (localhost:root): student
331 Please specify the password.
Password: <==輸入密碼啰在這里!
500 OOPS: cannot change directory:/home/student <==有講登入失敗的原因喔!
Login failed.
ftp> bye
221 Goodbye.
|
由于默認(rèn)一般用戶無法登入 FTP 的!因?yàn)?SELinux 的問題啦!請(qǐng)參考下個(gè)小節(jié)的方式來處理。
然后以上面的方式測(cè)試完畢后,你可以在登入者賬號(hào)處分別填寫 (1)root (2)anonymous 來嘗試登入看看!
如果不能登入的話,那就是設(shè)定 OK 的啦!(root 不能登入是因?yàn)?PAM 模塊以及 user_list 設(shè)定值的關(guān)系,
而匿名無法登入,是因?yàn)槲覀?vsftpd.conf 里頭就是設(shè)定不能用匿名登錄嘛!)
上面是最簡(jiǎn)單的實(shí)體賬號(hào)相關(guān)設(shè)定。那如果你還想要限制用戶家目錄的 chroot
或其他如速限等數(shù)據(jù),就得要看看底下的特殊設(shè)定項(xiàng)目啰。
實(shí)體賬號(hào)的 SELinux 議題
在預(yù)設(shè)的情況下,CentOS 的 FTP 是不允許實(shí)體賬號(hào)登入取得家目錄數(shù)據(jù)的,這是因?yàn)?SELinux 的問題啦!
如果你在剛剛的 ftp localhost 步驟中,在 bye 離開 FTP 之前下達(dá)過『 dir 』的話,那你會(huì)發(fā)現(xiàn)沒有任何資料跑出來~
這并不是你錯(cuò)了,而是 SELinux 不太對(duì)勁的緣故。那如何解決呢?這樣處理即可:
[root@www ~]# getsebool -a | grep ftp
allow_ftpd_anon_write --> off
allow_ftpd_full_access --> off
allow_ftpd_use_cifs --> off
allow_ftpd_use_nfs --> off
ftp_home_dir --> off <==就是這玩意兒!要設(shè)定 on 才行!
....(底下省略)....
[root@www ~]# setsebool -P ftp_home_dir=1
|
這樣就搞定啰!如果還有其他可能發(fā)生錯(cuò)誤的原因,包括檔案數(shù)據(jù)使用 mv 而非使用 cp 導(dǎo)致 SELinux
文件類型無法繼承原有目錄的類型時(shí),那就請(qǐng)自行查閱 /var/log/messages 的內(nèi)容吧!通常 SELinux
沒有這么難處理的啦!^_^
對(duì)使用者 (包括未來新增用戶) 進(jìn)行 chroot
在鳥哥接觸的一般 FTP 使用環(huán)境中,大多數(shù)都是要開放給廠商聯(lián)機(jī)來使用的,給自己人使用的機(jī)會(huì)雖然也有,
不過使用者數(shù)量通常比較少一些。所以啰,鳥哥現(xiàn)在都是建議默認(rèn)讓實(shí)體用戶通通被 chroot,
而允許不必 chroot 的賬號(hào)才需要額外設(shè)定。這樣的好處是,新建的賬號(hào)如果忘記進(jìn)行 chroot,反正原本就是 chroot,
比較不用擔(dān)心如果該賬號(hào)是開給廠商時(shí)該怎辦的問題。
現(xiàn)在假設(shè)我系統(tǒng)里面僅有 vbird 與 dmtsai 兩個(gè)賬號(hào)不要被 chroot,其他如 student, smb1... 等賬號(hào)通通預(yù)設(shè)是 chroot
的啦,包括未來新增賬號(hào)也全部預(yù)設(shè) chroot!那該如何設(shè)定?很簡(jiǎn)單,三個(gè)設(shè)定值加上一個(gè)額外配置文件就搞定了!步驟如下:
# 1. 修改 vsftpd.conf 的參數(shù)值:
[root@www ~]# vim /etc/vsftpd/vsftpd.conf
# 增加是否設(shè)定針對(duì)某些使用者來 chroot 的相關(guān)設(shè)定呦!
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
# 2. 建立不被 chroot 的使用者賬號(hào)列表,即使沒有任何賬號(hào),此檔案也是要存在!
[root@www ~]# vim /etc/vsftpd/chroot_list
vbird
dmtsai
[root@www ~]# /etc/init.d/vsftpd restart
|
如此一來,除了 dmtsai 與 vbird 之外的其他可用 FTP 的賬號(hào)者,通通會(huì)被 chroot 在他們的家目錄下,
這樣對(duì)系統(tǒng)比較好啦!接下來,請(qǐng)你自己分別使用有與沒有被 chroot 的賬號(hào)來聯(lián)機(jī)測(cè)試看看。
你可不希望帶寬被使用者上傳/下載所耗盡,而影響咱們服務(wù)器的其他正常服務(wù)吧?所以限制使用者的傳輸帶寬有時(shí)也是需要的!
假設(shè)『我要限制所有使用者的總傳輸帶寬最大可達(dá) 1 MBytes/秒 』時(shí),你可以這樣做即可:
[root@www ~]# vim /etc/vsftpd/vsftpd.conf
# 增加底下這一個(gè)參數(shù)即可:
local_max_rate=1000000 <==記住喔,單位是 bytes/second
[root@www ~]# /etc/init.d/vsftpd restart
|
上述的單位是 Bytes/秒,所以你可以依據(jù)你自己的網(wǎng)絡(luò)環(huán)境來限制你的帶寬!這樣就給他限制好啰!有夠容易吧!
那怎么測(cè)試???很簡(jiǎn)單,用本機(jī)測(cè)試最準(zhǔn)!你可以用 dd 做出一個(gè) 10MB 的檔案放在 student 的家目錄下,然后用 root 下達(dá)
ftp localhost,并輸入 student 的帳密,接下來給他 get 這個(gè)新的檔案,就能夠在最終知道下載的速度啦!
限制最大同時(shí)上線人數(shù)與同一 IP 的 FTP 聯(lián)機(jī)數(shù)
如果你有限制最大使用帶寬的話,那么你可能還需要限制最大在線人數(shù)才行!舉例來說,你希望最多只有 10 個(gè)人同時(shí)使用你的
FTP 的話,并且每個(gè) IP 來源最多只能建立一條 FTP 的聯(lián)機(jī)時(shí),那你可以這樣做:
[root@www ~]# vim /etc/vsftpd/vsftpd.conf
# 增加底下的這兩個(gè)參數(shù):
max_clients=10
max_per_ip=1
[root@www ~]# /etc/init.d/vsftpd restart
|
這樣就搞定了!讓你的 FTP 不會(huì)人滿為患吶!
建立嚴(yán)格的可使用 FTP 的賬號(hào)列表
在預(yù)設(shè)的環(huán)境當(dāng)中,我們是將『不許使用 FTP 的賬號(hào)寫入 /etc/vsftpd/user_list 檔案』,所以沒有寫入
/etc/vsftpd/user_list 當(dāng)中的使用者就能夠使用 FTP 了!如此一來,未來新增的使用者預(yù)設(shè)都能夠使用 FTP 的服務(wù)。
如果換個(gè)角度來思考,若我想只讓某些人可以使用 FTP 而已,亦即是新增的使用者預(yù)設(shè)不可使用
FTP 這個(gè)服務(wù)的話那么應(yīng)該如何作呢?你需要修改配置文件成為這樣:
[root@www ~]# vim /etc/vsftpd/vsftpd.conf
# 這幾個(gè)參數(shù)必須要修改成這樣:
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd/user_list
[root@www ~]# /etc/init.d/vsftpd restart
|
則此時(shí)『寫入 /etc/vsftpd/user_list 變成可以使用 FTP 的賬號(hào)』了!
所以未來新增的使用者如果要能夠使用 FTP 的話,就必須要寫入 /etc/vsftpd/user_list 才行!
使用這個(gè)機(jī)制請(qǐng)?zhí)貏e小心,否則容易搞混掉~
透過這幾個(gè)簡(jiǎn)單的設(shè)定值,相信 vsftpd 已經(jīng)可以符合大部分合法 FTP 網(wǎng)站的需求啰!
更多詳細(xì)的用法則請(qǐng)參考 man 5 vsftpd.conf 吧!
例題:
假設(shè)你因?yàn)槟承┨厥庑枨?,所以必須要開放 root 使用 FTP 傳輸檔案,那么你應(yīng)該要如何處理?
答:
由于系統(tǒng)賬號(hào)無法使用 FTP 是因?yàn)?PAM 模塊與 vsftpd 的內(nèi)建功能所致,亦即是 /etc/vsftpd/ftpusers 及 /etc/vsftpd/user_list
這兩個(gè)檔案的影響。所以你只要進(jìn)入這兩個(gè)檔案,并且將 root 那一行批注掉,那 root 就可以使用 vsftpd這個(gè) FTP 服務(wù)了。
不過,不建議如此作喔!
|
21.2.7 僅有匿名登錄的相關(guān)設(shè)定
雖然你可以同時(shí)開啟實(shí)體用戶與匿名用戶,不過建議你,服務(wù)器還是依據(jù)需求,針對(duì)單一種身份來設(shè)定吧!
底下我們將針對(duì)匿名用戶來設(shè)定,且不開放實(shí)體用戶。一般來說,這種設(shè)定是給類似大專院校的 FTP 服務(wù)器來使用的哩!
- 使用臺(tái)灣本地的時(shí)間,而非 GMT 時(shí)間;
- 提供歡迎訊息,說明可提供下載的信息;
- 僅開放 anonymous 的登入,且不需要輸入密碼;
- 文件傳輸?shù)乃傧逓?1 Mbytes/second;
- 數(shù)據(jù)連接的過程 (不是命令通道!) 只要超過 60 秒沒有響應(yīng),就強(qiáng)制 Client 斷線!
- 只要 anonymous 超過十分鐘沒有動(dòng)作,就予以斷線;
- 最大同時(shí)上線人數(shù)限制為 50 人,且同一 IP 來源最大聯(lián)機(jī)數(shù)量為 5 人;
預(yù)設(shè)的 FTP 匿名者的根目錄所在: ftp 賬號(hào)的家目錄
OK!那如何設(shè)定呢?首先我們必須要知道的是匿名用戶的目錄在哪里?
事實(shí)上匿名者默認(rèn)登入的根目錄是以 ftp 這個(gè)用戶的家目錄為主,所以你可以使用『 finger ftp 』來查閱。
咱們的 CentOS 默認(rèn)的匿名者根目錄在 /var/ftp/ 中。且匿名登錄者在使用 FTP 服務(wù)時(shí),他預(yù)設(shè)可以使用『 ftp 』
這個(gè)使用者身份的權(quán)限喔,只是被 chroot 到 /var/ftp/ 目錄中就是了。
因?yàn)槟涿咧粫?huì)在 /var/ftp/ 當(dāng)中瀏覽,所以你必須將要提供給用戶下載的數(shù)據(jù)通通給放置到 /var/ftp/ 去。
假設(shè)你已經(jīng)放置了 linux 的相關(guān)目錄以及 gnu 的相關(guān)軟件到該目錄中了,那我們可以這樣做個(gè)假設(shè):
[root@www ~]# mkdir /var/ftp/linux
[root@www ~]# mkdir /var/ftp/gnu
|
然后將 vsftpd.conf 的數(shù)據(jù)清空,重新這樣處理他吧:
- 建立 vsftpd.conf 的設(shè)定數(shù)據(jù)
[root@www ~]# vim /etc/vsftpd/vsftpd.conf
# 將這個(gè)檔案的全部?jī)?nèi)容改成這樣:
# 1. 與匿名者相關(guān)的信息:
anonymous_enable=YES
no_anon_password=YES <==匿名登錄時(shí),系統(tǒng)不會(huì)檢驗(yàn)密碼 (通常是email)
anon_max_rate=1000000 <==最大帶寬使用為 1MB/s 左右
data_connection_timeout=60 <==數(shù)據(jù)流聯(lián)機(jī)的 timeout 為 60 秒
idle_session_timeout=600 <==若匿名者發(fā)呆超過 10 分鐘就斷線
max_clients=50 <==最大聯(lián)機(jī)與每個(gè) IP 的可用聯(lián)機(jī)
max_per_ip=5
# 2. 與實(shí)體用戶相關(guān)的信息,本案例中為關(guān)閉他的情況!
local_enable=NO
# 3. 與服務(wù)器環(huán)境有關(guān)的設(shè)定
use_localtime=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd
tcp_wrappers=YES
banner_file=/etc/vsftpd/anon_welcome.txt <==檔名有改喔!
[root@www ~]# /etc/init.d/vsftpd restart
|
- 建立歡迎畫面與下載提示訊息
各位親愛的觀眾朋友!要注意~在這個(gè)案例當(dāng)中,我們將歡迎訊息設(shè)定在 /etc/vsftpd/anon_welcome.txt 這個(gè)檔案中,
至于這個(gè)檔案的內(nèi)容你可以這樣寫 (這個(gè)檔案一定要存在!否則會(huì)造成客戶端無法聯(lián)機(jī)成功喔!):
[root@www ~]# vim /etc/vsftpd/anon_welcome.txt
歡迎光臨本站所提供的 FTP 服務(wù)!
本站主要提供 Linux 操作系統(tǒng)相關(guān)檔案以及 GNU 自由軟件喔!
有問題請(qǐng)與站長(zhǎng)聯(lián)絡(luò)!謝謝大家!
主要的目錄為:
linux 提供 Linux 操作系統(tǒng)相關(guān)軟件
gnu 提供 GNU 的自由軟件
uploads 提供匿名的您上傳數(shù)據(jù)
|
看到啰!主要寫的數(shù)據(jù)都是針對(duì)一些公告事項(xiàng)就是了!
- 客戶端的測(cè)試:密碼與歡迎訊息是重點(diǎn)!
同樣的,我們使用 ftp 這個(gè)軟件來給他測(cè)試一下吧!
[root@www ~]# ftp localhost
Connected to localhost (127.0.0.1).
220-歡迎光臨本站所提供的 FTP 服務(wù)! <==底下這幾行中文就是歡迎與提示訊息!
220-本站主要提供 Linux 操作系統(tǒng)相關(guān)檔案以及 GNU 自由軟件喔!
220-有問題請(qǐng)與站長(zhǎng)聯(lián)絡(luò)!謝謝大家!
220-主要的目錄為:
220-
220-linux 提供 Linux 操作系統(tǒng)相關(guān)軟件
220-gnu 提供 GNU 的自由軟件
220-uploads 提供匿名的您上傳數(shù)據(jù)
220
Name (localhost:root): anonymous <==匿名賬號(hào)名稱是要背的!
230 Login successful. <==沒有輸入密碼即可登入呢!
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> dir
227 Entering Passive Mode (127,0,0,1,196,17).
150 Here comes the directory listing.
drwxr-xr-x 2 0 0 4096 Aug 08 16:37 gnu
-rw-r--r-- 1 0 0 17 Aug 08 14:18 index.html
drwxr-xr-x 2 0 0 4096 Aug 08 16:37 linux
drwxr-xr-x 2 0 0 4096 Jun 25 17:44 pub
226 Directory send OK.
ftp> bye
221 Goodbye.
|
看到否?這次可就不需要輸入任何密碼了,因?yàn)槭悄涿卿浡?!而且,如果你以其他的賬號(hào)來嘗試登入時(shí),
那么 vsftpd 會(huì)立刻響應(yīng)僅開放匿名的訊息喔!(530 This FTP server is anonymous only.)
讓匿名者可上傳/下載自己的資料 (權(quán)限開放最大)
在上列的數(shù)據(jù)當(dāng)中,實(shí)際上匿名用戶僅可進(jìn)行下載的動(dòng)作而已。如果你還想讓匿名者可以上傳檔案或者是建立目錄的話,
那你還需要額外增加一些設(shè)定才行:
[root@www ~]# vim /etc/vsftpd/vsftpd.conf
# 新增底下這幾行??!
write_enable=YES
anon_other_write_enable=YES
anon_mkdir_write_enable=YES
anon_upload_enable=YES
[root@www ~]# /etc/init.d/vsftpd restart
|
如果你設(shè)定上面四項(xiàng)參數(shù),則會(huì)允許匿名者擁有完整的建立、刪除、修改檔案與目錄的權(quán)限。
不過,實(shí)際要生效還需要 Linux 的文件系統(tǒng)權(quán)限正確才行!
我們知道匿名者取得的身份是 ftp ,所以如果想讓匿名者上傳數(shù)據(jù)到 /var/ftp/uploads/ 中,則需要這樣做:
[root@www ~]# mkdir /var/ftp/uploads
[root@www ~]# chown ftp /var/ftp/uploads
|
然后你以匿名者身份登入后,就會(huì)發(fā)現(xiàn)匿名者的根目錄多了一個(gè) /upload 的目錄存在了,并且你可以在該目錄中上傳檔案/目錄喔!
如此一來系統(tǒng)的權(quán)限大開!很要命喔!所以,請(qǐng)仔細(xì)的控制好你的上傳目錄才行!
不過,在實(shí)際測(cè)試當(dāng)中,卻發(fā)現(xiàn)還是沒辦法上傳呢!怎么回事???如果你有去看一下 /var/log/messages 的話,那就會(huì)發(fā)現(xiàn)啦!
又是 SELinux 這家伙呢!怎么辦?就透過『 sealert -l ... 』在 /var/log/messages 里面觀察到的指令丟進(jìn)去,
立刻就知道解決方案啦!解決方案就是放行 SELinux 的匿名 FTP 規(guī)則如下:
[root@www ~]# setsebool -P allow_ftpd_anon_write=1
[root@www ~]# setsebool -P allow_ftpd_full_access=1
|
然后你再測(cè)試一下用 anonymous 登入,到 /uploads 去上傳個(gè)檔案吧!就會(huì)知道能不能成功哩!
讓匿名者僅具有上傳權(quán)限,不可下載匿名者上傳的東西
一般來說,用戶上傳的數(shù)據(jù)在管理員尚未查閱過是否合乎版權(quán)等相關(guān)事宜前,是不應(yīng)該讓其他人下載的!
然而前一小節(jié)的設(shè)定當(dāng)中,用戶上傳的資料是可以被其他人所瀏覽與下載的!如此一來實(shí)在是很危險(xiǎn)!所以如果你要設(shè)定
/var/ftp/uploads/ 內(nèi)透過匿名者上傳的數(shù)據(jù)中,僅能上傳不能被下載時(shí),那么被上傳的數(shù)據(jù)的權(quán)限就得要修改一下才行!
請(qǐng)將前一小節(jié)所設(shè)定的四個(gè)參數(shù)簡(jiǎn)化成為:
[root@www ~]# vim /etc/vsftpd/vsftpd.conf
# 將這幾行給他改一改先!記得要拿掉 anon_other_write_enable=YES
write_enable=YES
anon_mkdir_write_enable=YES
anon_upload_enable=YES
chown_uploads=YES <==新增的設(shè)定值在此!
chown_username=daemon
[root@www ~]# /etc/init.d/vsftpd restart
|
當(dāng)然啦,那個(gè) /var/ftp/uploads/ 還是需要可以被 ftp 這個(gè)使用者寫入才行!如此一來被上傳的檔案將會(huì)被修改檔案擁有者成為
daemon 這個(gè)使用者,而 ftp (匿名者取得的身份) 是無法讀取 daemon 的數(shù)據(jù)的,所以也就無法被下載啰! ^_^
例題:
在上述的設(shè)定后,我嘗試以 anonymous 登入并且上傳一個(gè)大檔案到 /uploads/ 目錄下。由于網(wǎng)絡(luò)的問題,這個(gè)檔案?jìng)鞯揭话刖蛿嗑€。
下在我重新上傳時(shí),卻告知這個(gè)檔案無法覆寫!該如何是好?
答:
為什么會(huì)無法覆寫呢?因?yàn)檫@個(gè)檔案在你脫機(jī)后,檔案的擁有者就被改為 daemon 了!因?yàn)檫@個(gè)檔案不屬于 ftp 這個(gè)用戶了,
因此我們無法進(jìn)行覆寫或刪除的動(dòng)作。此時(shí),你只能更改本地端檔案的檔名再次的上傳,重新從頭一直上傳啰!
|
被動(dòng)式聯(lián)機(jī)埠口的限制
FTP 的聯(lián)機(jī)分為主動(dòng)式與被動(dòng)式,主動(dòng)式聯(lián)機(jī)比較好處理,因?yàn)槎际峭高^服務(wù)器的 port 20 對(duì)外主動(dòng)聯(lián)機(jī),
所以防火墻的處理比較簡(jiǎn)單。被動(dòng)式聯(lián)機(jī)就比較麻煩~因?yàn)轭A(yù)設(shè) FTP
服務(wù)器會(huì)隨機(jī)取幾個(gè)沒有在使用當(dāng)中的埠口來建立被動(dòng)式聯(lián)機(jī),那防火墻的設(shè)定就麻煩啦!
沒關(guān)系,我們可以透過指定幾個(gè)固定范圍內(nèi)的埠口來作為 FTP 的被動(dòng)式數(shù)據(jù)連接之用即可,
這樣我們就能夠預(yù)先知道 FTP 數(shù)據(jù)鏈路的埠口啦!舉例來說,我們假設(shè)被動(dòng)式連接的埠口為 65400 到 65410
這幾個(gè)埠口時(shí),可以這樣設(shè)定:
[root@www ~]# vim /etc/vsftpd/vsftpd.conf
# 增加底下這幾行即可啊!
pasv_min_port=65400
pasv_max_port=65410
[root@www ~]# /etc/init.d/vsftpd restart
|
匿名用戶的設(shè)定大致上這樣就能符合你的需求啰!其他的設(shè)定就自己看著辦吧! ^_^
21.2.8 防火墻設(shè)定
防火墻設(shè)定有什么難的?將第九章里面的 script
拿出來修改即可啊!不過,如同前言談到的,F(xiàn)TP 使用兩個(gè)埠口,加上常有隨機(jī)啟用的數(shù)據(jù)流埠口,以及被動(dòng)式聯(lián)機(jī)的服務(wù)器埠口等,
所以,你可能得要進(jìn)行:
- 加入 iptables 的 ip_nat_ftp, ip_conntrack_ftp 兩個(gè)模塊
- 開放 port 21 給因特網(wǎng)使用
- 開放前一小節(jié)提到的 port 65400~65410 埠口給 Internet 聯(lián)機(jī)用
要修改的地方不少,那就讓我們來一步一腳印吧!
# 1. 加入模塊:雖然 iptables.rule 已加入模塊,不過系統(tǒng)檔案還是修改一下好了:
[root@www ~]# vim /etc/sysconfig/iptables-config
IPTABLES_MODULES="ip_nat_ftp ip_conntrack_ftp"
# 加入模塊即可!兩個(gè)模塊中間有空格鍵隔開!然后重新啟動(dòng) iptables 服務(wù)啰!
[root@www ~]# /etc/init.d/iptables restart
# 2. 修改 iptables.rule 的腳本如下:
[root@www ~]# vim /usr/local/virus/iptables/iptables.rule
iptables -A INPUT -p TCP -i $EXTIF --dport 21 --sport 1024:65534 -j ACCEPT
# 找到上面這一行,并將前面的批注拿掉即可!并且新增底下這一行喔!
iptables -A INPUT -p TCP -i $EXTIF --dport 65400:65410 --sport 1024:65534 -j ACCEPT
[root@www ~]# /usr/local/virus/iptables/iptables.rule
|
這樣就好了!同時(shí)兼顧主動(dòng)式與被動(dòng)式的聯(lián)機(jī)!并且加入所需要的 FTP 模塊啰!
21.2.9 常見問題與解決之道
底下說明幾個(gè)常見的問題與解決之道吧!
- 如果在 Client 端上面發(fā)現(xiàn)無法聯(lián)機(jī)成功,請(qǐng)檢查:
- iptables 防火墻的規(guī)則當(dāng)中,是否開放了 client 端的 port 21 登入?
- 在 /etc/hosts.deny 當(dāng)中,是否將 client 的登入權(quán)限擋住了?
- 在 /etc/xinetd.d/vsftpd 當(dāng)中,是否設(shè)定錯(cuò)誤,導(dǎo)致 client 的登入權(quán)限被取消了?
- 如果 Client 已經(jīng)連上 vsftpd 服務(wù)器,但是卻顯示『 XXX file can't be opend 』的字樣,請(qǐng)檢查:
- 最主要的原因還是在于在 vsftpd.conf 當(dāng)中設(shè)定了檢查某個(gè)檔案,但是你卻沒有將該檔案設(shè)定起來,
所以,請(qǐng)檢查 vsftpd.conf 里面所有設(shè)定的檔案檔名,使用 touch 這個(gè)指令將該檔案建立起來即可!
- 如果 Client 已經(jīng)連上 vsftpd 服務(wù)器,卻無法使用某個(gè)賬號(hào)登入,請(qǐng)檢查:
- 在 vsftpd.conf 里面是否設(shè)定了使用 pam 模塊來檢驗(yàn)賬號(hào),以及利用 userlist_file 來管理賬號(hào)?
- 請(qǐng)檢查 /etc/vsftpd/ftpusers 以及 /etc/vsftpd/user_list 檔案內(nèi)是否將該賬號(hào)寫入了?
- 如果 Client 無法上傳檔案,該如何是好?
- 最可能發(fā)生的原因就是在 vsftpd.conf 里面忘記加上這個(gè)設(shè)定『write_enable=YES』這個(gè)設(shè)定,請(qǐng)加入;
- 是否所要上傳的目錄『權(quán)限』不對(duì),請(qǐng)以 chmod 或 chown 來修訂;
- 是否 anonymous 的設(shè)定里面忘記加上了底下三個(gè)參數(shù):
- anon_other_write_enable=YES
- anon_mkdir_write_enable=YES
- anon_upload_enable=YES
- 是否因?yàn)樵O(shè)定了 email 抵擋機(jī)制,又將 email address 寫入該檔案中了!?請(qǐng)檢查!
- 是否設(shè)定了不許 ASCII 格式傳送,但 Client 端卻以 ASCII 傳送呢?請(qǐng)?jiān)?client 端以 binary 格式來傳送檔案!
- 檢查一下 /var/log/messages ,是否被 SELinux 所抵擋住了呢?
上面是蠻常發(fā)現(xiàn)的錯(cuò)誤,如果還是無法解決你的問題,請(qǐng)你務(wù)必分析一下這兩個(gè)檔案:/var/log/vsftpd.log 與
/var/log/messages ,里面有相當(dāng)多的重要資料,可以提供給你進(jìn)行除錯(cuò)喔!不過 /var/log/vsftpd.log 卻預(yù)設(shè)不會(huì)出現(xiàn)!
只有 /var/log/xferlog 而已。如果你想要加入 /var/log/vsftpd.log 的支持,可以這樣做:
[root@www ~]# vim /etc/vsftpd/vsftpd.conf
dual_log_enable=YES
vsftpd_log_file=/var/log/vsftpd.log
# 加入這兩個(gè)設(shè)定值即可呦!
[root@www ~]# /etc/init.d/vsftpd restart
|
這樣未來有新聯(lián)機(jī)或者是錯(cuò)誤時(shí),就會(huì)額外寫一份 /var/log/vsftpd.log 去喔!
|