使用 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-