基于虚拟用户的ftp服务器

因为ftp是以明文传输的,因此,系统中的用户就显得相对不安全了,可是,咱们能够将虚拟用户和咱们的本地用户映射。即便***抓到了ftp的用户和密码,也不能登录系统。 php

目前有两中方法1、基于pam认证的虚拟用户ftp2、带有web管理界面的pureftpdmysql




下面看看基于pam认证的虚拟用户ftp安装及使用。 linux

1、安装ftp主程序 ios

[root@localhost ~]# cd /mnt/cdrom/Server/ web

[root@localhost Server]# rpm -ivh vsftpd-2.0.5-16.el5.i386.rpm sql

2生成虚拟用户口令库文件 数据库

[root@localhost Server]# cd /etc/vsftpd/ apache

[root@localhost vsftpd]# vim account.txt vim

生成口令库文件,并修改其权限: 安全

须要用到db_load 工具,它在db4-utils-4.3.29-10.el5.i386.rpm包中

安装

[root@localhost Server]# rpm -ivh db4-utils-4.3.29-10.el5.i386.rpm

[root@localhost vsftpd]# db_load -T -t hash -f ./account.txt account.db #生成加密后的账号库

[root@localhost vsftpd]# chmod 600 /etc/vsftpd/account.db #修改权限

3新建一个虚拟用户的PAM文件。加上以下两行内容:

[root@localhost vsftpd]# vim /etc/pam.d/vsftp.vu

auth required /lib/security/pam_userdb.so db=/etc/vsftpd/account

account required /lib/security/pam_userdb.so db=/etc/vsftpd/account

4.创建虚拟用户,设置该用户所要访问的目录,并设置虚拟用户访问的权限:

[root@localhost vsftpd]# useradd -d /home/ftpsite virtual_user

[root@localhost vsftpd]# chmod 700 /home/ftpsite

5.编辑/etc/vsftpd/vsftpd.conf文件

12 anonymous_enable=NO #修改

#禁用

#pam_service_name=vsftpd

#userlist_enable=YES

#tcp_wrappers=YES

#添加

guest_enable=YES #容许客户访问

guest_username=virtual_user #访问者的用户名为virtual_user

pam_service_name=vsftpd.vu #指明pam认证的文件名

[root@localhost ~]# service vsftpd start #启动ftp

在虚拟FTP服务器中,也能够对各个用户的权限进行设置。方法是在/etc/vsftpd/vsftpd.conf文件中添加以下一行:
user_config_dir=/etc/vsftpd_user_conf

而后在用户配置文件目录下建立相应的用户配置文件,好比为上述名为test的用户建立一个配置文件

[root@localhost ~]# vim /etc/vsftpd_user_conf/test

write_enable=YES #可以上传

anon_upload_enable=YES #可以下载

local_root=/home/ftpsite/test #家目录

建立用户家目录,而且将家目录用户名和用户组改成virtual_user

[root@localhost ~]# service vsftpd restart

测试

上传文件

 9.添加FTP用户的步骤

     1.account.txt中添加用户名和密码

     2.运行以下命令,将用户名和密码添加到数据库中

       db_load -T -t hash -f ./account.txt /etc/vsftpd/account.db

     3./home/ftpsite中新建一个文件夹,与用户明相同

     4.vsftpd_user_conf文件夹下新建和用户名相同的文件,并在其中加入

      local_root=/home/ftpsite/用户名

下面,pureftpd安装及使用。

前提,咱们使用×××的lamp环境

一、下载pureftpd

二、安装

解压

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

预编译

[root@zlj pure-ftpd-1.0.36]# ./configure       --prefix=/usr/local/pureftpd        --with-mysql=/usr/local/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@zlj pure-ftpd-1.0.36]# make

安装

[root@zlj pure-ftpd-1.0.36]# make install

3生成pure-ftpd的服务脚本

[root@zlj pure-ftpd-1.0.36]# cd configuration-file/

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

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

[root@zlj pure-ftpd-1.0.36]# mkdir /usr/local/pureftpd/etc

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

