在某些Linux发行版上,默认情况下启用SELinux,如果不了解SELinux的工作原理以及如何配置它的基本详细信息,则可能会导致一些不必要的问题。一般强烈建议了解了SELinux 之后再去实现它。但是,在了解 SELinux 的实现细节之前,可能希望禁用它以避免一些不必要的问题。正常情况下安装 RHEL/CentOS 或多个衍生产品时,SELinux 功能或服务默认处于启用状态,因此,系统上的某些应用程序实际上可能不支持此安全机制。但是,要使此类应用程序正常运行,则必须禁用或关闭 SELinux。SELinux 是内置于 Linux 内核中的强制访问控制(MAC)执行器。它限制了其漏洞可能对系统构成威胁的单个服务的权限。没有 SELinux 的CentOS系统依赖于其所有特权软件应用程序的配置。单个错误配置可能会危及整个系统。下面就来看一下Linux如何关闭selinux。
SELinux将强制执行安全策略,包括美国国防部使用Linux内核中定义的Linux安全模块(LSM)定义的强制性访问控制。系统中的每个文件和进程都将使用 SELinux 将使用的特定标签进行标记。您可以使用 ls -Z 并查看这些标签,如下所示。
1,检查selinux是否开启
在关闭selinux之前,可以通过以下命令来查看seLinux是否开启。
[root@sharplee ~]# sestatus
通过上面命令可以看出selinux是开启的,那么如何进行关闭呢?
SELinux 可能会阻止应用程序的正常运行。在以下情况下,该服务将拒绝访问:
文件被错误标记。
不兼容的应用程序尝试访问禁止的文件。
服务在不正确的安全策略下运行。
检测到入侵。
如果发现服务未正常运行,请检查SELinux 日志文件。日志位于 /var/log/audit/audit.log。最常见的日志消息都标有“AVC”。如果找不到任何日志,请尝试在 /var/log/messages 中查找。如果已审核的守护程序未运行,系统将在该文件中写入日志。
2,临时关闭selinux
要暂时禁用 SELinux,您必须修改 /selinux/enforce 文件,如下所示。请注意,重新启动系统后,此设置将消失。
[root@localhost ~]# echo 0 > /selinux/enforce
or
[root@localhost ~]# setenforce 0
3,永久关闭selinux
要永久禁用 SELinux,请修改 /etc/selinux/config 并将 SELINUX=disabled,如下所示。对 /etc/selinux/config 进行任何更改后,重新启动服务器以考虑进行更改。
[root@localhost ~]# cat /etc/selinux/config
接下来修改配置文件中的selinux选项,修改为disabled。
接着,保存并重启,之后看到的selinux就被关闭了。
以下是/etc/selinux/config文件中 SELINUX变量的可能值:
enforcing – 安全策略始终是强制的
permissive – 这仅通过仅打印警告消息而不是真正执行SELinux来模拟强制执行策略。这很好,首先看看SELinux是如何工作的,然后弄清楚应该执行哪些策略。
disabled – 完全禁用 SELinux
以下是 /etc/selinux/config 文件中 SELINUXTYPE 变量的可能值。这表示可用于 SELinux 的策略类型。
targeted – 此策略将仅保护特定的目标网络守护程序。
strict – 这是为了最大程度的 SELinux 保护。
4,从Grub Boot Loader禁用 SELinux
如果无法在系统上找到 /etc/selinux/config 文件,则可以通过将禁用 SELinux 作为参数传递给 Grub Boot Loader 来传递禁用 SELinux,如下所示。
[root@localhost ~]# cat /boot/grub/grub.conf
default=0
timeout=5
kernel /boot/vmlinuz-2.6.18-92.el5 ro root=LABEL=/ rhgb quiet selinux=0
initrd /boot/initrd-2.6.18-92.el5.img
5,关闭特定的服务在SELinux比如HTTP/Apache
如果有时候不需要对整个SELinux进行禁用,也可以仅针对特定服务禁用SELinux。例如,禁用SELinux for HTTP/Apache服务,修改/etc/selinux/targeted/booleans文件中的httpd_disable_trans变量。将httpd_disable_trans变量设置为1,如下所示。
[root@localhost ~]# grep httpd /etc/selinux/targeted/booleans
httpd_builtin_scripting=1
httpd_disable_trans=1
httpd_enable_cgi=1
httpd_enable_homedirs=1
httpd_ssi_exec=1
httpd_tty_comm=0
httpd_unified=1
使用 setsebool 命令设置 SELinux 布尔值,如下所示。请确保在此更改后重新启动 HTTP 服务。
[root@localhost ~]# setsebool httpd_disable_trans 1
[root@localhost ~]# service httpd restart
总结:要关闭selinux可以使用setenforce 0 来临时关闭selinux,也可以通过修改配置文件来永久关闭selinux。也可以通过关闭具体的服务,而不是完全关闭selinux。