許可されていないコマンドの実行時にsudoがパスワードを要求しないようにする


15

sudoを介してパスワードなしで特定のコマンドを実行するグ​​ループのアクセス許可を付与しました。ユーザーの1人がタイプミスをしたり、間違ったコマンドを実行すると、システムはパスワードの入力を求め、エラーが発生します。これはユーザーを混乱させるため、パスワードの入力を求める代わりにエラーを表示したいだけです。これは可能ですか?

これが私のsudoersファイルの例です:

%mygroup ALL=(ALL) NOPASSWD:/usr/local/bin/myscript.sh *

間違ったスクリプトを実行する例:

# sudo /usr/local/bin/otherscript.sh
[sudo] password for user:
Sorry, user user is not allowed to execute '/usr/local/bin/otherscript.sh' as root on <hostname>.

望ましい出力:

Sorry, user user is not allowed to execute '/usr/local/bin/otherscript.sh' as root on <hostname>. Please check the command and try again.

パスワードプロンプトがないことに注意してください。

私のgoogle-fuは失敗し、ユーザーコマンドの実行を許可されているときにパスワードを要求しないという結果のみを返します。


8
それが可能であれば、(小さな)セキュリティホールを開く可能性があります。ログインしたままキーボードを「借りる」sudo場合、パスワードを入力せずにどのコマンドを実行できるかわかりません。必要な機能があれば、特定のコマンドの情報を取得できます。
キーストンプソン

4
これは非常に大きなセキュリティ問題です。コマンドとしてスクリプトでsudoを使用しないでください。ユーザーはスクリプトを編集して、監査から完全にマスキングしたいものを実行できます。代わりに、スクリプト内にsudoの呼び出しを追加します。
coteyr

1
sudoユーザーがこれらのファイルへの書き込みアクセス権を持っている場合、バイナリファイルを実行する@coteyrも同様に大きな問題です。
ドミトリーグリゴリエフ

1
@CarlWitthoftですから、絶対パスを使用して、sudoersで許可されるプログラムを指定します。
ドミトリーグリゴリエフ

1
@DmitryGrigoryev、はい。ただし、sedなどを1つのファイルだけに使用する場合、sudoにはメリットがありません。ユーザーがファイルを変更できるようにすることが、ファイルにアクセス許可がある理由です。車輪を再発明する必要はありません。ユーザーがファイルを変更できるようにする場合は、それらを許可します。ユーザーがパスワードなしでファイルを変更できるようにするために、sudoでフープをジャンプする必要はありません。いつでも許可することができます。適切な仕事に最適なツール。
coteyr

回答:


25

のクイックリードから sudo(8)

   -n          The -n (non-interactive) option prevents sudo from
               prompting the user for a password.  If a password is
               required for the command to run, sudo will display an error
               message and exit.

そして、疑わしい人のために:

# grep jdoe /etc/sudoers
jdoe    ALL=(ALL) NOPASSWD: /bin/echo
#

このようにテスト:

% sudo echo allowed
allowed
% sudo -n ed             
sudo: a password is required
% sudo ed               

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

Password:

したがって、これらの人々のaliasためにsudo、おそらくパスワードプロンプトを防ぐためのトリックを行うでしょう。なぜこれがカスタムコンパイルを必要とするのsudoか、私にはわかりません。ただマニュアルを読むだけです。


確かに。alias sudo="$(which sudo) -n"/ etc / bashrcのようなものを配置し、必要に応じてsudo(調整された動作)またはcommand sudo(デフォルトの動作)を使用します。
CVn

7

私のために働いた1つのこと、(Sudoバージョン1.8.17p1)、しかしあなたの問題の一部だけを満足させることは、パスワード試行回数を0に設定することです。

Defaults:%mygroup passwd_tries = 0

これにより、パスワードを必要とするコマンドが試行されると、sudoがコード1で終了します。ただし、エラーメッセージは生成されません。


これも有効な回答ですが、エラーメッセージの欠如は混乱を招く可能性があります。ただし、上記の答えからの予想外の正しいエラーも混乱を招きます。それは私が推測する投げです。別の答えを提供していただきありがとうございます、オプションは常に高く評価されています!
user184982

2

できません。

認証されるまで自分が誰であるかを知る方法はありません。また、デフォルトでは、パスワードなしでは認証できません。

USBキー、指紋スキャナー、音声認証、顔認識、またはその他のものを使用するように認証を変更できますが、ポイントは同じです。

認証できず、認証なしで、かつ認証する前にsudoには、実行できることまたは実行できないことを伝えるビジネスはありません。


2
sudoを実行するときにパスワードを入力することは識別ではありません(「自分が誰であるかを伝える」)。須藤はあなたが誰であるかを知っています。パスワードの入力はプレゼンス確認です。
ジル 'SO-悪であるのをやめる'

存在確認を「認証」と見なします。認証、認証のように。
coteyr

2
答えは、「認証」ではなく「認証」です。sudoは、その端末にログインしているユーザー基づいて、あなたが誰であると主張しているのかを知っています、そのIDを認証するまであなたが誰であるかを知りません。
デイブシェロマン

2

@StrongBadは答えに値するコメントをしました:

最善の解決策は、常にsudo正しいパラメーターで呼び出すラッパースクリプトを記述することだと思います。(含みます-n

ラッパースクリプトは引数の解析などを行うことができるため、呼び出されたsudoスクリプトができるだけ小さくなり、バグが発生しにくくなります。


1

これは不可能です。唯一の方法は、ソースコードを変更し、独自のフォークをコンパイルすることですsudo


そのとおりですが、すべての運用サーバーにカスタムバージョンのsudoを読み込む許可を得るとは思いません。hah
user184982
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.