数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

VSFTP+MySQL虚拟用户配置


发布日期:2023年01月20日
 
VSFTP+MySQL虚拟用户配置

VSFTPD是一种在UNIX/Linux中非常安全且快速的FTP服务器目前已经被许多大型站点所采用VSFTPD支持将用户名和口令保存在数据库文件或数据库服务器中VSFTPD称这种形式的用户为虚拟用户相对于FTP的本地(系统)用户来说虚拟用户只是FTP服务器的专有用户虚拟用户只能访问FTP服务器所提供的资源这大大增强系统本身的安全性相对于匿名用户而言虚拟用户需要用户名和密码才能获取FTP服务器中的文件增加了对用户和下载的可管理性对于需要提供下载服务但又不希望所有人都可以匿名下载既需要对下载用户进行管理又考虑到主机安全和管理方便的FTP站点来说虚拟用户是一种极好的解决方案本文介绍在RedHat Linux 上如何将VSFTPD的虚拟用户名和密码保存在MySQL数据库服务器中

VSFTPD的安装

目前VSFTPD的最新版本是官方下载地址为ftp:///users/cevans/vsftpdtargz在安装前需要先做以下准备工作

VSFTPD默认配置中需要nobody用户在系统中添加此用户如果用户已经存在useradd命令有相应提示

[root@hpe root]# useradd nobody

useradd: user nobody exists

VSFTPD默认配置中需要/usr/share/empty目录在系统中此目录如果目录已经存在mkdir命令有相应提示

[root@hpe root]# mkdir /usr/share/empty/

mkdir: cannot create directory /usr/share/empty: File exists

VSFTPD提供匿名FTP服务时需要ftp用户和一个有效的匿名目录

[root@hpe root]# mkdir /var/ftp/

[root@hpe root]# useradd d /var/ftp ftp

接下来的操作对于ftp用户是否已经存在都是有用的

[root@hpe root]# chown rootroot /var/ftp

[root@hpe root]# chmod ogw /var/ftp

以上准备工作完成后我们就可以开始编译源代码了假定我们下载的vsftpdtargz在/root目录执行以下命令

[root@hpe root]# tar zxvf vsftpdtargz

[root@hpe root]# cd vsftpd

[root@hpe vsftpd]# make

[root@hpe vsftpd]# make install

上面的make install命令将编译好的二进制文件手册等复制到相应目录在RHL可能需要手动执行以下复制

[root@hpe vsftpd]# cp vsftpd /usr/local/sbin/vsftpd

[root@hpe vsftpd]# cp nf /usr/local/share/man/man

[root@hpe vsftpd]# cp vsftpd /usr/local/share/man/man

接下来我们复制一个简单的配置文件作为基础供后面修改

[root@hpe vsftpd]# cp nf /etc

[root@hpe vsftpd]# cp RedHat/vsftpdpam /etc/pamd/ftp

复制PAM验证文件以允许本地用户登录VSFTPD

[root@hpe vsftpd]# cp RedHat/vsftpdpam /etc/pamd/ftp

创建guest用户

VSFTPD采用PAM方式验证虚拟用户由于虚拟用户的用户名/口令被单独保存因此在验证时VSFTPD需要用一个系统用户的身份来读取数据库文件或数据库服务器以完成验证这就是VSFTPD的guest用户这正如同匿名用户也需要有一个系统用户ftp一样当然我们也可以把guest用户看成是虚拟用户在系统中的代表下面在系统中添加vsftpdguest用户作为VSFTPD的guest

[root@hpe vsftpd]# useradd vsftpdguest

当虚拟用户登录后所在的位置为vsftpdguest的自家目录/home/vsftpdguest如果要让虚拟用户登录到/var/ftp等其他目录修改vsftpdguest的自家目录即可

设置VSFTPD配置文件

在/etc/nf文件中加入以下选项

guest_enable=YES

guest_username=vsftpdguest

然后执行以下命令让VSFTPD在后台运行

[root@hpe vsftpd]# /usr/local/sbin/vsftpd &

将虚拟用户保存在MySQL数据库服务器中

我们建立数据库vsftpdvu表users字段name和passwd用于保存虚拟用户的用户名和口令同时增加两个虚拟用户xiaotong和xiaowang

[root@hpe vsftpd]# mysql p

mysql>create database vsftpdvu;

mysql>use vsftpdvu;

mysql>create table users(name char() binarypasswd char() binary);

mysql>insert into users (namepasswd) values (xiaotongpassword(qqmywife));

mysql>insert into users (namepasswd) values (xiaowangpassword(ttmywife));

mysql>quit

