1. 程式人生 > >記一次由selinux引起的使用cat檢視檔案報錯Permission denied的問題排查

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

&n