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