home   articles   forum   masthead  
Published at 9.03.2002
作者: Alex Planting
Translator: Lau Po Yu
Languages: en de
Support Us!
 

建立安全的 FTP 伺服器 (Wu-Ftp)

本文會講述一些範例,令您的 FTP 伺服器更加安全。例如,標準的安裝允許匿名登入,因此所有人都可以在您的伺服器隱藏很多廢物。
只要跟隨以下步驟,您就可以為每個使用者在伺服器上設定家目錄,而他們不能瀏覽自己目錄以外的東西。

1. 匿名登入

修改/etc/ftpaccess 檔案,刪除所有匿名的記錄。
以下是 ftpaccess 檔案的範例:

/etc/ftpaccess
 
  class all real,guest * 
  
  email your@email.com 
  loginfails 3 
  
  readme README* login 
  readme README* cwd=* 
  
  message /welcome.msg login 
  message .message cwd=* 
  
  compress yes all
  tar yes all 
  chmod no guest 
  delete no guest 
  overwrite no guest 
  rename no guest 
  
  log transfers anonymous,real inbound, outbound 
  shutdown /etc/shutmsg
  passwd-check rfc822 warn 
  guestgroup FTPgroup 
  greeting full 
  


2. 新增使用者

首先建立一個特別的使用者群組,您可以將所有使用者放在這群組內。例如 FTPgroup

  >> groupadd FTPgroup
  
現在您可以新增一些使用者:
  >> adduser -g FTPgroup "username" 
  
(如果您選擇不讓這些使用者存取 shell,請看第四段。)
  >> passwd "username"
  
確定將 "bin", "etc" 和 "lib" 及當中的檔案由 /home/ftp/var/ftp 複製至使用者的家目錄。可使用cp -R 指令如下:
  >> cp -R /var/ftp/pub /home/username
  
在 "pub" 目錄建立一個叫 Download 和 Upload 的目錄,讓使用者上載及下載檔案。
  >> mkdir /home/username/pub/download
  >> mkdir /home/username/pub/upload
  
確定在這些剛建立的目錄上設定權限和擁有權。
  >> chown username:FTPgroup upload download
  >> chmod 500 /home/username/pub/download
  >> chmod 700 /home/username/pub/upload
  
這樣,使用者在上載目錄便有讀取/寫入權限,而下載目錄就有讀取權限。

3. 讓使用者只能在自己的家目錄

要讓使用者只能在自己的家目錄,您要在 ftpaccess 檔案新增一個 "guestgroup FTPgroup" 。
以您喜歡的文字編輯器開啟 /etc/ftpacces並加入:

   guestgroup FTPgroup
  

4. 不能存取 shell

如果您選擇拒絕讓使用者透過 telnet 或 ssh 存取 shell,您需要做的就是建立一個假的 shell,改名為NoAccess ,並將它放在 /etc/目錄下。

  >> touch /etc/NoAccess
  
以編輯器開啟檔案,加上類似以下的東西:

/etc/NoAccess
   #!/bin/sh
   #
   echo "             Shell Access denied!             "
   echo "                                              "
   echo " You don't have a valid login for this server "
   exit 0
  


儲存檔案並確定可以執行 shell:

  >> chmod +x /etc/NoAccess.
  
完成後,修改/etc/shells 檔案,並加入剛建立的 shell。
/ etc/shells 檔案如下:

/etc/shells
   /bin/bash2
   /bin/bash
   /bin/sh
   /bin/ash
   /bin/bsh
   /bin/tcsh
   /etc/NoAccess
  


如果您手動新增使用者而沒有使用我的 shell-script,就需要修改  /etc/passwd ,並為使用者更改 shell。
記錄會類似下列這樣:

  username:x:100:100::/home/username:/bin/bash
  
更改 /bin/bash to /etc/NoAccess 便可。
如果一切完成而您選擇手動新增使用者,可用以下指令將使用者新增至適當的 shell:
  >> adduser -g FTPgroup -s /etc/NoAcces "username"
  
為了令使用者的建立自動化,我做了一個細小的 shell-script,可以新增使用者至 FTPgroup ,設定 shell,建立上載和下載目錄,以及從 FTP 目錄複製所需的目錄。

ftpuseradd_script
   #!/usr/bin/perl
   print "Username: ";
   chomp ($Name =<STDIN>);
   system("adduser -g FTPgroup -s /etc/NoAccess $Name");
   system("cp -R /var/ftp/pub /home/$Name");
   system("cp -R /var/ftp/bin /home/$Name");
   system("cp -R /var/ftp/lib /home/$Name");
   system("cp -R /var/ftp/etc /home/$Name");
   system("mkdir /home/$Name/pub/upload");
   system("mkdir /home/$Name/pub/download");
   system("chown $Name:  $Name/pub/download");
   system("chown $Name:  $Name/pub/upload");
   system("chmod 500 /home/$Name/pub/download");
   system("chmod 700 /home/$Name/pub/upload");
   system("passwd $Name");
   print "Done! user $Name has been added.\n";
  


您不可以在 windows 下建立文字檔案,然後複製到伺服器,這樣不能正確運作的。
建立一個叫 useradd 的檔案,加入幾行資料,在指令行執行檔案,但首先要設定權限如下:

  >> chmod +x useradd
  >> chown root:root useradd
  
接著:
  >> /usr/local/scripts/useradd 
  
或您想設定的檔案路徑,開始自動新增使用者。

這就完成了。如果有任何有關 FTP 保安的新聞,我會繼續為您報導。