在linux系統(tǒng)上,apache是??以www-data(預(yù)設(shè))使用者運(yùn)行的,同時(shí)其使用者群組也是www-data。
可是我發(fā)現(xiàn)apache的日誌目錄/var/log/apache是??屬於root的,群組是adm
www-data對(duì)該日誌目錄是沒有寫權(quán)限的,而且它不是adm群組的用戶,甚至連讀取權(quán)限都沒有。
但是我們發(fā)現(xiàn)有一個(gè)apache2進(jìn)程是以root運(yùn)行的,應(yīng)該是主進(jìn)程。難道所有子進(jìn)程的日誌都是先透過進(jìn)程通訊傳遞給主進(jìn)程,然後再記錄的嗎?還是說有其他什麼機(jī)制。
走同樣的路,發(fā)現(xiàn)不同的人生
我這裡沒有 Apache httpd,所以我自己寫程式試了試。在 write
時(shí)是不檢查權(quán)限的,也就是說只要日志文件打開成功了,那么再改變用戶 ID(setuid
)之後依舊可以寫入資料到該文件。當(dāng)然這樣子的話,如何重新開啟日誌檔是個(gè)問題。你直接去看 Apache httpd 的源碼就好。簡(jiǎn)單地 strace 一下也許會(huì)有發(fā)現(xiàn)。