发新话题
打印

pureftpd安装及使用说明

pureftpd安装及使用说明

环境:
RedHat  RHEL3U6
说明:
如果不做说明,一般安装命令均使用ROOT权限,用 # 表示;一般命令用$表示。

特别说明:无  

以下文章介绍Liunx 环境下 Pureftpd安装及使用情况

一、前言
Pureftpd是一款在多种类Unix上使用并符合GPL协议的原代码开放的软件,顾名思义,它就是一款纯粹的Ftp程序,目前的版本是1.0.21,文档版本号已经开发到1.0.22,这证明作者正在努力开发新版本,我们一起期待吧。
二、Puerftpd安装步骤
1、获取并安装Pureftpd版本
大家可以到 http://download.pureftpd.org/pub/pure-ftpd/releases/下载pureftpd的原代码,下载后进行安装,如下:
# cd /home/xuchen
# wget http://download.pureftpd.org/pub ... -ftpd-1.0.21.tar.gz .
# tar xzvf pure-ftpd-1.0.21.tar.gz
# cd pure-ftpd-1.0.21
# ./configure --prefix=/usr/local/pureftpd  --with-everything  --with-rfc2640\
--with-mysql=/usr/local/mysql --with-language=simplified-chinese;make;make check;make install

--prefix是安装的目标目录
--with-eyerything是安装所有功能,因为是测试。
--with-rfc2640,此参数UTF-8,gb2312等异构系统的语言集转换
注意:如果是用Tar包安装的mysql,可能在编译时会遇到
configure: error: Your MySQL client libraries aren't properly installed
问题,解决的办法是
把/usr/local/mysql/lib/mysql/下的文件全部copy到/usr/lib中

# mkdir /usr/local/pureftpd/etc 安装系统时没建立这个文件夹??
# cd configuration-file
# chmod u+x pure-config.pl
# cp pure-config.pl /usr/local/pureftpd/bin
# cp pure-ftpd.conf /usr/local/pureftpd/etc
# cd ..
# cp pureftpd* /usr/local/pureftpd/etc/
到这里,所有安装已完成,就该测试功能了,我们用修改配置文件的方法来完成功能测试。

2、配置Pureftpd
启动pureftpd的方法是
# /usr/local/pureftpd/bin/pure-config.pl /usr/local/pureftpd/etc/pure-ftpd.conf
这个在每次测试后都要执行,就不一一写上了。
(1) 匿名用户登陆
# vi /usr/local/pureftpd/etc/pure-ftpd.conf  
如果要在默认的配置文件中只支持匿名登录,你只要稍微修改一下就可以了:
ChrootEveryone yes //限制所有用户在其主目录中
AnonymousOnly yes //是否只让匿名登录
NoAnonymous no //不允许匿名连接,仅允许认证用户使用
AnonymousCanCreateDirs yes //允许匿名用户创建新目录
MaxLoad  4  //如果系统被 loaded 超过下面的值,匿名用户会被禁止下载
AnonymousRatio   1 10 //匿名用户的上传/下载的比率
AnonymousBandwidth  8  //匿名用户的最大带宽(KB/s)
AllowAnonymousFXP  yes  //对匿名用户和非匿名用户允许进行匿名 FXP 传输
AnonymousCantUpload  no //不接受匿名用户上传新文件( no = 允许上传)

#(”.”)开头的文件能不能被读/写
按以上设置就可以进行匿名Ftp连接了,但如果出现了“421 无法建立安全匿名FTP”错误,请检查你的系统帐号,有可能你在系统建立时把FTP这个帐户给优化了,如果是这样,那么运行
# useradd ftp -g ftp -d /var/ftp -s /sbin/nologin
如果发现帐户是存在的,那么请检查帐户的主目录是否存在,如果不存在,也会提示上述错误。
经测试,按上述配置文件配置后,重新启动服务器,匿名用户可以上传文件,但无法下载,也无法删除文件。实现了安全的匿名上传ftp功能。
当你下载文件时看到,没有被管理员核准下载,这个是怎么做到的呢?其实很简单,一个参数搞定
AntiWarez   yes //意思是不接受所有者为 "ftp" 的文件的下载,我们把它设置为 “no”会怎么样呢?结果很显然,我们可以下载文件了,但由于AnonymousRatio 参数的存在,我们需要先上传后下载,很有意思,好了,匿名用户登陆就介绍到这里了。

TOP

