SELinux教程:如何配置RHEL5和Web服务器?

日期: 2011-02-14 作者:Khurram Shiraz翻译:Dan 来源:TechTarget中国 英文

本文的主题是RHEL 5上的SELinux配置。RHEL同时提供了图形用户界面(GUI)和命令行两种方式配置SELinux。为了表现SELinux的简单易用,本文使用RHEL的GUI来启用SELinux。   要从RHEL的GUI启用SELinux,依次点击系统(system)>管理(Administration)>安全级别和防火墙(Security Level and Firewall)。

进入SELinux选项卡,将SELinux设置为“允许模式(permissive mode)”,然后重启服务器。   以允许模式启动SELinux是(学习配置使用SELinux的)不错的实践。在……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

本文的主题是RHEL 5上的SELinux配置。RHEL同时提供了图形用户界面(GUI)和命令行两种方式配置SELinux。为了表现SELinux的简单易用,本文使用RHEL的GUI来启用SELinux。

  要从RHEL的GUI启用SELinux,依次点击系统(system)>管理(Administration)>安全级别和防火墙(Security Level and Firewall)。进入SELinux选项卡,将SELinux设置为“允许模式(permissive mode)”,然后重启服务器。

SELinux,教程,配置,RHEL5,Web服务器

  以允许模式启动SELinux是(学习配置使用SELinux的)不错的实践。在这种模式下,你可以近距离感受和接触SELinux,但不影响服务器和应用程序/数据库中的任何东西。测试期间,你必须仔细查看日志信息,检查所有的警告以及所有由程序和数据库在操作期间产生的拒绝错误。

  设置SELinux为允许模式并重启我的RHEL后,我没有发现任何不同。我以根账户登入系统,然后使用sestatus命令查看SELinux环境的运行状况。

SELinux,教程,配置,RHEL5,Web服务器

  既然SELinux已经启动并在允许模式下运行,那么是时候对SELinux进行管理了。RHEL提供了一个GUI来进行SELinux的策略管理,根用户可以使用system-config-SELinux命令对这个GUI进行初始化。该命令将打开GUI的主界面,在RHEL或Fedora Linux中你都可以看到如下的窗口:

SELinux,教程,配置,RHEL5,Web服务器

  上图中,你可以在左边框中找到SELinux管理的主要选项。第二个选项“Boolean”包含了SELinux管理中大部分默认服务和进程的布尔条件。同样的条件也可以使用getsebool命令列出。举个例子,如果你只想知道已有的关于ftpd守护进程的布尔条件,那么你可以使用如下的命令:

SELinux,教程,配置,RHEL5,Web服务器

  要改变布尔条件,如allow_ftpd_use_cifs=off——该条件意味着FTP进程不能使用cifs协议进行公共文件传输——我们可以在system-config-SELinux界面中单击“Boolean”选项卡下对应的条件(条目),如下图所示。此项操作将允许FTP服务使用cifs协议进行公共文件传输。你可以针对ftpd进程执行getsebool和grep命令,确认刚才的操作是否生效。

SELinux,教程,配置,RHEL5,Web服务器

  使用SELinux的安全上下文保护Web服务器

  假设我们想要在Linux服务器上运行Apache Web服务器程序,由于这台服务器会运行一些关键应用,并暴露在互联网上,所以我们想确保这台Web服务器受到尽可能多的保护。

  如果你启动Web服务并尝试配置你的Web服务器允许执行某些CGI脚本,如hello.pl,那么如果不改变SELinux的配置,Linux系统日志和SELinux审计日志都会记录到错误。要在SELinux审计日志中查看这些错误,执行sealert –b。这会打开SELinux审计日志,如下所示:

SELinux,教程,配置,RHEL5,Web服务器

  现在的问题是,为什么会出现这种情况?答案很简单,因为hello.pl是一个CGI可执行程序,它应该被归为httpd_sys_script_exec_tdomain上下文,而不是httpd_sys_content_t。

  我们可以使用chcon命令解决这个问题:

root@test3 cgi-bin]# ls -lZ *.pl
-rwxr-xr-x  apache apache root:object_r:httpd_sys_content_t hello.pl
[root@test3 cgi-bin]# chcon -v --type=httpd_sys_script_exec_t hello.pl
context of hello.pl changed to
root:object_r:httpd_sys_script_exec_t[root@test3 cgi-root@test3 cgi-bin]
# ls -lZ *.pl
-rwxr-xr-x  apache apache root:object_r:httpd_sys_script_exec_t hello.pl

  现在我们应该能够看到,我们的Web服务器执行了hello.pl,而且在SELinux日志中也没有产生任何警告或者错误。

SELinux,教程,配置,RHEL5,Web服务器

  以这种方式配置SELinux,入侵者很难通过使用未授权的CGI或perl脚本来获得系统的控制。同样地,任何想要更改文件根目录到系统其他用户的子目录的行为都会失败,除非该子目录及子目录下的索引文件已被添加到httpd域。

  那么,让我们来假设,我们的Linux服务器上的用户John创建了名为html的子目录。完成该目录和index.html文件的创建后,你会发现,该目录和文件被默认归入user_home_t上下文,如下所示:

SELinux,教程,配置,RHEL5,Web服务器

  直到且除非该上下文被修改为正确的httpd上下文域,否则任何试图通过Web服务器访问这个index.html的操作都会被SELinux拒绝,并在审计日志当中留下错误记录。你可以使用chcon命令(如下图)或者semanage命令来改变上下文。

SELinux,教程,配置,RHEL5,Web服务器

  编者注:本系列下一份SELinux教程将介绍重要的SELinux命令。

相关推荐