Linux 시스템에서 Apache는 www-data(기본) 사용자로 실행되며 해당 사용자 그룹도 www-data입니다.
그런데 아파치 로그 디렉터리 /var/log/apache가 루트에 속해 있고 그룹은 adm
이라는 것을 알았습니다.
www-data는 로그 디렉터리에 대한 쓰기 권한이 없으며, adm 그룹의 사용자도 아니고 읽기 권한도 없습니다.
그러나 우리는 루트로 실행되는 apache2 프로세스가 있다는 것을 발견했습니다. 이는 기본 프로세스여야 합니다. 모든 하위 프로세스의 로그는 먼저 프로세스 통신을 통해 기본 프로세스로 전달된 후 기록됩니까? 아니면 다른 메커니즘이 있나요?
여기에는 Apache httpd가 없어서 직접 프로그램을 작성해서 사용해봤습니다.
write
时是不检查权限的,也就是说只要日志文件打开成功了,那么再改变用户 ID(setuid
이후에도 파일에 데이터를 쓸 수 있습니다. 물론 이 경우 로그 파일을 어떻게 다시 열느냐가 문제이다. Apache httpd의 소스 코드를 살펴보십시오. 간단한 추적으로 뭔가를 드러낼 수 있습니다.