(首发:学习日记 CentOS Linux SELinux 安全上下文错误引起的宕机故障 – 学习日记 )

在某些情况下,我们会用一些外部的文件复制替换系统中原有的文件,如文件损坏,或者安装了错误版本的软件、或者怀疑原文件被替换成含病毒的版本等。这里以 VirtualBox 虚拟机中的 CentOS 7 为例,演示的是在启用 SELinux 的情况下,错误的复制替换系统中 /lib64/libc-2.17.so 造成的宕机故障及修复。其它启用了 SELinux 的 Linux 系统也可作为参考。视频演示地址:https://www.bilibili.com/video/BV1vL4y1u7CU?share_source=copy_web

CentOS Linux SELinux 安全上下文错误引起的宕机故障

一、查看系统状态

为了方便查看系统的启动信息,我们修改一下 grub 启动配置文件 /boot/grub2/grub.cfg,把默认启动项 linux16 /vmlinuz-3.10.0* 开头那行中的 rhgb quiet 去掉。然后,我们查看一下系统中 SELinux 的状态,使用 getenforce 命令显示如下:

[root@centos ~]# getenforce
Enforcing

这表示系统是启用了 SELinux 的。查看 /lib64/libc-2.17.so 属性:

[root@centos ~]# ls -Z /lib64/libc-2.17.so
-rwxr-xr-x. root root system_u:object_r:lib_t:s0       /lib64/libc-2.17.so

以普通用户 test 的身份复制一份 libc-2.17.so 到家目录下备用:

[root@centos ~]# su - test
上一次登录:六 3月  5 11:46:21 CST 2022tty1 上
[test@centos ~]$ pwd
/home/test
[test@centos ~]$ cp /lib64/libc-2.17.so ./ -v
"/lib64/libc-2.17.so" -> "./libc-2.17.so"
[test@centos ~]$ ls -Z libc-2.17.so
-rwxr-xr-x. test test unconfined_u:object_r:user_home_t:s0 libc-2.17.so

可以看到,复制的文件 SELinux 安全上下文已经改变了。其中的类型由“lib_t”变成了“user_home_t”。

二、在 Live CD 环境下复制替换文件

我们用 /home/test/libc-2.17.so 复制替换 /lib64/libc-2.17.so 。在运行的系统下,一般情况是不能够完成的,系统会立刻重启,替换不会成功。但不排除在某些情况下,在系统运行的情况下是可以替换成功的。这里用 CentOS-7-livecd-x86_64.iso 启动系统,在 Live CD 的环境下用 /home/test/libc-2.17.so 替换 /lib64/libc-2.17.so:

[liveuser@localhost Desktop]$ sudo mount /dev/centos/root /mnt -v
mount: /dev/mapper/centos-root mounted on /mnt.
[liveuser@localhost Desktop]$ cd /mnt
[liveuser@localhost mnt]$ ls -Z home/test/libc-2.17.so lib64/libc-2.17.so
-rwxr-xr-x. liveuser liveuser unconfined_u:object_r:user_home_t:s0 home/test/libc-2.17.so
-rwxr-xr-x. root     root     system_u:object_r:lib_t:s0       lib64/libc-2.17.so
[liveuser@localhost mnt]$ sudo cp home/test/libc-2.17.so lib64/libc-2.17.so -av
‘home/test/libc-2.17.so’ -> ‘lib64/libc-2.17.so’
[liveuser@localhost mnt]$ ls -Z home/test/libc-2.17.so lib64/libc-2.17.so
-rwxr-xr-x. liveuser liveuser unconfined_u:object_r:user_home_t:s0 home/test/libc-2.17.so
-rwxr-xr-x. liveuser liveuser unconfined_u:object_r:user_home_t:s0 lib64/libc-2.17.so

这里因为使用了 cp -a 参数,所以 /lib64/libc-2.17.so 的 SELinux 安全上下文的类型变成了“user_home_t”。然后,我们重新从硬盘启动系统,就会发现已经不能启动成功。启动画面会报告 libc-2.17.so 相关的 SELinux 安全上下文相关错误信息,如:

