您的位置:首页 > 编程语言 > PHP开发

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

2013-10-30 00:30 483 查看
本文出自“夜风”博客,请务必保留此出处/article/4449832.html
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/[root@serverapr-1.4.6]#./configure--prefix=/usr/local/apr[root@serverapr-1.4.6]#make&&makeinstall[root@serverapr-1.4.6]#cd/usr/local/apr/[root@serverapr]#ln-s/usr/local/apr/include/usr/include/apr[root@serverapr]#cd/etc/ld.so.conf.d/[root@serverld.so.conf.d]#vimapr.confapr的内容如下图:

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

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/[root@serverapr-util-1.5.1]#./configure--prefix=/usr/local/apr-util--with-apr=/usr/local/apr/bin/apr-1-config[root@serverapr-util-1.5.1]#make&&makeinstall[root@serverapr-util-1.5.1]#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/[root@serverld.so.conf.d]#vimapr-util.confapr-util的内容如下图:

同样使用ldconfig刷新缓存

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/[root@serverhttpd-2.4.4]#./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[root@serverhttpd-2.4.4]#make&&makeinstall[root@serverhttpd-2.4.4]#cd/usr/local/apache/[root@serverapache]#ln-s/usr/local/apache/include/usr/include/apache[root@serverapache]#vim/etc/profile对环境文件作如下修改:

[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作如下修改:

说明:由于源码安装没服务的控制脚本,通常需要我们自己写,而服务器的控制脚本所在的目录:/etc/init.d/通常与程序的名字相同。[root@localhost~]#cd/etc/init.d/[root@localhostinit.d]#vimhttpdhttpd的内容如下:
#/bin/bash#chkconfig:23458878服务设置在各级别启动与关闭状态#description:httpdserverdaemon实现chkconfig自动管理必不可少lockfile=/var/lock/subsys/httpdprog=/usr/local/apache/bin/httpdconfigfile=/etc/httpd/httpd.conf./etc/init.d/functionsstart(){[-f$lockfile]&&echo"httpdisstarted"&&exitecho-n"httpdisstarting..."sleep1$prog-f$configfile&&echo"ok"&&touch$lockfile||echo"failed"}stop(){[!-f$lockfle]&&echo"httpdisstoped"&&exitecho-n"httpdisstopping"sleep1killprochttpd&&echo"ok"&&rm-rf$lockfile||echo"failed"}case"$1"instart)start;;stop)stop;;restart)stopstart;;*)echo"USAGE:start|stop|restart"esac[root@localhostinit.d]#chmoda+xhttpd修改/etc/httpd/httpd.conf的配置文件,使得其支持基于php开发的pure-ftpd的web管理页面,需做如下修改:

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

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/[root@servercmake-2.8.10.2]#./configure--prefix=/usr/local/cmake[root@servercmake-2.8.10.2]#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

现在对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数据库:

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/[root@serverphp-5.4.13]#./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\[root@serverphp-5.4.13]#make&&makeinstall进入php的安装目录,对该目录下的bin目录做httpd同样的操组,此处省略操作步骤。二.安装pure-ftpd1.安装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/[root@serverpure-ftpd-1.0.36]#./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[root@serverpure-ftpd-1.0.36]#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/$prog19pureftpwho=/usr/local/pureftpd/sbin/pure-ftpwho24$fullpath/usr/local/pureftpd/etc/pure-ftpd.conf–daemonize修改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,21337CreateHomeDiryes#虚拟用户登录后自动创建家目录对pureftpd-mysql.conf的接口文件进行相应的操作:[root@server~]#mvpureftpd-mysql.conf/usr/local/pureftpd/etc/修改接口文件的内容:12MYSQLServer127.0.0.117MYSQLPort330622MYSQLSocket/tmp/mysql.sock27MYSQLUserftp32MYSQLPasswordtmppasswd37MYSQLDatabaseftpusers45MYSQLCryptmd5启动pure-ftpd服务,并加入chkconfig进行管理:

虚拟用户实现基于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–m#虚拟账户映射成本地账户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配置文件,内容如下:

最后为了能够使用匿名用户能够访问ftp服务器,必须创建/var/ftp目录,因为匿名用户的默认家目录就是该目录,而且该目录开始并不存在需要我们手动创建。[root@serverpureadmin]#mkdir/var/ftp至此,整个环境搭建的工作已经完成,下面可以进行相关的测试了。三.测试FTP服务器使用浏览器访问http://192.168.2.100/pureadmin,后台管理员是admin密码是passwd,可以基于web进行ftp服务的管理。

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







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

至此,pure-ftpd的整个搭建和配置已经完成,具体对用户的各种限制需要大家自己摸索。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: