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