通過Yum安裝Pure-ftpd的詳細步驟如下:
步驟一:配置yum源
備份(如有配置其他epel源)
mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup
下載新repo 到/etc/yum.repos.d/
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
yum makecache
步驟二:yum安裝
yum install pure-ftpd -y
步驟三:修改設定檔
vim /etc/pure-ftpd/pure-ftpd.conf
PureDB /etc/pure-ftpd/pureftpd.pdb
#去掉這行注釋,指定路徑,PureDB使用者資料庫檔案
VerboseLog yes
#開啟日誌 /var/log/pureftpd.log
NoAnonymous yes
#拒絕匿名使用者登入
PassivePortRange 48000 50000
#使用被動模式,限制連接埠。
步驟四:建立賬戶,配置許可權
groupadd ftpgroup
useradd -g ftpgroup -s /sbin/nologin -d /dev/null ftpuser
建立虛擬賬戶
pure-pw useradd test -d /data/ftp/ -u ftpuser -m
配置目錄許可權
mkdir /data/ftp -p
chown ftpuser.ftpgroup /data/ftp/ -R
步驟五:配置防火牆策略
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 48000:50000 -j ACCEPT
步驟六:啟動pure-ftpd
chkconfig pure-ftpd --level 345 on
/etc/init.d/pure-ftpd start
CentOS 5.5 x86_64下安裝配置pure-ftpd
pure-ftpd介紹
pure-ftpd大家應該都聽說過,一個很好用的ftp服務端。功能很多,也比較安全,而且還可以和mysql整合,通過mysql建立和驗證帳戶,並實現流量限制、磁碟配額限制等功能。這就說明,可以通過自己開發的PHP程式來實現Web管理。其它的功能,大家可以到官網上去看。
Yum安裝pure-ftpd遇到的問題
CentOS裝軟體最簡單的辦法就是用yum了。所以我毫不猶豫地yum install pure-ftpd。找到的也是x86_64的,心想肯定不會有問題。安裝完之後,/etc/init.d/pure-ftpd start運行一下,發現[failed],啟動失敗。查看一下伺服器日誌:
tail -n 200 /var/log/messages | grep ftp
如果您看到了下面的錯誤:
pure-ftpd: (?@?) [ERROR] Unable to switch capabilities : Operation not permitted
那麼恭喜您,您遇到了和我一樣的問題(這是什麼話……)。這會出現於基於openVZ的vps上。因為這種vps限制一種包libcap.so。這個只能修改母機的設定,在VPS上是不現實的。解決的辦法也很簡單,自己去下載pure-ftpd的源碼包進行編譯安裝,編譯的時候加上?without-capabilities這個參數就行了。具體的命令如下:
wget ftp://ftp.pureftpd.org/pub/pure-ftpd/releases/pure-ftpd-1.0.29.tar.gz
tar zxf pure-ftpd-1.0.29.tar.gz
cd pure-ftpd-1.0.29
./configure --without-capabilities --with-virtualchroot --with-mysql --with-pam --with-altlog --with-mysql --with-cookie --with-throttling --with-ratios --with-paranoidmsg --with-quotas --with-everything
make
make install
pure-ftpd編譯的時候遇到的問題
第一個問題
出現如下的錯誤:
configure: error: PAM headers not found.
解決辦法:
yum -y install pam-devel
第二個問題:
我的是CentOS 5.5 x86_64,MySQL也是yum安裝的。結果編譯pure-ftpd的時候,加了?with-mysql參數之後,編譯過程中出現下面的錯誤:
checking for mysql_init in -lmysqlclient… no
configure: error: libmysqlclient is needed for MySQL support
我很納悶,怎麼會缺少這個,用find命令一搜,能找到呀,在/usr/lib64/mysql/下面,四個庫檔案老老實實地躺在那兒呢。難道是需要裝額外的擴充包?yum search libmysqlclient以下,竟然米有這個。
在GG上一搜,遇到這個問題的人真不少(國內竟然米有相關的文章),可是大家的解決辦法無怪乎以下幾種:
1、編譯的時候不加?with-mysql這個參數(對於我們來說當然不行,要的就是mysql支援)
2、刪除mysql、apache、php等,安裝一些人編譯好的LAMP或LNMP套件,這個不現實,都裝好了為啥要刪。
3、修改pure-ftpd源碼中的configure檔案,在mysql那一段加上編譯參數。這個只適用於老版本的pure-ftpd,新版的configure檔案已經改過了。
4、用ln -s將/usr/lib64/mysql/下面的幾個libmysqlclient.so檔案指向別的位置,比如/usr/local/mysql、/usr/include等位置,我試了一下,我幾乎把這些捷徑建立到我能建立的任何地方,還是米有用。不過有的人能用了。
5、關閉SElinux和防火牆,試過了,也不行,而且感覺不安全,所以沒用之後又開啟了。
……
總之,網上的一些辦法我都試過了,都不行。
我無意中收到了一個pure-ftpd的rpm包,上面列出了他運行所依賴的庫檔案,其中就有libmysqlclient,我點進去看了一下,發現Federo有一個專門的mysql庫的包。我猜想CentOS是不是應該也有呢。於是,yum search mysql了一下,發現除mysql以外,還有一些其它的在我本機上沒有安裝,我看到一個為mysql-devel的包,這個應該比較像,嘗試安裝了一下,再次編譯pure-ftpd,順利通過,太激動了。兩天的問題終於解決了。
配置pure-ftpd
接著剛才的./config 之後的:
make
make install
cp pureftpd-mysql.conf /etc/
cp configuration-file/pure-config.pl /usr/local/sbin/
chmod 755 /usr/local/sbin/pure-config.pl
cp configuration-file/pure-ftpd.conf /etc/
cp contrib/redhat.init /etc/rc.d/init.d/pureftpd
chmod u+x /etc/rc.d/init.d/pureftpd
chkconfig --add pureftpd
chkconfig --level 2345 pureftpd on
service pureftpd start
這樣是把pure-ftpd安裝為一個服務,這樣以後使用起來就方便了。啟動成功後顯示資訊如下:
啟動 pure-config.pl:Running: /usr/local/sbin/pure-ftpd ?daemonize -A -c50 -B -C8 -D -fftp -H -I15 -lmysql:/etc/pureftpd-mysql.conf -L10000:8 -m4 -s -U133:022 -u100 -j -k99 -Z
pureftpd 安裝好了,現在我們開始配置其支援虛擬使用者,並把虛擬使用者儲存在 mysql 中。
首先我們建立 pureftpd 用到的使用者組和使用者帳戶,所有的虛擬帳戶都會被映射到這個帳戶的目錄下。組號和使用者號自己定義一個,只要是系統閒置即可,這裡預設寫一個2001。
groupadd -g 2001 ftpgroup
useradd -u 2001 -s /bin/false -d /bin/null -c "pureftpd user" -g ftpgroup ftpuser
建立 pureftpd 資料表並賦予 mysql 許可權:
mysql -u root -p
CREATE DATABASE pureftpd;
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO 'pureftpd'@'localhost' IDENTIFIED BY '對應的密碼';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO 'pureftpd'@'localhost.localdomain' IDENTIFIED BY '對應的密碼';
FLUSH PRIVILEGES;
USE pureftpd;
CREATE TABLE ftpd (
User varchar(16) NOT NULL default '',
status enum('0','1') NOT NULL default '0',
Password varchar(64) NOT NULL default '',
Uid varchar(11) NOT NULL default '-1',
Gid varchar(11) NOT NULL default '-1',
Dir varchar(128) NOT NULL default '',
ULBandwidth smallint(5) NOT NULL default '0',
DLBandwidth smallint(5) NOT NULL default '0',
comment tinytext NOT NULL,
ipaccess varchar(15) NOT NULL default '*',
QuotaSize smallint(5) NOT NULL default '0',
QuotaFiles int(11) NOT NULL default 0,
PRIMARY KEY (User),
UNIQUE KEY User (User)
) ENGINE=MyISAM DEFAULT CHARSET=gbk;
看一下表結構
mysql> desc ftpd;
+-------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+---------------+------+-----+---------+-------+
| User | varchar(16) | NO | PRI | | |
| status | enum('0','1') | NO | | 0 | |
| Password | varchar(64) | NO | | | |
| Uid | varchar(11) | NO | | -1 | |
| Gid | varchar(11) | NO | | -1 | |
| Dir | varchar(128) | NO | | | |
| ULBandwidth | smallint(5) | NO | | 0 | |
| DLBandwidth | smallint(5) | NO | | 0 | |
| comment | tinytext | NO | | NULL | |
| ipaccess | varchar(15) | NO | | * | |
| QuotaSize | smallint(5) | NO | | 0 | |
| QuotaFiles | int(11) | NO | | 0 | |
+-------------+---------------+------+-----+---------+-------+
12 rows in set (0.02 sec)
資料表說明:
User:帳號名;
status:0 表示帳號被禁用,無法登入伺服器;
Password:密碼,使用MD5加密;
Uid:前面建立的ftpuser帳戶號,我們填寫的是2001;
Gid:前面建立的ftpgroup組號,我們填寫的是2001;
Dir:虛擬使用者的個人目錄路徑,將在/home下建立(第一次登入);
ULBandwidth:上傳檔案限制速度,KB/s,0為不限制;
DLBandwidth:下載檔案限制速度,KB/s,0為不限制;
comment:備忘資訊;
ipaccess:* 表示任意IP都可以訪問此ftp伺服器,輸入具體IP地址可以只允許此IP串連伺服器;
QuotaSize:使用者磁碟空間分配,單位:MB,0表示不加限制;
QuotaFiles:使用者可以儲存的檔案數量限制,0表示不加限制。
編輯/etc/pure-ftpd.conf,確保ChrootEveryone、MySQLConfigFile、CreateHomeDir被開啟:
ChrootEveryone yes
MySQLConfigFile /etc/pureftpd-mysql.conf
CreateHomeDir yes
ChrootEveryone 限制每一個虛擬使用者在其目錄下;
CreateHomeDir 會在ftp使用者登入時建立其個人目錄。
編輯 /etc/pureftpd-mysql.conf 如下:
MYSQLSocket /tmp/mysql.sock
#MYSQLServer localhost
#MYSQLPort 3306
MYSQLUser pureftpd
MYSQLPassword 這裡輸入前面給mysql授權時的密碼
MYSQLDatabase pureftpd
#MYSQLCrypt md5, cleartext, crypt() or password() - md5 is VERY RECOMMENDABLE uppon cleartext
MYSQLCrypt md5
MYSQLGetPW SELECT Password FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MYSQLGetUID SELECT Uid FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MYSQLGetGID SELECT Gid FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MYSQLGetDir SELECT Dir FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MySQLGetBandwidthUL SELECT ULBandwidth FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MySQLGetBandwidthDL SELECT DLBandwidth FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MySQLGetQTASZ SELECT QuotaSize FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MySQLGetQTAFS SELECT QuotaFiles FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
重新啟動pureftpd:
service pureftpd restart
建立ftp虛擬使用者:
mysql -u root -p
use pureftpd;
INSERT INTO `ftpd` (`User`, `status`, `Password`, `Uid`, `Gid`, `Dir`, `ULBandwidth`, `DLBandwidth`, `comment`, `ipaccess`, `QuotaSize`, `QuotaFiles`) VALUES ('帳號名', '1', MD5('密碼'), '2001', '2001', '/home/路徑', '100', '100', '', '*', '50', '0');
quit
這裏手動添加sql,實際上可以做一個web頁面,申請帳號,管理員後台設定帳號生效等等操作… …該php閃亮登場了… …
現在可以使用你的ftp用戶端串連ftp伺服器測試一下了。
另附:如何配置匿名ftp訪問
修改 /etc/password 如下:
ftp:x:14:50:FTP User:/home/anon_ftp_dir:/sbin/nologin
給匿名訪問目錄加上許可權:
[root@server home]# chmod 755 anon_ftp_dir/
[root@server ~]# ls -dl /home/anon_ftp_dir/
drwxr-xr-x 3 root root 4096 05-31 10:07 /home/anon_ftp_dir/
[root@server ~]# ls -l /home/anon_ftp_dir/
總計 8
drwxr-xr-x 2 root root 4096 05-31 10:07 anon
再登入FTP用戶端測試一下吧。