selinux基本概念
selinux是Security Enhanced Linux (安全强化 Linux)的简称,selinux涉及到主体(subject,一般指进程)、操作(operation)、对象(object,又称资源,如:文件、网络端口),selinux用于控制“主体”能以何种“操作”方式访问什么“对象”。
selinux环境中,所有的“主体(进程)”被赋予一个“domain”标签,所有的“对象”也被赋予一个“type”类型标签,“domain”标定的“主体”能访问哪些“type”标定的“对象”,由selinux的安全策略定义。
selinux三种状态
Enforcing:强制模式,selinux正严格按照策略运行中;
Permissive:宽容模式,selinux正在运行中,但是只记录日志,不执行实际限制;
Disabled:禁用模式,selinux环境未被开启;
查看selinux的状态:
getenforce
安全上下文命令
selinux针对文件的规则由安全上下文来管控,selinux安全上下文的三个主要命令:
1、chcon命令
临时修改selinux的安全上下文,一般不用。
chcon [-R] [-t type] [-u user] [-r role] 文件
chcom [-R] --reference=范例文件 文件
# 相关参数与选项
-R:连同该目录下的子目录也同时修改
-t:后面接安全上下文的类型栏位。例如:httpd_sys_content_t
-u:后面接身份识别(不重要)。例如:system_u
-r:后面接角色(不重要)。例如:system_r
-v:若有变动成功,将变动的结果列出来
--reference:拿某个文件当范例来修改后续接的文件的类型
2、restorecon命令
让文件的SELinux类型恢复为默认的SELinux类型,默认的SELinux类型由semanage命令所配置的规则所确定。当新配置了selinux安全上下文规则之后用改命令使之生效。
restorecon [-Rv] 文件/目录
相关参数
-R:连同子目录一起修改
-v:将过程显示到屏幕
3、semanage命令
查询/修改/增加/删除selinux安全上下文规则。主要通过该命令进行selinux的配置。
semanage [login/user/port/interface/fcontext/translation] -l
semanage fcontext -{a/d/m} [-frst] file_spec
相关参数与选项
-l:查询
fcontext:主要用在安全上下文方面的用途(常用的)
-a:增加的意思,你可以增加一些目录的默认安全上下文类型设置
-m:修改的意思
-d:删除的意思
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进程访问数据库服务器;