(2)系统真实用户方法
# vi /usr/local/pureftpd/etc/pure-ftpd.conf  
如果要在默认的配置文件中只支持系统真实用户登录,你只要稍微修改一下就可以了:
ChrootEveryone yes
NoAnonymous  yes
UnixAuthentication yes //用/etc/passwd 中的用户认证
只需以上三行就可以实现系统真实用户登陆Ftp了,系统真实用户会登陆到自己的主系统中,可下载,可上传,可删除,没有任何限制,类似于平常我们用的sftp,就是由于有chroot的限制,所以无法去其他文件夹而已。在实际应用中,这种用法并不多见,我也就不费篇幅介绍了。

TOP

(3) puredb虚拟用户支持
自从 0.99.2 版本开始, pure-ftpd 就开始支持虚拟用户。为了使 pure-ftpd 支持虚拟用户,需要在编译的时候加入选项 --with-puredb,或是和我们测试一样,用--with-everything,当然这个是随各用户使用而定。虚拟用户方式十分类似 /etc/passwd ,将用户的相关信息,如口令、姓名、 uid 、目录等,存入文件。但是该文件只适用于 FTP 。这意味着,可以为 FTP 设置虚拟用户,而不需要在系统中添加系统用户。同时,可以为这些用户单独设置配额、 ratio 、带宽等限制。很多虚拟用户可以共享同一个系统用户的属性,因此建议为这些虚拟用户单独创建一个系统用户,从而方便管理。我们选择新建系统用户(经测试,如果用linux系统自带的Ftp用户,在用虚拟用户登陆时会出现不被信任的提示,大家也可以做做实验,看是不是这样)。建立方法如下:
# groupadd ftpgroup
# useradd -g ftpgroup -d /dev/null -s /sbin/nologin ftpuser
系统帐号建立好后,我们就开始着手准备虚拟用户了。

虚拟用户建立方法
可以使用 ”pure-pw” 来创建虚拟用户。虚拟用户的信息以每个用户一行的方式存放在相应的文件中,除了帐号、口令、 uid 、 gid 和 home 目录之外,其它的可以是空值。
pure-pw useradd的语法规范如下:  
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]  
假设我们要创建 test 这样一个虚拟用户,则可以使用如下命令:  
# pure-pw useradd test -u ftp -d /var/ftp/test
其中, -u 将虚拟用户 test 同系统用户 ftp 关联在一起。 -d 参数使 test 只能访问其 home 目录。而如果想让他访问整个文件系统,可以用 -D 选项。
执行完上述命令后,会提示输入密码,我们输入123456即可。
然后需要更改建立/var/ftp/test目录,并修改它的属性。
注意:在配置文件中有选项自动建立主目录
CreateHomeDir               yes //我们可以设置为yes,但是有一点需要大家注意,就是它只支持二层目录的建立而不支持三层以上目录的建立,举个例子,如果我们创建虚拟用户是用如下语句:
# pure-pw useradd test -u ftp -d /home/ftp 命令,而这时系统只有/home目录而没有/home/ftp目录,那么在test用户第一次登陆时会创建/home/ftp目录,而如果我们改变以上命令如下:
# pure-pw useradd test -u ftp -d /home/ftp/test,而这时系统只有/home目录或/home/ftp目录,而没有/home/ftp/test目录,那么我们登陆时会得到没有主目录的提示。

其他参数含义:
-z 选项运用用户在一天当中指定的时间段连接服务器。如 -z 0900-1800 ,则该用户只能在上午 9 点到晚上 6 点之间连接服务器。  
-r 选项或 -R 选项,可以限制用户从指定 IP 和掩码连入服务器  
-y ,用户同一时间的并发连接数。 ’’ 或者 0 意味着不限制  
-f ,默认虚拟用户的信息会被存放在 ./etc/pureftpd.passwd 文件中,通过该选项可以改变该文件的位置。  
用户的口令会根据系统对加密方式的支持情况,选择一个最安全的方式进行加密。

同 pure-pw adduser 不同的是,使用 pure-pw usermod 不是创建一个用户,而是更改已经存在用户的某些属性。  
重置某些属性的语法如下:  
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 '' :禁用并发数限制

删除一个用户的命令语法是:
pure-pw userdel <login> [-f <passwd file>] [-m]  
这时,用户的信息会被从指定的 passwd 文件中删除,但是用户的 home 目录会被保留,需要手工删除。  

更改一个用户口令的语法是:  
pure-pw passwd <login> [-f <passwd file>] [-m]  

./etc/pureftpd.passwd 文件中记录的信息不方便用户的阅读,因此 pure-ftpd 提供了显示用户信息的命令。其语法是:
pure-pw show <login> [-f <passwd file>]  

