pure-ftpd + mysql + web搭建ftp服務器

參考:http://tonychiu.blog.51cto.com/656605/533172

這哥們跟我的英文名是同一個,特別親切,感謝他的思路及蒐集的web界面

一、安裝及配置
1、準備工作
cd /usr/local/src/tarbag/
官方下載
 

  1. wget http://download.pureftpd.org/pub/pure-ftpd/releases/pure-ftpd-1.0.34.tar.gz 


推薦下載
 

  1. wget http://fossies.org/unix/misc/pure-ftpd-1.0.34.tar.gz 


下載phpweb管理組件
 

  1. wget http://www.yiyou.org/docs/PureAdmin_03_php/PureAdmin-0.3.tar.gz  
  2. wget http://www.yiyou.org/docs/PureAdmin_03_php/pureftp.sql  
  3. wget http://www.yiyou.org/docs/PureAdmin_03_php/pureftpd-mysql.conf 

2、解壓編譯及安裝&常見問題排錯
 

  1. tar zxvf pure-ftpd-1.0.34.tar.gz -C ../software/  
  2. cd /usr/local/src/software  
  3. cd pure-ftpd-1.0.34/  
  4. ./configure --prefix=/usr/local/pureftpd --with-mysql=/usr/local/mysql --with-throttling --with-puredb --with-virtualhosts --with-virtualroot --with-cookie --with-quotas --with-sysquotas --with-ratios --with-welcomemsg --with-peruserlimits --with-lanaguage=simplified-chinese 

