乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      鳥哥的 Linux 私房菜之vsftpd

       dwlinux_gs 2015-01-16

      終于要來聊一聊這個(gè)簡(jiǎn)單的 vsftpd 啰!vsftpd 的全名是『Very Secure FTP Daemon 』的意思, 換句話說,vsftpd 最初發(fā)展的理念就是在建構(gòu)一個(gè)以安全為重的 FTP 服務(wù)器呢!我們先來聊一聊為什么 vsftpd 號(hào)稱『非常安全』呢?然后再來談設(shè)定吧!


      小標(biāo)題的圖示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è)定吧!


      小標(biāo)題的圖示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ò)啊!


      小標(biāo)題的圖示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 喔!


      • 匿名者登入的設(shè)定值
      • 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 啰。


      小標(biāo)題的圖示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)作給他改回來喔!


      小標(biāo)題的圖示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ì)了!


      小標(biāo)題的圖示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!讓我們開始一步一步來依序處理先:

      1. 先建立主配置文件 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
        

      2. 建立歡迎訊息:

        當(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ò)!
        

      3. 建立限制系統(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
        ....(底下省略)....
        

      4. 測(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è)試看看。


      • 限制實(shí)體用戶的總下載流量 (帶寬)

      你可不希望帶寬被使用者上傳/下載所耗盡,而影響咱們服務(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ù)了。 不過,不建議如此作喔!


      小標(biāo)題的圖示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ù)清空,重新這樣處理他吧:

      1. 建立 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
        

      2. 建立歡迎畫面與下載提示訊息

        各位親愛的觀眾朋友!要注意~在這個(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)就是了!

      3. 客戶端的測(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è)定就自己看著辦吧! ^_^


      小標(biāo)題的圖示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 模塊啰!


      小標(biāo)題的圖示21.2.9 常見問題與解決之道

      底下說明幾個(gè)常見的問題與解決之道吧!

      • 如果在 Client 端上面發(fā)現(xiàn)無法聯(lián)機(jī)成功,請(qǐng)檢查:
        1. iptables 防火墻的規(guī)則當(dāng)中,是否開放了 client 端的 port 21 登入?
        2. 在 /etc/hosts.deny 當(dāng)中,是否將 client 的登入權(quán)限擋住了?
        3. 在 /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)檢查:
        1. 最主要的原因還是在于在 vsftpd.conf 當(dāng)中設(shè)定了檢查某個(gè)檔案,但是你卻沒有將該檔案設(shè)定起來, 所以,請(qǐng)檢查 vsftpd.conf 里面所有設(shè)定的檔案檔名,使用 touch 這個(gè)指令將該檔案建立起來即可!

      • 如果 Client 已經(jīng)連上 vsftpd 服務(wù)器,卻無法使用某個(gè)賬號(hào)登入,請(qǐng)檢查:
        1. 在 vsftpd.conf 里面是否設(shè)定了使用 pam 模塊來檢驗(yàn)賬號(hào),以及利用 userlist_file 來管理賬號(hào)?
        2. 請(qǐng)檢查 /etc/vsftpd/ftpusers 以及 /etc/vsftpd/user_list 檔案內(nèi)是否將該賬號(hào)寫入了?

      • 如果 Client 無法上傳檔案,該如何是好?
        1. 最可能發(fā)生的原因就是在 vsftpd.conf 里面忘記加上這個(gè)設(shè)定『write_enable=YES』這個(gè)設(shè)定,請(qǐng)加入;
        2. 是否所要上傳的目錄『權(quán)限』不對(duì),請(qǐng)以 chmod 或 chown 來修訂;
        3. 是否 anonymous 的設(shè)定里面忘記加上了底下三個(gè)參數(shù):
          • anon_other_write_enable=YES
          • anon_mkdir_write_enable=YES
          • anon_upload_enable=YES
        4. 是否因?yàn)樵O(shè)定了 email 抵擋機(jī)制,又將 email address 寫入該檔案中了!?請(qǐng)檢查!
        5. 是否設(shè)定了不許 ASCII 格式傳送,但 Client 端卻以 ASCII 傳送呢?請(qǐng)?jiān)?client 端以 binary 格式來傳送檔案!
        6. 檢查一下 /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 去喔!

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多