ubuntu server 10.4下pure-ftpd配置

前言:

什麼是FTP,可以閱讀"百度百科"http://baike.baidu.com/view/369.htm,在這我引用其中的覺的重要一的點:

FTP的工作方式

FTP支持兩種模式,一種方式叫做Standard (也就是 PORT方式,主動方式),一種是 Passive (也就是PASV,被動方式)。 Standard模式 FTP的客戶端發送 PORT 命令到FTP服務器。Passive模式FTP的客戶端發送 PASV命令到 FTP Server。

下面介紹一個這兩種方式的工作原理:

Port模式FTP 客戶端首先和FTP服務器的TCP 21端口建立連接,通過這個通道發送命令,客戶端需要接收數據的時候在這個通道上發送PORT命令。 PORT命令包含了客戶端用什麼端口接收數據。在傳送數據的時候,服務器端通過自己的TCP 20端口連接至客戶端的指定端口發送數據。 FTP server必須和客戶端建立一個新的連接用來傳送數據。

Passive模式在建立控制通道的時候和Standard模式類似,但建立連接後發送的不是 Port命令,而是Pasv命令。FTP服務器收到Pasv命令後,隨機打開一個臨時端口(也叫自由端口,端口號大於1023小於65535)並且通知客戶端在這個端口上傳送數據的請求,客戶端連接FTP服務器此端口,然後FTP服務器將通過這個端口進行數據的傳送,這個時候FTP server不再需要建立一個新的和客戶端之間的連接。

很多防火牆在設置的時候都是不允許接受外部發起的連接的,所以許多位於防火牆後或內網的FTP 服務器不支持PASV模式,因爲客戶端無法穿過防火牆打開FTP服務器的高端端口;而許多內網的客戶端不能用PORT模式登陸FTP服務器,因爲從服務器的TCP 20無法和內部網絡的客戶端建立一個新的連接,造成無法工作。

在ubuntu中pure-ftpd是什麼樣

子可以參考:http://wiki.ubuntu.org.cn/Pure-ftpd,引用其中的一段:

Ubuntu/Debian 提供了三個不同的 Pure-FTPd 的 deb 安裝包,分別是 pure-ftpd、pure-ftpd-ldap 和 pure- ftpd-mysql,其中 ldap 和 mysql 分別表示 Pure-FTPd 跟 ldap 和 mysql 集成,另外這三個包都依賴於 pure-ftpd-common。如果我們不需要 ldap 和 mysql 的話,選擇 pure-ftpd 就可以了。

配置方式

不同於其他的多數守護進程(daemon),Pure-FTPd 的配置比較特別:它不讀取任何的配置文件,配置選項都是通過命令行參數來實現的。例如:參數 '-H' 被設計爲通過避免 DNS 查詢來加快服務器的速度。要啓用該特性,我們只需要將其加到命令行中: pure-ftpd -H 。備選的長參數也被支持的,下面是一個等價的命令 pure-ftpd --dontresolve

針對喜歡配置文件的用戶,Pure-FTPd 官方給出了一種方案:通過一個封裝(wrapper)工具,將配置文件解析並將其轉換成命令行參數。首先根據自己的需要編輯配置文件 pure-ftpd.conf,而後通過下面的命令啓動 pure-config.pl /etc/pure-ftpd.conf。pure-config.pl 是一個 perl 腳本,它根據配置文件採用合適的命令行選項來調用 pure-ftpd。

在 Ubuntu/Debian 中,開發人員採用了另外的一種 wrapper 方式:它沒有采用單一的配置文件,而是在/etc下建立一個pure-ftpd的目錄,其下又有 conf、auth、db 這三個目錄和一個名爲 pureftpd-alias-dir 的文件。每一個配置選項都以一個文件的形式存在於 /etc/pure-ftpd/conf 目錄中,而且是以選項爲文件名,選項值爲文件內容。例如如果想配置AnonymousOnly=yes(只允許匿名用戶),則在 /etc/pure-ftpd/conf 中創建一個名爲 AnonymousOnly 的文件,裏面只有一行內容:yes。

