현재 Raspbian Stretch(Linux raspberrypi 4.9.41-v7+ #1023 SMP Tue Aug 8 16:00:15 BST 2017 armv7l GNU/Linux)에서 실행되는 Apache2(2.4.25-3+deb9u2)에 문제가 있는 이유를 이해하려고 노력 중입니다. 루트 마운트 지점은 bash 등과 다르게 표시됩니다.
cat /proc/{PID of Apache2}/mountinfo
다음과 같은 출력을 제공합니다.
129 127 179:2 / / ro,noatime shared:80 master:1 - ext4 /dev/root ro,data=ordered
cat /proc/self/mountinfo
Bash에서 실행하면 다음과 같은 출력이 제공됩니다.
15 0 179:2 / / ro,noatime shared:1 - ext4 /dev/root ro,data=ordered
제가 이해한 설명에 따르면 man 7 mount_namespaces
,https://lwn.net/Articles/689856/,https://lwn.net/Articles/690679/출력은 man 5 proc
Apache가 피어 그룹 1의 슬레이브임을 알려줍니다. 자체적으로 ID 80의 공유 피어 그룹을 생성합니다.
내가 이해하지 못하는 것은 왜 이런 일이 발생하는지입니다. 나는 systemd가 이것을 제어할 수 있다고 생각하여 /etc/systemd/system/apache2.service
다음 내용으로 파일을 만들었습니다.
.include /lib/systemd/system/apache2.service
[Service]
MountFlags=shared
그러나 분명히 이것은 도움이 되지 않습니다. MountFlags 줄을 제거해도 차이가 없습니다.
따라서 이런 일이 발생하는 이유를 이해하는 것 외에도 Apache가 루트 설치 피어 그룹의 노예가 되는 것을 방지할 수 있는 방법이 있는지 알고 싶습니다.
또한 bash에서 쓰기 가능하도록 루트 디렉토리를 다시 마운트하면 mount -o remount,rw /
이는 Apache2 마운트 네임스페이스로 전파되지 않습니다. mountinfo
위에서부터 시작하는 예 :
# mount -o remount,rw /
# cat /proc/self/mountinfo
15 0 179:2 / / rw,noatime shared:1 - ext4 /dev/root rw,data=ordered
# cat /proc/{PID of Apache2}/mountinfo
129 127 179:2 / / ro,noatime shared:80 master:1 - ext4 /dev/root rw,data=ordered
이는 Apache 보안 기능의 일부입니까?
업데이트 1: 루트가 rw로 마운트된 동안 Apache2 서비스를 (다시) 시작하면 다시 마운트가 Apache2 마운트 네임스페이스로 전파됩니다. 루트가 ro인 경우에만 Apache2 서비스를 시작하면 작동하지 않나요? !
답변1
PrivateTmp=true
apache2.service에서 설정을 삭제합니다 .
https://www.freedesktop.org/software/systemd/man/systemd.exec.html:
true인 경우 실행 프로세스에 대한 새 파일 시스템 네임스페이스를 설정하고 그 안에 프라이빗 /tmp 및 /var/tmp 디렉터리를 마운트합니다. 이 디렉터리는 네임스페이스 외부의 프로세스와 공유되지 않습니다.