歡迎您光臨本站 註冊首頁

CentOS5環境下安裝PureFTPd

←手機掃碼閱讀     火星人 @ 2014-03-04 , reply:0

CentOS5環境下安裝PureFTPd

CentOS5環境下安裝PureFTPd

作者:張微波
前幾天為了讓公司內的FTP,決定在centos5下裝支持虛擬用戶帶磁碟限額的FTP軟體。
在安裝PureFTPd以前,要做好以下準備工作:

二、 安裝PureFTPd
1.下面我們開始安裝PureFTPd,同樣以FreeBSD的Ports方式安裝。
#tar zxfv pure-ftpd-1.0.21.tar.gz -C /usr/local/
#cd /usr/local/pure-ftpd-1.0.21/
#./configure \
--prefix=/usr/local/pureftpd \
--with-mysql \
--with-puredb \
--with-paranoidmsg \
--with-peruserlimits \
--with-shadow \
--with-welcomemsg \
--with-uploadscript \
--with-quotas \
--with-cookie \
--with-pam \
--with-virtualhosts \
--with-virtualroot \
--with-virtualchroot \
--with-diraliases \
--with-sysquotas \
--with-ratios \
--with-ftpwho \
--with-throttling \
--with-largefile \
--with-language=simplified-chinese \
--with-altlog \
--with-iplogging \
--without-usernames
#make
# make check
# make install

下面配置pureftpd:
# mkdir –pv /usr/local/pureftpd/etc
#cp pureftpd-mysql.conf /usr/local/pureftpd/etc
# cp configuration-file/pure-config.pl /usr/local/pureftpd/sbin/ (生成配置文件)
# cp configuration-file/pure-ftpd.conf /usr/local/pureftpd/etc/
# chmod 755 /usr/local/pureftpd/sbin/pure-config.pl

# cd contrib
編輯 redhat.init 文件。找到語句
找到語句: "pureftpwho=/usr/local/sbin/pure-ftpwho",
將其改為: "pureftpwho=/usr/local/pureftpd/sbin/pure-ftpwho"
找到語句: 」$fullpath /usr/local/etc/pure-ftpd.conf –daemonize」
將其改為: 」$fullpath /usr/local/pureftpd/etc/pure-ftpd.conf –daemonize」
執行以下命令將文件 redhat.init 複製到 /etc 目錄中重命名為 pure-ftpd,並將其設置為可執行。
# cp redhat.init /etc/rc.d/init.d/pureftpd
# chmod u+x /etc/rc.d/init.d/pureftpd

# /sbin/chkconfig --add pureftpd ( 將 pure-ftpd 服務添加到系統中 )
# /sbin/chkconfig –level 2345 pureftpd on
#serv        ice pureftpd start
解釋:
註明:)
在README中的段落中,有對上面的使用的
      詳細說明.在這裡對常用的做簡略的解釋.
      --without-standalone 不能以standalone的方式執行ftpd.
      --without-inetd           不能以inetd的方式執行ftpd.
      --without-iplogging           做log時不將IP 地址給log下來.
      --without-shadow           不做shadow.除非是用PAM, LDAP or SQL.不然極不建議拿掉.
      --without-usernames           文件列表只會列出UID & GID,不列出實際user or group name.
      --without-humor           嘿嘿嘿....
      --without-ascii           不支持7-bits transfers(ASCII).
      --with-paranoidmsg           唔....不知該怎麼說.算是可以給特定人的信息吧.
      --with-sysquotas           吃系統的quota設定.
      --with-minimal           最小化安裝.
      --with-pam
      --with-puredb
      --with-ldap
      --with-mysql
      --with-pgsql           以上五種都是存儲資料的格式?.看你比較習慣什麼.
      --with-altlog           留log了....
      --with-cookie           使用者進站看到的東東.類似進站畫面.
      --with-ratios           上下傳比.
      --with-throttling           頻寬可設限.
      --with-ftpwho           可用pure-ftpwho來看線上使用者.像是Serv-u的線上狀態.
      --with-uploadscript   當一個文件被完整上傳完后自動呼叫某一script去對這個文件處理.當然.這個script得你自己寫.
      --with-largefile           支持下載超過2G的文件.
      --with-virtualhosts           跟http的virtualhost有異曲同工之妙.
      --with-virtualchroot           配合上面的chroot.
      --with-diraliases           跟Serv-U上面的link功能一樣.
      --with-nonroot           不需root許可權.一般user即可啟動ftpd.
      --with-quotas           使用quota.(非系統下的quota)
      --with-peruserlimits         每個賬號最多可登入幾次:Anonymous最多可同時登入幾次
      --with-everything          所有功能全上.
      --with-language=simplified-chinese           顯示出來的信息的語言.預設為英語.
