タイトルだけを⾒ると
「そんな危険なことするニーズあるの?」と聞こえてきそうですが、
インターネットに公開していないシステムならニーズもあるのではないでしょうか。

ということで、実現する⽅法を紹介したいと思います。

動作環境は
ubuntu22.04にインストールされたnginx
で試しました。

nginxからCGIを呼び出すためにfcgiwrapを使います。

(⼿順1)
fcgiwrapをインストール

#apt install fcgiwrap

(⼿順2)
fcgiwrapの設定を新規作成

#vi /etc/nginx/fcgiwrap.conf

/etc/nginx/fcgiwrap.confに以下を記述

location /cgi-bin/ { 
 gzip off; 
 root /usr/lib;

 # Fastcgi socket
 fastcgi_pass unix:/var/run/fcgiwrap.socket;

 # Fastcgi parameters, include the standard ones
 include /etc/nginx/fastcgi_params;

 # Adjust non standard parameters (SCRIPT_FILENAME)
 fastcgi_param SCRIPT_FILENAME /usr/lib$fastcgi_script_name;
}

(⼿順3)
fcgiwrapサービスをrootユーザーで動かすように設定
※rootユーザーで起動しないと、root権限のコマンドが動かせません。ここがミソです。

#vi /lib/systemd/system/fcgiwrap.service

[Service] セクション内の UserとGroupをrootに変更

[Service]
Environment=DAEMON_OPTS=-f
EnvironmentFile=-/etc/default/fcgiwrap
ExecStart=/usr/sbin/fcgiwrap ${DAEMON_OPTS}
User=root
Group=root

(⼿順4)
systemd に新しい構成を認識させます

#systemctl daemon-reload

(⼿順5)
fcgiwrapを起動します。
※fcgiwrapはnginxとは別のプロセスで動作しています

#systemctl start fcgiwrap

設定は以上です。

後はCGIファイルを作成して、
任意のコマンドを実⾏する記述をして、
WEBブラウザからアクセスすれば
記述されたコマンドが実⾏されます。

(CGIファイルのサンプル)

#mkdir -vp /usr/lib/cgi-bin/
#vi /usr/lib/cgi-bin/test.cgi
#chmod 775 /usr/lib/cgi-bin/test.cgi

※CGIファイルには実⾏権限が必要です。

/usr/lib/cgi-bin/test.cgiに以下を記述します。

#!/bin/sh

eval $QUERY_STRING
echo 'Content-type: text/html'
echo ''

echo '<html lang="ja" >'
echo '<meta charset="UTF-8">'
echo '<head></head>'
echo '<h1>Result</h1>'

echo_html(){
 echo "<h3>${@}</h3>"
 echo "<pre>"
 eval $@
 echo "</pre>"
}

echo_html whoami
echo_html systemctl status nginx
echo_html systemctl status fcgiwrap

echo '<body>'

(URL)
https://(配置したホスト)/cgi-bin/test.cgi

このURLにアクセスしたら上記のコマンドが実⾏されます。
※CGIファイルに記述ミスがあると502エラーになります。

ニッチなニーズかと思います。