selinux mysql_MySQL的selinux配置

一、selinux的概念:

selinux是Security Enhanced Linux (安全强化 Linux)的简称,selinux涉及到主体(subject,一般指进程)、操作(operation)、对象(object,又称资源,如:文件、网络端口),selinux用于控制“主体”能以何种“操作”方式访问什么“对象”。

selinux环境中,所有的“主体(进程)”被赋予一个“domain”标签,所有的“对象”也被赋予一个“type”类型标签,“domain”标定的“主体”能访问哪些“type”标定的“对象”,由selinux的安全策略定义。

二、selinux环境:

selinux有三种状态,分别是:Enforcing:强制模式,selinux正严格按照策略运行中;

Permissive:宽容模式,selinux正在运行中,但是只记录日志,不执行实际限制;

Disabled:禁用模式,selinux环境未被开启;

我们可以使用“getenforce”命令查看selinux是否在强制模式中运行:[root@aiezu.com ~]# getenforce

Disabled  如果状态为“Disabled”,我们必须在"/etc/sysconfig/selinux"文件中,将“SELINUX=disabled”改为“SELINUX=enforcing”,并重启服务器后才能开启;

如果状态为“Permissive”,可以直接使用“setenforce 1”命令临时改为强制状态:[root@aiezu.com ~]# getenforce

Permissive

[root@aiezu.com ~]# setenforce 1

[root@aiezu.com ~]# getenforce

Enforcing

三、mysql服务中的selinux定义:

1、mysql进程主体的domain标签:

在selinux环境中,mysqld的“domain”标签为“mysqld_t”、mysqld在受限的“mysqld_t”域中仅能访问指定的资源;

2、selinux环境中mysql能访问的资源标签:标签名用途

mysqld_db_t这种文件类型用于标记MySQL数据库数据文件;

在RHEL/CentOS中数据文件的默认位置是“/var/lib/mysql”;

如果修改了MySQL数据文件的位置,新的位置必须使用这种类型标签;

mysqld_etc_t这种文件类型用于标记MySQL的配置文件;

默认位置为:

主配置文件:“/etc/my.cnf”;

其他配置文件:“/etc/my.cnf.d/”目录下的文件;

mysqld_exec_t这种文件类型用于标记MySQL主进程文件;

默认为:“/usr/libexec/mysqld”或者“/usr/sbin/mysqld”;

可以通过“whereis mysqld”命令查找;

mysqld_initrc_exec_t这种文件类型用于标记MySQL的初始化脚本;

默认为:“/etc/rc.d/init.d/mysqld”;

“service mysqld start”中“mysqld”用的就是此脚本;

mysqld_log_t这种文件类型用于标记日志文件;

mysqld_var_run_t这种文件类型用于标记MySQL运行时产生的文件;

默认在“/var/run/mysqld”目录中,主要包括:

/var/run/mysqld/mysqld.pid

/var/run/mysqld/mysqld.sock

3、selinux中mysq的布尔变量:变量名含义

allow_user_mysql_connect当这个变量值为“1”时允许用户连接数据库;

exim_can_connect_db当这个变量值为“1”时允许exim邮件程序访问数据库服务器;

ftpd_connect_db当这个变量值为“1”时允许ftpd进程访问数据库服务器;

httpd_can_network_connect_db当这个变量值为“1”时允许httpd进程访问数据库服务器;

四、配置演示:

下面演示在selinux环境中,由于修改了mysql的数据存放路径,而导致的selinux权限错误、及其修正方法;在测试前,我们得先得确认我们的linux系统处于“selinux”环境,请参考第二步。

1、首先,我们在修改mysql路径前确定mysql是能正常运行的,并停止mysql服务:[root@aiezu.com ~]# service mysql stop

Shutting down MySQL.. SUCCESS!

[root@aiezu ~]# service mysql start

Starting MySQL. SUCCESS!

[root@aiezu.com ~]# lsof -i:3306

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME

mysqld 5166 mysql 10u IPv6 22791 0t0 TCP *:mysql (LISTEN)

[root@aiezu.com ~]# service mysql stop

Shutting down MySQL.. SUCCESS!

2、创建新的mysql数据存放路径,并使用“mysql_install_db”初始化目录;我这里只是测试,原数据库的数据不需要保留,如果需要保留,需要想将原数据库备份,修改路径完成正常运行后再恢复:[root@aiezu.com ~]# mkdir -p /storage/db

[root@aiezu.com ~]# mysql_install_db --datadir=/storage/db/

[root@aiezu.com ~]# chown -R mysql:mysql /storage/db/

3、在mysql的配置文件"/etc/my.cnf"中,在"[mysqld]"组下,将"datadir="的值改成新的路径;修改后我的配置文件内容如下:[mysqld]

datadir=/storage/db/

socket=/storage/db/mysql.sock

pid-file=/storage/db/aiezu.com.pid

[mysqld_safe]

log-error=/var/log/mysqld.log

[client]

socket=/storage/db/mysql.sock  注意“[mysqld]”组和“[client]”组下的“socket=”后面的值要一致,否则运行mysql连接数据的时候会提示如下错误:ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

4、尝试启动MySQL,观察提示的错误(由于我们上面没有为新的mysql目录设置selinux权限,这里一定会报错的):[root@aiezu.com ~]# service mysql start

Starting MySQL. ERROR! The server quit without updating PID file (/storage/db/aiezu.com.pid).  在mysql的日志文件中能看到更详细的错误信息,可以在“my.cnf”中找到日志文件的路径,我这里的路径为“/var/log/mysqld.log”:161201 23:26:55 mysqld_safe Starting mysqld daemon with databases from /storage/db/

2016-12-01 23:26:56 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).

2016-12-01 23:26:56 0 [Warning] Can't create test file /storage/db/aiezu.lower-test

2016-12-01 23:26:56 0 [Note] /usr/sbin/mysqld (mysqld 5.6.34) starting as process 6215 ...

2016-12-01 23:26:56 6215 [Warning] Can't create test file /storage/db/aiezu.lower-test

2016-12-01 23:26:56 6215 [Warning] Can't create test file /storage/db/aiezu.lower-test

2016-12-01 23:26:56 6215 [Note] Plugin 'FEDERATED' is disabled.

^G/usr/sbin/mysqld: Can't find file: './mysql/plugin.frm' (errno: 13 - Permission denied)

2016-12-01 23:26:56 6215 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.

...

2016-12-01 23:26:56 6215 [ERROR] InnoDB: os_file_get_status() failed on './ibdata1'. Can't determine file permissions

2016-12-01 23:26:56 6215 [ERROR] InnoDB: The system tablespace must be writable!

...  可以看到日志文件中出现了“Permission denied”字样,这就是由于selinux权限引起的(上面我们设置了文件系统权限,所以不是文件系统权限引起的);

5、使用chcon命令为mysql数据目录设置selinux权限,并启动mysql,发现启动成功:[root@aiezu.com ~]# chcon -R -t mysqld_db_t /storage/db/

[root@aiezu.com ~]# service mysql start

Starting MySQL. SUCCESS!

[root@aiezu.com ~]# lsof -i:3306

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME

mysqld 6590 mysql 10u IPv6 24127 0t0 TCP *:mysql (LISTEN)

[root@aiezu.com ~]# ps -eZ|grep mysqld

unconfined_u:system_r:mysqld_safe_t:s0 6437 ? 00:00:00 mysqld_safe

unconfined_u:system_r:mysqld_t:s0 6590 ? 00:00:00 mysqldchcon命令的用法请参考:http://aiezu.com/article/linux_chcon_command.html

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值