Remote Code Evaluation (이하 RCE, 원격 코드 실행) 취약성 공격을 피하기위해 root 권한으로 앱 실행하는 것이 바람직하다. 즉, 특정 기능을 수행하는 프로세스는 root 권한이 아닌 일반 용자 계정으로 실행하는 것이 일반적이다. 그런데 Nginx와 Apache Web Server의 경우 root 권한으로 실행되는데 보안문제가 있지 않을까?
Linux 계열의 운영체제의 경우 시스템 공격자들을 어렵게하기 위해 1024 보다 작은 포트를 사용하기 위해 root 권한을 요구한다.
Nginx와 Apache가 80 또는 443 포트를 사용할 때 가능하면 최소로 root 권한을 이용한다. root 권한으로 실행되어 즉시 non-root 자식 프로세스를 생성한다. root 프로세스는 80, 443 포트의 bind 하기위해 사용한다. Nginx 역시 자체적으로 어떠한 앱도 실행하지 않고 독립적인 자식 프로세스와 통신 방식을 이용해 연동하여 보안을 유지한다.
요약하면 프로세스 목록에서 Nginx와 Apache httpd의 main 프로세스가 root 권한으로 실행되는 경우 보안 관점에서 문제가 있지는 않다.
Apache httpd 예)
root 16650 0.0 0.3 232884 12900 ? Ss Mar02 0:52 /opt/httpd/bin/httpd -d /opt/httpd -f /opt/httpd/conf/httpd.conf -DFOREGROUND -k start daemon 16651 0.0 0.2 232544 8228 ? S Mar02 0:00 \_ /opt/httpd/bin/httpd -d /opt/httpd -f /opt/httpd/conf/httpd.conf -DFOREGROUND -k start daemon 16973 0.0 0.5 2159464 22404 ? Sl Mar02 5:21 \_ /opt/httpd/bin/httpd -d /opt/httpd -f /opt/httpd/conf/httpd.conf -DFOREGROUND -k start daemon 18482 0.0 0.5 2159464 22172 ? Sl Mar03 4:40 \_ /opt/httpd/bin/httpd -d /opt/httpd -f /opt/httpd/conf/httpd.conf -DFOREGROUND -k start daemon 18483 0.0 0.5 2159464 22380 ? Sl Mar03 4:50 \_ /opt/httpd/bin/httpd -d /opt/httpd -f /opt/httpd/conf/httpd.conf -DFOREGROUND -k start daemon 18560 0.0 0.5 2159464 22268 ? Sl Mar03 4:46 \_ /opt/httpd/bin/httpd -d /opt/httpd -f /opt/httpd/conf/httpd.conf -DFOREGROUND -k start daemon 18589 0.0 0.5 2159464 20508 ? Sl Mar03 4:39 \_ /opt/httpd/bin/httpd -d /opt/httpd -f /opt/httpd/conf/httpd.conf -DFOREGROUND -k start daemon 18675 0.0 0.5 2159464 21812 ? Sl Mar03 4:41 \_ /opt/httpd/bin/httpd -d /opt/httpd -f /opt/httpd/conf/httpd.conf -DFOREGROUND -k start daemon 18893 0.0 0.5 2159464 20808 ? Sl Mar03 4:08 \_ /opt/httpd/bin/httpd -d /opt/httpd -f /opt/httpd/conf/httpd.conf -DFOREGROUND -k start daemon 23553 0.0 0.4 2159464 19260 ? Sl Mar08 1:07 \_ /opt/httpd/bin/httpd -d /opt/httpd -f /opt/httpd/conf/httpd.conf -DFOREGROUND -k start daemon 24113 0.0 0.4 2159464 17864 ? Sl Mar09 0:42 \_ /opt/httpd/bin/httpd -d /opt/httpd -f /opt/httpd/conf/httpd.conf -DFOREGROUND -k start
Nginx 예)
root 12231 0.0 0.0 40336 460 ? Ss Mar03 0:00 | nginx: master process /opt/gitlab/embedded/sbin/nginx -p /var/opt/gitlab/nginx daemon 12233 0.0 0.0 44508 1404 ? S Mar03 0:57 | \_ nginx: worker process daemon 12234 0.0 0.0 40336 396 ? S Mar03 0:02 | \_ nginx: cache manager process