要查找需要构建配置文件的网络服务器守护程序,使用 unconfined 工具是一种自动的方法。您也可以简单地在 YaST GUI 中查看此信息的报告(有关说明,请参见第 4.3.1.1 节 “应用程序审计报告” (↑Novell AppArmor 2.0 管理指南))。
unconfined 工具使用 netstat -nlp 命令来检测计算机内部的开放端口、与这些端口相关联的程序以及您已装载的 Novell AppArmor 配置文件集。然后,unconfined 工具报告这些程序以及与每个程序相关联的 Novell AppArmor 配置文件,如果程序不受限制,则报告“无”。
![]() | 注意 |
|---|---|
创建新的配置文件后,您必须重新启动构建了配置文件的程序,这样 unconfined 工具才能检测并报告新的配置文件状态。 | |
下面是一个 unconfined 工具输出示例:
2325 /sbin/portmap not confined 3702/usr/sbin/sshd
confined by '/usr/sbin/sshd
(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)'
![]() | 注意 |
|---|---|
unconfined 工具需要 root 用户权限,不得通过被 AppArmor 配置文件限制的 shell 运行此工具。 | |
unconfined 工具不能区分网络接口,因此会报告所有未限制的进程,甚至是可能正在监听内部 LAN 接口的进程。
用户网络客户应用程序的查找视用户的自选设置而定。unconfined 工具会检测并报告被客户应用程序打开的网络端口,但仅限于执行无限制分析时正在运行的客户应用程序。这是一个问题,因为网络服务一般不间断运行,而网络客户应用程序通常只在用户有兴趣时运行。
将 Novell AppArmor 配置文件应用到用户网络客户应用程序还取决于用户自选设置,Novell AppArmor 供服务器使用,而非工作站。因此,我们将用户网络客户应用程序的配置文件构建作为练习留给用户。
为了更进一步限制桌面应用程序,无限制命令支持一个高度警惕选项,该选项可以报告所有正在运行的进程,以及与各个进程相关联或不相关联的对应 AppArmor 配置文件。这样未限制的用户就可以确定各个程序是否需要 AppArmor 配置文件。
如果您有新的或修改过的配置文件,可连同您使用的应用程序的行为的用户案例,提交到 apparmor-general@forge.novell.com邮件列表。AppArmor 团队将复查您的工作,并可能提交到 openSUSE。我们无法保证将每个配置文件包括在内;但我们将竭诚努力包括尽可能多的配置文件,使最终用户可以对 openSUSE 中交付的安全配置文件作出贡献。
要查找由 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 管理指南)。
要查找万维网应用程序,您应当检查您的万维网服务器配置。Apache 万维网服务器的可配置性比较高,您可以将万维网应用程序保存在多个目录中,这取决于本地配置。默认情况下,SUSE Linux 将万维网应用程序保存在 /srv/www/cgi-bin/ 下。尽可能使每个万维网应用程序都具备一个 Novell AppArmor 配置文件。
找到这些程序后,您可以使用 AppArmor 来创建程序的配置文件。请参见 第 3.3.1 节 “使用向导添加配置文件” (↑Novell AppArmor 2.0 管理指南)。
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 脚本书写单独的配置文件,这样是合适的。
![]() | 注意 |
|---|---|
在万维网应用程序处理 Apache 模块( | |
对于使用 mod_perl 和 mod_php 的万维网应用程序,构建其配置文件所需要的处理略有不同。在这种情况下,“program”是 Apache 进程内的模块直接解释的脚本,因此不进行执行。相反,Novell AppArmor 版的 Apache 调用 change_hat() 来命名子配置文件(“帽子”),它对应于所请求 URI 的名称。
![]() | 注意 |
|---|---|
要执行的脚本所呈现的名称可能不是 URI,取决于 Apache 被配置为在何处查找模块脚本。如果您将 Apache 配置为将脚本放置在不同的位置,Novell AppArmor 提示访问冲突时,syslog 中会出现不同的名称。请参见 第 4 章 管理已构建配置文件的应用程序 (↑Novell AppArmor 2.0 管理指南)。 | |
对于 mod_perl 和 mod_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 子配置文件是一个不错的方法。