然后授权vsftpdguest可以读vsftpdvu数据库的users表执行以下命令

[root@hpe vsftpd]# mysql u root mysql p

mysql>grant select on vsftpdvuusers to vsftpdguest@localhost identified by iserial;

mysql>quit

如果要验证刚才的操作是否成功可以执行下面命令

[root@hpe vsftpd]#mysql u vsftpdguest piserial vsftpdvu

mysql>select * from users;

如果成功将会列出xiaotongxiaowang和加密后的密码

设置MySQL的PAM验证

这里我们要用到一个利用mysql进行pam验证的开源项目(mysql/)首先从网站下载它的程序包pam_myqltargz复制到/root目录中在编译安装之前要确保mysqldevel的RPM包已经安装在你的机器上如果没有请从RHL安装光盘中安装该包然后执行以下命令

[root@hpe root]#tar xvzf pam_mysqltargz

[root@hpe root]#cd pam_mysql

[root@hpe pam_mysql]#make

[root@hpe pam_mysql]#make install

make install这一步可能会出现错误那只好手动将该目录下生成的pam_mysqlo复制到/lib/security目录下

接下来我们要设置vsftpd的PAM验证文件打开/etc/pamd/ftp文件加入以下内容

auth required pam_mysqlo user=vsftpdguest passwd=iserial host=localhost db=vsftpdvu table=users usercolumn=name passwdcolumn=passwd crypt=

account required pam_mysqlo user=vsftpdguest passwd=iserial host=localhost db=vsftpdvu table=users usercolumn=name passwdcolumn=passwd crypt=

上面涉及到的参数只要对应前面数据库的设置就可以明白它们的含义这里需要说明的是crypt参数crypt表示口令字段中口令的加密方式crypt=口令以明文方式(不加密)保存在数据库中crypt=口令使用UNIX系统的DES加密方式加密后保存在数据库中crypt=口令经过MySQL的password()函数加密后保存

进一步的虚拟用户设置

经过以上的步骤虚拟用户就可以正常使用了这里介绍进一步的虚拟用户设置首先介绍虚拟用户的权限设置

VSFTPD新添了virtual_use_local_privs参数当该参数激活(YES)时虚拟用户使用与本地用户相同的权限当此参数关闭(NO)时虚拟用户使用与匿名用户相同的权限这也就是VSFTPD之前版本对虚拟用户权限的处理方法这两者种做法相比后者更加严格一些特别是在有写访问的情形下默认情况下此参数是关闭的(NO)

当virtual_use_local_privs=YES时只需设置write_enable=YES虚拟用户就可以就拥有写权限而virtual_use_local_privs=NO时对虚拟用户权限的设置就更多一些更严格一些

控制虚拟用户浏览目录如果让用户不能浏览目录但仍可以对文件操作那么需要执行以下二个步骤配置文件中anon_world_readable_only=YES虚拟用户目录的权限改为只能由vsftpdguest操作

[root@hpe root]# chown vsftpdguestvsftpdguest /home/vsftpdguest

[root@hpe root]# chmod /home/vsftpdguest

允许虚拟用户上传文件

write_enable=YES

anon_upload_enable=YES

允许虚拟用户修改文件名和删除文件

anon_other_write_enable=YES

由于以上选项的设置同样会对匿名用户生效如果不想匿名用户趁机拥有同样的权限最好是禁止匿名用户登录

其次由于虚拟用户在系统中是vsftpdguest身份所以可以访问到系统的其他目录为了更加安全我们可以将虚拟用户限制在自家目录下有两种做法在配置文件中增加以下选项

chroot_local_user=NO

chroot_list_enable=YES

chroot_list_file=/etc/vsftpdchroot_list

然后在/etc/vsftpdchroot_list文件中加入虚拟用户名xiaotong和xiaowang

第二种做法在配置文件中修改chroot_local_user=YES

经过修改后虚拟用户登录后其根目录就限制在/home/vsftpdguest下无法访问其他目录

虚拟用户的个人目录

大家可以发现无论是哪个虚拟用户登录后所在的目录都是/home/vsftpdguest即都是guest_username用户的自家目录下面介绍如何为每个虚拟用户建立自家目录首先在主配置文件中加入以下选项

user_config_dir=/etc/vsftpd/vsftpd_user_conf

然后生成/etc/vsftpd/vsftpd_user_conf目录并在该目录下建立与特定虚拟用户同名的文件

[root@hpe root]# mkdir /etc/vsftpd/vsftpd_user_conf

[root@hpe root]# cd /etc/vsftpd/vsftpd_user_conf

上一篇:shell实战之:mysql index文件检查机制

下一篇:mysqladmin命令的用法