天天看點

ubuntu server 10.4下pure-ftpd配置

前言:

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是什麼樣

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用本地一賬号登入,會 出現如下錯誤

<a href="http://xuchengji.blog.51cto.com/attachment/201008/11/160472_1281516475NDSP.png"></a>

解決:在/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的配置中沒有看到嚴格的權限設定,相關的有:

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

這個方法我還沒試用。

<a href="http://linux.die.net/man/8/pure-upload.">http://linux.die.net/man/8/pure-uploadscript</a>

<a href="http://blog.derjohn.de/space/start/2006-11-14/1">http://blog.derjohn.de/space/start/2006-11-14/1</a>

2,KeepAllFiles=yes #禁止使用者删除檔案,TrustedGID組中的除外

TrustedGID=1001 #管理者組ftpadmins的GID,允許管理者删除檔案

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

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

本文轉自xcjgutong 51CTO部落格,原文連結:http://blog.51cto.com/xuchengji/372181