我正在运行一个干净的 ubuntu 服务器并且 apache 正在运行。
我注意到 apache 访问和错误日志归 root 所有:
-rw-r----- 1 root adm 10531 Oct 11 00:43 access.log
-rw-r----- 1 root adm 58839 Oct 11 00:43 error.log
我只是想知道如果只有 root 可写,apache 实际上是怎样写入日志的。
它默认使用 syslog 吗?
谢谢!
答案1
Apache 服务器最初以 root 身份启动,然后创建以较低权限(通常是 www-data)用户身份运行的单独线程来提供服务器内容。主 Apache 进程可以写入这些文件,因为它仍以 root 身份运行。
答案2
嗯……据我所知,一旦文件打开,权限的更改就无关紧要了。打开文件后,每次执行读/写时都不会重新检查访问控制。
因此我认为发生的事情是这样的:顶层 apache 服务器以 root 身份运行(这样它就可以打开端口 80),它也会打开日志文件。启动服务器子进程时,它可能会执行 fork(),将打开的文件描述符复制到新的子进程(即日志文件描述符和其他几个描述符),因此即使不是 root,子进程也可以写入日志文件,然后将子进程 UID 更改为请求的任何内容。