記一次由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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM