내 거CGI 실행 파일이 예상대로 시작됩니다.. 그러나 어느 시점에서는 루트(그리고 다른 사용자)가 되려고 시도합니다. 그 시점에서 CGI는 실패했습니다.
관련 코드 조각은 다음과 같습니다.
[...]
int const pid(fork());
if(pid == 0)
{
if(setgid(0) == -1) // <-- this fails.
{
std::cerr << "error: cannot become the \"root\" group.\n";
exit(0);
}
[...]
나는 이것이 systemd와 관련이 있다고 생각합니다NoNewPrivileges
범위. 이 매개변수는 기본적으로 설정되며 Apache2 파일 false
에는 표시되지 않습니다 . .service
그래서 이 작품을 만들기 위해 다음에 무엇을 시도할 수 있는지 궁금합니다.
apache2.service
파일은 다음과 같습니다 (Ubuntu 20.04).
[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target
Documentation=https://httpd.apache.org/docs/2.4/
[Service]
Type=forking
Environment=APACHE_STARTED_BY_SYSTEMD=true
ExecStart=/usr/sbin/apachectl start
ExecStop=/usr/sbin/apachectl stop
ExecReload=/usr/sbin/apachectl graceful
PrivateTmp=true
Restart=on-abort
[Install]
WantedBy=multi-user.target
NoNewPrivileges
설정도 없고 아무 것도 없는 것을 볼 수 있습니다Freedesktop에 나열된 것과 유사한 부작용이 있는 필드.
setuid()
최신 버전의 Apache2에서 / setgid()
기능이 작동하도록 하려면 어떻게 해야 합니까 ?