zoukankan      html  css  js  c++  java
  • 记一次由selinux引起的使用cat查看文件内容报错Permission denied的问题排查

    事件起因:如下

    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、然后将zabbix命令改成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=xx),修改类型也可以--type=xx

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

  • 相关阅读:
    [剑指offer] 42. 和为S的两个数字
    [剑指offer] 41. 和为S的连续正数序列
    datagridview bindingsource刷新数据
    datagridview bindingsource
    slot-具名插槽
    基于uniapp的ui库
    组件之间通讯
    vue实现word或pdf文档导出的功能
    Vue之富文本tinymce爬坑录
    12道vue高频原理面试题,你能答出几道?
  • 原文地址:https://www.cnblogs.com/5201351/p/13720110.html
Copyright © 2011-2022 走看看