安裝完后,就會在/usr/local目錄下生成一個pureftpd目錄,我們要使用的文件都在這個目錄中。

2.下面我們開始配置pure-ftpd.conf文件
在這裡我全使用默認值,修改下面內容以支持MYSQL。(註:Pureftpd可以同時支持ldap,mysql,pgsql,puredb認證)

# MySQL configuration file (see README.MySQL)
MySQLConfigFile /usr/local/pureftpd/etc/pureftpd-mysql.conf

修改不然無法執行 #service pureftpd stop)
# If your pure-ftpd has been compiled with standalone support, you can change
# the location of the pid file. The default is /var/run/pure-ftpd.pid
#PIDFile                     /var/run/pure-ftpd.pid
#去掉上面的註釋
PIDFile                     /var/run/pure-ftpd.pid
修改不允許名登陸
NoAnonymous                 yes
# Allow FXP transfers for authenticated users.
AllowUserFXP                yes
# Allow users to resume and upload files, but *NOT* to delete them.
KeepAllFiles                yes
# Automatically create home directories if they are missing
CreateHomeDir               yes

3.配置文件詳解(摘自網上陳景峰所著《Pure-FTPd + LDAP + MySQL + PGSQL + Virtual-Users + Quota How To》)
ChrootEveryone yes
chroot每一個用戶,等同於Proftpd 中的DefaultRoot~ , 可以限制用戶在某個地方活動,增強伺服器的安全性。使用過wu-ftpd的使用都應該知道cd /會發生什麼!
TrustedGID 50
#以上兩者要一起用
BrokenClientsCompatibility no
MaxClientsNumber 50
#最大鏈接數
Daemonize yes
#Fork in background 以守護進程方式在後台運行
MaxClientsPerIP 5
#每個ip最多鏈接數,最好設小點。
VerboseLog no
#是否要把所有client端的指令都log下來
DisplayDotFiles no
#顯示開頭的文件
AnonymousOnly no
#是否只讓匿名登錄
NoAnonymous no
#不開放匿名登入
SyslogFacility ftp
#應該是對日誌做一下過濾 (auth, authpriv, daemon, ftp, security, user, local*)可以讓日誌只記錄想要的信息
DontResolve yes
#不反向解釋客戶端的ip
MaxIdleTime 5
#最大閑置時間
#LDAPConfigFile /usr/local/pureftpd/etc/pureftpd-ldap.conf
#使用LDAP認證,
MySQLConfigFile /usr/local/pureftpd/etc/pureftpd-mysql.conf
#使用MySQL認證
#PGSQLConfigFile /usr/local/pureftpd/etc/pureftpd-pgsql.conf
#使用PGSQL認證
#PureDB /ftp/etc/pureftpd.pdb
#使用者資料的DB存放地點 [由於我是用PureFTPD的內建DB.固有此選項]
#ExtAuth /var/run/ftpd.sock
#pure-authd socket 路徑 (詳細請看 README.Authentication-Modules)
#PAMAuthentication yes
#開啟PAM認證
#UnixAuthentication yes
#如果你想要有簡單的Unix(/etc/passwd)的認證的話
FortunesFile /usr/local/pureftpd/etc/.welcome
#顯示的歡迎信息文件,你可以創建該文件,輸入一些文字,然後你重啟你的FTP服務,就會有意外的發現。
LimitRecursion 2000 8
#ls最多列出3000個文件.最深8層
AnonymousCanCreateDirs no
#匿名用戶可以創建目錄
MaxLoad 4
#當system load超過4時.使用者將不能再下載
PassivePortRange 30000 50000
#被動連接應答範圍
ForcePassiveIP 192.168.0.1
#不會譯:(
AnonymousRatio 1 10
#Anonymous連接上傳/下載比率
UserRatio 1 10
#用戶上傳/下載比率(註:如果使用ldap,mysql,pgsql,pam不要啟用該功能,否則你在ldap等中設置的Ratio無校)
AntiWarez no
#上傳的文件不能被下載(owner is ftp).等到local admin確認
Bind 127.0.0.1,8021
#要綁定和ip/port,在你的系統中有兩個FTP Server這樣你其中一個FTP就要使用其它埠。
#格式-> 127.0.0.1,21 如果只寫port表All ip,port
AnonymousBandwidth 8
#Anonymous 帶寬,單位KB/s
UserBandwidth 8
#用戶帶寬,單位KB/s
Umask 133:022
#上傳文件的Umask.(<umask for files>:<umask for dirs> )
MinUID 1000
# UID至少多少才能登錄
AllowUserFXP yes
#支不支持FXP
AllowAnonymousFXP no
#Anonymous支不支持FXP
ProhibitDotFilesWrite no
ProhibitDotFilesRead no
#(」.」)開頭的文件能不能被讀/寫,UNIX Like下以點開頭的文件是隱藏文件ls –a才能列出
#Pureftpd Quota模式下做產生」 .ftpquota」文件。
AutoRename no
#上傳文件若有相同文件名自動改名(file.1,file.2...)
AnonymousCantUpload no
#匿名用戶上傳文件
#TrustedIP 10.1.1.1
#鎖IP.
LogPID
#Log文件添加PID
AltLog stats:/ftp/etc/log/pureftpd.log
#log存放地點,注日誌有幾種常用的格式
#clf 類似apache格式,stats UNIX log格式,w3c 標準W3C格式,可能是HTML格式
NoChmod yes
#不給Chmod指令的許可權
KeepAllFiles no
#使用者可續傳.但不可刪除文件
CreateHomeDir yes
#如果user的home不存在自動建立(我把這個設為YES)
Quota 1000:10
#Quota <文件數>:<容量Megabytes >,FTP限制10M空間,可以上傳1000個文件(註:如果使用ldap,mysql,pgsql,pam不要啟用該功能,否則你在ldap等中設置的Quota無校)
PIDFile /ftp/etc/log/pure-ftpd.pid
#記錄pure-ftpd的PID文件
CallUploadScript yes     
#呼叫UploadScript
MaxDiskUsage 99
#當硬碟使用率到多少時將停止上傳
NoRename yes
#用戶不能重命名文件名
CustomerProof yes
PerUserLimits 3:20
#<每個賬號最多可登入幾次:Anonymous最多可同時登入幾次>