在 Ubuntu 中,我們只關注最後一種配置方式。

 

環境:

1,在一臺ubuntu server 10.4 服務器上安裝pure-ftpd配置成FTP服務器

2,在客戶端上用FileZilla Client登錄測試

操作:

1,安裝pure-ftpd

#sudo apt-get install pure-ftpd

#sudo netstat –nl

查看21端口是否已開啓。

2,在FileZilla Client用本地一賬號登錄,會 出現如下錯誤

ftp1-1

解決:在/etc/pure-ftpd/conf下創建DontResolve文件內容爲yes,即可解決。這時本地賬戶已經可以使用FTP服務了。

3,利用虛擬賬戶的方式管理用戶。

(1)手動創建主目錄

#sudo mkdir /var/ftp

#sudo mkdir /var/ftp/js

(2)創建組及用戶

#sudo groupadd ftpadmins

#sudo groupadd ftpusers

#sudo useradd –g ftpadmins –d /dev/null –s /bin/false ftpadmin

#sudo useradd –g ftpusers –d /dev/null –s /bin/false js

(3)改變相應的訪問權限

#sudo chown –R ftpadmin /var/ftp/

#sudo chmod  -R 775 /var/ftp/js

*:爲了防止同組中的一個用戶刪除另一個用戶的文件作以下設置

在/etc/pure-ftpd/conf下建KeepAllFiles文件內容爲yes #禁止用戶刪除文件,TrustedGID組中的除外

在/etc/pure-ftpd/conf下建TrustedGID文件內容爲2002 #管理員組ftpadmins的GID,允許管理員刪除文件,此處的2002是ftpadmins的GID

(4)增加虛擬用戶

#sudo pure-pw useradd admin –u ftpadmin –d /var/ftp

#sudo pure-pw useradd  js001 –u js –d /var/ftp/js

這時會在/etc/pure-ftpd/下新增pureftpd.passwd及pureftpd.pdb兩個文件

#sudo pure-pw list

#sudo pure-pw show js001

用以上兩個命令查看相應用戶信息,更多的pure-pw用法可以 man pure-pw查看

(5)使虛擬用戶生效

#sudo pure-pw mkdb

(6)使用pureDB驗證方式,如果沒有以下步驟,虛擬用戶是無法登錄的,會出現530的錯誤信息。

#cd /etc/pure-ftpd/auth

#sudo ln –s ../conf/PureDB 60puredb

(7)重啓pure-ftpd服務

#sudo /etc/init.d/pure-ftpd restart

總結:pure-ftpd配置完成了,簡單的一個FTP搭建起來了。詳細配置可以參考http://wiki.ubuntu.org.cn/Pure-ftpd。也可以參考http://www.ubuntu-howto.info/howto/how-to-install-and-configure-pure-ftpd

可是權限問題來了,在pure-ftpd的配置中沒有看到嚴格的權限設置,相關的有:

1,如果你的 pure-ftpd 編譯時加入了 pure-uploadscript 支持,這個指令將會使 pure-ftpd
     發送關於新上傳的情況信息到 /var/run/pure-ftpd.upload.pipe,這樣 pure-uploadscript
   就能讀然後調用一個腳本去處理新的上傳。
   在/etc/pure-ftpd/conf下建CallUploadScript內容爲 yes 就會在/var/run下產生pure-ftpd.upload.pipe,pure-ftpd.upload.lock

這個方法我還沒試用。
http://linux.die.net/man/8/pure-uploadscript

http://blog.derjohn.de/space/start/2006-11-14/1

2,KeepAllFiles=yes #禁止用戶刪除文件,TrustedGID組中的除外

TrustedGID=1001 #管理員組ftpadmins的GID,允許管理員刪除文件

ChrootEveryone=yes #把所有用戶限制在其homedir下

3,把虛擬用戶映射到不同的本地用戶上,這樣就可控制權限了。缺點是要建不同本地組和用戶。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章