[root@zlj pure-ftpd-1.0.36]#

4生成pure-ftpd的服务

[root@zlj configuration-file]# cd ..

[root@zlj pure-ftpd-1.0.36]# cp contrib/redhat.init /etc/init.d/pureftpd

[root@zlj pure-ftpd-1.0.36]# vim /etc/init.d/pureftpd

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

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

$fullpath /usr/local/pureftpd/etc/pure-ftpd.conf --daemonize>/dev/null

killall pure-ftpd

修改权限

[root@zlj pure-ftpd-1.0.36]# chmod 755 /etc/init.d/pureftpd

添加开机启动

[root@zlj pure-ftpd-1.0.36]# chkconfig pureftpd on

启动

[root@zlj pure-ftpd-1.0.36]# service pureftpd start

5配置匿名用户登陆环境

修改配置文件

[root@zlj pure-ftpd-1.0.36]# vim /usr/local/pureftpd/etc/pure-ftpd.conf

其中有几项要修改:

        chrootEveryone              yes   限定在本身的家目录

       NoAnonymous                 yes   不容许匿名登陆

       Bind                      127.0.0.1,21        监听本机回环 <可选>

       Bind                      192.168.0.254,21    监听本机IP  <自行添加的,非必须>

      CreateHomeDir               yes   容许用户登陆后自动建立家目录   <必须>

6配置虚拟用户登陆环境

[root@zlj pure-ftpd-1.0.36]# mkdir /ftproot

[root@zlj pure-ftpd-1.0.36]# chmod -R 777 /ftproot<这不不作能够能会引发登陆时报421错误>

[root@zlj pure-ftpd-1.0.36]# useradd virtualftp -d /ftproot -s /sbin/nologin -M<建立接下来的虚拟用户对应的系统用户>

[root@zlj pure-ftpd-1.0.36]# chown virtualftp:virtualftp /ftproot/

[root@zlj pure-ftpd-1.0.36]#

七、虚拟用户使用篇

流程图:

()pureDB认证

A修改配置文件

[root@zlj pure-ftpd-1.0.36]# vim /usr/local/pureftpd/etc/pure-ftpd.conf

PureDB                        /usr/local/pureftpd/pureftpd.pdb

[root@zlj pure-ftpd-1.0.36]# cd /usr/local/pureftpdbin/

B添加用户

[root@zlj bin]# ./pure-pw useradd user1 -u virtualftp -g virtualftp -d /ftproot/user1 -m

说明:

    user1是用户名,-u virtualftp是其实际的linux用户,-d指定起始目录,并锁定于该目录。若是不锁定,则用-D;若是须要不一样的权限,能够创建新的linux用户与组

      若是用的系统自带的ftp用户,这样的话还需修改配置文件pure-ftpd.conf中的MinUIDftp用户的UID 14,不然登陆时会出现530错误;因此这里建议建立另外一个非系统自带的用户作映射

C 创建用户数据库:

[root@zlj bin]# ./pure-pw mkdb /usr/local/pureftpd/pureftpd.pdb

说明:从此每添加或修改用户数据库都应该执行一次mkdb

D删除一个用户

pure-pw userdel <login> [-f <passwd file>] [-m]

这时,用户的信息会被从指定的 passwd 文件中删除,可是用户的 home 目录会被保留,须要手工删除

E更改一个用户口令

pure-pw passwd <login> [-f <passwd file>] [-m]

F显示用户信息

/etc/pureftpd.passwd   文件中记录的信息不方便用户的阅读,所以   pure-ftpd   提供了显示用户信息的命令。其语法是:

pure-pw show <login> [-f <passwd file>]

G重启

[root@zlj bin]# service pureftpd restart

Stopping pure-config.pl:

Starting pure-config.pl:

H、测试

[root@zlj bin]# ftp 10.106.10.7

()mysql认证

A、配置文件

[root@zlj bin]# vim /usr/local/pureftpd/etc/pure-ftpd.conf

