http://fanqiang.chinaunix.net/a6/b2/20011020/0905001485_b.html
ProFTPD是一個Unix平台上或是類Unix平台上(如Linux, FreeBSD等)的FTP服務器程序,
它是在自由軟件基金會的版權聲明(GPL)下開發、發布的免費軟件,也就是說任何人只要遵
守GPL版權聲明,都可以隨意修改源始碼。
ProFTPD設計目標是實現一個安全且易設定的FTP Server。目前Unix或類Unix平台上
FTP Server十分有限,最常使用的恐怕就是wu-ftpd了。雖然wu-ftpd有著極佳的效能同時也是
一套很好的軟件,然而它卻欠缺了許多Win32平台上FTP Server的一些特色,同時wu-ftpd過去
也有不少的安全漏洞陸續被發現。ProFTPD的原創者本身就曾經花非常多的時間尋找wu-ftpd
的漏洞加以改進並且增加許多功能。然而十分不幸的是,他很快地發現顯然wu-ftpd需要全部
重新的改寫才能補足欠缺的設定能力以及缺乏的一些功能。ProFTPD不是從其它FTP Server的
既有原始碼修改而產生的,相反的,它是完全獨立而完整、重新改寫的FTP Server。
ProFTPD的主要包括如下特點:
* 單一主設置文件,包含許多指令以及其支配的組,? 耆際侵憊鄣納瓚H綣魑歡
pache Web Serve的設置不陌生的話相信一定會覺得十分容易操作設定。
* 每個目錄都可以定義一個".ftpaccess"設置文件,就如同Apache的".htaccess"文件一樣可以設定
該目錄的存取權限。
* 可設定多個虛擬FTP server,而匿名FTP服務更是十分容易。
* 可根據系統的負載(load)選擇以單獨運作(stand-alone)方式或是由inetd啟動。
* 匿名FTP的根目錄不需要特定的目錄結構、系統二進制執行文件或其它系統文件。
* ProFTPD不執行任何外部程序以免造成安全漏洞。
* 具有隱藏目錄或隱藏文件,源自Unix形式的檔案權限,或是user/group類型的檔案權限設定。
* 能夠以一般使用者在單獨運作(stand-alone)模式下執行,以減少某些藉由攻擊方式取得root權的
可能性。注:此功能與Unix的操作系統有關。
* 支持系統記錄以及utmp/wtmp。
記錄的方式與wu-ftpd的標準完全兼容,也支持記錄內容的延伸格式。
* 支持Shadow&! nbsp;password,包括了帳號使用期限設定的功能。
編譯和安裝
Proftpd提供了多種安裝格式,包括源代碼方式、RPM方式、deb方式(debian軟件包)等。本文
主要討論源代碼方式的安裝。
從ftp.proftpd.net下載最新版本的proftpd-1.2.0rc3到Linux服務器上。然按照如下步驟
進行處理:
[root@ftpd /]# cp proftpd-1.2.0rc3.tar.gz /usr/src/
[root@ftpd /]# cd /usr/src
[root@ftpd src]# tar xvfz proftpd-1.2.0rc3.tar.gz
[root@ftpd src]# cd proftpd-1.2.0rc3
[root@pftd proftpd-1.2.0rc3]# ./configure
[root@pftd proftpd-1.2.0rc3]# make
[root@pftd proftpd-1.2.0rc3]# make install
到現在為止,你已經完成了proftpd的編譯和安裝。並且在/usr/local/etc/目錄下有一個默
認的proftpd配置文件proftpd.conf。
啟動測試
對筆者的試驗系統RedHat6.2來說,需要將該配置文件中:
Group nogrou! p
修改為:
Group nobody
因為redhat系統中nobody用戶屬nobody組,而不是nogroup組。
若需要將proftpd設置為系統啟動時自動啟動則通過如下命令拷貝啟動文件:
[root@ftpd proftpd-1.2.0rc3]# cp ./contrib/dist/rpm/proftpd.init.d /etc/rc.d
/init.d/proftpd
然修改該腳本的可執行屬性:
[root@ftpd /]# chmod +x /etc/rc.d/init.d/proftpd
然編輯/etc/rc.d/init.d/functions:
修改
export PATH="/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin"
為
export PATH="/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin:/usr/local/sbin"
注:若將在運行./cofigure命令時通過--prefix選項指定將proftpd安裝在/usr/sbin目! 錄下
則不需要修改fuctions文件。
然運行命令:
[root@ftpd rc3.d]# chkconfig --level 35 proftpd on
則下次系統啟動以,proftpd將自動啟動。
最,需要確保系統當前沒有ftp服務器在運行:
[root@ftpd /]# netstat -ln
若輸出中不包含
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN
這樣的內容則可以直接啟動proftpd,否則需要關閉以前的ftpd服務器。對一般的缺省
Linux安裝來說,則需要通過以下的途徑來關閉ftp服務器:
編輯/etc/inetd.conf文件,在
ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a
一行前加上#:
#ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a
然:
[root@ftpd ! /]# ps ax|grep inetd
350 ? S 0:00 inetd
得到inetd的進程號 ,重新啟動inetd進程:
[root@ftpd /]# kill -HUP 350
然通過如下命令啟動proftpd:
[root@ftpd /]# /etc/rc.d/init.d/proftpd start
這時候可以通過如下命令來測試proftpd是否正常運行:
C:WINDOWS>ftp 192.168.2.33
Connected to 192.168.2.33.
220 ProFTPD 1.2.0rc3 Server (ProFTPD Default Installation)[ftpd.test.com.cn]
User (192.168.2.33:(none)): ideal
Password:
230 User ideal logged in.
ftp>
則現在你就擁有了一個安全可靠的ftp服務器。
FAQ
1、我安裝proftpd以,出現了問題,我如何調試?
通過通過命令! /usr/local/sbin/proftpd -d9 -n啟動proftpd來進行調試,則proftp d就會將
調試信息打印到consle上以供調試之用。
2、為什我的proftpf啟動以,匿名用戶不能登錄?
查看proftp配置文件/usr/local/etc/proftpd.conf,修改<Anonymous ~ftp>為
<Anonymous /home/ftp>(這裡/home/ftp可以是任何希望匿名用戶登錄以的當前根目錄,
但是確保要使該目錄允許ftp用戶訪問),並且若<Anonymous /home/ftp>部分的User指令
指定的用戶為ftp用戶,則需要在配置文件中添加如下命令指示:
RequireValidShell off
3、我如何實現一個正常用戶登錄以將其的訪問限定在某個目錄之下?
可以通過指令DefaultRoot來實現。例如若希望將ftpusers組的用戶限定在自己的home目錄下,則
需要首先創建該組:
/usr/sbin/groupadd ftpusers
然將用戶ideal加入到該組中:
usrmod -G ftpusers ideal
最在在proftpd.conf文件中添加如下內容:
DefaultRoot ~ ftpusers
也可以限制用戶登錄以僅僅訪問自己主目錄下的一個子目錄:
Default! Root ~/anoftp ftpusers
當然也可以將用戶限制在其他目錄之下,而不是自己的home目錄下:
DefaultRoot /tmp ftpusers
也可以限定一個用戶組的某些用戶被限制,而其他不作限制:
DefaultRoot ~ ftpusers,!empolyee
這個指令指示僅僅限制ftpusers組中的不是empolyee組的用戶進行限制。
4、我如何使用戶登陸時不顯示ftp服務器版本信息,以增強安全性?
在proftpd.conf中添加如下內容:
ServerIdent off
則再次登錄時,顯示如下內容:
C:WINDOWS>ftp 192.168.2.33
Connected to 192.168.2.33.
220 ftpd.test.com.cn FTP server ready.
User (192.168.2.33:(none)):
5、在proftpd環境下如何設定虛擬主機?
可以通過指令:VirtualHost來實現,一個最簡單的例子:
<VirtualHost 192.168.2.35>
ServerName "virtual FTP server"
</VirtualHost>
若你僅僅希望通過匿名訪問某個虛擬主機,則使用如下! 的指令:
<VirtualHost 192.168.2.35>
Serv erName "virtual FTP server"
<Limit LOGIN>
DenyAll
</Limit>
<Anonymous /usr/local/private>
User private
Group private
<Limit LOGIN>
AllowAll
</Limit>
</Anonymous>
</VirtualHost>
這樣192.168.2.35的這台主機則僅僅允許匿名登錄。
筆者的proftpd.conf配置文件內容為:
# This is a basic ProFTPD configuration file (rename it to
# 'proftpd.conf' for actual use. It establishes a single server
# and a single anonymous login. It assumes that you have a user/group
# "nobody" and "ftp" for normal operation and anon.
ServerName &! quot;test.com.cn FTP Server"
ServerType standalone
DefaultServer on
# Port 21 is the standard FTP port.
Port 21
# Umask 022 is a good standard umask to prevent new dirs and files
# from being group and world writable.
Umask 022
# To prevent DoS attacks, set the maximum number of child processes
# to 30. If you need to allow more than 30 concurrent connections
# at once, simply increase this value. Note that this ONLY works
# in standalone mode, in inetd mode you should use an inetd server
# that allows you to&! nbsp;limit maximum number of processes per&nb sp;service
# (such as xinetd)
MaxInstances 30
RequireValidShell off
ServerIdent off
# Set the user and group that the server normally runs at.
User nobody
Group nobody
# Normally, we want files to be overwriteable.
<Directory /*>
AllowOverwrite on
</Directory>
# A basic anonymous configuration, no upload directories.
<Anonymous /home/ftp>
User ftp
Group ftp
# We want clients to be able to login with "anonymous" as well as "ftp"
UserAlias anonymous ftp
# Limit the maximum number of anonymous logins
MaxClients 10
# We ! ;want 'welcome.msg' displayed at login, and '.message' displayed
# in each newly chdired directory.
DisplayLogin welcome.msg
DisplayFirstChdir .message
# Limit WRITE everywhere in the anonymous chroot
<Limit WRITE>
DenyAll
</Limit>
</Anonymous>
DefaultRoot ~ ftpusers
<VirtualHost 192.168.2.35>
ServerName "virtual FTP server"
<Limit LOGIN>
DenyAll
</Limit>
<Anonymous /usr/local/private>
User private
Group private
<Limit LOGIN>
AllowAll
</Limit>
</Anonymous>
</VirtualHost>
ProFTPD是一個Unix平台上或是類Unix平台上(如Linux, FreeBSD等)的FTP服務器程序,
它是在自由軟件基金會的版權聲明(GPL)下開發、發布的免費軟件,也就是說任何人只要遵
守GPL版權聲明,都可以隨意修改源始碼。
ProFTPD設計目標是實現一個安全且易設定的FTP Server。目前Unix或類Unix平台上
FTP Server十分有限,最常使用的恐怕就是wu-ftpd了。雖然wu-ftpd有著極佳的效能同時也是
一套很好的軟件,然而它卻欠缺了許多Win32平台上FTP Server的一些特色,同時wu-ftpd過去
也有不少的安全漏洞陸續被發現。ProFTPD的原創者本身就曾經花非常多的時間尋找wu-ftpd
的漏洞加以改進並且增加許多功能。然而十分不幸的是,他很快地發現顯然wu-ftpd需要全部
重新的改寫才能補足欠缺的設定能力以及缺乏的一些功能。ProFTPD不是從其它FTP Server的
既有原始碼修改而產生的,相反的,它是完全獨立而完整、重新改寫的FTP Server。
ProFTPD的主要包括如下特點:
* 單一主設置文件,包含許多指令以及其支配的組,? 耆際侵憊鄣納瓚H綣魑歡
pache Web Serve的設置不陌生的話相信一定會覺得十分容易操作設定。
* 每個目錄都可以定義一個".ftpaccess"設置文件,就如同Apache的".htaccess"文件一樣可以設定
該目錄的存取權限。
* 可設定多個虛擬FTP server,而匿名FTP服務更是十分容易。
* 可根據系統的負載(load)選擇以單獨運作(stand-alone)方式或是由inetd啟動。
* 匿名FTP的根目錄不需要特定的目錄結構、系統二進制執行文件或其它系統文件。
* ProFTPD不執行任何外部程序以免造成安全漏洞。
* 具有隱藏目錄或隱藏文件,源自Unix形式的檔案權限,或是user/group類型的檔案權限設定。
* 能夠以一般使用者在單獨運作(stand-alone)模式下執行,以減少某些藉由攻擊方式取得root權的
可能性。注:此功能與Unix的操作系統有關。
* 支持系統記錄以及utmp/wtmp。
記錄的方式與wu-ftpd的標準完全兼容,也支持記錄內容的延伸格式。
* 支持Shadow&! nbsp;password,包括了帳號使用期限設定的功能。
編譯和安裝
Proftpd提供了多種安裝格式,包括源代碼方式、RPM方式、deb方式(debian軟件包)等。本文
主要討論源代碼方式的安裝。
從ftp.proftpd.net下載最新版本的proftpd-1.2.0rc3到Linux服務器上。然按照如下步驟
進行處理:
[root@ftpd /]# cp proftpd-1.2.0rc3.tar.gz /usr/src/
[root@ftpd /]# cd /usr/src
[root@ftpd src]# tar xvfz proftpd-1.2.0rc3.tar.gz
[root@ftpd src]# cd proftpd-1.2.0rc3
[root@pftd proftpd-1.2.0rc3]# ./configure
[root@pftd proftpd-1.2.0rc3]# make
[root@pftd proftpd-1.2.0rc3]# make install
到現在為止,你已經完成了proftpd的編譯和安裝。並且在/usr/local/etc/目錄下有一個默
認的proftpd配置文件proftpd.conf。
啟動測試
對筆者的試驗系統RedHat6.2來說,需要將該配置文件中:
Group nogrou! p
修改為:
Group nobody
因為redhat系統中nobody用戶屬nobody組,而不是nogroup組。
若需要將proftpd設置為系統啟動時自動啟動則通過如下命令拷貝啟動文件:
[root@ftpd proftpd-1.2.0rc3]# cp ./contrib/dist/rpm/proftpd.init.d /etc/rc.d
/init.d/proftpd
然修改該腳本的可執行屬性:
[root@ftpd /]# chmod +x /etc/rc.d/init.d/proftpd
然編輯/etc/rc.d/init.d/functions:
修改
export PATH="/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin"
為
export PATH="/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin:/usr/local/sbin"
注:若將在運行./cofigure命令時通過--prefix選項指定將proftpd安裝在/usr/sbin目! 錄下
則不需要修改fuctions文件。
然運行命令:
[root@ftpd rc3.d]# chkconfig --level 35 proftpd on
則下次系統啟動以,proftpd將自動啟動。
最,需要確保系統當前沒有ftp服務器在運行:
[root@ftpd /]# netstat -ln
若輸出中不包含
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN
這樣的內容則可以直接啟動proftpd,否則需要關閉以前的ftpd服務器。對一般的缺省
Linux安裝來說,則需要通過以下的途徑來關閉ftp服務器:
編輯/etc/inetd.conf文件,在
ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a
一行前加上#:
#ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a
然:
[root@ftpd ! /]# ps ax|grep inetd
350 ? S 0:00 inetd
得到inetd的進程號 ,重新啟動inetd進程:
[root@ftpd /]# kill -HUP 350
然通過如下命令啟動proftpd:
[root@ftpd /]# /etc/rc.d/init.d/proftpd start
這時候可以通過如下命令來測試proftpd是否正常運行:
C:WINDOWS>ftp 192.168.2.33
Connected to 192.168.2.33.
220 ProFTPD 1.2.0rc3 Server (ProFTPD Default Installation)[ftpd.test.com.cn]
User (192.168.2.33:(none)): ideal
Password:
230 User ideal logged in.
ftp>
則現在你就擁有了一個安全可靠的ftp服務器。
FAQ
1、我安裝proftpd以,出現了問題,我如何調試?
通過通過命令! /usr/local/sbin/proftpd -d9 -n啟動proftpd來進行調試,則proftp d就會將
調試信息打印到consle上以供調試之用。
2、為什我的proftpf啟動以,匿名用戶不能登錄?
查看proftp配置文件/usr/local/etc/proftpd.conf,修改<Anonymous ~ftp>為
<Anonymous /home/ftp>(這裡/home/ftp可以是任何希望匿名用戶登錄以的當前根目錄,
但是確保要使該目錄允許ftp用戶訪問),並且若<Anonymous /home/ftp>部分的User指令
指定的用戶為ftp用戶,則需要在配置文件中添加如下命令指示:
RequireValidShell off
3、我如何實現一個正常用戶登錄以將其的訪問限定在某個目錄之下?
可以通過指令DefaultRoot來實現。例如若希望將ftpusers組的用戶限定在自己的home目錄下,則
需要首先創建該組:
/usr/sbin/groupadd ftpusers
然將用戶ideal加入到該組中:
usrmod -G ftpusers ideal
最在在proftpd.conf文件中添加如下內容:
DefaultRoot ~ ftpusers
也可以限制用戶登錄以僅僅訪問自己主目錄下的一個子目錄:
Default! Root ~/anoftp ftpusers
當然也可以將用戶限制在其他目錄之下,而不是自己的home目錄下:
DefaultRoot /tmp ftpusers
也可以限定一個用戶組的某些用戶被限制,而其他不作限制:
DefaultRoot ~ ftpusers,!empolyee
這個指令指示僅僅限制ftpusers組中的不是empolyee組的用戶進行限制。
4、我如何使用戶登陸時不顯示ftp服務器版本信息,以增強安全性?
在proftpd.conf中添加如下內容:
ServerIdent off
則再次登錄時,顯示如下內容:
C:WINDOWS>ftp 192.168.2.33
Connected to 192.168.2.33.
220 ftpd.test.com.cn FTP server ready.
User (192.168.2.33:(none)):
5、在proftpd環境下如何設定虛擬主機?
可以通過指令:VirtualHost來實現,一個最簡單的例子:
<VirtualHost 192.168.2.35>
ServerName "virtual FTP server"
</VirtualHost>
若你僅僅希望通過匿名訪問某個虛擬主機,則使用如下! 的指令:
<VirtualHost 192.168.2.35>
Serv erName "virtual FTP server"
<Limit LOGIN>
DenyAll
</Limit>
<Anonymous /usr/local/private>
User private
Group private
<Limit LOGIN>
AllowAll
</Limit>
</Anonymous>
</VirtualHost>
這樣192.168.2.35的這台主機則僅僅允許匿名登錄。
筆者的proftpd.conf配置文件內容為:
# This is a basic ProFTPD configuration file (rename it to
# 'proftpd.conf' for actual use. It establishes a single server
# and a single anonymous login. It assumes that you have a user/group
# "nobody" and "ftp" for normal operation and anon.
ServerName &! quot;test.com.cn FTP Server"
ServerType standalone
DefaultServer on
# Port 21 is the standard FTP port.
Port 21
# Umask 022 is a good standard umask to prevent new dirs and files
# from being group and world writable.
Umask 022
# To prevent DoS attacks, set the maximum number of child processes
# to 30. If you need to allow more than 30 concurrent connections
# at once, simply increase this value. Note that this ONLY works
# in standalone mode, in inetd mode you should use an inetd server
# that allows you to&! nbsp;limit maximum number of processes per&nb sp;service
# (such as xinetd)
MaxInstances 30
RequireValidShell off
ServerIdent off
# Set the user and group that the server normally runs at.
User nobody
Group nobody
# Normally, we want files to be overwriteable.
<Directory /*>
AllowOverwrite on
</Directory>
# A basic anonymous configuration, no upload directories.
<Anonymous /home/ftp>
User ftp
Group ftp
# We want clients to be able to login with "anonymous" as well as "ftp"
UserAlias anonymous ftp
# Limit the maximum number of anonymous logins
MaxClients 10
# We ! ;want 'welcome.msg' displayed at login, and '.message' displayed
# in each newly chdired directory.
DisplayLogin welcome.msg
DisplayFirstChdir .message
# Limit WRITE everywhere in the anonymous chroot
<Limit WRITE>
DenyAll
</Limit>
</Anonymous>
DefaultRoot ~ ftpusers
<VirtualHost 192.168.2.35>
ServerName "virtual FTP server"
<Limit LOGIN>
DenyAll
</Limit>
<Anonymous /usr/local/private>
User private
Group private
<Limit LOGIN>
AllowAll
</Limit>
</Anonymous>
</VirtualHost>
全站熱搜
留言列表