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. //ftp config
  7. $cfg['page']=10; 每页显示的用户数量
  8. //ftp passwd type : TEXT/CRYPT/MD5
  9. $cfg['passwdtype']='MD5'; 认证模式<要与pureftpd-mysql.conf中一致>
  10. //ftp default
  11. $cfg['uid']=500; //uid 映射虚拟用户的UID,即刚创建的virtualftp用户
  12. $cfg['gid']=500; //gid 同上
  13. $cfg['dir']='/ftproot/'; //dir 默认家目录
  14. $cfg['qf']=0; //quotafiles 文件个数限制,0为不限制
  15. $cfg['qs']=100; //quotasize 总文件大小
  16. $cfg['ul']=0; //ULBandwidth 上传速率限制
  17. $cfg['dl']=200; //DLBandwidth 下载速率限制
  18. $cfg['ur']=0; //ULRatio 上传比
  19. $cfg['dr']=0; //DLRatio 下载比
  20. $cfg['status']=1; //status 状态,1为激活;0为禁止
  21. $cfg['ip']= '*'; //ipaddress 可访问IP,*为所有
  22. ?>

将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,重启后登录成功。

注:后续碰到问题继续发布!!!

你可能感兴趣的:(sql,mysql,ftp,FreeBSD,pureftp)