2.2. 检测开放端口以对程序进行免疫

要查找需要构建配置文件的网络服务器守护程序,使用 unconfined 工具是一种自动的方法。您也可以简单地在 YaST GUI 中查看此信息的报告(有关说明,请参见第 4.3.1.1 节 “应用程序审计报告” (↑Novell AppArmor 2.0 管理指南))。

unconfined 工具使用 netstat -nlp 命令来检测计算机内部的开放端口、与这些端口相关联的程序以及您已装载的 Novell AppArmor 配置文件集。然后,unconfined 工具报告这些程序以及与每个程序相关联的 Novell AppArmor 配置文件,如果程序不受限制,则报告“”。

[Note]注意

创建新的配置文件后,您必须重新启动构建了配置文件的程序,这样 unconfined 工具才能检测并报告新的配置文件状态。

下面是一个 unconfined 工具输出示例:

2325 /sbin/portmap not confined 
37021 /usr/sbin/sshd2 confined
   by '/usr/sbin/sshd3 (enforce)' 
4040 /usr/sbin/ntpd confined by '/usr/sbin/ntpd (enforce)' 
4373 /usr/lib/postfix/master confined by '/usr/lib/postfix/master (enforce)' 
4505 /usr/sbin/httpd2-prefork confined by '/usr/sbin/httpd2-prefork (enforce)'
5274 /sbin/dhcpcd not confined 
5592 /usr/bin/ssh not confined 
7146 /usr/sbin/cupsd confined by '/usr/sbin/cupsd (complain)'
  
1

第一部分是编号。此编号是监听程序的进程 ID 编号 (PID)。

2

第二部分是一个字符串,代表监听程序的绝对路径。

3

最后部分表示限制此程序的配置文件(如果存在)。

[Note]注意

unconfined 工具需要 root 用户权限,不得通过被 AppArmor 配置文件限制的 shell 运行此工具。

unconfined 工具不能区分网络接口,因此会报告所有未限制的进程,甚至是可能正在监听内部 LAN 接口的进程。

用户网络客户应用程序的查找视用户的自选设置而定。unconfined 工具会检测并报告被客户应用程序打开的网络端口,但仅限于执行无限制分析时正在运行的客户应用程序。这是一个问题,因为网络服务一般不间断运行,而网络客户应用程序通常只在用户有兴趣时运行。

将 Novell AppArmor 配置文件应用到用户网络客户应用程序还取决于用户自选设置,Novell AppArmor 供服务器使用,而非工作站。因此,我们将用户网络客户应用程序的配置文件构建作为练习留给用户。

为了更进一步限制桌面应用程序,无限制命令支持一个高度警惕选项,该选项可以报告所有正在运行的进程,以及与各个进程相关联或不相关联的对应 AppArmor 配置文件。这样未限制的用户就可以确定各个程序是否需要 AppArmor 配置文件。

如果您有新的或修改过的配置文件,可连同您使用的应用程序的行为的用户案例,提交到 apparmor-general@forge.novell.com邮件列表。AppArmor 团队将复查您的工作,并可能提交到 openSUSE。我们无法保证将每个配置文件包括在内;但我们将竭诚努力包括尽可能多的配置文件,使最终用户可以对 openSUSE 中交付的安全配置文件作出贡献。

2.2.1. 对 Cron 作业进行免疫

要查找由 cron 运行的程序,您必须检测您的本地 cron 配置。遗憾的是,cron 配置非常复杂,您必须检测为数众多的文件。以下文件定期运行 cron 作业:

