实验准备:本实验在两台CentOS主机上实现,一台做为FTP服务 器,一台做数据库服务器
- 一台CentOS-7当MYSQL服务器
- 一台CentOS-6当FTP服务器
注意,这里谁当FTP服务器很关键,因为有一个PAM模块包是CentOS-7上没有的,需要源码编译,pam_mysql,下面我先演示CentOS-6当FTP服务器的例子
CentOS-6当FTP服务器
一,配置数据库服务器
1,在数据库服务器端安装mariadb-server包
yum –y install mariadb-server
systemctl start mariadb
# 设为开机自动启动
systemctl enable mariadb
2,为了安全起见可以运行一下mariadb安全脚本
"mysql_secure_installation"
第一项问你:输入root密码 回车即可,因为没有
第二项问你:需要设置root密码么,当然要 敲Y
第三项问你:需要删除空账号用户么,当然要 敲Y
第四项问你:禁止root用户远程登入么,根据你们公司的需要
第五项问你:需要删除test测试数据哭么,我不需要
第六项问你:现在重新加载权限表吗 ,当然
3,在mariadb服务器端建立虚拟用户账号
1,创建存储虚拟用户数据库和连接的数据库用户(带有mysql>的就表示需要连接到数据库执行操作)
#创建数据库
mysql> CREATE DATABASE vsftpd;
#查看数据库是否创建成功
mysql> SHOW DATABASES;
2,创建管理vsftpd数据库的用户。
mysql> GRANT all ON vsftpd.* TO vsftpd@'192.168.136.6' IDENTIFIED BY 'centos';
命令解析:
GRANT: 创建授权用户关键字
all : 表示拥有对vsftpd这个数据库的所有权限
vsftpd.*: 表示指定vsftpd的所有表
vsftpd@'192.168.136.6': @ 前的vsftpd表示用户名,@ 后面的表示该用户只能在192.168.136.6这个主机登入,如果想表示一个网段可以加百分号:192.168.136.%
IDENTIFIED BY 'centos': 作用设置密码,centos就是该用户的密码。
准备存放用户的相关表
#切表
mysql> USE vsftpd;
#查看表
Mysql> SHOW TABLES;
#创建users表
mysql>create table users (id int auto_increment not null primary key,name varchar(30) binary not null, password varchar(50) binary not null);
命令解析:
create table users:创建表名为users子句
口号里的就表结构,用逗号分开的表示字段例如:第一个字段为id,第二个字段为name,第三个字段为password
修饰符:
int: 表示该字段为数字,
auto_increment:表示该字段是整数自动增长
not null: 表示该字段不能为空
primary key: 表示该字段为主键
varchar(30): 表示该字段可以是任意字符长度为30个
binary: 作用是让字段能够用于登入验证
在user表中添加虚拟用户
根据需要添加所需要的用户,为了安全应该使用PASSWORD 函数加密其密码后存储
#查看表结构
mysql>DESC users;
#插入内容
mysql> INSERT INTO users(name,password) values('wang',password('wang'));
#插入内容
mysql> INSERT INTO users(name,password) values('li',password('li'));
#查看表内容
mysql> SELECT * FROM users;
二,配置FTP服务器
1,在FTP服务器上安装vsftpd和pam_mysql包
centos6:pam_mysql由epel6的源中提供
配置epel源:
[epel]
name=centos-epel
baseurl=http://mirrors.aliyun.com/epel/6/x86_64/
gpgcheck=0
enable=1
#安装模块,以及FTP服务器端包
yum install vsftpd pam_mysql
2,创建FTP所需PAM模块认证文件
因为需要连接数据库所以之前的PAM块已经不能用了,需要自己配置
在/etc/pam.d/目录下创建一个名为vsftpd.mysql存放PAM模块的配置文件
cd /etc/pam.d/
touch vsftpd.mysql
vim vsftpd.mysql
添加如下几行:
auth required pam_mysql.so user=vsftpd passwd=centos host=数据库IP地址 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required pam_mysql.so user=vsftpd passwd=centos host=数据库IP地址 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
配置字段说明
• auth 表示认证
• account 验证账号密码正常使用
• required 表示认证要通过
• pam_mysql.so模块是默认的相对路径,是相对/lib64/security/路 径而言,也可以写绝对路径;后面为给此模块传递的参数
• user=vsftpd为登录mysql的用户
• passwd=magedu 登录mysql的的密码
• host=mysqlserver mysql服务器的主机名或ip地址
• db=vsftpd 指定连接msyql的数据库名称
• table=users 指定连接数据库中的表名
• usercolumn=name 当做用户名的字段
• passwdcolumn=password 当做用户名字段的密码
• crypt=2 密码的加密方式为mysql password()函数加密
注意 :crypt是加密方式,0表示不加密,1表示crypt(3)加密,2表示 使用mysql password()函数加密,3表示md5加密,4表示sha1 加密
3,建立系统普通用户,用作于虚拟用户映射的用户
一,创建用户,共享目录
#创建虚拟用户映射的系统用户及对应的目录
useradd -s /sbin/nologin -d /var/ftproot vuser
#修改对应的目录权限,因为FTP共享根目录不能有写权限
chmod 555 /var/ftproot
#创建可以上传下载的共享目录
mkdir /var/ftproot/{upload,pub}
#并给vuser用户ACL权限
setfacl –m u:vuser:rwx /var/ftproot/upload
修改主配置文件
确认/etc/vsftpd.conf中是否已经启用了以下选项
#支持匿名用户登入
anonymous_enable=YES
#添加下面两项 ,作用是支持虚拟用户映射为某一个系统用户
guest_enable=YES
guest_username=vuser
#修改下面一项,原系统用户无法登录
pam_service_name=vsftpd.mysql
4,启动FTP服务
#启动服务
service vsftpd start
#开机自动启动
chkconfig vsftpd on
#查看端口打开情况
ss -ntlp|grep :21
5,SELinux相关配置
1,restorecon -R /lib64/security
2,setsebool -P ftpd_connect_db 1
3,setsebool -P ftp_home_dir 1
4,chcon -R -t public_content_rw_t /var/ftproot/
最后测试
1,li用户登入测试:成功
[root@ansible-7 ~]# ftp 192.168.136.6
Connected to 192.168.136.6 (192.168.136.6).
220 (vsFTPd 2.2.2)
Name (192.168.136.6:root): li
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
2,wang用户登入测试:成功
[root@ansible-7 ~]# ftp 192.168.136.6
Connected to 192.168.136.6 (192.168.136.6).
220 (vsFTPd 2.2.2)
Name (192.168.136.6:root): wang
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
三,实现每个虚拟用户具有各自不同的权限
1,修改主配置文件
vim /etc/vsftpd/vsftpd.conf
添加如下选项,作用是让虚拟用户支持独立权限配置文件,可以自定义存放目录。
user_config_dir=/etc/vsftpd/vusers_config/
2,在/etc/vsftpd/vusers_config/目录下创建每个虚拟用户的权限配置文件,文件名对应用户名
mkdir /etc/vsftpd/vusers_config/
cd /etc/vsftpd/vusers_config/
touch wang
touch li
"注意:虚拟用户对vsftpd服务的访问权限是通过匿名用户的相关 指令进行的。 "
下面的权限都可以添加至文件中,需要什么权限添加什么权限
#是否支持上传功能
anon_upload_enable={YES|NO}
#是否支持创建文件功能
anon_mkdir_write_enable={YES|NO}
#是否支持删除文件功能
anon_other_write_enable={YES|NO}
#指定虚拟账户登入的共享目录
local_root=/ftproot
例如:让wang用户支持上传,下载,删除文件的权限那么只需要在wang的权限配置文件中添加如下几行
"注意:需确保对应的映射用户对于文件系统有写权限"
vim wang
anon_upload_enable=YES
anon_other_write_enable=YES
anon_mkdir_write_enable=YES
CentOS-7当FTP服务器只有一个地方不同,就是需要编译安装pam_mysql模块,其他概略相同。
步骤:
# 安装开发包组
yum -y groupinstall "Development Tools"
# 安装相关依赖包
yum -y install mariadb-devel pam-devel vsftpd
# 去官网下载pam_mysql-0.7RC1.tar.gz源码包
https://sourceforge.net/projects/pam-mysql/
# 解压缩包
tar xvf pam_mysql-0.7RC1.tar.gz
# 进入pam_mysql-0.7RC1/目录开始编译
cd pam_mysql-0.7RC1/
# 运行configure脚本
./configure \
--with-mysql=/usr \
--with-pam=/usr \
--with-pam-mods-dir=/lib64/security
# 编译开始
make -j 4
# 安装程序
make install