setgid()/setuid()を使用したいApache2 CGI実行可能ファイルがあります。ただし、ルートへの移行は失敗します。この問題をどのように解決できますか?

setgid()/setuid()を使用したいApache2 CGI実行可能ファイルがあります。ただし、ルートへの移行は失敗します。この問題をどのように解決できますか?

私のものCGI実行可能ファイルが期待どおりに起動されます。。ただし、ある時点では、root(そして他のユーザー)になることを試みます。その時点で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()機能を機能させるにはどうすればよいですか?

関連情報