MySQLConfigFile               /usr/local/pureftpd/etc/pureftpd-mysql.conf #指明sql的配置文件

B下载web管理程序pureadmin0.3

解压

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

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

更名

[root@zlj htdocs]# mv PureAdmin-0.3/ pueradmin

[root@zlj htdocs]# cd pueradmin/

[root@zlj pueradmin]#

C导入数据到mysql

配置文件

[root@zlj ~]# vim pureftp.sql

注意其中的

    22 -- Login = ftp             此为登陆数据库的用户

    23 -- Password = tmppasswd    此为登陆数据库的密码

    31 CREATE DATABASE ftpusers;  建立名为ftpusers的库

    50 INSERT INTO admin VALUES ('admin',MD5('passwd'));  此为登陆web用的用户密码,可自行修改

导入数据,导入前可能须要修改此sql文件的15行:前2个减号空一格-- ------------------------------------------------------->

导入

提示

ERROR 1064 (42000) at line 39: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'TYPE=MyISAM' at line 5

说明数据库不支持这种引擎,修改配置

再试

D查看mysql添加链接mysql用户

先用root登陆mysql,执行

mysql>grant all privileges on ftpusers.* to ftp@localhost identified by 'tmppasswd';

mysql>flush privileges;

mysql>quit;

F修改pureadmin的配置文件

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

[root@zlj pueradmin]# vim config.php

<?php

$cfg['dbhost']='localhost'; //mysql host

$cfg['dbname']='ftpusers';  //mysql db name                            所用的库<与前面导入的sql中要一致>

$cfg['dbuser']='ftp';           //mysql user                           登陆mysql的账号

$cfg['dbpasswd']='tmppasswd';           //mysql password               登陆mysql的密码

//ftp config

$cfg['page']=10;                                                       每页显示的用户数量

//ftp passwd type : TEXT/CRYPT/MD5

$cfg['passwdtype']='MD5';                                              认证模式<要与pureftpd-mysql.conf中一致>

//ftp default

$cfg['uid']=500;  //uid                                                映射虚拟用户的UID,即刚建立的virtualftp用户

$cfg['gid']=501;        //gid                                          同上

$cfg['dir']='/ftproot/'; //dir                                          默认家目录

$cfg['qf']=0;   //quotafiles                                           文件个数限制,0为不限制

$cfg['qs']=100; //quotasize                                            总文件大小

$cfg['ul']=0;   //ULBandwidth                                          上传速率限制

$cfg['dl']=200; //DLBandwidth                                          下载速率限制

$cfg['ur']=0;   //ULRatio                                              上传比

$cfg['dr']=0;   //DLRatio                                              下载比

$cfg['status']=1; //status                                             状态,1为激活;0为禁止

$cfg['ip']= '*';        //ipaddress                                    可访问IP*为全部

?>

G下载pureftpd-mysql.conf文件

链接数据库mysql的配置文件

[root@zlj pueradmin]# cd /usr/local/pureftpd/etc/

[root@zlj etc]# vim pureftpd-mysql.conf

修改以下:

MYSQLUser      ftp

MYSQLPassword   tmppasswd

MYSQLDatabase   ftpusers

MYSQLCrypt      md5

[root@zlj etc]# service pureftpd restart

H登录,测试

点击新建,新建一个用户

一样建立user3

登录

提示失败,查看日志

May 24 03:04:25 zlj pure-ftpd: (?@10.106.10.9) [INFO] 10.106.10.9 的新链接

May 24 03:04:30 zlj pure-ftpd: (?@10.106.10.9) [ERROR] SQL server好像当掉了 [Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)]

May 24 03:04:34 zlj pure-ftpd: (?@10.106.10.9) [WARNING] 使用者[user2]验证失败

提示咱们找不到/var/lib/mysql/mysql.sock,咱们建立这样的文件

[root@zlj mysql]# mkdir /var/lib/mysql/   #建立文件

[root@zlj mysql]# ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock #建立软链接

再次测试

User2可以成功

User3也可以成功

查看ftp的根目录,能够我看到系统为咱们建立了三个目录