Centos7中支持虚拟用户vsftpd 服务的配置

2016-01-09 12:31周军宏
电脑知识与技术 2015年30期

周军宏

摘要:介绍了在Ceontos7.0系统环境下,支持虚拟用户vsftpd服务的配置方法和步骤,包括Vsftpd、MySQL、Pam_mysql、FireWalld、SeLinux等的安装及参数配置。

关键词:centos;vsftpd;虚拟用户;pam_mysql

中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2015)30-0041-02

vsftp是Linux系统首推的FTP服务器软件,在安全、稳定、速度上有一定优势。本文结合单位实际介绍了FTP服务配置,最终实现这样一个功能,匿名用户仅能登录下载文件,虚拟用户能登录并能在自己的文件夹内上传文件,这些文件夹对匿名用户可见,虚拟用户的用户名、密码存储在MySQL数据库中,同时修改Firewall、SeLinux配置保护系统安全。

1软件安装

考虑服务器效率及安全,Centos7选用最小安装,并配置基本编译环境。

vsftp安装采用yum安装,运行命令如下:

yum install vsftpd

MySQL不采用yum安装,否则在编译pam_mysql时会发生找不到mysql.h文件的错误,解决起来比较麻烦,采用源代码编译安装比较好,安装后mysql的头文件和库安装在/usr/local/mysql目录下。

pam_mysql是基于MySQL数据库的PAM认证模块,是vsftpd与MySQL之间的桥梁,最新源代码包为pam_mysql-0.7RC1.tar.gz,在字符命令界面下,可通过wget命令下载。下载解压后在编译时要设置两个参数:

--with-pam-mods-dir=/lib64/security #pam_mysql.so安装位置。

--with-mysql=/usr/local/mysql #mysql头文件和库安装位置。

2服务配置过程

2.1 pam_mysql配置

配置文件在/etc/pam.d目录下,文件名用户自己确定,本文中命名为vsftpd.mysql,文件中包括pam_mysql.so文件位置,MySQL数据库用户名,密码,用户数据库名称,用户表名称,表结构,加密方式等,具体如下:

auth required /usr/lib64/security/pam_mysql.so user=vsftpd passwd=*** host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2 verbose=1

account required /usr/lib64/security/pam_mysql.so user=vsftpd passwd=*** host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2 verbose=1

verbose=1选项用于调试,输出信息在/var/log/secure中。

2.2MySQL配置

MySQL数据库配置主要包括新建一个“用户数据库”,一个用户表,一个授权可对该“用户数据库”访问的用户,表结构如下:

create table users (id int AUTO_INCREMENT NOT NULL, name char(16) binary NOT NULL, passwd char(48) binary NOT NULL, primary key(id) );

2.3 vsftpd配置

vsftpd配置文件/etc/vsftpd/vsftpd.conf,要实现文章引言部分所要求功能,如下几个选项必须正确设置:

anonymous_enable=YES;

#开启匿名用户。

local_enable=YES;

#允许本地用户登录,不能设置为NO,否则虚拟用户将不能访问,虚拟用户访问在主机上其实也是以一种特殊本地用户身份访问。

chroot_list_enable=YES;chroot_local_user=NO;chroot_list_file=/etc/vsftpd/chroot_list;

#以上三个参数配合,限制登录后锁定在自己目录中。

guest_enable=YES;

#启用虚拟用户

guest_username=ftp;

#虚拟用户映射对应的系统账户,该账户是不能直接登录系统的。

user_config_dir=/etc/vsftpd/vuser_conf;

#虚拟用户个性配置文件存放目录,配置文件名须与虚拟用户名称相同。

pam_service_name=vsftpd.mysql;

#/etc/pam.d目录下pam_mysql配置文件。

virtual_use_local_privs=YES;

#设定虚拟用户权限与宿主用户相同,简化虚拟用户个性配置文件中的权限配置,需设置宿主用户ftp对虚拟用户主目录拥有全权限;当设为NO时,虚拟用户权限设置同匿名用户,可在个性配置文件中结合write_enable,anon_world_readable_only,anon_upload_enable,anon_mkdir_write_enable等命令选项实现更为灵活权限配置。

虚拟用户个性配置文件在/etc/vsftpd/vuser_conf目录下,主要命令选项如下:

local_root=/var/ftp/ftp1; #设定虚拟用户主目录。

write_enable=YES; #开启写权限。

anon_umask=022; #设置上传文件权限,文件夹为755,文件为644。

2.4 SeLinux及Firewall配置

Centos系统中SeLinux防护主要集中在各种网络服务,通过各种策略、规则及安全上下文设定保护系统安全。在默认情况下,由于SeLinux,FTP及MySQL访问容易出现各种限制及异常。直接关闭并不是最好选择,可通过布尔值变量调整和相关目录及文件的安全上下文设定,定制开放vsftp与MySQL的访问。

1)布尔变量ftpd_anon_write

要开放虚拟用户上传功能必须开放此布尔变量,修订vsftp访问策略,允许用户上传,执行命令如下:

setsebool ftpd_anon_write on

2)ftp根目录/var/ftp安全上下文更改

默认情况下,目录安全上下文为public_content_t,是不允许上传文件的,须把安全上下文修改为public_content_rw_t,执行命令如下:

chcon -Rt public_content_rw_t /var/ftp/

3)关于mysql文件安全上下文更改

由于SeLinux访问控制,日志文件记录如下两处错误:

pam_mysql - MySQL error (Can't connect to local MySQL server through socket '/tmp/mysql.sock' )

PAM unable to dlopen(/usr/lib64/security/pam_mysql.so): libmysqlclient.so.18: cannot open shared object file: Permission denied

经分析,错误原因是这两个文件的预设安全上下文不允许pam_sql模块的访问,需做如下更改:

chcon -t mysqld_db_t /tmp/mysql.sock

chcon -t texrel_shlib_t /usr/lib64/libmysqlclient.so.18

4)Firewall配置

Centos7默认防火墙由iptables改为Firewall,默认情况下关闭ftp服务的访问,开放命令如下:

firewall-cmd --add-service=ftp --permanent

3结束语

在配置调试vsftp过程中,日志文件/var/log/messages,/var/log/secure中记录信息发挥了特别重要的作用。在Linux中各种服务配置过程中,由于系统初始环境的不同,容易发生各种各样的错误,要充分利用日志文件,分析其中记录的信息,给问题解决予以帮助。

参考文献:

[1] 鸟哥.鸟哥的Linux 私房菜:服务器架设篇[M].北京: 机械工业出版社, 2012.