FTP作为最常见的文件共享服务,可提供文件的上传,下载等服务;其用户可分为三类:
匿名用户:即不需要用户账号与密码即可登录FTP服务器,此时登录用户将会被映射为系统上的ftp用户。
系统用户:即用FTP服务器上的用户账号与密码登录FTP服务器。此种方法虽然在一定程度上对登录做出了限制,但由于系统账号的相关权限,则增大了FTP服务器的系统风险;
虚拟用户:用户需要利用专为FTP服务创建的用户账号与密码进行登录;如此,既能限制FTP的登录用户,又尽量保证了FTP服务器的系统安全;
下面我们就以CentOS7为例来实现基于mysql对FTP服务设置虚拟用户登录。
1、环境搭建;
首先,我们需要在系统上安装vsftpd与mariadb-server,由于需要实现虚拟用户认证,所以我们还需要安装pam。
yum –y install vsftpd mariadb-server pam
由于基于mysql数据库实现虚拟用户认证,所以我们需要将虚拟用户的相关数据存放在mysql中,如此一来,我们还需要安装pam_mysql。由于CentOS7上没有pam_mysql的rpm包,所以我们需要编译安装。具体步骤如下:
yum –y groupinstall “Development Tools” “Server Platform Development” #安装开发包组 yum –y install –y pam-devel mairadb-devel #安装所需开发包 ./configure –with-pam=/usr –with-mysql=/usr –with-pam-mods-dir=/usr/lib64/security make mke install
至此,我们需要的环境搭建完成。
2、vsftpd常用选项;
vsftpd的配置文件主要为/etc/vsftpd/vsftpd.conf,我们以用户相关作为分类来了解一下其常见配置;
匿名用户相关配置:
anonymous_enable=YES|NO #是否允许匿名用户登录; anon_upload_enable=YES|NO #是否允许匿名用户上传; anon_mkdir_write_enable=YES|NO #是否允许匿名用户创建文件夹; anon_other_write_enable=YES|NO #是否允许匿名用户拥有其他写权限,如删除、新建文件等;
系统用户相关配置:
local_enable=YES|NO #是否允许系统用户登录; write_enable=YES|NO #是否允许系统用户具有写权限;
3、mysql相关配置;
我们需要在mysql中配置vsftpd服务所需的一些数据库及内容;
a、启动mysql服务;
systemctl start mariadb.service
b、初始化mysql;
mysql_secure_installation
c、创建所需数据库及表格;
mysql> create database vsftpd; mysql> use vsftpd; mysql> create table user (id int unsigned not null auto_increment primary key,name char(10) not null,password char(48)); mysql> insert into user (name,password) values (‘tom’,password(‘mageedu’)),(‘jerry’,password(‘mageedu’)); mysql> grant all on vsftpd.* to ‘vsftpd’@’localhost’ identified by ‘mageedu’; mysql> grant all on vsftpd.* to ‘vsftpd’@’127.0.0.1’ identified by ‘mageedu’; mysql> flush privileges;
可以看到,我们创建了tom与jerry两个用户,且密码都为mageedu,如此,我们在mysql中需要创建的相关数据已经完成;
4、创建所需用户与目录;
由于FTP的虚拟用户机制是将虚拟用户映射为本机的一个来宾用户,因此我们先在本机新建一个用户作为虚拟用户的映射用户;
ueradd –d /ftproot vuser chown root:root /ftproot mkdir /ftproot/{upload,pub} setfacl –m u:vuser:rwx /ftproot/upload
5、配置pam与vsftpd;
首先我们需要修改vsftpd的几项配置选项如下:
pam_server_name=vsftpd.mysql #指定pam的相关配置文件; guest_enable=YES #启用来宾账户; guest_username=vuser #指定虚拟用户映射的来宾账户名; user_config_dir=/etc/vsftpd/user_conf #指定虚拟用户配置文件目录;
然后我们在/etc/pam.d/目录下新建文件vsftpd.myslq,内容如下:
auth required /usr/lib64/security/pam_mysql.so user=vsftpd passwd=mageedu host=127.0.0.1 db=vsftpd table=user usercolumn=name passwdcolumn=password crypt=2 account required /usr/lib64/security/pam_mysql.so user=vsftpd passwd=mageedu host=127.0.0.1 db=vsftpd table=user usercolumn=name passwdcolumn=password crypt=2
下面即为此文件中一些字段的意义:
user:连接mysql服务器的用户名,此用户要有权限访问认证vsftpd服务的数据库;
passwd:连接mysql服务器用户的密码;
host:mysql服务器主机地址;
db:认证vsftpd服务的数据库名称;
table:存放了用户和密码的表;
usercolumn:用户名对应的字段;
passwdcolumn:密码对应的字段;
crypt:密码加密方法
6、创建各虚拟用户配置文件
首先我们新建vsftpd.conf配置文件中指定的用户配置文件存放目录。
mkdir /etc/vsftpd/user_conf
然后在此目录下创建tom与jerry两个虚拟用户同名的权限配置文件。对于权限配置文件我们可根据需要给予相应的权限,在此,我们为两位用户给予相同的权限,内容如下:
vim –o /etc/vsftpd/user_conf/{tom,jerry} anon_upload=YES anon_mkdir_enable=YES anon_other_enable=YES
至此,我们所需的服务以配置完毕。
设置好防火墙与SELinux后,启动服务即可。
iptables –F setenforce 0 systemctl start vsftpd
原创文章,作者:luoliumeng,如若转载,请注明出处:http://www.178linux.com/53777