%2Fsetuid()%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EB%A0%A4%EB%8A%94%20Apache2%20CGI%20%EC%8B%A4%ED%96%89%20%ED%8C%8C%EC%9D%BC%EC%9D%B4%20%EC%9E%88%EC%8A%B5%EB%8B%88%EB%8B%A4.%20%EA%B7%B8%EB%9F%AC%EB%82%98%20%EB%A3%A8%ED%8A%B8%EB%A1%9C%EC%9D%98%20%EC%A0%84%ED%99%98%EC%9D%80%20%EC%8B%A4%ED%8C%A8%ED%95%A9%EB%8B%88%EB%8B%A4.%20%EC%9D%B4%20%EB%AC%B8%EC%A0%9C%EB%A5%BC%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%ED%95%B4%EA%B2%B0%ED%95%A0%20%EC%88%98%20%EC%9E%88%EB%82%98%EC%9A%94%3F.png)
내 거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()
기능이 작동하도록 하려면 어떻게 해야 합니까 ?