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=YES
pam_service_name=ftp
然后新建一个用户,重启一下服务登陆测试一下
#killall -HUP vsftpd //重启vsftpd服务
禁锢用户的主目录:
#touch /etc/vsftpd.chroot_list
a、限制所有用户不能切换目录
chroot_local_user=YES
b、设置指定的用户不能切换目录
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
然后把需要禁锢主目录的用户输入到/etc/vsftpd.chroot_list文件中就可以了
用DB库存储用户名及密码
a)建立虚拟用户口令库文件,口令库文件中奇数行设置用户名,偶数行设置口令
# cat logins.txt
aaa
123456
bbb
123456
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_login
account 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=YES
guest_username=virtual
pam_service_name=ftp //这行前面已经加过了
然后重启一下vsftp服务,使用aaa和bbb用户测试一下
对虚拟用户设置不同的权限
#vi /etc/vsftpd/vsftpd.conf
添加用户配置文件目录设置,增加一行
user_config_dir=/etc/vsftpd_user_conf
然后建立虚拟用户的配置文件目录
# mkdir /etc/vsftpd_user_conf
为虚拟用户建立单独的配置文件,用户配置文件名称与用户名相同
/etc/vsftpd_user_conf/aaa
/etc/vsftpd_user_conf/bbbb
每个FTP虚拟用户都可以独立设置其权限和不同的家目录
#cat /etc/vsftpd_user_conf/aaa
virtual_use_local_privs=YES
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_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=vftp
table=users usercolumn=name passwdcolumn=passwd crypt=0
account required /lib/security/pam_mysql.so user=root passwd=123456 host=localhost db=vftp
table=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库存储用户名及密码相同
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=YES
pam_service_name=ftp
然后新建一个用户,重启一下服务登陆测试一下
#killall -HUP vsftpd //重启vsftpd服务
禁锢用户的主目录:
#touch /etc/vsftpd.chroot_list
a、限制所有用户不能切换目录
chroot_local_user=YES
b、设置指定的用户不能切换目录
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
然后把需要禁锢主目录的用户输入到/etc/vsftpd.chroot_list文件中就可以了
用DB库存储用户名及密码
a)建立虚拟用户口令库文件,口令库文件中奇数行设置用户名,偶数行设置口令
# cat logins.txt
aaa
123456
bbb
123456
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_login
account 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=YES
guest_username=virtual
pam_service_name=ftp //这行前面已经加过了
然后重启一下vsftp服务,使用aaa和bbb用户测试一下
对虚拟用户设置不同的权限
#vi /etc/vsftpd/vsftpd.conf
添加用户配置文件目录设置,增加一行
user_config_dir=/etc/vsftpd_user_conf
然后建立虚拟用户的配置文件目录
# mkdir /etc/vsftpd_user_conf
为虚拟用户建立单独的配置文件,用户配置文件名称与用户名相同
/etc/vsftpd_user_conf/aaa
/etc/vsftpd_user_conf/bbbb
每个FTP虚拟用户都可以独立设置其权限和不同的家目录
#cat /etc/vsftpd_user_conf/aaa
virtual_use_local_privs=YES
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_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=vftp
table=users usercolumn=name passwdcolumn=passwd crypt=0
account required /lib/security/pam_mysql.so user=root passwd=123456 host=localhost db=vftp
table=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库存储用户名及密码相同
转载于:https://blog.51cto.com/lin128/273253