使用vsftp架设快速、安全的ftp服务器

来源:百度文库 编辑:神马文学网 时间:2024/04/23 22:59:08

本文介绍了如何使用vsftp来架设一个快速、高效、安全的ftp服务器,使用虚拟用户以及使用db库和mysql保存虚拟用户。

    VSFTPD是一种在UNIX/Linux中非常安全且快速的FTP服务器,目前已经被许多大型站点所采用。VSFTPD支持将用户名和口令保存在数据库文件或数据库服务器中。VSFTPD称这种形式的用户为虚拟用户。

    相对于FTP的本地(系统)用户来说,虚拟用户只是FTP服务器的专有用户,虚拟用户只能访问FTP服务器所提供的资源,这大大增强系统本身的安全性。相对于匿名用户而言,虚拟用户需要用户名和密码才能获取FTP服务器中的文件,增加了对用户和下载的可管理性。对于需要提供下载服务,但又不希望所有人都可以匿名下载;既需要对下载用户进行管理,又考虑到主机安全和管理方便的FTP站点来说,虚拟用户是一种极好的解决方案。

    本文介绍在centos上如何将VSFTPD的虚拟用户名和密码保存在MySQL数据库服务器中。

1)安装vsftp

# tar -zxvf vsftpd-2.0.6.tar.gz# cd vsftpd-2.0.6


安装步骤可以参照目录下INSTALL文件

# mkdir /usr/share/empty/# mkdir /var/ftp/# useradd -d /var/ftp ftp# chown root.root /var/ftp# chmod og-w /var/ftp# make;make install# cp vsftpd /usr/local/sbin/vsftpd# mkdir /usr/local/man# cp vsftpd.conf.5 /usr/local/man/man5# cp vsftpd.8 /usr/local/man/man8# cp RedHat/vsftpd.pam /etc/pam.d/ftp#cp vsftpd.conf /etc

#vi /etc/vsftpd.conf

在最后添加一行

listen=YES

启动vsftp服务

#/usr/local/sbin/vsftpd &

然后用anonymous或者ftp用户测试一下,密码都为空

允许本地用户登陆:
#vi /etc/vsftpd.conf

local_enable=YESpam_service_name=ftp


然后新建一个用户,重启一下服务登陆测试一下

#killall -HUP vsftpd             //重启vsftpd服务

禁锢用户的主目录:

#touch   /etc/vsftpd.chroot_list

a、限制所有用户不能切换目录

chroot_local_user=YES

b、设置指定的用户不能切换目录

chroot_local_user=NOchroot_list_enable=YESchroot_list_file=/etc/vsftpd.chroot_list

然后把需要禁锢主目录的用户输入到/etc/vsftpd.chroot_list文件中就可以了


用DB库存储用户名及密码

a)建立虚拟用户口令库文件,口令库文件中奇数行设置用户名,偶数行设置口令
# cat logins.txt

aaa123456bbb123456


b)生成vsftpd的认证文件

# db_load -T -t hash -f logins.txt   /etc/vsftpd_login.db# chmod 600 /etc/ vsftpd_login.db


c) 建立虚拟用户所需的PAM配置文件

# cat /etc/pam.d/ftp   (把原来的都注释掉)

auth   required   /lib/security/pam_userdb.so   db=/etc/vsftpd_loginaccount   required   /lib/security/pam_userdb.so   db=/etc/vsftpd_login


d)建立虚拟用户及要访问的目录并设置相应的权限

# useradd -d /home/ftpsite virtual# chmod 700 /home/ftpsite/


e)在配置文件/etc/vsftpd/vsftpd.conf中添加虚拟用户的配置内容

guest_enable=YESguest_username=virtualpam_service_name=ftp //这行前面已经加过了


然后重启一下vsftp服务,使用aaa和bbb用户测试一下

对虚拟用户设置不同的权限
#vi /etc/vsftpd/vsftpd.conf
添加用户配置文件目录设置,增加一行

user_config_dir=/etc/vsftpd_user_conf

 

建立虚拟用户的配置文件目录

# mkdir /etc/vsftpd_user_conf


为虚拟用户建立单独的配置文件,用户配置文件名称与用户名相同

# mkdir /etc/vsftpd_user_conf/aaa# mkdir /etc/vsftpd_user_conf/bbbb


每个FTP虚拟用户都可以独立设置其权限和不同的家目录
#cat /etc/vsftpd_user_conf/aaa

virtual_use_local_privs=YESwrite_enable=YESanon_upload_enable=YESanon_mkdir_write_enable=YESanon_other_write_enable=YESlocal_root=/var/aaa

-----------------------------------
virtual_use_local_privs参数,
当该参数激活(YES)时,虚拟用户使用与本地用户相同的权限。所有虚拟用户的权限使用local参数。
当此参数关闭(NO)时,虚拟用户使用与匿名用户相同的权限,所有虚拟用户的权限使用anon参数。
这两者种做法相比,后者更加严格一些,特别是在有写访问的情形下。默认情况下此参数是关闭的(NO)。
----------------------------------


使用mysql存储虚拟用户

a)安装mysql

# tar -zxvf mysql-5.0.67.tar.gz#cd mysql-5.0.67# ./configure --prefix=/usr/local/mysql#make;make install# cp support-files/my-medium.cnf /etc/my.cnf#useradd mysql#chown -R root.root /usr/local/mysql/


初始化数据库

# /usr/local/mysql/bin/mysql_install_db#chown -R root.root /usr/local/mysql/# chown -R mysql.mysql /usr/local/mysql/mysql/var# /usr/local/mysql/bin/mysqld_safe --user=mysql &


b)安装pam_mysql

因为mysql是编译安装的,所以在这步可能会出错,做下列的链接就可以

#ln -s /usr/local/mysql/lib/mysql   /usr/lib/mysql#ln -s /usr/local/mysql/include/mysql   /usr/include/mysql#tar -zxvf pam_mysql-0.6.2.tar.gz#cd pam_mysql-0.6.2#./configure --with-mysql=/usr/local/mysql –with-openssl#make;make install#cp /usr/lib/security/pam_mysql.so /lib/security/


c)设置数据库

mysql>create database vftp;mysql>use vftp;mysql>create table users(name char(16) binary,passwd char(16) binary);mysql>insert into users (name,passwd) values ('test1','123456');mysql>insert into users (name,passwd) values ('test2','123456');mysql>quit

 

d)建立pam认证所需文件
#vi /etc/pam.d/ftp
添加如下两行

auth required /lib/security/pam_mysql.so user=root passwd=123456 host=localhost db=vftptable=users usercolumn=name passwdcolumn=passwd crypt=0account required /lib/security/pam_mysql.so user=root passwd=123456 host=localhost db=vftptable=users usercolumn=name passwdcolumn=passwd crypt=0

注意:
#crypt=0: 明文密码
#crypt=1: 使用crpyt()函数(对应SQL数据里的encrypt(),encrypt()随机产生salt)
#crypt=2: 使用MYSQL中的password()函数加密
#crypt=3:表示使用md5的散列方式#上面是两句配置,第一句是以auth开始的,第二句以account开始的

e)虚拟用户的配置
vsftpd.conf的配置和用DB库存储用户名及密码相同