sudoers NOPASSWDタグが機能していないようです

sudoers NOPASSWDタグが機能していないようです

私が見つけたスクリプトを適用しています。ここ私の目的のために。

デフォルトでは、スクリプトはいくつかの条件を確認し、sudoを使用して2つのコマンドのいずれかを実行します。このコマンドはユーザーとして実行されますcas

スクリプトは対話的に実行されないため、スクリプト内のsudoコマンドがパスワードプロンプトなしで実行されることを確認したいと思います。そのため、sudoersファイルに次の行を追加しました。

ALL     ALL = NOPASSWD: /usr/bin/systemctl mask sleep.target suspend.target
ALL     ALL = NOPASSWD: /usr/bin/systemctl unmask sleep.target suspend.target

sudoersファイルがどのように機能するかを理解したところ、これはすべてのユーザーがパスワードプロンプト/usr/bin/systemctl mask sleep.target suspend.targetなしでコマンドを実行できることを意味します。/usr/bin/systemctl unmask sleep.target suspend.target

代わりにパスワードプロンプトが表示され続けます。

cas-desktop :: ~ » sudo /usr/bin/systemctl マスク sleep.target suspens.target
[sudo] cas パスワード:
sudo: パスワードが必要

私もsudoなしで試しました。

cas-desktop :: ~ » /usr/bin/systemctl マスク sleep.target suspens.target
==== org.freedesktop.systemd1.manage-unit-files に認証 ====
システムサービスまたはデバイス管理には ID が必要します。文書を確認してください。
認証方法:Cas(cas)
パスワード:

これを行うにはどうすればいいかわかりません。アイデアがあれば教えてください。

答え1

実行して、ユーザーに許可されている他のコマンドラインが定義されていることをsudo -l確認してください。sudoが表示されますみんなデフォルト構成および含まれている/etc/sudoers.d/*ファイル(存在する場合)で適用可能なsudoers構成行。

以下を注文することが重要です。最後あなたの命令に一致する行は尊重されます。行が(ALL : ALL) ALL表示されていないNOPASSWD:通常の行の場合〜するパスワードの入力を求められます。その場合は、NOPASSWD:表示されている行をファイルの後の場所に移動してくださいsudoers

sudoersファイルの最後の行がある場合は、@includedir /etc/sudoers.dsudo設定行をに移動することをお勧めします/etc/sudoers.d/。そのディレクトリのファイル名には次の文字が~含まれています。.無視されます


またはなしでこれを許可するには、次のルールファイルを作成するsudo必要があります。polkit/etc/polkit-1/rules.d/01-local-sleep-suspend.rules

// -*- mode: js2 -*-
polkit.addRule(function(action, subject) {
    if (action.id == "org.freedesktop.systemd1.manage-units" &&
         (action.lookup("unit") == "sleep.target" ||
          action.lookup("unit") == "suspend.target") &&
        subject.user == "cas") {
            return polkit.Result.YES;
    }
});

関連情報