4. 創建Mysql資料庫中的FTP虛擬用戶管理資料庫ftpusers
將以下內容存為script.mysql文件

INSERT INTO mysql.user (Host, User, Password, Select_priv, Insert_priv, Update
_priv, Delete_priv, Create_priv, Drop_priv, Reload_priv, Shutdown_priv, Proces
s_priv, File_priv, Grant_priv, References_priv, Index_priv, Alter_priv) VALUES
('127.0.0.1','ftp',PASSWORD('123456'),'Y','Y','Y','Y','N','N','N','N','N','N
','N','N','N','N');

FLUSH PRIVILEGES;

CREATE DATABASE ftpusers;

USE ftpusers;

CREATE TABLE admin (
Username varchar(35) NOT NULL default '',
Password char(32) binary NOT NULL default '',
PRIMARY KEY (Username)
) TYPE=MyISAM;

INSERT INTO admin VALUES ('Administrator',MD5('123456'));

CREATE TABLE users (
User char(16) NOT NULL default '',
Password char(32) binary NOT NULL default '',
Uid int(11) NOT NULL default '2000',
Gid int(11) NOT NULL default '2000',
Dir char(12 NOT NULL default '',
QuotaFiles int(10) NOT NULL default '500',
QuotaSize int(10) NOT NULL default '30',
ULBandwidth int(10) NOT NULL default '80',
DLBandwidth int(10) NOT NULL default '80',
status enum('0','1') NOT NULL default '1',
ipaccess varchar(15) NOT NULL default '*',
comment tinytext NOT NULL,
PRIMARY KEY (User),
UNIQUE KEY User (User)
) TYPE=MyISAM;

INSERT INTO `users` VALUES ('kevin',MD5('123456'),1001,2000,'/home/kevin',500,30,
80,5);

先在Mysql資料庫建立一個對資料庫有操作許可權的用戶ftp,密碼為123456。
再創建新資料庫ftpusers,並新建兩個表admin和users,往admin表中加入管理用戶帳號,往users表中加入新的FTP用戶kevin,密碼為123456。

然後我們運行以下命令來生成資料庫ftpusers。

# mysql -u root -ppassword < script.mysql
注意,-p是輸入密碼,它和後面你輸入的password中沒有空格。

5.修改/usr/local/pureftpd/etc/pureftpd-mysql.conf配置文件
內容如下所示:

MYSQLServer localhost
#MYSQL伺服器的IP
MYSQLPort 3306
#MYSQL 埠號
MYSQLSocket /var/lib/mysql/mysql.sock
#使用UNIX.sock本地連接
註:MYSQLServer 與 MYSQLSocket 選擇一種即可

MYSQLUser ftp
#MYSQLUser 數據用戶名
MYSQLPassword 123456
#MYSQL資料庫用戶的密碼
MYSQLDatabase ftpusers
#FTP數據資料庫
MYSQLCrypt md5
#密碼加密方式"cleartext", "crypt", "md5" and "password"
# cleartext 明文,crypt,md5,password是Backend password(『your-passwd』)函數(MYSQL資料庫所使用的password()函數)
MYSQLGetPW SELECT Password FROM users WHERE User="\L"
# 密碼欄位,我使用users表中的Password做為密碼欄位
MYSQLGetUID SELECT Uid FROM users WHERE User="\L"
#UID用戶ID欄位
MYSQLDefaultUID 1000
#默認的UID (註:如何開啟該選項,MYSQLGetUID將失去作用)
MYSQLGetGID SELECT Gid FROM users WHERE User="\L"
#GID組ID欄位
MYSQLDefaultGID 1000
#默認的GID (註:如何開啟該選項,MYSQLGetGID將失去作用)
MYSQLGetDir SELECT Dir FROM users WHERE User="\L"
#FTP用戶目錄如/home/web/www-9812-net
MySQLGetQTAFS SELECT QuotaFiles FROM users WHERE User="\L"
#磁碟限額,文件數限制。如1000,允許用戶上傳1千個文件
MySQLGetQTASZ SELECT QuotaSize FROM users WHERE User="\L"
#磁碟限額,FTP用戶空間限制(單位為M),如:100M
MySQLGetRatioUL SELECT ULRatio FROM users WHERE User="\L"
MySQLGetRatioDL SELECT DLRatio FROM users WHERE User="\L"
#上傳/下載比率。MySQLGetRatioUL為上傳比,MySQLGetRatioDL下載比。如:1:5
MySQLGetBandwidthUL SELECT ULBandwidth FROM users WHERE User="\L"
MySQLGetBandwidthDL SELECT DLBandwidth FROM users WHERE User="\L"
#下傳/下載帶寬(單位KB/s)。MySQLGetBandwidthUL上傳帶寬,MySQLGetBandwidthDL下載帶寬。如上傳500KB/s,下載50KB/s
MySQLForceTildeExpansion 1
MySQLTransactions On
#不會翻譯

修改好該配置文件后,我們繼續。

6.運行PureFTPd
======== 配置匿名用戶登錄環境 ============

   由於 pure-ftpd 將 FTP 匿名用戶(anonymous)映射到名為 ftp 的系統帳戶,因此 ftp 系統帳戶主目錄就是 FTP 匿名用戶的主目錄。
如果需要 FTP 伺服器允許匿名登錄系統,就需要建立一個名為 ftp 的系統帳戶,而且該帳戶的主目錄需要存在,否則使用匿名用戶登錄時會出現登錄失敗並提示「 No control connection for command:No such file or diretory」的錯誤。
   默認 pure-ftpd 安裝的時候已經建立了 ftp 帳戶,但該帳戶默認的主目錄 /var/ftp 不存在,所以還要使用命令為其建立目錄,同時使得 ftp 系統帳戶對主目錄有寫入許可權。
#groupadd -g 1000 ftp
#ueradd -g ftp -u 1000 -s /sbin/nologin –d /var/ftp -M ftp
# mkdir /var/ftp
# chown ftp:ftp /var/ftp
操作完后我們就添加一個ftp帳號屬於ftp組,用戶id和組id都是1000

啟動PureFTPd
# service pureftpd start
測試FTP是否正常了。
# ftp 你的IP
Connected to 127.0.0.1.
220---------- 歡迎來到 Pure-FTPd ----------
220-您是第1個使用者,最多可達50個連接
220-現在是本地時間 09:02。伺服器埠: 21。
220 在15分鐘內沒有活動,您將被斷線。
Name (127.0.0.1:kevin):kevin
Password:
230-使用者kevin 有以下組的許可權: ftp
230-這個伺服器支持FXP傳輸
230-OK. 目前限制的目錄是 /
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

恭喜你,你的FTP服務已經正常工作了。
《解決方案》

安裝這個以後,建議再安裝頂貼的管理pureftpd用戶的軟體 ,那樣就pure了。
《解決方案》

用了pureftpd以後,直接放棄vsftpd......
《解決方案》

pureftpd確定好東西,編譯加參數就支持中文編碼,但不知道為什麼我的出現一個問題:
     用ie上傳中文文字的文件后,刷新一下,有一些文件的最後一個字變成了?號。。。

大夥有遇到這樣的問題嗎?怎麼解決呢?謝謝!
《解決方案》

暫時還沒遇到你出現的問題......
《解決方案》

不僅僅是我出現這個問題,論壇還有一個兄弟出現同樣的問題
《解決方案》

沒遇到過,我在RHEL5和CentOS5下分別配置了的,一切都還好。這段時間要出差,這個bug我記住了,等出差回來我再測試下。
《解決方案》

lz真熱心,贊!
《解決方案》

又看了看頂貼的方法,感覺複雜了點,有時間再嘗試看能不能簡單安裝
《解決方案》

原帖由 diyself 於 2008-7-20 11:38 發表 http://bbs.chinaunix.net/images/common/back.gif
pureftpd確定好東西,編譯加參數就支持中文編碼,但不知道為什麼我的出現一個問題:
     用ie上傳中文文字的文件后,刷新一下,有一些文件的最後一個字變成了?號。。。

大夥有遇到這樣的問題嗎?怎麼解決 ...



因為編碼的原因,建議用專業的FTP上傳和下載,比如CuteFTP等.

[火星人 ] CentOS5環境下安裝PureFTPd已經有628次圍觀

http://coctec.com/docs/service/show-post-28674.html