Pure-FTPd实现基于虚拟帐号访问的FTP服务器

Pure-FTPd是一个免费的(BSD),安全的,符合标准的FTP服务器。它可以基于web页面进行管理,管理起来非常方便和高效;同时,它支持虚拟用户进行访问,大大提高了它的安全性。它提供了共同的需求,简单的答案,再加上独特的有用的功能,为个人用户和主机提供商。

Pure-FTPd可以支持多种操作系统(Linux,OpenBSD,NetBSD,DragonflyBSDFreeBSD,Solaris,Tru64,Darwin,Irix,HPUX,AIXandiPhone.),支持多种国家语言。

实现的环境:RedHatEnterpriseLinux5.4

使用到的相关软件包:

httpd-2.4.4.tar.bz2(源代码)

apr-1.4.6.tar.gz(源代码)支持httpd的可移植运行库

apr-util-1.5.1.tar.gz(源代码)可移植运行库的工具

mysql-5.6.10.tar.gz(源代码)

php-5.4.13.tar.bz2(源代码)

cmake-2.8.10.2.tar.gz(源代码)实现mysql的配置

pure-ftpd-1.0.36.tar.gz(源代码)pure-ftpd源码包

PureAdmin-0.3.tar.gzftp服务器基于web的后台管理程序

ZendOptimizer-3.3.3-linux-hicode.tar.gzphp加速器

pureftp.sql建库建表语句

pureftpd-mysql.confpureftp与mysql的连接接口文件

以上这些东西都是来自互联网,都可以在互联网上找到。


具体实现:

一.搭建LAMP环境

1.httpd的安装,再安装httpd之前一定要有apr的可移植运行库和可移植性运行库工具的支持。

apr的安装:

[root@server~]#tar-zxvfapr-1.4.6.tar.gz-C/usr/local/src/

[root@server~]#cd/usr/local/src/apr-1.4.6/

[[email protected]]#./configure--prefix=/usr/local/apr

[[email protected]]#make&&makeinstall

[[email protected]]#cd/usr/local/apr/

[root@serverapr]#ln-s/usr/local/apr/include/usr/include/apr

[root@serverapr]#cd/etc/ld.so.conf.d/

[[email protected]]#vimapr.confapr的内容如下图:

143815274.png

然后使用ldconfig刷新缓存,在使用ldconfig-pv|grepapr查看apr相关的库文件:

143833679.png

apr-util的安装:

[root@server~]#tar-zxvfapr-util-1.5.1.tar.gz-C/usr/local/src/

[root@server~]#cd/usr/local/src/apr-util-1.5.1/

[[email protected]]#./configure--prefix=/usr/local/apr-util--with-apr=/usr/local/apr/bin/apr-1-config

[[email protected]]#make&&makeinstall

[[email protected]]#cd/usr/local/apr-util/

[root@serverapr-util]#ln-s/usr/local/apr-util/include/usr/include/apr-util

[root@serverapr-util]#cd/etc/ld.so.conf.d/

[[email protected]]#vimapr-util.confapr-util的内容如下图:

143852283.png

同样使用ldconfig刷新缓存

143911351.png

httpd的安装:

说明:由于在对httpd进行相应的配置时,还依赖于pcre的库,所以要挂载光盘安装pcre-devel。

[root@server~]#mkdir/mnt/cdrom

[root@server~]#mount/dev/cdrom/mnt/cdrom/

[root@server~]#cd/mnt/cdrom/Server/

[root@serverServer]#rpm-ivhpcre-devel-6.6-2.el5_1.7.i386.rpm

[root@server~]#tar-jxvfhttpd-2.4.4.tar.bz2-C/usr/local/src/

[root@server~]#cd/usr/local/src/httpd-2.4.4/

[[email protected]]#./configure\

>--prefix=/usr/local/apache\

>--sysconfdir=/etc/httpd\

>--enable-mods-shared=most\

>--enable-so\

>--enable-ssl\

>--enable-mpms-shared=all\

>--enable-rewrite\

>--with-apr=/usr/local/apr/bin/apr-1-config\

>--with-apr-util=/usr/local/apr-util/bin/apu-1-config\

>--with-zlib\

>--with-pcre

[[email protected]]#make&&makeinstall

[[email protected]]#cd/usr/local/apache/