可以通过上面提到的命令,或者以手工方式对 ./etc/pureftpd.passwd 文件进行修改,从而创建、修改和删除一个虚拟用户信息。但是,只有提交这些更改时, pure-ftpd 访问才能生效。提交更改,意味着系统会根据./etc/pureftpd.passwd (或者指定的其它文件)来创建一个 pure-ftpd 可读的二进制格式的文件  
./etc/pureftpd.pdb 。这是通过下面的命令完成的:  
pure-pw mkdb
可以通过 ./etc/pureftpd.passwd 文件自动创建 ./etc/pureftpd.pbd 文件。但是,如果需要指定特定的文件,可以通过下面的方式来实现:  
pure-pw mkdb /etc/accounts/myaccounts.pdb -f /etc/accounts/myaccounts.txt
这时,没有必要去重启 pure-ftpd 服务,对虚拟用户进行的更改可以更新。同时,也可以通过 -m 选项,在对 ./etc/pureftpd.passwd 文件进行修改的时候自动进行提交。

可以通过如下命令,将系统用户转换为虚拟用户:
pure-pwconvert
如果以 root 用户运行该命令,系统用户的口令一并被转入虚拟用户配置文件。如:
pure-pwconvert >> ../etc/pureftpd.passwd

环境变量  
默认的情况下,如果指定了环境变量 PURE_PASSWDFILE ,则虚拟用户的 passwd 文件位置由该变量的值指定。否则,默认是 ./etc/pureftpd.passwd 。同样,PURE_DBFILE 环境变量用来指定 pdb 文件的位置。默认是 ./etc/pureftpd.pdb 。

更改配置文件
PureDB   /usr/local/pureftpd/etc/pureftpd.pdb  //Puredb路径
CreateHomeDir  yes  //创建用户主目录

通过以上建立的用户,可上传,可下载,可删除,是高权限用户。可以通过对目录的限制来达到对用户权限的限制。

TOP

4)Pureftp和mysql联合使用
数据库我用的是5.0.20a,不过建议使用4.0的数据库,少了很多编码的麻烦。
# mysql -p //登陆mysql服务器
> CREATE DATABASE pureftpd;
> grant all on pureftpd.* to pureftp@localhost identified by '********';
> use pureftpd
> CREATE TABLE `users` (
  `id` int(32) unsigned NOT NULL auto_increment,
  `User` varchar(16) NOT NULL default '',
  `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 '',
  `QuotaSize` smallint(5) NOT NULL default '0',
  `QuotaFiles` int(11) NOT NULL default '0',
  `ULBandwidth` smallint(5) NOT NULL default '0',
  `DLBandwidth` smallint(5) NOT NULL default '0',
  `ULRatio` smallint(6) NOT NULL default '0',
  `DLRatio` smallint(6) NOT NULL default '0',
  `comment` tinytext NOT NULL,
  `ipaccess` varchar(15) NOT NULL default '*',
  `status` enum('0','1') NOT NULL default '0',
  `create_date` datetime NOT NULL default '0000-00-00 00:00:00',
  `modify_date` datetime NOT NULL default '0000-00-00 00:00:00',
  PRIMARY KEY  (`id`,`User`),
  UNIQUE KEY `User` (`User`)
) TYPE=MyISAM AUTO_INCREMENT=5 ; //建立pureftpd数据库

> INSERT INTO `users` VALUES (1, 'test', encrypt('test'), '2000', '2000', '/var/ftp/test', 0, 0, 0, 0, 0, 0, '', '*', '1', '2006-11-27 10:10:00', '2006-11-27 10:10:00'); //建立ftp用户

这样我们就建立好了pureftpd数据库,下面我们修改/usr/local/pureftpd/etc/pureftpd-mysql.conf 文件.
MYSQLServer     localhost
MYSQLPort       3306
MYSQLSocket     /tmp/mysql.sock
MYSQLUser       pureftp
MYSQLPassword   ******** //这里填你自己的密码
MYSQLDatabase   pureftpd
MYSQLCrypt      crypt //密码加密方式,我们选crypt,还有几种方法,原理都是一样的,大家可以参考。
查找以下字符,并把前面的#号去掉
MySQLGetQTAFS  
MySQLGetQTASZ
MySQLGetBandwidthUL
MySQLGetBandwidthDL
保存退出

# vi /usr/local/pureftpd/etc/pure-ftpd.conf
就改一条
MySQLConfigFile              /usr/local/pureftpd/etc/pureftpd-mysql.conf //设置mysql文件
其他按你要求自己修改。

OK,建立主目录/var/ftp/test,它要有everyone的读写权限才行,所以我用的是chmod 777 /var/ftp/test,启动后进行测试,可上传,可下载,可删除。如果不想删除和上传,可以把权限设置为555,那么就只能下载了。

TOP

发新话题