周军宏
摘要:介绍了在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.