强制访问控制安全子系统
SELinux全称为Security-Enhanced Linux是美国国家安全局在Linux社区帮助下开发的一个强制访问控制的安全子系统,SELinux属于MAC强制访问控制(Mandatory Access Control)——即让系统中的各个服务进程都受到约束,即仅能访问到所需要的文件。 以本人的亲身经历不得不说国内很多运维人员对SELinux的理解不深,导致该功能在很多服务器中直接被禁用。 模式一: enforcing – 安全策略强制启用模式,将会拦截服务的不合法请求。 模式二: permissive – 遇到服务越权访问只会发出警告而不强制拦截。 模式三: disabled – 对于越权的行为不警告,也不拦截。 有时关闭SELinux后确实能够减少报错几率,但这极其的不推荐并且本书实验环境均为开启状态,确保您的SELinux服务是默认启用的: 第1步:切换到SELinux服务的配置文件目录”/etc/selinux“。 第2步:编辑config文件将模式改为强制启用,记得保存哦! 如果发现SELINUX=permissive或disabled那就赶紧改过来吧:
[root@linuxprobe ~]# cd /etc/selinux
[root@linuxprobe selinux]# vim config SELINUX=enforcing
此时可以来查询下当前的SELinux服务状态:
[root@linuxprobe ~]# getenforce Enforcing
9.6 允许SELinux策略
哦~~原来如此,为了确认是这个讨厌的SELinux服务在捣鬼,我们来先关闭它试试吧: [root@linuxprobe ~]# setenforce 0 检查状态,现在已经是“禁止模式”了: [root@linuxprobe ~]# getenforce Permissive 打开浏览器再键入http://127.0.0.1,果然成功了! [root@linuxprobe wwwroot]#firefox 果然是因为没有配置好SELinux服务,再次开启它吧: [root@linuxprobe ~]# setenforce 1 刚刚浏览器里报错说“禁止,你没有访问index.html文件的权限”,那怎么开启SELinux的允许策略呢? SELinux安全策略包括域和安全上下文: SELinux域:对进程资源进行限制(查看方式:ps -Z) SELinux安全上下文:对系统资源进行限制(查看方式:ls -Z) 使用”ls -Z“命令检查下新旧网站数据目录的SELinux安全上下文有何不同吧:
[root@linuxprobe ~]# ls -Zd /var/www/html drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html
[root@linuxprobe ~]# ls -Zd /home/wwwroot drwxrwxrwx. root root unconfined_u:object_r:home_root_t:s0 /home/wwwroot
SELinux安全上下文是由冒号间隔的四个字段组成的,以原始网站数据目录的安全上下文为例分析下吧: 用户段:root表示root账户身份,user_u表示普通用户身份,system_u表示系统进程身份。 角色段:object_r是文件目录角色,system_r是一般进程角色。 类型段:进程和文件都有一个类型用于限制存取权限。 解决办法就是将当前网站目录”/home/wwwroot“的安全上下文修改成system_u:object_r:httpd_sys_content_t:s0就可以啦~ semanage命令用于查询与修改SELinux的安全上下文,格式为:“semanage [选项] [文件]”。
参数 | 作用 |
-l | 查询 |
-a | 增加 |
-m | 修改 |
-d | 删除 |
restorecon命令用于恢复SELinux文件安全上下文,格式为:“restorecon [选项] [文件]”。
-i | 忽略不存在的文件 |
-e | 排除目录 |
-R | 递归处理(针对目录使用) |
-v | 显示详细的过程 |
-F | 强制恢复 |
修改网站数据目录的安全上下文:
[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot
修改网站数据的安全上下文(*代表所有文件或目录):
[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/*
这样操作后查看到SELinux安全上下文依然没有改变,不要着急,再执行下restorecon命令即可:
[root@linuxprobe ~]# restorecon -Rv /home/wwwroot/
再来刷新浏览器后看到正常页面:
[root@linuxprobe ~]# firefox
真可谓是一波三折,原本以为将Apache服务配置妥当就大功告成,结果却受到了SELinux安全上下文的限制,看来真是要细心才行。