跳转至内容

使用 Xymon/Selinux 进行系统监控

来自维基教科书,为开放世界提供开放书籍

本示例展示了如何在 CentOS 5.5 下创建和安装适合运行 Xymon 的 SELinux 策略。

默认情况下,当前版本的 Xymon 将安装在 /home/xymon 中。

Xymon 包含 CGI 和 setuid 程序以及脚本,它们在 Xymon 目录中读取、写入和创建文件和目录。

SELinux 通常将 /home 下的目录视为用户目录,并通常设置为阻止 Web 浏览器读取、写入、创建和删除用户文件和目录。

为了解决这个问题,我们可以创建一个新类型(xymon_t)和相应的策略(xymon),该策略允许 Web 服务器(httpd_t)和 root 用户(unconfined_t)访问运行 Xymon 所需的权限,而不会授予 Xymon 对所有用户目录的完全访问权限。

加载策略后,必须重新标记 Xymon 的安装位置(/home/xymon)。

首先创建文件 xymon.te

#begin
module xymon 1.0;

type xymon_t;

require {
        type ping_t;
        type ifconfig_t;
        type mount_t;
        type initrc_t;
        type unconfined_t;
        type unconfined_mount_t;
	type restorecond_t;
        type fs_t;
	type httpd_t;
	type xymon_t;
	type port_t;
        type httpd_sys_script_t;
        type var_t;
        type usr_t;
        type var_log_t;
        type unconfined_mount_t;
        class filesystem associate;
        class lnk_file { relabelto relabelfrom read getattr write unlink create setattr };
	class dir { relabelto relabelfrom getattr search write read remove_name add_name create setattr rmdir };
	class file { relabelto relabelfrom getattr execute execute_no_trans read write ioctl append unlink create rename lock setattr link };
	class tcp_socket name_connect;
}

#============= httpd_sys_script_t ==============
allow httpd_sys_script_t usr_t:file execute;
#============= unconfined_t ==============
allow unconfined_t xymon_t:lnk_file { relabelto relabelfrom read create getattr write unlink setattr };
allow unconfined_t xymon_t:dir { getattr search relabelto relabelfrom write read remove_name add_name create setattr rmdir };
allow unconfined_t xymon_t:file { getattr execute relabelto relabelfrom execute_no_trans read write ioctl append unlink create rename lock setattr link };
#============= xymon_t ==============
allow xymon_t fs_t:filesystem associate;
#============= httpd_t ==============
allow httpd_t xymon_t:lnk_file { read create getattr write unlink setattr };
allow httpd_t xymon_t:dir { getattr search read write add_name remove_name create setattr rmdir };
allow httpd_t xymon_t:file { getattr execute execute_no_trans read ioctl append write setattr rename create unlink };
allow httpd_t port_t:tcp_socket name_connect;
allow httpd_t usr_t:file { execute execute_no_trans };
allow httpd_t var_t:file { read getattr };
allow httpd_t var_log_t:file read;
#============= unconfined_mount_t ==============
allow unconfined_mount_t xymon_t:file { getattr append };
#============= restorecond_t ==============
allow restorecond_t xymon_t:dir { read search };
#============= ifconfig_t ==============
allow ifconfig_t xymon_t:file { append getattr };
#============= mount_t ==============
allow mount_t xymon_t:file { append getattr };
#============= initrc_t ==============
allow initrc_t xymon_t:dir { getattr search write add_name remove_name relabelto relabelfrom read create setattr rmdir };
allow initrc_t xymon_t:file { getattr execute read execute_no_trans ioctl append create write rename unlink relabelto relabelfrom lock setattr link };
allow initrc_t xymon_t:lnk_file { getattr read relabelto relabelfrom create write unlink setattr };
#============= ping_t ==============
allow ping_t xymon_t:file { getattr write };
#end

编译并加载此策略

root# checkmodule -M -m -o xymon.mod xymon.te
root# semodule_package -o xymon.pp -m xymon.mod
root# semodule -i xymon.pp
root# semodule -l

安装新策略后,修改 selinux 权限以允许 xymon 运行

root# chcon -R -t xymon_t /home/xymon
root# chcon -h -R -t xymon_t /home/xymon
root# ls -Z /home/xymon

现在重启 Web 服务器和 Xymon。

监控日志和 /var/log/audit/audit.log 中的问题和安全违规,并根据需要修改策略。

-H-

华夏公益教科书