[    38.204015] type=1400 audit(1646560498.018:43): avc:  denied  { read } for  pid=716 comm="systemd-logind" name ="libc-2.17.so" dev="dm-0" ino=550218 scontext=system_u:system_r:systemd_logind_t:s0 tcontext=unconfined_u:object_r:user_home_t:s0 tclass=file permissive=0

从上面的信息可以看出是 libc-2.17.so 的 SELinux 安全上下文有问题。

三、修复 libc-2.17.so 安全上下文

我们重启系统,在 grub 默认启动项 linux16 /vmlinuz-3.10.0* 开头那行的末尾加上一个空格,再加上 selinux=0 ,这样,临时禁止了 SELinux,我们就可以进入系统修复 libc-2.17.so 的安全上下文。进入系统,查看 SELinux 状态:

[root@centos ~]# getenforce
Disabled

然后,我们参照 /lib64/libcidn-2.17.so 这个动态链接库文件来修复 /lib64/libc-2.17.so 的 SELinux 安全上下文。

[root@centos ~]# ls -Z /lib64/libc*.so
-rwxr-xr-x. test test unconfined_u:object_r:user_home_t:s0 /lib64/libc-2.17.so
-rwxr-xr-x. root root system_u:object_r:lib_t:s0       /lib64/libcidn-2.17.so
lrwxrwxrwx. root root system_u:object_r:lib_t:s0       /lib64/libcidn.so -> ../../lib64/libcidn.so.1
-rwxr-xr-x. root root system_u:object_r:lib_t:s0       /lib64/libcrypt-2.17.so
lrwxrwxrwx. root root system_u:object_r:lib_t:s0       /lib64/libcrypt.so -> ../../lib64/libcrypt.so.1
-rw-r--r--. root root system_u:object_r:lib_t:s0       /lib64/libc.so
[root@centos ~]# chcon -v --reference=/lib64/libcidn-2.17.so /lib64/libc-2.17.so
正在更改"/lib64/libc-2.17.so" 的安全环境
[root@centos ~]# ls -Z /lib64/libc-2.17.so
-rwxr-xr-x. test test system_u:object_r:lib_t:s0       /lib64/libc-2.17.so
[root@centos ~]# chown root:root /lib64/libc-2.17.so -v
changed ownership of "/lib64/libc-2.17.so" from test:test to root:root
[root@centos ~]# ls -Z /lib64/libc-2.17.so
-rwxr-xr-x. root root system_u:object_r:lib_t:s0       /lib64/libc-2.17.so
[root@centos ~]#

然后,重启系统。修复完毕。

还有一种修复方式,就是同样用上面在 grub 启动项后面加 selinux=0 的方法进入系统后,直接 touch /.autorelabel 就行。这样,重启系统后会进行整个文件系统的 relabel,修复错误的 SELinux 安全上下文。

