作者:@郑琰
本文转载请注明出处!:https://www.cnblogs.com/zhengyan6/p/15656013.html
SElinux -> Linux安全访问策略 -> 强制性 (security安全)
是Linux操作系统的一个额外的强制性的安全访问规则。用于确定哪个进程可以访问哪些文件、目录和端口的一组安全规则。保护的对象是服务、服务对应的文件/目录、服务对应的端口;其中,服务的实例(实际运行当中的一个例子)就是进程,所以进程也受selinux的保护。可以被看作是与标准权限系统并行的权限系统,如果selinux开启,以root身份运行进程,访问文件不光要受用户对文件访问权限的限定,还要受进程对文件selinux上下文类型的限定,否则,就算是root用户运行的进程,也不一定能访问某个文件。
1).selinux 的三种模式(状态):
| enforcing -> 强制模式 -> 拒绝非法访问并录入日志; |
| permissive -> 许可模式(警告模式) -> 暂时允许非法访问并录入日志;(debug) |
| disabled -> 禁用模式 -> 允许非法访问且不录入日志。 |
2).selinux 模式的切换:
| getenforce -> 获取selinux状态 |
| 临时切换: |
| setenforce 0 -> 临时关闭selinux策略 -> enforcing-permissive |
| setenforce 1 -> 临时开启selinux策略 -> permissive-enforcing |
| 永久切换: |
| #vim /etc/sysconfig/selinux |
| vim /etc/selinux/config -> |
| SELINUX=enforcing/permissive/disabled -> reboot生效 |
3).selinux 上下文 -> 在linux系统里面,每个文件、进程、端口都具有特别的安全标签,这个标签就是selinux上下文,它是selinux安全策略用来判断某个进程能否访问文件、目录或端口的工具。
| A). 内容: |
| 用户:角色:类型:敏感度 -> 类型是重点 |
| -> 用户 -> 系统用户 (system_u);root及普通用户组成的未指定用户(unconfined_u) |
| -> 角色 -> 系统角色(system_r);未指定角色(unconfined_r);对象角色(object_r) |
| -> 类型 -> 以_t结尾,每一个服务都有三个方面的类型 -> 服务本身,服务对应的文件,服务对应的端口 -> 服务和对应的文件,它们的selinux上下文类型得是一一对应的,服务与对应的端口也是要一一对应的;但是,这不代表selinux上下文类型不能改,原则上是可以改的,只不过要做重新的类型配对。 |
| -> 敏感度 -> s0,指的是安全等级,有0、1、2三种,数值越大,灵敏度越高 |
| B). 查看selinux上下文: |
| 查看文件的selinux上下文方法一 -> ll -Z filename |
| 查看文件的selinux上下文方法二 -> semanage fcontext -l | grep filename -> filename要写文件的绝对路径 ->eg: semanage fcontext -l|grep /etc/ssh ->不一定能查看所有文件,所以还是方法一跟保险 |
| 查看进程的selinux上下文 -> ps -auxZ -> eg: ps -auxZ | grep sshd |
| 查看所有(开放或不开放)端口的selinux上下文 -> semamage port -l | grep 端口号 -> semanage port -l | grep 22 |
| 查看当前已经开放的端口的selinux上下文 -> netstat -pantZ |
4).修改selinux上下文类型:
| A).文件 -> |
| a). 临时修改: |
| chcon -t 上下文类型 filename -> 将selinux设置成disabled后reboot,然后再设置成enforcing后reboot,修改会失效,将还原成原始默认类型 -> 不推荐使用 |
| chcon -t httpd_sys_content_t /opt/testfile |
| sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config |
| |
| sed -i 's/SELINUX=disabled/SELINUX=enforcing/g' /etc/selinux/config |
| |
| ll -dZ /opt/testfile |
| b). 永久修改: |
| semanage fcontext -a -t 上下文类型 ‘/filename(/.*)?’-> 注意:这里的filename要写绝对路径 |
| restorecon -RFv /filename -> 强制递归刷新上下文类型并显示刷新过程 |
| semanage fcontext -a -t httpd_sys_content_t '/opt/test(/.*)?' |
| restorecon -RFv /opt/test/ |
| B).端口 -> 给一个端口添加selinux上下文类型 |
| semanage port -a -t 端口上下文类型 -p tcp/udp 端口号 |
| semanage port -a -t ssh_port_t -p tcp 22022 |
| semanage port -l|grep ssh |
| -> 端口不用强刷 |
5).selinux布尔值 -> 当selinux开启时,系统默认会设置很多服务功能的开关,而且默认都是关闭的,sebool就是那个开关
| a). 查看 -> getsebool -a (| grep 布尔值) |
| b). 设置开启或关闭 -> setsebool bool名 on/off |
| c). semanage boolean -l (| grep 布尔值)-> 查看布尔值是否永久开启(括号中右边那个值),并显示该布尔值状态的简短描述 |
注意:
a).文件会默认继承父文件夹的selinux类型;
b).文件被cp到新的文件夹下,会自动继承新文件夹的selinux上下文类型,但mv不会这样,仍会保留原上下文类型;
c).如果修改了某服务的配置文件位置,则必须重新修改该文件的selinux上下文类型,以重新匹配服务,否则服务无法访问该配置文件。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)