事件起因:如下

1、在服务器上root用户,定期会生成一个文件,到/tmp目录,如:qq_5201351.txt,给other加上了r读取

2、zabbix端会周期性取这台服务器/tmp/qq_5201351.txt文件内容的(只能通过agent方式,system.run[cat /tmp/qq_5201351.txt]方式获取)

但是zabbix的web界面的返回结果异常,报错:cat: /tmp/qq_5201351.txt: Permission denied

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

冷静分析:到底是没有权限执行cat命令,还是文件的权限不够(公司服务器都做过很强的安全加固)

排查过程:如下

1、查看文件的权限,结果为-rw-r--r--   ,按理说其他用户就应该有读的权限,查检facl 也没有问题

2、将上面的cat命令替换成ls或者stat,都能够返回有结果,难道是命令的问题,倒也有可能?

a、将cat命令,写成绝对路径,/bin/cat  【还是报错】

b、查看/bin/cat对于zabbix用户是否有执行权限 【有权限】

c、查看cat文件是否设置有facl  【没有设置facl】

[root@qq5201351 ~]# getfacl /bin/cat
getfacl: Removing leading '/' from absolute path names
# file: bin/cat
# owner: root
# group: root
user::rwx
group::r-x
other::r-x

d、对比stat命令与cat命令的selinux相关的Context信息(权限与Context信息都是一样的):

[root@qq5201351 ~]# ls -lZ /bin/stat
-rwxr-xr-x. root root system_u:object_r:bin_t:s0 /bin/stat
[root@qq5201351 ~]# ls -lZ /bin/cat
-rwxr-xr-x. root root system_u:object_r:bin_t:s0 /bin/cat
[root@qq5201351 ~]#

3、到此基本断定问题还是出在文件的可能性较大,由于公司服务器是做过非常严格的安全加固,zabbix用户没有家目录,shell也还是/sbin/nologin

开始想要su到zabbix分析,但非常困难(非技术困难,困于流程和安全审计),于是最后分析qq_5201351.txt的selinux安全上下文信息:

[root@qq5201351 ~]# ls -lZ /tmp/qq_5201351.txt
-rw-r--r--. root root unconfined_u:object_r:user_tmp_t:s0 /tmp/qq_5201351.txt

4、到此笔者能想到的也就只有是selinux的安全上下文配置了,于是思考去找一个zabbix用户绝对有权限的文件呢?

这里笔者想到通过查看进程,能否找到zabbix用户进程用到的配置文件,居然还真能找到一个,如下:

[root@qq5201351 ~]# ps -ef|grep ^zabbix
zabbix 986 1 0 May18 ? 00:00:00 /usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf

5、然后将命令上方改成system.run[cat /etc/zabbix/zabbix_agentd.conf] ,以文本方式取值,果然如猜想的那样,成功取得文件内容

6、最后对比/etc/zabbix/zabbix_agentd.conf与/tmp/qq_5201351.txt文件Context配置的差异,如下

[root@qq5201351 ~]# ls -lZ /etc/zabbix/zabbix_agentd.conf
-rw-r--r--. root root system_u:object_r:etc_t:s0 /etc/zabbix/zabbix_agentd.conf
[root@qq5201351 ~]#
[root@qq5201351 ~]# ls -lZ /tmp/qq_5201351.txt
-rw-r--r--. root root unconfined_u:object_r:user_tmp_t:s0 /tmp/qq_5201351.txt

说明:这里selinux的Context其实分为了4段,用户信息,角色信息、类型信息、范围信息,通过对比分析,加上测试,最终发现是类型信息影响了

于是,将qq_5201351.txt的类型信息部分,也修改为etc_t 问题得到解决,修改配置的命令如下:

chcon -t etc_t /tmp/qq_5201351.txt

补充一点:修改用户信息(-u, --user=xx),角色信息(-r, --role=xx),范围信息(-l, --range=范围),修改类型也可以--type=xx

尊重别人的劳动成果 转载请务必注明出处:https://www.cnblogs.com/5201351/p/13720110.html