CentOS Linux SELinux 安全上下文错误引起的宕机故障相关推荐

  1. linux selinux 安全上下文 修改

    一.chcon命令 1.功能 手动修改文件的SELinux安全上下文 2.命令格式 chcon  [-R]  [-t  type]  [-u  user]  [-r  role]  文件 chcom  ...

  2. “如何避免总线错误或不可纠正的错误导致的宕机事件”之tolerant介绍

    实验目的:证明修改tolerant参数为3时,uncorrected error和fatal error等不可纠正错误.总线错误不会导致机器宕机. 实验意义:对于已发生的硬件MCE error导致的宕 ...

  3. linux 宕机 内存,Linux内存使用高,触发系统宕机

    网上的解决方案:用ps查看各进程的内存,大约就占用了4G, 绝大部分内存都是被Page Cache所占用.Linux内核的策略是最大程度的利用内存cache 文件系统的数据,提高IO速度,虽然在机制上 ...

  4. 特斯拉看位置说服务器错误,特斯拉App惊现大面积宕机!车主集体发飙,官方处理太弱智了...

    如果要在汽车厂商中选出一位"网红"的话,特斯拉绝对当仁不让! 别的不说,光凭它有个大嘴巴的老板就自带流量了,再加上最近中国区那跳楼般的降价幅度,不红都没有天理- 只是很可惜,特斯拉 ...

  5. centos linux 系统日常管理4 scp,rsync,md5sum,sha1sum,strace ,find Rsync 常见错误及解决方法 第十七节课...

    centos linux 系统日常管理4  scp,rsync,md5sum,sha1sum,strace ,find Rsync 常见错误及解决方法  第十七节课 rsync可以增量同步,scp不行 ...

  6. Linux安全 chage sudo授权 selinux安全上下文 gpg加密 aide入侵检测系统 audit 审计

    chage -E 日期 用户名 指定用户失效日期 chage -d0 用户 强制用户修改密码 passwd -l 用户名 锁定密码 passwd -u 用户名 解锁 passwd -S 用户名 看状态 ...

  7. CentOS Linux 8 - AppStream 错误:为仓库 ‘appstream‘ 下载元数据失败 : Cannot prepare internal mirrorlist: No URLs

    问题描述 CentOS Linux 8 - AppStream 错误:为仓库 'appstream' 下载元数据失败 : Cannot prepare internal mirrorlist: No ...

  8. CentOS Linux 8 - AppStream 错误

    问题描述 今天2022年3月7日在CentOS 8.2上安装软件时,遇到如下报错: CentOS Linux 8 - AppStream 错误:为仓库 'appstream' 下载元数据失败 : Ca ...

  9. (翻译) MongoDB(10) 在 Red Hat 企业版或者 Centos Linux 上安装MongoDB社区版

    概述 使用这个教程在 Red Hat 企业版 Linux 或者 CentOS6/7 Linux 使用 .rpm 软件包安装 MongoDB 社区版. 虽然一些发行版包含自己的 MongoDB 软件包, ...

最新文章

  1. 机器学习:正负样本数据量不平衡处理方法
  2. python连接oracle超时设置,Python连接Oracle设置过程记录
  3. 她发明了可以“喝的饭”,估值已超过10亿美金!从此每天多睡半小时....
  4. java 银行管理系统怎么储存账户信息_银行管理系统 实现用户注册 登录 存、取款 交易记录查询和修改用户信息等功能...
  5. Android零基础入门第87节:Fragment添加、删除、替换
  6. 16 岁高中生成功将 Linux 移植到 iPhone,并贴出详细指南
  7. 薪酬体系:了解越多,满意越高
  8. 网众无盘linux挂载u盘,个人总结出的49条网众无盘系统常见故障解决方法
  9. 热门小说排行榜(JSP实现)
  10. 中间代码生成-四元式
  11. raid数据恢复,Raid5磁盘阵列数据恢复案例,服务器数据恢复
  12. 每天几分钟,教你免费下载苹果的app,赚Amazon Gift Card 亲测可用【非广告】
  13. 征兵系统集合版(登录系统+信息填写及查看功能)
  14. 写给安徽合肥高三的你——少年不惧岁月长,敢挽桑弓射玉衡
  15. HDMI2.0RE驱动控制方案AG7120和AG7220性能参数对比
  16. python爬虫小说设计过程_Python制作爬虫采集小说
  17. 【已解决】LaTeX调整图片大小
  18. java访问FTP可重用ssl通道
  19. 力扣解题思路:位运算系列
  20. java与go对接AES-GCM加解密

热门文章

  1. 智能控制导论 # 模糊控制 1 理论及实例
  2. 《Python数据科学入门》之数据库的使用(第4章)
  3. java计算机毕业设计合同管理MyBatis+系统+LW文档+源码+调试部署
  4. python函数题库及答案_python—函数基础练习题
  5. 骁龙 820 车用处理器
  6. html中定义动画anima,css中animation怎么用
  7. 安全测试工具BurpSuite
  8. Revi+Geometry属性的参数
  9. 查mysql结构_Mysql查询架构信息
  10. 面试管:Zookeeper在项目的典型应用场景请你回答一下