设为首页 收藏本站
查看: 1604|回复: 0

[经验分享] Pure-FTPd实现基于虚拟帐号访问的FTP服务器

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-11-24 08:41:16 | 显示全部楼层 |阅读模式
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的内容如下图:
143815274.jpg
然后使用ldconfig刷新缓存,在使用ldconfig -pv |grep apr查看apr相关的库文件:
143833679.jpg
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的内容如下图:
143852283.jpg
同样使用ldconfig刷新缓存
143911351.jpg
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  对环境文件作如下修改:
143943263.jpg
[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  作如下修改:
144011385.jpg
说明:由于源码安装没服务的控制脚本,通常需要我们自己写,而服务器的控制脚本所在的目录:/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管理页面,需做如下修改:
144114417.jpg
启动httpd服务,并且加入chkconfig 实现服务开机自动启动:
144230776.jpg
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
144319552.jpg
现在对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数据库:
144357651.jpg
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进行管理:
144743900.jpg
虚拟用户实现基于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配置文件,内容如下:
145056946.jpg
最后为了能够使用匿名用户能够访问ftp服务器,必须创建/var/ftp目录,因为匿名用户的默认家目录就是该目录,而且该目录开始并不存在需要我们手动创建。
[iyunv@server pureadmin]# mkdir /var/ftp
至此,整个环境搭建的工作已经完成,下面可以进行相关的测试了。
三.测试FTP服务器
使用浏览器访问http://192.168.2.100/pureadmin,后台管理员是admin密码是passwd,可以基于web进行ftp服务的管理。
145202971.jpg
我们创建了一个虚拟用户user1:
145241521.jpg

145249368.jpg

由于每个用户在登录FTP服务器都会进入到自己的家目录,而我们虚拟用户在创建时并没有形成家目录,只有当使用该用户进行登录时才会在本地的/ftproot/目录下形成自己的家目录。现在我们比较一下user1访问FTP服务器的前后,到底会不会在/ftproot/目录下自动创建家目录:
145401291.jpg
至此,pure-ftpd的整个搭建和配置已经完成,具体对用户的各种限制需要大家自己摸索。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-304727-1-1.html 上篇帖子: CentOS6.5系统搭建NTP服务器 下篇帖子: ssh锁定(chroot)普通账号的活动目录 服务器
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表