[root@serverapache]#ln-s/usr/local/apache/include/usr/include/apache

[root@serverapache]#vim/etc/profile对环境文件作如下修改:

143943263.png

[root@serverapache]#./etc/profile重新读取环境文件

[root@serverapache]#echo$PATH

/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/apache/bin

[root@serverapache]#vim/etc/man.config作如下修改:

144011385.png

说明:由于源码安装没服务的控制脚本,通常需要我们自己写,而服务器的控制脚本所在的目录:/etc/init.d/通常与程序的名字相同。

[root@localhost~]#cd/etc/init.d/

[[email protected]]#vimhttpdhttpd的内容如下:


#/bin/bash

#chkconfig:23458878服务设置在各级别启动与关闭状态

#description:httpdserverdaemon实现chkconfig自动管理必不可少

lockfile=/var/lock/subsys/httpd

prog=/usr/local/apache/bin/httpd

configfile=/etc/httpd/httpd.conf

./etc/init.d/functions

start(){

[-f$lockfile]&&echo"httpdisstarted"&&exit

echo-n"httpdisstarting..."

sleep1

$prog-f$configfile&&echo"ok"&&touch$lockfile||echo"failed"

}

stop(){

[!-f$lockfle]&&echo"httpdisstoped"&&exit

echo-n"httpdisstopping"

sleep1

killprochttpd&&echo"ok"&&rm-rf$lockfile||echo"failed"

}

case"$1"in

start)

start

;;

stop)

stop

;;

restart)

stop

start

;;

*)

echo"USAGE:start|stop|restart"

esac

[[email protected]]#chmoda+xhttpd

修改/etc/httpd/httpd.conf的配置文件,使得其支持基于php开发的pure-ftpd的web管理页面,需做如下修改:

144114417.png

启动httpd服务,并且加入chkconfig实现服务开机自动启动:

144230776.png

2.mysql数据库的安装,由于mysql的源码拆解目录下没有configure的配置工具,我们要对mysql进行相应的配置必须使用cmake工具进行mysql的配置。

cmake工具的安装:

[root@server~]#tar-zxvfcmake-2.8.10.2.tar.gz-C/usr/local/src/

[root@server~]#cd/usr/local/src/cmake-2.8.10.2/

[[email protected]]#./configure--prefix=/usr/local/cmake

[[email protected]]#make&&makeinstall

然后对cmake安装目录下的bin目录和man目录做如同httpd相同的操作,这里就不再写出了。

mysql的安装:

[root@server~]#groupaddmysql

[root@server~]#useradd-r-gmysqlmysql-s/sbin/nologin-M

说明:在linux下任何一种服务要运行,都需要相应的运行者身份,这里我们需要建立运行mysql服务的运行者mysql和该用户所属组mysql。

[root@server~]#tar-zxvfmysql-5.6.10.tar.gz-C/usr/local/src/

[root@server~]#cd/usr/local/src/

[root@serversrc]#ln-s/usr/local/src/mysql-5.6.10/usr/local/src/mysql

[root@serversrc]#cdmysql

[root@servermysql]#cmake.执行cmake产生Makefile文件

[root@servermysql]#make&&makeinstall

说明:mysql安装完成后会在/usr/local/下产生名为mysql的安装目录。接下来同样对mysql安装目录下的bin目录、lib目录、man目录和include目录都需要做同httpd相应的操作,这里不再写了。

进入mysql的安装目录,产生mysql的初始化数据库:

[root@servermysql]#chown-Rmysql:mysql.

[root@servermysql]#scripts/mysql_install_db--user=mysql

[root@servermysql]#chown-Rroot.

[root@servermysql]#chown-Rmysqldata

现在产生mysql的配置文件和控制脚本:

[root@servermysql]#cpsupport-files/my-default.cnf/etc/my.cnf

[root@servermysql]#cpsupport-files/mysql.server/etc/init.d/mysqld

[root@servermysql]#chmoda+x/etc/init.d/mysqld

启动mysql的服务,并且使用chkconfig进行管理:

[root@servermysql]#servicemysqldstart

[root@servermysql]#chkconfig--addmysqld

[root@servermysql]#chkconfigmysqldon

144319552.png

现在对mysql进行相应的操作,修改mysql的用户密码

