Pure-FTPd實現基於虛擬帳號訪問的FTP服務器

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的安裝:

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

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

[root@server apr-1.4.6]# ./configure --prefix=/usr/local/apr

[root@server apr-1.4.6]# make && make install

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

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

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

[root@server ld.so.conf.d]# vim apr.conf  apr的內容如下圖:

143815274.png

然後使用ldconfig刷新緩存,在使用ldconfig -pv |grep apr查看apr相關的庫文件:

143833679.png

apr-util的安裝:

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

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

[root@server apr-util-1.5.1]# ./configure--prefix=/usr/local/apr-util --with-apr=/usr/local/apr/bin/apr-1-config

[root@server apr-util-1.5.1]# make && make install

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

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

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

[root@server ld.so.conf.d]# vim apr-util.conf  apr-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@server Server]# rpm -ivh pcre-devel-6.6-2.el5_1.7.i386.rpm

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

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

[root@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

[root@server httpd-2.4.4]# make && make install

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

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

[root@server apache]# vim /etc/profile  對環境文件作如下修改:

143943263.png

[root@server apache]# . /etc/profile  重新讀取環境文件

[root@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

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

144011385.png

說明:由於源碼安裝沒服務的控制腳本,通常需要我們自己寫,而服務器的控制腳本所在的目錄:/etc/init.d/通常與程序的名字相同。

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

[root@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

[root@localhost init.d]# chmod a+x httpd

修改/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 -zxvf cmake-2.8.10.2.tar.gz -C/usr/local/src/

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

[root@server cmake-2.8.10.2]# ./configure--prefix=/usr/local/cmake

[root@server cmake-2.8.10.2]# make && make install

然後對cmake安裝目錄下的bin目錄和man目錄做如同httpd相同的操作,這裏就不再寫出了。

mysql的安裝:

[root@server ~]# groupadd mysql

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

說明:在linux下任何一種服務要運行,都需要相應的運行者身份,這裏我們需要建立運行mysql服務的運行者mysql和該用戶所屬組mysql。

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

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

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

[root@server src]# cd mysql

[root@server mysql]# cmake .     執行cmake產生Makefile文件

[root@server mysql]# make && make install

說明:mysql安裝完成後會在/usr/local/下產生名爲mysql的安裝目錄。接下來同樣對mysql安裝目錄下的bin目錄、lib目錄、man目錄和include目錄都需要做同httpd相應的操作,這裏不再寫了。

進入mysql的安裝目錄,產生mysql的初始化數據庫:

[root@server mysql]# chown -R mysql:mysql .

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

[root@server mysql]# chown -R root .

[root@server mysql]# chown -R mysql data

現在產生mysql的配置文件和控制腳本:

[root@server mysql]# cp support-files/my-default.cnf/etc/my.cnf

[root@server mysql]# cp support-files/mysql.server/etc/init.d/mysqld

[root@server mysql]# chmod a+x /etc/init.d/mysqld

啓動mysql的服務,並且使用chkconfig進行管理:

[root@server mysql]# service mysqld start

[root@server mysql]# chkconfig --add mysqld

[root@server mysql]# chkconfig mysqld on

144319552.png

現在對mysql進行相應的操作,修改mysql的用戶密碼

[root@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@localhost identified by 'tmppasswd';將對數據庫ftpusers的所有權限授予ftp用戶

mysql> flush privileges;      刷新權限值

mysql> \quit

重新使用ftp用戶登錄mysql數據庫:

144357651.png

3.php的安裝

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

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

[root@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 \

[root@server php-5.4.13]# make && make install

進入php的安裝目錄,對該目錄下的bin目錄做httpd同樣的操組,此處省略操作步驟。

二.安裝pure-ftpd

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

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

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

[root@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

[root@server pure-ftpd-1.0.36]# make && make install

對安裝目錄下的bin目錄和sbin目錄做如同httpd同樣的操作。


說明:生成pure-ftpd的服務腳本和配置文件,由於在配置pure-ftpd進行配置時沒有指定其配置文件的存放路徑,默認在其安裝的目錄下的/etc。

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

[root@server pureftpd]# mkdir etc

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

[root@server configuration-file]# chmod a+x pure-config.pl

[root@server configuration-file]# cp pure-config.pl/usr/local/pureftpd/sbin/

[root@server configuration-file]# cp pure-ftpd.conf/usr/local/pureftpd/etc/

[root@server configuration-file]# cd ../contrib/

[root@server contrib]# chmod a+x redhat.init

[root@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的接口文件進行相應的操作:

[root@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.png

虛擬用戶實現基於pureDB進行驗證,因爲虛擬用戶想要訪問ftp服務,在什麼驗證成功後,會映射成本地賬戶進行訪問。

[root@server etc]# mkdir /ftproot

[root@server etc]# chmod 777 /ftproot/

[root@server etc]# useradd virtualftp -d /ftproot/ -s/sbin/nologin -M

[root@server etc]# chown -R virtualftp:virtualftp /ftproot/

[root@server etc]# /usr/local/pureftpd/bin/pure-pw useradd user1 -u virtualftp -gvirtualftp -d /ftproot/user1 –m #虛擬賬戶映射成本地賬戶virtualftp

[root@server etc]#/usr/local/pureftpd/bin/pure-pw mkdb /usr/local/pureftpd/pureftpd.pdb #建立用戶數據庫

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

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

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

[root@server htdocs]# mv PureAdmin-0.3 pureadmin

切換到pureadmin目錄,修改config.php配置文件,內容如下:

145056946.png

最後爲了能夠使用匿名用戶能夠訪問ftp服務器,必須創建/var/ftp目錄,因爲匿名用戶的默認家目錄就是該目錄,而且該目錄開始並不存在需要我們手動創建。

[root@server pureadmin]# 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的整個搭建和配置已經完成,具體對用戶的各種限制需要大家自己摸索。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章