/etc/crontab 
/etc/cron.d/* 
/etc/cron.daily/* 
/etc/cron.hourly/*
/etc/cron.monthly/* 
/etc/cron.weekly/*

对于 root 用户的 cron 作业,您可以通过 crontab -e 编辑任务,通过 crontab -l 列出 root 用户的 cron 任务。要完成这些操作,您必须是 root 用户。

找到这些程序后,您可以使用添加配置文件向导来创建程序的配置文件。请参见 第 3.3.1 节 “使用向导添加配置文件” (↑Novell AppArmor 2.0 管理指南)

2.2.2. 对万维网应用程序进行免疫

要查找万维网应用程序,您应当检查您的万维网服务器配置。Apache 万维网服务器的可配置性比较高,您可以将万维网应用程序保存在多个目录中,这取决于本地配置。默认情况下,SUSE Linux 将万维网应用程序保存在 /srv/www/cgi-bin/ 下。尽可能使每个万维网应用程序都具备一个 Novell AppArmor 配置文件。

找到这些程序后,您可以使用 AppArmor 添加配置文件向导来创建程序的配置文件。请参见 第 3.3.1 节 “使用向导添加配置文件” (↑Novell AppArmor 2.0 管理指南)

2.2.2.1. 万维网应用程序中的 CGI 程序和子进程限制

CGI 程序通过 Apache 万维网服务器执行,因此您必须对 Apache 自身的配置文件 usr.sbin.httpd2-prefork(SUSE Linux 上的 Apache2)进行修改,以将执行权限添加到每个 CGI 程序。例如,添加 /srv/www/cgi-bin/my_hit_counter.pl rpx 一行可授予 Apache 执行 Perl 脚本 my_hit_counter.pl 的权限,而且要求具备一个专用于 my_hit_counter.pl 的配置文件。如果 my_hit_counter.pl 不具备与之关联的专用配置文件,则规则应为 /srv/www/cgi-bin/my_hit_counter.pl rix,从而让 my_hit_counter.pl 继承 usr.sbin.httpd2-prefork 配置文件。

某些用户可能感觉为 Apache 可能调用的每个 CGI 脚本指定执行权限比较繁琐。
管理员可以将一定的访问权限授予 CGI 脚本的集合,这是一种替代方法。例如,添加 /srv/www/cgi-bin/*.{pl,py,pyc} rix 一行将允许 Apache 执行 /srv/www/cgi-bin/ 中所有以 .pl(Perl 脚本)和 .py.pyc(Python 脚本)结尾的文件。如上所示,规则的 ix 部分将使 Python 脚本继承 Apache 配置文件,如果您不想为每个 Python 脚本书写单独的配置文件,这样是合适的。

[Note]注意

在万维网应用程序处理 Apache 模块(mod_perlmod_php)时,如果您需要子进程限制模块 (mod-apparmor) 功能,请在您在 YaST 或命令行中添加配置文件时使用 ChangeHat 功能。要利用子进程限制,请参见第 5.1 节 “Apache ChangeHat” (↑Novell AppArmor 2.0 管理指南)

对于使用 mod_perlmod_php 的万维网应用程序,构建其配置文件所需要的处理略有不同。在这种情况下,“program”是 Apache 进程内的模块直接解释的脚本,因此不进行执行。相反,Novell AppArmor 版的 Apache 调用 change_hat() 来命名子配置文件(“帽子”),它对应于所请求 URI 的名称。

[Note]注意

要执行的脚本所呈现的名称可能不是 URI,取决于 Apache 被配置为在何处查找模块脚本。如果您将 Apache 配置为将脚本放置在不同的位置,Novell AppArmor 提示访问冲突时,syslog 中会出现不同的名称。请参见 第 4 章 管理已构建配置文件的应用程序 (↑Novell AppArmor 2.0 管理指南)

对于 mod_perlmod_php 脚本,这是请求的 Perl 脚本或 PHP 页面的名称。例如,添加以下子配置文件将允许 localtime.php 页面执行并访问本地系统时间:

/usr/sbin/httpd2-prefork^/cgi-bin 
localtime.php { 
/etc/localtime                        r, 
/srv/www/cgi-bin/localtime.php        r, 
/usr/lib/locale/**                    r, 
}

如果未定义子配置文件,Novell AppArmor 版的 Apache 应用 DEFAULT_URI 帽子。此子配置文件基本上足以显示 HTML 网页。Novell AppArmor 在默认情况下提供的 DEFAULT_URI 帽子如下所示:

/usr/sbin/suexec2 ixr, 
/var/log/apache2/** rwl,
/home/*/public_html/**             r, 
/srv/www/htdocs/**                 r, 
/srv/www/icons/*.{gif,jpg,png}     r, 
/usr/share/apache2/**              r,
    

如果您想将单个 Novell AppArmor 配置文件用于 Apache 服务的所有万维网页面和 CGI 脚本,编辑 DEFAULT_URI 子配置文件是一个不错的方法。

2.2.3. 对网络代理进行免疫

要查找需要构建配置文件的网络服务器守护程序,您应当检测计算机上的开放端口,然后考虑应答这些端口的程序并尽量为这些程序提供配置文件。如果您为带有开放网络端口的所有程序提供了配置文件,那么攻击者就不能进入文件系统,除非通过了 Novell AppArmor 配置文件策略。

使用 nmap 等扫描程序从计算机外部手动扫描服务器以查找开放网络端口,或使用 netstat 从计算机内部扫描。然后对计算机进行检测,以判断哪些程序在应答这些被发现的开放端口。