[root@servermysql]#mysqladmin-uroot-ppassword'123'

mysql>INSERTINTOmysql.user(Host,User,Password,Select_priv,Insert_priv,Update_priv,Delete_priv,Create_priv,Drop_priv,Reload_priv,Shutdown_priv,Process_priv,File_priv,Grant_priv,References_priv,Index_priv,Alter_priv,ssl_cipher,x509_issuer,x509_subject)VALUES('localhost','ftp',PASSWORD('passwd'),'Y','Y','Y','Y','N','N','N','N','N','N','N','N','N','N','NULL','NULL','NULL');

mysql>FLUSHPRIVILEGES;

mysql>CREATEDATABASEftpusers;

mysql>USEftpusers;

mysql>CREATETABLEadmin(

Usernamevarchar(35)NOTNULLdefault'',

Passwordchar(32)binaryNOTNULLdefault'',

PRIMARYKEY(Username)

)

mysql>INSERTINTOadminVALUES('admin',MD5('passwd'));

mysql>CREATETABLE`users`(

`User`varchar(16)NOTNULLdefault'',

`Password`varchar(32)binaryNOTNULLdefault'',

`Uid`int(11)NOTNULLdefault'14',

`Gid`int(11)NOTNULLdefault'5',

`Dir`varchar(128)NOTNULLdefault'',

`QuotaFiles`int(10)NOTNULLdefault'500',

`QuotaSize`int(10)NOTNULLdefault'30',

`ULBandwidth`int(10)NOTNULLdefault'80',

`DLBandwidth`int(10)NOTNULLdefault'80',

`Ipaddress`varchar(15)NOTNULLdefault'*',

`Comment`tinytext,

`Status`enum('0','1')NOTNULLdefault'1',

`ULRatio`smallint(5)NOTNULLdefault'1',

`DLRatio`smallint(5)NOTNULLdefault'1',

PRIMARYKEY(`User`),

UNIQUEKEY`User`(`User`)

)

mysql>grantallprivilegesonftpusers.*toftp@localhostidentifiedby'tmppasswd';将对数据库ftpusers的所有权限授予ftp用户

mysql>flushprivileges;刷新权限值

mysql>\quit

重新使用ftp用户登录mysql数据库:

144357651.png

3.php的安装

[root@server~]#tar-jxvfphp-5.4.13.tar.bz2-C/usr/local/src/

[root@server~]#cd/usr/local/src/php-5.4.13/

[[email protected]]#./configure\

>--prefix=/usr/local/php\

>--sysconfdir=/etc/php\

>--with-apxs2=/usr/local/apache/bin/apxs\

>--with-gd\

>--with-jpeg-dir\

>--with-png-dir\

>--with-zlib-dir\

>--enable-mbstring\

>--with-mysql=/usr/local/mysql\

>--with-mysqli=/usr/local/mysql/bin/mysql_config\

[[email protected]]#make&&makeinstall

进入php的安装目录,对该目录下的bin目录做httpd同样的操组,此处省略操作步骤。

二.安装pure-ftpd

1.安装pure-ftpd的主程序:

[root@server~]#tar-zxvfpure-ftpd-1.0.36.tar.gz-C/usr/local/src/

[root@server~]#cd/usr/local/src/pure-ftpd-1.0.36/

[[email protected]]#./configure\

>--prefix=/usr/local/pureftpd\

>--with-mysql\

>--with-shadow\

>--with-pam\

>--with-welcomemsg\

>--with-uploadscript\

>--with-cookie\

>--with-virtualchroot\

>--with-virtualhosts\

>--with-diraliases\

>--with-quotas\

>--with-puredb\

>--with-sysquotas\

>--with-ratios\

>--with-ftpwho\

>--with-throttling\

>--with-language=simplified-chinese

[[email protected]]#make&&makeinstall

对安装目录下的bin目录和sbin目录做如同httpd同样的操作。


说明:生成pure-ftpd的服务脚本和配置文件,由于在配置pure-ftpd进行配置时没有指定其配置文件的存放路径,默认在其安装的目录下的/etc。

[root@server~]#cd/usr/local/pureftpd/

[root@serverpureftpd]#mkdiretc

[root@serverpureftpd]#cd/usr/local/src/pure-ftpd-1.0.36/configuration-file/

