如何用SELinux保护Apache Web服务器?

你的Web服务器确实有可能遭受攻击,但是SELinux可以用来确保你的网站不用承受真正的伤害。

你可以运用SELinux类型来创建一个确切定义:一个服务可以做什么和它在哪里完成要做的事情。默认情况下,httpd_sys_content 类型被设为/var/www,它规定httpd进程可以在该目录中工作。如果攻击者破坏了Apache Web服务器并尝试在别处写入,就像红帽和Fedora以及CentOS等相似Linux版本的默认/tmp,你需要知道你正在处理什么。如果你配置 Apache来为/data目录中的内容服务,SELinux也会默认地防止这种情况。

由于这些默认设置可能造成复杂的情况,很多Linux管理员关闭SELinux。虽然关闭SELinux的确让你的服务器提供服务时更容易,但是它还是增加了安全风险。

为Apache管理SELinux设置

为Apache等服务管理SELinux设置并不难。问题是并没有简单的图形工具可以让你快速安装。但只要用三条命令,你就可以配置它。

为了在你想让服务访问到的目录上设置文件类型,你首先必须决定要使用的文件系统类型。要这么做,只需在服务使用的默认目录上输入ls –ldZ。

对于Apache,你会使用ls –ldZ /var/www。你会注意到在这种情况下,–Z选项给出了额外的文件属性,而–t选项才是最关键的一个。这个进程规定现有的文件系统类型,这个系统类型是Apache设置的(httpd_sys_content_t)。这也是你需要按照新文件根设置的文件类型。

你可以用两条命令设置你的内容形式:用chcon你可以做一次暂时的变更,它在重启后消失;用followed by紧跟着的semanage,你可以做永久的变更。

semanage命令似乎有些复杂,但它实际上非常简单,因为你只需要改变你想要用的类型和目标目录。在下面的例子中,你只需要改变两个参数。

semanage fcontext -a -t httpd_sys_content_t /web(/.*)/?

在运用semanage设置默认文件类型之后,运用restorecon命令来确保它得到应用了。在上面的例子中,针对目录/web的文件类型被变更来允许到那个目录上服务器文件的Apache,运行以下命令来应用该变更:

restorecon -R -v /web

在这一点上,Apache将能服务于新的非默认文件根目录上的文件。

为SELinux管理布尔值

你需要管理的SELinux的另一个方面是SELinux布尔值。这些都是开启或关闭某些功能的二进制值。布尔值可以在多种服务中获得。运用getsebool –a命令来概观整个现有的布尔值。该命令通常会将你能应用的设置列成一个长长的列表。

要为你想配置的服务找到所有布尔值,通过grep传输所有getsebool –a的输出。举例来说,运用getsebool –a | grep http来找到所有与行http匹配的布尔值。即使你并不是对所有布尔值都有明确认识,你通常还是可以通过观察它们的名字和它们可能做的事情查明白。

使用getsebool –a来找出哪个SELinux可以用来修改服务行为:

[root@bia Desktop]# getsebool -a | grep http

allow_httpd_anon_write –> off

allow_httpd_mod_auth_ntlm_winbind –> off

allow_httpd_mod_auth_pam –> off

allow_httpd_sys_script_anon_write –> off

httpd_builtin_scripting –> on

httpd_can_check_spam –> off

httpd_can_network_connect –> off

httpd_can_network_connect_cobbler –> off

httpd_can_network_connect_db –> off

httpd_can_network_relay –> off

httpd_can_sendmail –> off

httpd_dbus_avahi –> on

httpd_enable_cgi –> on

httpd_enable_ftp_server –> off

httpd_enable_homedirs –> off

httpd_execmem –> off

httpd_read_user_content –> off

httpd_setrlimit –> off

httpd_ssi_exec –> off

httpd_tmp_exec –> off

httpd_tty_comm –> on

httpd_unified –> on

httpd_use_cifs –> off

httpd_use_gpg –> off

httpd_use_nfs –> off

学会了你想用哪个布尔值后,运用setsebool -P来应用它们。如果你想允许Apache运用nfs,在上面运用setsebool -P http_use_nfs。想要得到所有可用布尔值的完整列表,咨询一下httpd_selinux页面,这个页面解释了Apache特有的文件标签和布尔值。