Q1:
我是用源碼安裝Mysql的,在configure過程中出現configure: error: libmysqlclient is needed for MySQL support的錯誤,我把 --with-mysql  改成  --with-mysql  =/usr/local/mysql/lib/mysql也不行。
後來我做了幾個鏈接到/usr/lib下:
 

  1. cd /usr/lib  
  2. ln -s /usr/local/mysql/include/mysql/mysql.h .  
  3. ln -s /usr/local/mysql/lib/mysql/* . 


再把--with-mysql 改成 --with-mysql=/usr/local/mysql/
Q2:
configure: error: Your MySQL client libraries aren't properly installed
編譯安裝pure-ftpd出現configure: error: Your MySQL client libraries aren't properly installed錯誤
解決方法:執行

  1. cp -rp /usr/local/mysql/lib/mysql/*.* /usr/lib/ 

安裝配置

 

  1. make && make install  
  2. cp configuration-file/pure-config.pl /usr/local/pureftpd/sbin/  
  3. chmod 755 /usr/local/pureftpd/sbin/pure-config.pl  
  4. mkdir -p /usr/local/pureftpd/etc/  
  5. cp configuration-file/pure-ftpd.conf /usr/local/pureftpd/etc/  
  6. cp contrib/redhat.init /etc/init.d/pureftpd 

3、修改啓動配置文件
 

  1. vi /etc/init.d/pureftpd 

修改18/19行
        fullpath=/usr/local/sbin/$prog
        pureftpwho=/usr/local/sbin/pure-ftpwho
  爲:
        fullpath=/usr/local/pureftpd/sbin/$prog
        pureftpwho=/usr/local/pureftpd/sbin/pure-ftpwho

修改24行
        $fullpath /etc/pure-ftpd.conf --daemonize
   爲   $fullpath /usr/local/pureftpd/etc/pure-ftpd.conf --daemonize
或者用下面命令更改
 

  1. sed -i '18c\fullpath=/usr/local/pureftpd/sbin/$prog' /etc/init.d/pureftpd  
  2. sed -i '19c\pureftpwho=/usr/local/pureftpd/sbin/pure-ftpwho' /etc/init.d/pureftpd  
  3. sed -i '24c\$fullpath /usr/local/pureftpd/etc/pure-ftpd.conf --daemonize' /etc/init.d/pureftpd 

  1. chmod 755 /etc/init.d/pureftpd  
  2. chkconfig --add pureftpd  
  3. chkconfig pureftpd on 

4、修改配置文件
 

  1. vi /usr/local/pureftpd/etc/pure-ftpd.conf 

其中可以修改最大連接數、空閒時間等,詳細介紹見http://everspring.blog.51cto.com/497193/104618
其中有幾項要修改:
chrootEveryone               yes            限定在自己的家目錄
NoAnonymous                 yes            不允許匿名登錄
CreateHomeDir                yes            允許用戶登錄後自動創建家目錄   <必須>
PureDB                          /usr/local/pureftpd/etc/pureftpd.pdb  如果沒使用mysql存儲用戶的話,該文件必須,否則無法登錄

5、防火牆相關配置
如果啓用了iptables,還必須修改下面這一行:
PassivePortRange          30000 50000保存退出。

iptables開啓相關端口:

 

  1. iptables -I INPUT -p tcp --dport 21 -j ACCEPT  
  2. iptables -I INPUT -p tcp --dport 30000:50000 -j ACCEPT  
  3. /etc/rc.d/init.d/iptables save 


6、配置虛擬用戶登錄環境
 

  1. mkdir /data/ftproot  
  2. chmod -R 777 /data/ftproot 


這不不做可以能會引起登錄時報421錯誤>

  1. useradd virtualftp -d /data/ftproot -s /sbin/nologin   


<創建接下來的虛擬用戶對應的系統用戶>

 

  1. chown virtualftp:virtualftp /data/ftproot 

7、設置環境變量
 

  1. echo PATH=$PATH:/usr/local/pureftpd/bin/ >>/etc/profile  
  2. source /etc/profile 

8、常用操作用戶命令(大寫英文爲用戶自定義數值)
pure-pw useradd USER -u VirtualUSER -g VirtualGROUP -d HOMEDIRECTORY  添加一虛擬用戶
pure-pw show USER                                     看用戶的詳細信息
pure-pw list                                                    查看用戶列表的
pure-pw passwd USER  -m                            修改用戶的密碼
pure-pw mkdb /usr/local/pureftpd/etc/pureftpd.pdb     創建虛擬用戶數據庫。
pure-pw usermod                                       修改用戶

新建用戶舉例
 

  1. pure-pw useradd tony -u virtualftp -g virtualftp -d /data/ftproot/tony  
  2. pure-pw mkdb /usr/local/pureftpd/etc/pureftpd.pdb    


文件的存放位置以pure-ftpd.conf中的PureDB配置爲準
每次添加用戶都要執行上述操作

如果將用戶建立在web目錄下,必須先建立目錄,並將目錄的屬主修改爲VUSER纔可生效
如:
 

  1. mkdir /data/www/tony  
  2. chown -R virtualftp\: /data/www/tony  
  3. pure-pw useradd tony -u virtualftp -g virtualftp -d /data/www/tony  
  4. pure-pw mkdb /usr/local/pureftpd/etc/pureftpd.pdb 

9、啓動pureftpd
 

  1. service pureftpd start   


或者
 

  1. /usr/local/pureftpd/sbin/pure-config.pl /usr/local/pureftpd/etc/pure-ftpd.conf 


出現
Running: /usr/local/pureftpd/sbin/pure-ftpd -A -c50 -B -C8 -D -E -fftp -H -I5 -L10000:8 -m4 -s -U133:022 -u100 -j -k99 -Z
表示正常
開機啓動
 

  1. chkconfig pureftpd on 


檢查端口監聽狀態
 

  1. netstat -anltp | grep 21 


tcp        0      0 0.0.0.0:21                  0.0.0.0:*                   LISTEN      13418/pure-ftpd (SE
tcp        0      0 :::21                       :::*                        LISTEN      13418/pure-ftpd (SE

10、分離pureftpd.log

轉自:http://os.51cto.com/art/201103/246830.htm

默認pureftpd的log在/var/log/messages

Pureftpd是一款快速,高質量,功能齊全的ftp服務器,最重要的是可以支持設置客戶端默認編碼,本文詳細介紹下:Pure-ftpd日誌記錄設置過程。

剛幫一個用戶查看ftp操作日誌,發現沒有記錄,就幫他設置了下,他用的是pure-ftpd,保存下方法:

1)建立文件/var/log/pureftpd.log

2)修改/etc/syslog.conf

1>在這行的cron.none後面添加 ;ftp.none 使ftp的日誌信息成私有

*.info;mail.none;authpriv.none;cron.none /var/log/messages

*.info;mail.none;authpriv.none;cron.none;ftp.none /var/log/messages

2>在/etc/syslog.conf文件最後加上

#pureftp日誌

ftp.* -/var/log/pureftpd.log

注意: 不要去掉/var前面的-號,否則日誌會在/var/log/messages與/var/log/pureftpd.log裏各記錄一份. 添加了-號,就只會記錄在/var/log/pureftpd.log內

3)使/etc/syslog.conf生效

[root@www log]# killall -HUP syslogd

到現在設置完畢,重啓下pure-ftpd,現在在客戶端登陸ftp試下

通過文章的介紹和描述,是不是覺得其實Pure-ftpd日誌記錄設置很簡單,快動手試試吧!


二、虛擬用戶使用篇

1、用pureDB認證

<1>修改配置文件:
 

  1. vi /usr/local/pureftpd/etc/pure-ftpd.conf 


修改126行爲:

PureDB                        /usr/local/pureftpd/etc/pureftpd.pdb

<2>添加用戶:
 

  1. pure-pw useradd user1 -u virtualftp -g virtualftp -d /ftproot/user1 -m  

說明:
user1是用戶名,-u virtualftp是其實際的linux用戶,-d指定起始目錄,並鎖定於該目錄。如果不鎖定,則用-D;如果需要不同的權限,可以建立新的linux用戶與組

如果用的系統自帶的ftp用戶,這樣的話還需修改配置文件pure-ftpd.conf中的MinUID爲ftp用戶的UID 14,否則登錄時會出現530錯誤;所以這裏建議創建另一個非系統自帶的用戶做映射

<3>建立用戶數據庫:
 

  1. pure-pw mkdb /usr/local/pureftpd/etc/pureftpd.pdb 


說明:今後每添加或修改用戶數據庫都應該執行一次mkdb

<4>虛擬用戶的信息以每個用戶一行的方式存放在相應的文件中,其格式如下所示:

<account>:<password>:<uid>:<gid>:<gecos>:<home directory>:<upload bandwidth>:<download bandwidth>:<upload ratio>:<download ratio>:<max number of connections>:<files quota>:<size quota>:<authorized local IPs>:<refused local IPs>:<authorized client IPs>:<refused client IPs>:<time restrictions>
其中,除了帳號、口令、   uid   、   gid   和   home   目錄之外,其它的可以是空值

<5>pure-pw 創建用戶的語法規範如下:
pure-pw useradd <login> [-f <passwd file>] -u <uid> [-g <gid>]

      -D/-d <home directory> [-c <gecos>]

      [-t <download bandwidth>] [-T <upload bandwidth>]

      [-n <max number of files>] [-N <max Mbytes>]

      [-q <upload ratio>] [-Q <download ratio>]

      [-r <allow client host>[/<mask>][,<allow client host>[/<mask>]]...]

      [-R <deny client host>[/<mask>][,<deny client host>[/<mask>]]...]

      [-i <allow local host>[/<mask>][,<allow client host>[/<mask>]]...]

      [-I <deny local host>[/<mask>][,<deny local host>[/<mask>]]...]

      [-y <max number of concurrent sessions>]

      [-z <hhmm>-<hhmm>] [-m]
如果pure-ftpd啓動時加入   -j(--createhome)   選項,則不需要創建/ftproot/tony目錄。系統會在該用戶第一次登陸時自動創建

<6>更改用戶的語法
pure-pw usermod <user> -n '' :禁用文件配額

pure-pw usermod <user> -N '' :禁用文件大小配額

pure-pw usermod <user> -q '' -Q '' :禁用 ratio

pure-pw usermod <user> -t '' :禁用下載帶寬限制

pure-pw usermod <user> -T '' :禁用上傳帶寬限制

pure-pw usermod <user> <-i,-I,-r or -R> '' :禁用 IP 過濾

pure-pw usermod <user> -z '' :禁用時間段約束

pure-pw usermod <user> -y '' :禁用併發數限制


<7>刪除一個用戶
pure-pw userdel <login> [-f <passwd file>] [-m]
這時,用戶的信息會被從指定的 passwd 文件中刪除,但是用戶的 home 目錄會被保留,需要手工刪除

<8>更改一個用戶口令
pure-pw passwd <login> [-f <passwd file>] [-m]

<9>顯示用戶信息
/etc/pureftpd.passwd   文件中記錄的信息不方便用戶的閱讀,因此   pure-ftpd   提供了顯示用戶信息的命令。其語法是:
pure-pw show <login> [-f <passwd file>]

<10> 使得pure-ftpd支持虛擬用戶,需要在編譯的時候加入選項--with-puredb 。這時,可以通過在啓動服務是的   ’-l’   參數來設置。如:

  1. /usr/local/pureftpd/sbin/pure-ftpd -j -lpuredb:/usr/local/pureftpd/etc/pureftpd.pdb & 


2、用mysql認證

<1>修改配置文件
 

  1. vi /usr/local/pureftpd/etc/pure-ftpd.conf 


修改116行爲:
MySQLConfigFile               /usr/local/pureftpd/etc/pureftpd-mysql.conf

<2>下載web管理程序pureadmin0.3
 

  1. cd /usr/local/src/tarbag  
  2. wget http://www.yiyou.org/docs/PureAdmin_03_php/PureAdmin-0.3.tar.gz 

以下操作針對此web管理程序

<3>配置web程序
 

  1. tar zxvf PureAdmin-0.3.tar.gz -C /usr/local/src/software  
  2. cd /usr/local/src/software  
  3. mv PureAdmin-0.3/ pureadmin  
  4. cd pureadmin 


       
<4>導入數據到mysql
 

  1. cd /usr/local/src/tarbag  
  2. wget http://www.yiyou.org/docs/PureAdmin_03_php/pureftp.sql  
  3. less pureftp.sql 

注意其中的
     22 -- Login = ftp             此爲登錄數據庫的用戶
     23 -- Password = tmppasswd    此爲登錄數據庫的密碼

     31 CREATE DATABASE ftpusers;  創建名爲ftpusers的庫

     50 INSERT INTO admin VALUES ('admin',MD5('passwd'));  此爲登錄web用的用戶密碼,可自行修改

<導入數據,導入前可能需要修改此sql文件的15行:前2個減號空一格>
 

  1. mysql -u root -p < pureftp.sql 

<5>查看mysql
添加連接mysql用戶
先用root登錄mysql,執行
mysql>grant all privileges on ftpusers.* to ftp@localhost identified by 'tmppasswd';
mysql>flush privileges;
mysql>quit;

  1. mysql -u ftp -p  

Enter password:tmppasswd

mysql>use ftpusers;
mysql>show tables;
+--------------------+
| Tables_in_ftpusers |
+--------------------+
| admin              |
| users              |
+--------------------+
2 rows in set (0.01 sec)

mysql> select * from admin;
+----------+----------------------------------+
| Username | Password                         |
+----------+----------------------------------+
| admin    | 76a2173be6393254e72ffa4d6df1030a |
+----------+----------------------------------+
1 row in set (0.11 sec)

mysql>quit

<6>修改pureadmin的配置文件
 

  1. cd /usr/local/src/software/pureadmin  
  2. vi config.php 

如下(細節配置可根據個人需求來修改):
 

  1. <?php  
  2. $cfg['dbhost']='localhost'//mysql host  
  3. $cfg['dbname']='ftpusers';  //mysql db name                            所用的庫<與前面導入的sql中要一致>  
  4. $cfg['dbuser']='ftp';           //mysql user                           登錄mysql的帳號  
  5. $cfg['dbpasswd']='tmppasswd';           //mysql password               登錄mysql的密碼  
  6.  
  7. //ftp config  
  8. $cfg['page']=10;                                                       每頁顯示的用戶數量  
  9. //ftp passwd type : TEXT/CRYPT/MD5  
  10. $cfg['passwdtype']='MD5';                                              認證模式<要與pureftpd-mysql.conf中一致>  
  11. //ftp default  
  12. $cfg['uid']=500;  //uid                                                映射虛擬用戶的UID,即剛創建的virtualftp用戶  
  13. $cfg['gid']=500;        //gid                                          同上  
  14. $cfg['dir']='/ftproot/'//dir                                          默認家目錄  
  15. $cfg['qf']=0;   //quotafiles                                           文件個數限制,0爲不限制  
  16. $cfg['qs']=100; //quotasize                                            總文件大小  
  17. $cfg['ul']=0;   //ULBandwidth                                          上傳速率限制  
  18. $cfg['dl']=200; //DLBandwidth                                          下載速率限制  
  19. $cfg['ur']=0;   //ULRatio                                              上傳比  
  20. $cfg['dr']=0;   //DLRatio                                              下載比  
  21. $cfg['status']=1; //status                                             狀態,1爲激活;0爲禁止  
  22. $cfg['ip']= '*';        //ipaddress                                    可訪問IP,*爲所有  
  23. ?>  

將pureadmin放入web目錄下

 

  1. cp -rp /usr/local/src/software/pureadmin /data/www/ 


<7>下載pureftpd-mysql.conf文件
 

  1. cd /usr/local/pureftpd/etc/  
  2. wget http://www.yiyou.org/docs/PureAdmin_03_php/pureftpd-mysql.conf  
  3. vi pureftpd-mysql.conf 


修改如下:
MYSQLUser      ftp
MYSQLPassword   tmppasswd
MYSQLDatabase   ftpusers
MYSQLCrypt      md5
注意:如果是源碼編譯的mysql,一般socket文件存放在/tmp/mysql.sock,否則可以新建用戶,但是無法登錄
MYSQLSocket    /tmp/mysql.sock

<8>現在可以登錄使用了
http://localhost/pureadmin
登錄:用戶admin ; 密碼passwd

創建的虛擬用戶家目錄,會在虛擬用戶第一次登錄時自動創建
如創建了一個user1用戶

  1. ll /data/ftproot/ 

   沒有任何文件
total 0

  1. ftp localhost  

Connected to localhost.localdomain.
220---------- Welcome to Pure-FTPd [privsep] ----------
220-You are user number 1 of 50 allowed.
220-Local time is now 16:16. Server port: 21.
220-This is a private system - No anonymous login
220-IPv6 connections are also welcome on this server.
220 You will be disconnected after 5 minutes of inactivity.
500 This security scheme is not implemented
500 This security scheme is not implemented
KERBEROS_V4 rejected as an authentication type
Name (localhost:root): user1
331 User user1 OK. Password required
Password:
230-Your bandwidth usage is restricted
230-OK. Current restricted directory is /
230 0 Kbytes used (0%) - authorized: 102400 Kb
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

  1. ll /data/ftproot/  

    自動創建了目錄user1
total 4
drwxr-xr-x 2 virtualftp virtualftp 4096 Apr  1 16:16 user1

實現了web創建、管理虛擬用戶

 三、常見錯誤

轉自:http://tj18.blog.163.com/blog/static/1290574102011225490875/

1.pureftpd 530 Sorry, but I can't trust you  

我在配置pureftpd時,用匿名登錄時沒問題,用虛擬用戶登錄就會報530 Sorry, but I can't trust you錯誤,我用pure-pw mkdb 正常生成了用戶數據庫,也在配置文件pure-ftpd.conf
中加了:

PureDB      /usr/local/pure-ftpd/etc/pureftpd.pdb

啓動完全正常,可是無法登錄。

最後在pure-ftpd.conf中找到了MinUID    100 

我用#cat /etc/passwd | grep ftp 查看了用戶的uid爲14,想必是這個值的問題?ftp是我給pureftpd設置的操作用戶,於是我把MinUID的值改成10,重啓後登錄成功。

注:後續碰到問題繼續發佈!!!

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