[root@serverconfiguration-file]#chmoda+xpure-config.pl

[root@serverconfiguration-file]#cppure-config.pl/usr/local/pureftpd/sbin/

[root@serverconfiguration-file]#cppure-ftpd.conf/usr/local/pureftpd/etc/

[root@serverconfiguration-file]#cd../contrib/

[root@servercontrib]#chmoda+xredhat.init

[root@servercontrib]#cpredhat.init/etc/init.d/pureftpd

修改pure-ftpd的控制脚本文件,对以下三行进行修改:

18fullpath=/usr/local/pureftpd/sbin/$prog

19pureftpwho=/usr/local/pureftpd/sbin/pure-ftpwho

24$fullpath/usr/local/pureftpd/etc/pure-ftpd.conf�Cdaemonize

修改pure-ftpd的配置文件,内容如下:

20ChrootEveryoneyes#固定家目录

40MaxClientsNumber100#最大连接数

52MaxClientsPerIP2#每个ip地址最大连接数

71AnonymousOnlyno#允许匿名用户外的用户登录

77NoAnonymousno#允许匿名用户登录

116MySQLConfigFile/user/local/pureftpd/etc/pureftpd-mysql.conf

#指明pure-ftpd与mysql数据库的接口文件位置

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

#采用pureDB进行ftp用户身份验证

214Bind127.0.0.1,21#绑定地址

215Bind192.168.2.100,21

337CreateHomeDiryes#虚拟用户登录后自动创建家目录

对pureftpd-mysql.conf的接口文件进行相应的操作:

[root@server~]#mvpureftpd-mysql.conf/usr/local/pureftpd/etc/

修改接口文件的内容:

12MYSQLServer127.0.0.1

17MYSQLPort3306

22MYSQLSocket/tmp/mysql.sock

27MYSQLUserftp

32MYSQLPasswordtmppasswd

37MYSQLDatabaseftpusers

45MYSQLCryptmd5

启动pure-ftpd服务,并加入chkconfig进行管理:

144743900.png

虚拟用户实现基于pureDB进行验证,因为虚拟用户想要访问ftp服务,在什么验证成功后,会映射成本地账户进行访问。

[root@serveretc]#mkdir/ftproot

[root@serveretc]#chmod777/ftproot/

[root@serveretc]#useraddvirtualftp-d/ftproot/-s/sbin/nologin-M

[root@serveretc]#chown-Rvirtualftp:virtualftp/ftproot/

[root@serveretc]#pure-pwuseradduser1-uvirtualftp-gvirtualftp-d/ftproot/user1�Cm#虚拟账户映射成本地账户virtualftp

[root@serveretc]#pure-pwmkdb/usr/local/pureftpd/pureftpd.pdb#建立用户数据库

2.安装和配置pure-ftp的web管理界面:

[root@server~]#tar-zxvfPureAdmin-0.3.tar.gz-C/usr/local/apache/htdocs/

[root@server~]#cd/usr/local/apache/htdocs/

[root@serverhtdocs]#mvPureAdmin-0.3pureadmin

切换到pureadmin目录,修改config.php配置文件,内容如下:

145056946.png

最后为了能够使用匿名用户能够访问ftp服务器,必须创建/var/ftp目录,因为匿名用户的默认家目录就是该目录,而且该目录开始并不存在需要我们手动创建。

[root@serverpureadmin]#mkdir/var/ftp

至此,整个环境搭建的工作已经完成,下面可以进行相关的测试了。

三.测试FTP服务器

使用浏览器访问http://192.168.2.100/pureadmin,后台管理员是admin密码是passwd,可以基于web进行ftp服务的管理。

145202971.png

我们创建了一个虚拟用户user1:

145241521.png


145249368.png


由于每个用户在登录FTP服务器都会进入到自己的家目录,而我们虚拟用户在创建时并没有形成家目录,只有当使用该用户进行登录时才会在本地的/ftproot/目录下形成自己的家目录。现在我们比较一下user1访问FTP服务器的前后,到底会不会在/ftproot/目录下自动创建家目录:

145401291.png

至此,pure-ftpd的整个搭建和配置已经完成,具体对用户的各种限制需要大家自己摸索。

你可能感兴趣的:(Web,服务器,ftpd,虚拟账号)