すべてのDebianベースのLinuxディストリビューションは、システムですべての操作を実行できるユーザーとしてsudoを使用しますか?

すべてのDebianベースのLinuxディストリビューションは、システムですべての操作を実行できるユーザーとしてsudoを使用しますか?

sudo特にDebianバージョン9または10用のNodejsスクリプトを作成していますが、rootと同じ権限を持つユーザーとして実行する必要があります。サンプルコードは次のとおりです。

exec('iptables -S',
    function (err, stdout, stderr) {
        resolve(stdout)
        if (err !== null) {
          reject(err.toString('utf8'));
        }
    })

だから私たちの質問は、すべてのDebianベースのLinuxディストリビューションがsudoを使用しているということです。もしそうなら、ケースは終了しました。しかし、答えが「いいえ」の場合、Debianディストリビューションに常に存在するが使用されていない他のユーザーグループまたは他のユーザーがこのコマンドを使用して実行できるようにする他のオプションは何ですかsudo

答え1

0この種の問題を処理する最も一般的な方法は、プログラムがrootユーザーのユーザーIDである有効なUIDを持つユーザーによって実行されていることを確認することです。たとえば、rootとしてのみ実行できるシェルスクリプトを作成する場合は、次のようにします。

#!/bin/sh
uid=$(id -u)
if [ $uid != 0 ]; then
    echo "This must be run as root!"
    exit
else
    echo "You are root, proceed!"
fi

(実際にシェルスクリプトを作成する場合は、その$UID変数のみを使用しますが、Node.jsではその変数が適用されないか複雑である可能性があるため、id -u代わりに使用しています。)

スクリプトを別の方法で実行すると、次のようになります。

$ foo.sh
This must be run as root!

$ sudo foo.sh
You are root, proceed!

$ sudo -i ## open a root shell
# ~terdon/scripts/foo.sh
You are root, proceed!

つまり、忘れてくださいsudo(いいえ、Debianシステムに常にインストールされることを100%確信できません。Debian に sudo がデフォルトでインストールされないのはなぜですか?)単にユーザーIDを確認し、そうでない場合は終了してくださいroot。 rootとして実行する必要があることをユーザーに知らせるエラーメッセージを書くと、それはすべてです。これを自動化する必要がある場合は、sudoパスワードを手動で入力する必要があるため、機能しません。

答え2

短い答え:はい、すべてはいできるUsedsudoですが、インストールされているとは想定できません。

より長い答え:Debianだけでなく、すべてのディストリビューションできる使用sudosudoシステムがルート(および他のユーザー)でタスクを実行するための好ましい方法です。経験によると、sudo通常いいえDebianに依存する他のパッケージからインポートされない限り、Debianのインストールにはデフォルトでインストールされます。 Debian から継承した一部のディストリビューション (Ubuntu など) はプリインストールsudoされています。アプリケーションをrootとして実行しないでください。sudoこのようなコマンドを使用してコマンドを実行することをお勧めしiptablesます。アプリケーションの初期化段階で可用性を確認し、sudo使用できない場合はエラーを発生させることをお勧めします。

関連情報