Pure-FTPd是一个免费的(BSD),安全的,符合标准的FTP服务器。它可以基于web页面进行管理,管理起来非常方便和高效;同时,它支持虚拟用户进行访问,大大提高了它的安全性。它提供了共同的需求,简单的答案,再加上独特的有用的功能,为个人用户和主机提供商。 Pure-FTPd可以支持多种操作系统(Linux, OpenBSD, NetBSD, DragonflyBSD FreeBSD, Solaris, Tru64,Darwin, Irix,HPUX,AIXand iPhone.),支持多种国家语言。 实现的环境:RedHat Enterprise Linux 5.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.gz ftp服务器基于web的后台管理程序 ZendOptimizer-3.3.3-linux-hicode.tar.gz php加速器 pureftp.sql 建库建表语句 pureftpd-mysql.conf pureftp与mysql的连接接口文件 以上这些东西都是来自互联网,都可以在互联网上找到。
具体实现: 一.搭建LAMP环境 1.httpd的安装,再安装httpd之前一定要有apr的可移植运行库和可移植性运行库工具的支持。 apr的安装: [iyunv@server ~]# tar -zxvf apr-1.4.6.tar.gz -C/usr/local/src/ [iyunv@server ~]# cd /usr/local/src/apr-1.4.6/ [iyunv@server apr-1.4.6]# ./configure --prefix=/usr/local/apr [iyunv@server apr-1.4.6]# make && make install [iyunv@server apr-1.4.6]# cd /usr/local/apr/ [iyunv@server apr]# ln -s /usr/local/apr/include/usr/include/apr [iyunv@server apr]# cd /etc/ld.so.conf.d/ [iyunv@server ld.so.conf.d]# vim apr.conf apr的内容如下图: 然后使用ldconfig刷新缓存,在使用ldconfig -pv |grep apr查看apr相关的库文件: apr-util的安装: [iyunv@server ~]# tar -zxvf apr-util-1.5.1.tar.gz -C/usr/local/src/ [iyunv@server ~]# cd /usr/local/src/apr-util-1.5.1/ [iyunv@server apr-util-1.5.1]# ./configure--prefix=/usr/local/apr-util --with-apr=/usr/local/apr/bin/apr-1-config [iyunv@server apr-util-1.5.1]# make && make install [iyunv@server apr-util-1.5.1]# cd /usr/local/apr-util/ [iyunv@server apr-util]# ln -s /usr/local/apr-util/include/usr/include/apr-util [iyunv@server apr-util]# cd /etc/ld.so.conf.d/ [iyunv@server ld.so.conf.d]# vim apr-util.conf apr-util的内容如下图: 同样使用ldconfig刷新缓存 httpd的安装: 说明:由于在对httpd进行相应的配置时,还依赖于pcre的库,所以要挂载光盘安装pcre-devel。 [iyunv@server ~]# mkdir /mnt/cdrom [iyunv@server ~]# mount /dev/cdrom /mnt/cdrom/ [iyunv@server ~]# cd /mnt/cdrom/Server/ [iyunv@server Server]# rpm -ivh pcre-devel-6.6-2.el5_1.7.i386.rpm [iyunv@server ~]# tar -jxvf httpd-2.4.4.tar.bz2 -C/usr/local/src/ [iyunv@server ~]# cd /usr/local/src/httpd-2.4.4/ [iyunv@server httpd-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 [iyunv@server httpd-2.4.4]# make && make install [iyunv@server httpd-2.4.4]# cd /usr/local/apache/ [iyunv@server apache]# ln -s /usr/local/apache/include/usr/include/apache [iyunv@server apache]# vim /etc/profile 对环境文件作如下修改: [iyunv@server apache]# . /etc/profile 重新读取环境文件 [iyunv@server apache]# 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 [iyunv@server apache]# vim /etc/man.config 作如下修改: 说明:由于源码安装没服务的控制脚本,通常需要我们自己写,而服务器的控制脚本所在的目录:/etc/init.d/通常与程序的名字相同。 [iyunv@localhost ~]# cd /etc/init.d/ [iyunv@localhost init.d]# vim httpd httpd的内容如下:
#/bin/bash # chkconfig:2345 88 78 服务设置在各级别启动与关闭状态 # description:httpd server daemon 实现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"httpd is started" && exit echo -n "httpd isstarting..." sleep 1 $prog -f $configfile && echo"ok" && touch $lockfile || echo "failed" } stop(){ [ ! -f $lockfle ] && echo"httpd is stoped" && exit echo -n "httpd is stopping" sleep 1 killproc httpd && echo"ok" && rm -rf $lockfile || echo "failed" } case"$1" in start) start ;; stop) stop ;; restart) stop start ;; *) echo"USAGE:start|stop|restart" esac [iyunv@localhost init.d]# chmod a+x httpd 修改/etc/httpd/httpd.conf 的配置文件,使得其支持基于php开发的pure-ftpd的web管理页面,需做如下修改: 启动httpd服务,并且加入chkconfig 实现服务开机自动启动: 2.mysql数据库的安装,由于mysql的源码拆解目录下没有configure的配置工具,我们要对mysql进行相应的配置必须使用cmake工具进行mysql的配置。 cmake工具的安装: [iyunv@server ~]# tar -zxvf cmake-2.8.10.2.tar.gz -C/usr/local/src/ [iyunv@server ~]# cd /usr/local/src/cmake-2.8.10.2/ [iyunv@server cmake-2.8.10.2]# ./configure--prefix=/usr/local/cmake [iyunv@server cmake-2.8.10.2]# make && make install 然后对cmake安装目录下的bin目录和man目录做如同httpd相同的操作,这里就不再写出了。 mysql的安装: [iyunv@server ~]# groupadd mysql [iyunv@server ~]# useradd -r -g mysql mysql -s /sbin/nologin-M 说明:在linux下任何一种服务要运行,都需要相应的运行者身份,这里我们需要建立运行mysql服务的运行者mysql和该用户所属组mysql。 [iyunv@server ~]# tar -zxvf mysql-5.6.10.tar.gz -C/usr/local/src/ [iyunv@server ~]# cd /usr/local/src/ [iyunv@server src]# ln -s /usr/local/src/mysql-5.6.10/usr/local/src/mysql [iyunv@server src]# cd mysql [iyunv@server mysql]# cmake . 执行cmake产生Makefile文件 [iyunv@server mysql]# make && make install 说明:mysql安装完成后会在/usr/local/下产生名为mysql的安装目录。接下来同样对mysql安装目录下的bin目录、lib目录、man目录和include目录都需要做同httpd相应的操作,这里不再写了。 进入mysql的安装目录,产生mysql的初始化数据库: [iyunv@server mysql]# chown -R mysql:mysql . [iyunv@server mysql]# scripts/mysql_install_db --user=mysql [iyunv@server mysql]# chown -R root . [iyunv@server mysql]# chown -R mysql data 现在产生mysql的配置文件和控制脚本: [iyunv@server mysql]# cp support-files/my-default.cnf/etc/my.cnf [iyunv@server mysql]# cp support-files/mysql.server/etc/init.d/mysqld [iyunv@server mysql]# chmod a+x /etc/init.d/mysqld 启动mysql的服务,并且使用chkconfig进行管理: [iyunv@server mysql]# service mysqld start [iyunv@server mysql]# chkconfig --add mysqld [iyunv@server mysql]# chkconfig mysqld on 现在对mysql进行相应的操作,修改mysql的用户密码 [iyunv@server mysql]# mysqladmin -u root -p password '123' mysql> INSERT INTO mysql.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> FLUSH PRIVILEGES; mysql>CREATE DATABASE ftpusers; mysql>USE ftpusers; mysql>CREATE TABLE admin ( Username varchar(35)NOT NULL default '', Password char(32)binary NOT NULL default '', PRIMARY KEY (Username) ); mysql>INSERT INTO admin VALUES ('admin',MD5('passwd')); mysql>CREATE TABLE `users` ( `User` varchar(16)NOT NULL default '', `Password`varchar(32) binary NOT NULL default '', `Uid` int(11) NOTNULL default '14', `Gid` int(11) NOTNULL default '5', `Dir` varchar(128)NOT NULL default '', `QuotaFiles` int(10)NOT NULL default '500', `QuotaSize` int(10)NOT NULL default '30', `ULBandwidth` int(10)NOT NULL default '80', `DLBandwidth` int(10)NOT NULL default '80', `Ipaddress`varchar(15) NOT NULL default '*', `Comment` tinytext, `Status`enum('0','1') NOT NULL default '1', `ULRatio` smallint(5)NOT NULL default '1', `DLRatio` smallint(5)NOT NULL default '1', PRIMARY KEY (`User`), UNIQUE KEY `User`(`User`) ); mysql> grant all privileges on ftpusers.* to ftp@localhostidentified by 'tmppasswd';将对数据库ftpusers的所有权限授予ftp用户 mysql> flush privileges; 刷新权限值 mysql> \quit 重新使用ftp用户登录mysql数据库: 3.php的安装 [iyunv@server ~]# tar -jxvf php-5.4.13.tar.bz2 -C/usr/local/src/ [iyunv@server ~]# cd /usr/local/src/php-5.4.13/ [iyunv@server php-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 \ [iyunv@server php-5.4.13]# make && make install 进入php的安装目录,对该目录下的bin目录做httpd同样的操组,此处省略操作步骤。 二.安装pure-ftpd 1.安装pure-ftpd的主程序: [iyunv@server ~]# tar -zxvf pure-ftpd-1.0.36.tar.gz -C/usr/local/src/ [iyunv@server ~]# cd /usr/local/src/pure-ftpd-1.0.36/ [iyunv@server pure-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 [iyunv@server pure-ftpd-1.0.36]# make && make install 对安装目录下的bin目录和sbin目录做如同httpd同样的操作。
说明:生成pure-ftpd的服务脚本和配置文件,由于在配置pure-ftpd进行配置时没有指定其配置文件的存放路径,默认在其安装的目录下的/etc。 [iyunv@server ~]# cd /usr/local/pureftpd/ [iyunv@server pureftpd]# mkdir etc [iyunv@server pureftpd]# cd /usr/local/src/pure-ftpd-1.0.36/configuration-file/ [iyunv@server configuration-file]# chmod a+x pure-config.pl [iyunv@server configuration-file]# cp pure-config.pl/usr/local/pureftpd/sbin/ [iyunv@server configuration-file]# cp pure-ftpd.conf/usr/local/pureftpd/etc/ [iyunv@server configuration-file]# cd ../contrib/ [iyunv@server contrib]# chmod a+x redhat.init [iyunv@server contrib]# cp redhat.init /etc/init.d/pureftpd 修改pure-ftpd的控制脚本文件,对以下三行进行修改: 18 fullpath=/usr/local/pureftpd/sbin/$prog 19 pureftpwho=/usr/local/pureftpd/sbin/pure-ftpwho 24 $fullpath /usr/local/pureftpd/etc/pure-ftpd.conf –daemonize 修改pure-ftpd的配置文件,内容如下: 20 ChrootEveryone yes #固定家目录 40 MaxClientsNumber 100 #最大连接数 52 MaxClientsPerIP 2 #每个ip地址最大连接数 71 AnonymousOnly no #允许匿名用户外的用户登录 77 NoAnonymous no #允许匿名用户登录 116 MySQLConfigFile /user/local/pureftpd/etc/pureftpd-mysql.conf #指明pure-ftpd与mysql数据库的接口文件位置 126 PureDB /usr/local/pureftpd/etc/pureftpd.pdb #采用pureDB进行ftp用户身份验证 214 Bind 127.0.0.1,21 #绑定地址 215 Bind 192.168.2.100,21 337 CreateHomeDir yes #虚拟用户登录后自动创建家目录 对pureftpd-mysql.conf的接口文件进行相应的操作: [iyunv@server ~]# mv pureftpd-mysql.conf/usr/local/pureftpd/etc/ 修改接口文件的内容: 12 MYSQLServer 127.0.0.1 17 MYSQLPort 3306 22 MYSQLSocket /tmp/mysql.sock 27 MYSQLUser ftp 32 MYSQLPassword tmppasswd 37 MYSQLDatabase ftpusers 45 MYSQLCrypt md5 启动pure-ftpd服务,并加入chkconfig进行管理: 虚拟用户实现基于pureDB进行验证,因为虚拟用户想要访问ftp服务,在什么验证成功后,会映射成本地账户进行访问。 [iyunv@server etc]# mkdir /ftproot [iyunv@server etc]# chmod 777 /ftproot/ [iyunv@server etc]# useradd virtualftp -d /ftproot/ -s/sbin/nologin -M [iyunv@server etc]# chown -R virtualftp:virtualftp /ftproot/ [iyunv@server etc]# /usr/local/pureftpd/bin/pure-pw useradd user1 -u virtualftp -gvirtualftp -d /ftproot/user1 –m #虚拟账户映射成本地账户virtualftp [iyunv@server etc]#/usr/local/pureftpd/bin/pure-pw mkdb /usr/local/pureftpd/pureftpd.pdb #建立用户数据库 2.安装和配置pure-ftp的web管理界面: [iyunv@server ~]# tar -zxvf PureAdmin-0.3.tar.gz -C/usr/local/apache/htdocs/ [iyunv@server ~]# cd /usr/local/apache/htdocs/ [iyunv@server htdocs]# mv PureAdmin-0.3 pureadmin 切换到pureadmin目录,修改config.php配置文件,内容如下: 最后为了能够使用匿名用户能够访问ftp服务器,必须创建/var/ftp目录,因为匿名用户的默认家目录就是该目录,而且该目录开始并不存在需要我们手动创建。 [iyunv@server pureadmin]# mkdir /var/ftp 至此,整个环境搭建的工作已经完成,下面可以进行相关的测试了。 三.测试FTP服务器 我们创建了一个虚拟用户user1:
由于每个用户在登录FTP服务器都会进入到自己的家目录,而我们虚拟用户在创建时并没有形成家目录,只有当使用该用户进行登录时才会在本地的/ftproot/目录下形成自己的家目录。现在我们比较一下user1访问FTP服务器的前后,到底会不会在/ftproot/目录下自动创建家目录: 至此,pure-ftpd的整个搭建和配置已经完成,具体对用户的各种限制需要大家自己摸索。
|