Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2473841
  • 博文数量: 867
  • 博客积分: 10010
  • 博客等级: 上将
  • 技术积分: 9800
  • 用 户 组: 普通用户
  • 注册时间: 2006-07-27 14:44
文章分类

全部博文(867)

文章存档

2007年(6)

2006年(861)

我的朋友

分类: LINUX

2006-08-30 17:21:03

簡易 vsftpd 伺服器設定
前言
    除了 proftpd 之外,事實上,這個 vsftpd 也是一個很好的 FTP 伺服器軟體喔!為什麼這麼說呢?因為 vsftpd 全名是『very secure FTP daemon』的意思,所以他的發展本來就是以安全性為考量來發展這個套件的。vsftpd 在安全性的考量上面,主要針對了『程序的權限, privilege』概念來設計的,因為我們的任何服務在 Linux 上面運作時都會取得一個 PID,而這個 PID 是有擁有者的身份的,也就是說,這個服務的 PID 在我們的 Linux 上面是具有某些『權限』的。萬一這個服務的 PID 所屬擁有者的身份等級太高,例如 root 的權限,那麼如果不幸該 PID 有些設計上的漏洞,使得該 PID 被入侵的話,入侵者將具有該 PID 的權限,也就是 root 的身份喔!所以,近來發展的套件都會盡量的將服務取得的 PID 權限降低,使得該服務即使不小心被入侵了,入侵者也無法得到有效的系統管理權限,這樣會讓我們的系統較為安全的啦。
     
    除了上面這個權限的設計之外, vsftpd 也利用 chroot 這個軟體的輔助,來讓登入者僅能於一些較不重要的目錄當中活動,而無法使用 Linux 系統全部的功能。所謂的 chroot 這個函數,最主要的功能就是『改變根目錄的所在 ( change root directory )』了!舉例來說,如果您想要讓使用者登入 A 服務後,且執行任何指令都是在 /tmp/pub 目錄下,並限制使用者使用 A 服務時都只能在 /tmp/pub 目錄下,那麼使用『 chroot /tmp/pub command 』就能夠讓 /tmp/pub 變成 A 服務的根目錄『/』了!如此一來,使用者就無法離開 /tmp/pub ,那麼萬一我們 A 服務的 PID 還是被入侵時,沒有關係,入侵者還是僅能在 /tmp/pub 裡面跑來跑去而已,而無法使用 Linux 的完整功能。這個時候,自然我們的系統也就會比較安全啦!
     
    vsftpd 是基於上面的說明來設計的一個較為安全的 FTP 伺服器軟體,他具有底下的特點喔:
     
    • vsftpd 是以一般身份啟動服務,所以對於 Linux 系統的使用權限較低,對於 Linux 系統的危害就相對的減低了。此外, vsftpd 亦利用 chroot() 這個函式進行改換根目錄的動作,使得系統工具不會被 vsftpd 這支服務所誤用;
    • 任何需要具有較高執行權限的 vsftpd 指令均以一支特殊的上層程序 ( parent process ) 所控制 ,該上層程序享有的較高執行權限功能已經被限制的相當的低,並以不影響 Linux 本身的系統為準;
    • 所有來自 clients 端,想要使用這支上層程序所提供的較高執行權限之 vsftpd 指令的需求,均被視為『不可信任的要求』來處理,必需要經過相當程度的身份確認後,方可利用該上層程序的功能。例如 chown(), Login 的要求等等動作;
    • 此外,上面提到的上層程序中,依然使用 chroot() 的功能來限制使用者的執行權限。
     
    由於具有這樣的特點,所以 vsftpd 會變的比較安全一些咯!
     
    另外,要架設 vsftpd 之前,還是請您得先要針對 FTP 的主動連線、被動連線以及 port 21, 20 這兩個指令通道與資料通道的基礎有一定程度的認識喔,會比較容易進入狀況,所以,還是回到前面的 那一張節,將前言的部分看完才好吶!我這裡假設您已經具有 FTP 的相關知識了,所以底下就直接來進行 vsftpd 的安裝與設定吧!

套件安裝:

    以 RPM 安裝
     
    在目前新版的 Red Hat 9 主要的 FTP 伺服器軟體就是 vsftpd 這個玩意兒!所以您可以拿出光碟裡面的 vsftpd 來直接以 RPM 安裝即可!如果您的 Linux distribution 沒有提供 vsftpd 的話,沒有關係,我們也可以使用底下的 Tarball 的方式來安裝吶!
     

    以 Tarball 安裝
     
    要以 Tarball 安裝,當然得先下載 Tarball 的檔案了!vsftpd 的官方網站下載點為:
      您可以自行找尋自己喜歡的版本來安裝。我這裡以 1.2.0 這一版來安裝 vsftpd 在我的 Mandrake 9.0 上面喔!(註:如果是 Red Hat 的系統,原本就有 vsftpd 了,所以使用 RPM 安裝比較好!至於其他沒有提供 vsftpd RPM 檔案的 distribution 就可以使用 Tarball 咯!)
       
      1. 下載與解壓縮:
      [root@test root]# wget \
      > ftp://vsftpd.beasts.org/users/cevans/vsftpd-1.2.0.tar.gz
      [root@test root]# cd /usr/local/src
      [root@test root]# tar -zxvf /root/vsftpd-1.2.0.tar.gz
      [root@test root]# cd vsftpd-1.2.0/
      # 在這個目錄下有個 INSTALL 與 README 請務必察看喔!
       
      2. 開始編譯與安裝
      # vsftpd 預設安裝的路徑為:
      # 所有可執行檔放置在 /usr/local/sbin 裡面;
      # man page 放置在 /usr/local/man/man5 與 /usr/local/man/man8
      # 若 super daemon 為 xinetd 時,會複製一份啟動檔案到 /etc/xinetd.d 去!
      [root@test vsftpd-1.2.0]# make
      # 編譯的過程可能有 warning 的訊息,只要不是 Error 就可以不理他!
      [root@test vsftpd-1.2.0]# make install
      [root@test vsftpd-1.2.0]# cp vsftpd.conf /etc
      # 將 PAM 身份認證模組給他放進去系統裡面!
      [root@test vsftpd-1.2.0]# cp RedHat/vsftpd.pam /etc/pam.d/vsftpd
      # 建立 ftp 這個使用者以及他的家目錄:
      # 若本來就存在 ftp 這個使用者,那就不需要進行新增!
      [root@test vsftpd-1.2.0]# useradd -M ftp -d /var/ftp
      [root@test vsftpd-1.2.0]# mkdir -p /var/ftp
      [root@test vsftpd-1.2.0]# chown root:root /var/ftp
      [root@test vsftpd-1.2.0]# chmod 755 /var/ftp
      # 建立 vsftpd 需要的特殊目錄
      [root@test vsftpd-1.2.0]# mkdir -p /usr/share/empty
       
      3. 如果需要移除時:
      # 如果想要移除 vsftp 時,可以這樣做
      [root@test vsftpd-1.2.0]# rm /usr/local/sbin/vsftpd
      [root@test vsftpd-1.2.0]# rm /usr/local/man/man5/vsftpd.conf.5
      [root@test vsftpd-1.2.0]# rm /usr/local/man/man8/vsftpd.8
      [root@test vsftpd-1.2.0]# rm /etc/xinetd.d/vsftpd
      [root@test vsftpd-1.2.0]# rm /etc/vsftpd.conf
      # 因為剛剛安裝只有安裝這幾個檔案而已說!所以啦, vsftpd 真的是挺安全的說!
       
      4. 測試:
      # 先確認一下 xinetd.d 有沒有問題再說:
      [root@test root]# vi /etc/xinetd.d/vsftpd
      service ftp
      {
              socket_type             = stream
              wait                    = no
              user                    = root
              server                  = /usr/local/sbin/vsftpd
              log_on_success          += DURATION USERID
              log_on_failure          += USERID
              nice                    = 10
           disable                 = no
      }
      [root@test root]# /etc/rc.d/init.d/xinetd restart
      [root@test root]# ftp localhost
      ftp localhost
      Connected to localhost.
      220 (vsFTPd 1.2.0)
      530 Please login with USER and PASS.
      530 Please login with USER and PASS.
      KERBEROS_V4 rejected as an authentication type
      Name (localhost:root): anonymous
      # 這樣就表示 vsftpd 已經可以正確的啟動了,不過因為我們還沒有設定好
      # /etc/vsftpd.conf ,所以會有無法登入的問題!沒關係,
      # 等一下設定好就 OK 了!
       
      安裝的過程真的是很簡單,不過, vsftpd.conf 這個檔案放置的地點在 RPM 與 Tarball 則可能有點不一樣,需要給他特別留意呢!例如 Red Hat 9 預設放置在 /etc/vsftpd/vsftpd.conf ,而 Tarball 則預設放置在 /etc/vsftpd.conf 裡面說!

    Server 端的設定
      其實在 Server 端的設定蠻容易的,因為整個 vsftpd 的設定檔幾乎可以說只有一個,那就是 vsftpd.conf 這個檔案了。底下我們就來談一談整個 vsftpd 的套件結構與如何設定編輯 vsftpd.conf 這個設定檔吧! ^_^
       

      vsftpd 的套件結構
       
      vsftpd 的套件結構很簡單,設定檔與執行檔實在是不多,無論如何,我們還是得要瞭解一下:
       
      • /etc/vsftpd.conf 或 /etc/vsftpd/vsftpd.conf:這個就是 vsftpd 的主要設定檔了!也是等一下我們要設定的主要項目說。在這個設定檔裡面,所有的設定項目都是以『參數=設定值』來設定的,注意一下,等號兩邊沒有空白喔!至於 vsftpd.conf 的詳細說明,其實在 vsftpd.conf 裡面就已經相當的清晰了,如果還想要有其他的支援,可以使用『man 5 vsftpd.conf』來查閱喔!
         
      • /etc/pam.d/vsftpd 與 /etc/ftpusers 或 /etc/vsftpd.ftpusers:這個與 Wu FTP 是相同的作用啦!利用 pam 模組來進行身份確認的動作說!那麼怎麼知道使用 /etc/vsftpd.ftpusers 或 /etc/ftpusers 呢?看 /etc/pam.d/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
        上面的斜體字是同一行,注意到斜體字那一行,可以發現 file="檔名" 那個檔名就是『限制使用者無法使用 vsftpd 』的主要設定檔案囉!
         
      • /etc/vsftpd.chroot_list:這個檔案不見得會使用到,且與實體用戶有關!當我們在 vsftpd.conf 裡面設定好了實體用戶的使用者沒有被 chroot 到自己的家目錄下(也就是使用者登入後不只能到自己的家目錄,還可以跳到其他目錄),不過,某些使用者您想讓他無法離開家目錄時,預設在 /etc/vsftpd.chroot_list 這個檔案裡面,就可以將該使用者限制在自己的家目錄內了!一行一個帳號。
         
      • /etc/vsftp.banned_emails:這個檔案與匿名登入有關,不過也不見得會用到!當您允許匿名者 (anonymous) 登入您的 FTP 主機,不過卻不允許某些 email address 登入,那麼就可以將該 email address 寫入到這個檔案裡面去喔!
         
      • /usr/local/sbin/vsftpd 或 /usr/sbin/vsftpd:這就是 vsftpd 的主要執行檔咯!不要懷疑, vsftpd 只有這一個執行檔而已啊!
         
      • /var/ftp:這個是 vsftpd 的預設匿名者登入的根目錄喔!
         
      大致上就只有這幾個檔案需要注意而已呢!
       

      vsftpd.conf 設定值說明
       
      vsftpd.conf 是 vsftpd 的主要設定檔案,在這裡我們約略來說明一下常見的 vsftpd.conf 裡面的各個設定參數吧!
       
      關於主機的設定值
      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 即是這個咚咚!
       
      上面這些是相當常見的 vsftpd 的設定參數,還有很多參數我沒有列出來,您可以使用 man 5 vsftpd.conf 查閱喔!不過,基本上上面這些參數已經夠我們設定 vsftpd 囉!
       

      最簡單的 vsftpd.conf 設定
       
      如果您很懶的去設定 vsftpd 的話,那麼可以使用很簡單的設定值來規劃您的 FTP 伺服器。底下就是 Red Hat 9 的預設 vsftpd 的設定值,您可以使用這樣的設定值來啟動您的 FTP 伺服器即可。這樣的設定值有幾個用處:
       
      • 任何在 /etc/vsftpd.ftpusers 裡面的使用者帳號均無法使用 vsftpd 喔!
      • 開放 anonymous 與 實體用戶 登入 vsftpd ;
      • 實體用戶登入主機時,可以跳至任何具有登入權限的目錄當中(沒有 chroot );
      • 使用 port 20 作為主動連線時的 ftp-data 傳送埠口;
      • 利用 /etc/hosts.allow(deny) 來管理登入權限;
      • 當 Client 上傳/下載檔案時,該資訊會記錄在 /var/log/vsftpd.log 裡面;
      • 其他的設定均已預設值來規範(如被動式 port number 等等)。
       
      [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
      # 以上設定值的意義請往前翻到 章節去察看!
      [root@test root]# /etc/rc.d/init.d/xinetd restart
       
      這樣您的最簡易的 FTP 伺服器就已經設定完成了!簡單的很吧!而且還相當的安全呢!
       

      針對僅有開放實體用戶登入的設定
       
      好了,這裡我們再使用其他的設定值來修正我們的 vsftpd.conf 這個設定檔。因為開放 anonymous 畢竟不太安全,所以我們將 anonymous 的登入權限關閉,並且僅讓 real user (實體用戶) 登入我們的 vsftpd 時,要如何設定呢?我的要求如下:
       
      • 使用台灣本地的時間而不是 GMT 時間;
      • 所有在 /etc/passwd 裡面出現的實體帳號均能登入 vsftpd 主機;
      • 但是系統帳號 (如 root 等, UID 小於 500 的帳號)均不能使用 vsftpd ;
      • 而且由於 badbird 與 nogoodbird 這兩個帳號使用者比較不乖,我要讓這兩個使用者被關在自己的家目錄當中(chroot);
      • 並且限制資料的傳輸速度為 100 Kbytes/second;
      • 當使用者進入 /home 這個目錄時,顯示:『一般使用者家目錄』的字樣在 Client 端的螢幕上;
      • 使用者可以進行上傳、下載以及修改檔案等等動作。
       
      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
      # 以上設定值的意義請往前翻到 章節去察看!
       
      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
      mail
      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
      mail
      news
      uucp
      operator
      games
      nobody
       
      5. 設定進入目錄時,顯示的訊息:
      [root@test root]# vi /home/.message
      一般使用者家目錄
       
      6. 重新啟動 xinetd 囉!
      [root@test root]# /etc/rc.d/init.d/xinetd restart
       
      上面的設定裡面有很多重複的地方,比方說 /etc/vsftpd.ftpusers 與 /etc/vsftpd.user_list 就是重複的設定了!不過,這樣是比較安全啦!因為 PAM 模組是外掛的程式,而另一個檔案則是 vsftpd 提供的功能!但是請特別留意,因為很多使用者可能會一不小心僅修改了其中一個檔案,另一個檔案則忘記修訂,會很麻煩喔! ^_^!至於也是重點之一的 /etc/vsftpd.chroot_list 就可以將使用者限制在他們自己的家目錄內了!設定上很容易吧!附帶說明,上面的檔名都與 vsftpd.conf 的設定有關
       
      看過了上面關於實體用戶的設定之後,咦!那麼如何讓 root 可以登入 vsftpd 主機呢?!呵呵!就是將 /etc/vsftpd.ftpusers 與 /etc/vsftpd.user_list 這兩個檔案裡面的 root 拿掉就可以啦!不過,本人可是不建議這麼搞的喔!
       

      針對僅有開放匿名使用者登入的設定
       
      好了,上面一章節談的是僅開放 Real User ,那麼這個章節我們就來談一談,沒有 Real user 僅有 anonymous 的登入說!我想要的功能是這樣的:
       
      • 使用台灣本地的時間,而非 GMT 時間;
      • 僅開放 anonymous 的登入;
      • 檔案傳輸的速限為 30 Kbytes/second;
      • 允許 anonymous 上傳檔案到 /var/ftp/upload 這個目錄當中,並且允許 anonymous 建立目錄;
      • 資料連接的過程 (不是命令通道!) 只要超過 60 秒沒有回應,就強制 Client 斷線!
      • 只要 anonymous 超過十分鐘沒有動作,就予以斷線;
      • 被動式連接的埠口為 65400 到 65420 這幾個 port number 即可;
      • 最大同時上線人數限制為 50 人,且同一 IP 來源最大連線數量為 5 人;
      • 不許使用 ASCII 格式上傳或下載!
      • 不許以 linux.vbird.org 這個網址為 email address 的密碼輸入!
       
      OK!這樣要如何設定呢!?
       
      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
      # 以上設定值的意義請往前翻到 章節去察看!
       
      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
       
      經過上面的說明之後,您就可以很清楚的知道了 Real user 與 anonymous 在 vsftpd 當中的設定了,那麼您就可以很輕易的就架設出一部 vsftpd 伺服器了呢!趕緊嘗試看看吧! ^_^

    Client 端的設定:
    Client 端並沒有什麼好設定的地方,主要就是 ftp 的使用了,請參考 一節!

    安全相關方面
      有關安全性的設定方面,當然就是與登入以及防火牆有關囉!那就來談一談吧!
       

      防火牆抵擋
       
      要啟用 vsftpd 自然就得要開放防火牆囉!所以您如果想要對 Internet 開放您的 FTP 伺服器,就必須至少要有這一段 iptables 防火牆規則在您的規則列當中:
       
      /sbin/iptables -A INPUT -p TCP -i eth0 --dport 21 -j ACCEPT 
       
      當然,您可以設定的更嚴密,請參考一文來設定 iptables 喔!此外,您的 TCP Wrappers 如果想要抵擋 192.168.1.2 這個 IP 來源的話,可以這樣做:
       
      [root@test root]# vi /etc/hosts.deny
      vsftpd: 192.168.1.2
       
      這個應該沒有問題吧! ^_^
       

      Super daemon 的管理
       
      Super daemon 可以用來管理 Client 端的登入權限呢,這個重點沒有忘記吧! ^_^ !那麼我們如何設定呢?!舉個簡單的例子好了:假設我們的 vsftpd 只允許同一個 IP 來源可以擁有五個登入權限,而同一時間最多可以有 200 個 vsftpd 的連線,當超過 200 個 vsftpd 的連線時,將在 Client 端的畫面當中顯示『很抱歉,伺服器忙碌中』的字樣,該如何設定?
       
      [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
       
      這樣設定就可以啦!很簡單的一個設定動作,就可以讓您的 vsftpd 變的更安全一些喔!
    阅读(1103) | 评论(0) | 转发(0) |
    给主人留下些什么吧!~~