selinux知识(一)

参考连接: 一文彻底明白linux中的selinux到底是什么-CSDN博客


DAC自主访问控制,该模式下,只要目录赋予了用户权限,就可以被访问
MAC强制访问控制,该模式下,还会接受进程访问目录范围的限制
MLS多级安全模式
MCS类别安全模式

主体 对象 政策和规则 上下文

主体是进程
对象是资源,包括文件,端口,设备
政策:
centos有三套政策:
targeted:对大部分网络服务进程进行管制
minimum:以targeted为基础, 仅对选定的网络服务进程进行管制。一般不用。
mls:多级安全保护。对所有的进程进行管制。这是最严格的政策。

安全上下文
分为「进程安全上下文」和「文件安全上下文」
文件安全上下文由文件创建的位置和创建文件的进程所决定。而且系统有一套默认值,用户也可以对默认值进行设定。

一个「进程安全上下文」一般对应多个「文件安全上下文」。
两者的安全上下文对应上了,进程才能访问文件。它们的对应关系由政策中的规则决定。
安全上下文有四个字段,分别用冒号隔开。形如:system_u:object_r:admin_home_t:s0。


SELinux 有三种工作模式,分别是:
1. enforcing:强制模式。违反 SELinux 规则的行为将被阻止并记录到日志中。
2. permissive:宽容模式。违反 SELinux 规则的行为只会记录到日志中。一般为调试用。
3. disabled:关闭 SELinux。
SELinux 工作模式可以在 /etc/selinux/config 中设定。
如果想从 disabled 切换到 enforcing 或者 permissive 的话,需要重启系统。反过来也一样。
enforcing 和 permissive 模式可以通过 setenforce 1|0 命令快速切换。

手动修改文件或目录的安全上下文
chcon [...]
选项功能-u 修改安全上下文的用户字段
-r 修改安全上下文的角色字段
-t 修改安全上下文的类型字段
-l 修改安全上下文的级别字段
--reference 修改与指定文件或目录相一致的安全上下文
-R递归操作
-h修改软链接的安全上下文

把文件或目录的安全上下文恢复到默认值
restorecon [选项] [...]
选项功能-v打印操作过程
-R递归操作


查看文件安全上下文
ls -Z


查看进程安全上下文
ps auxZ


查询系统中的布尔型规则及其状态
getsebool -a | grep httpd
执行结果
httpd_anon_write --> off
httpd_builtin_scripting --> on
httpd_can_check_spam --> off
httpd_can_connect_ftp --> off


开关一个布尔型规则
setsebool [选项]
选项功能-P重启依然生效
用法举例
开启 httpd_anon_write 规则。
setsebool -P httpd_anon_write on


添加目录的默认安全上下文
命令基本用法
semanage fcontext -a -t "(/.*)?"
注:目录或文件的默认安全上下文可以通过 semanage fcontext -l 命令配合 grep过滤查看。
用法举例
为 Nginx 新增一个网站目录 /usr/share/nginx/html2 之后,需要为其设置与原目录相同的默认安全上下文。
semanage fcontext -a -t httpd_sys_content_t "/usr/share/nginx/html2(/.*)?"


添加某类进程允许访问的端口
命令基本用法
semanage port -a -t -p
注:各种服务类型所允许的端口号可以通过 semanage port -l 命令配合 grep 过滤查看。
用法举例
为 Nginx 需要使用 10080 的端口用于 HTTP 服务。
semanage port -a -t http_port_t -p tcp 10080


SELinux 违规日志保存在 /var/log/audit/audit.log 中。
/var/log/audit/audit.log 的内容大概是这样的。
type=LOGIN msg=audit(1507898701.391:515): pid=8523 uid=0 subj=system_u:system_r:crond_t:s0-s0:c0.c1023 old-auid=4294967295 auid=0 tty=(none) old-ses=4294967295 ses=25 res=1
type=USER_START msg=audit(1507898701.421:516): pid=8523 uid=0 auid=0 ses=25 subj=system_u:system_r:crond_t:s0-s0:c0.c1023 msg='op=PAM:session_open grantors=pam_loginuid,pam_keyinit,pam_limits,pam_systemd acct="root" exe="/usr/sbin/crond" hostname=? addr=? terminal=cron res=success'
...
该文件的内容很多,而且混有很多与 SELinux 错误无关的系统审计日志。我们要借助 sealert 这个实用工具来帮忙分析(如果提示找不到命令的话请安装 setroubleshoot 软件包)。
命令基本用法
sealert -a /var/log/audit/audit.log
执行完命令之后,系统需要花一段时间去分析日志中的违规行为并给出分析报告。


查看SELinux是否已关闭
sestatus
输出:
SELinux status:disabled
如果输出是 SELinux status: disabled,则表示 SELinux 已关闭。
如果输出是 SELinux status: enabled,则表示 SELinux 已启用。


getenforce
输出示例:
Disabled:SELinux 已禁用。
Enforcing:SELinux 处于启用并强制执行模式。
Permissive:SELinux 处于启用但不强制执行模式。


cat /etc/selinux/config
输出:
SELINUX=disabled
SELINUXTYPE=targeted
如果 SELINUX=disabled,则表示 SELinux 被禁用。
如果 SELINUX=enforcing 或 SELINUX=permissive,则表示 SELinux 处于启用状态。


cat /sys/fs/selinux/enforce
1
输出示例:
0:表示 SELinux 被禁用。
1:表示 SELinux 处于强制执行模式(enforcing)。
2:表示 SELinux 处于宽容模式(permissive)。

posted @ 2025-04-15 19:12  老禾的账本  阅读(54)  评论(2)    收藏  举报