记一次由selinux引起的使用cat查看文件报错Permission denied的问题排查的更多相关文章

  1. 记一次root用户在本地登录及SSH连接均遭遇permission denied的问题排查经过

    某日一位老师反映,机房的6号节点无法登录了.一开始以为是为节点防火墙配置IP白名单时忘记了加进去,但随后发现此节点并未进行白名单配置,密码也一直未有变更,于是在自己的电脑上连接,发现终端里很快显示出了 ...

  2. apache 访问权限出错,apache selinux 权限问题, (13) Permission Denied

    今天在使用 httpd 做文件服务器的时候,发现 png 图像没有打开,但是原本www/html 文件夹内部的文件就可以打开.后来猜测是selinux 的问题,之前一直想写一篇关于selinux 的博 ...

  3. 记Git报错-refusing to merge unrelated histories

    记Git报错-refusing to merge unrelated histories   系统:win7 git版本: 2.16.2.windows.1 问题 1.本地初始化了git仓库,放了一些 ...

  4. ansible报错Aborting, target uses selinux but python bindings (libselinux-python) aren't installed【转】

    报错内容: TASK [activemq : jvm configuration] ********************************************************** ...

  5. centos 关闭selinux 临时关闭selinux 报错 setenforce: setenforce() failed

    关闭selinux的方法有两种:临时关闭和永久关闭. 查看selinux的状态:estatus [root@--- ~]# sestatus SELinux status: enabled SELin ...

  6. ansible报错Aborting, target uses selinux but python bindings (libselinux-python) aren't installed

    报错内容: TASK [activemq : jvm configuration] ********************************************************** ...

  7. mysql启动报错,与selinux相关

    mysql启动报错,与selinux相关 如果遇到报错,可能的情况是 selinux 的关系,可以安装 setroubleshoot-server 工具,使用 sealert -a /var/log/ ...

  8. 记一次用python 的ConfigParser读取配置文件编码报错

    记一次用python 的ConfigParser读取配置文件编码报错 ...... raise MissingSectionHeaderError(fpname, lineno, line)Confi ...

  9. vmware启动报错:Failed to load SELinux policy. Freezing

    修改 : SELINUX=disabled     正确 误修改: SELINUXTYPE=disabled   错误 导致无法开机 错误结果 重启后 机器就报 Failed to load SELi ...

随机推荐

  1. python setup.py install 报错【Project namexxx was given, but was not able to be found.】

    错误信息: [root@wangjq networking-mirror]# python setup.py install /usr/lib64/python2./distutils/dist.py ...

  2. PHP、JS一些用法

    PHP去除小数点后面的0,保留非零 floatval($num) PHP转数组var d = eval(数组d); PHP字符串转数组 $row['0'] = explode(";" ...

  3. 第三篇Scrum冲刺博客--Interesting-Corps

    第三篇Scrum冲刺博客 站立式会议 1.会议照片 2.队友完成情况 团队成员 昨日完成 今日计划 鲍鱼铭 主页页面跳转社区功能及社区设计及布局实现 搜索页面跳转.设计及布局实现 叶学涛 编写个人页面 ...

  4. python列表的索引与切片

    <1>.python的列表 索引方式: 例如,list1 = ['张三','男','33','江苏','硕士','已婚',['身高178','体重72']] 1.正向单索引 print(l ...

  5. 区块链入门到实战(28)之Solidity – 介绍

    Solidity语言是一种面向合约的高级编程语言,用于在以太坊区块链网络上实现智能合约.Solidity语言深受c++.Python和JavaScript的影响,针对以太坊(Ethereum)虚拟机( ...

  6. [Window编程][VC6.0++][error LNK2001: unresolved external symbol __imp__PlaySoundA@12]

    错误情况 这几天看<Windows游戏编程大师技巧>,在看第三章的时候,把书上的例子敲了一边,但是出现了下述错误,最后在网上找到了解决方法. 错误截图 解决方法 在main.cpp头文件下 ...

  7. windows server 2008 r2 环境下,实现域名和IP同时都能访问一个网站

    有时候,用域名访问能得到一个页面,用IP地址访问也可以得到一个页面,比如 www.baidu.com 和 61.135.169.125 都可以打开百度页面.一开始要实现这种功能,还真有点不知所措,想了 ...

  8. php高效读取和写入

    /** * 删除非空目录里面所有文件和子目录 * @param string $dir * @return boolean */ function fn_rmdir($dir) { //先删除目录下的 ...

  9. Python 批量下载BiliBili视频 打包成软件

    文章目录 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知道如何去学习更加高深的知识.那么针对这三类人,我给大家 ...

  10. APM姿态控制流程

    对初学者了解控制流程有一定帮助 在主循环执行过程中(比如Pixhawk的任务调度周期2.5ms,400Hz:APM2.x为10ms,100Hz),每一个周期,程序会按下述步骤执行:• 首先,高层次文件 ...