ホスト名を変更するためにhostnamectlがパスワードを要求しないのはなぜですか?

ホスト名を変更するためにhostnamectlがパスワードを要求しないのはなぜですか?

systemdを使用してホスト名を変更する新しい方法は次のとおりです。

hostnamectl set-hostname NEWNAME

ただし、管理者権限を持つユーザーとしてログインした場合(どのグループが含まれているかわからない)、パスワードは必要ありません。管理者以外のユーザーの場合は、権限を持つユーザーの1人にパスワードを入力するように求めるダイアログボックスが表示されます。

「shutdown -h now」は管理者以外のユーザーにも機能すると思います。

systemdに関連する新しいコマンドだと思います。

コマンドを送信するユーザーにコマンドを実行する権限があるかどうかを確認するにはどうすればよいですか?パスワードを要求したりsudoを要求したりするにはどうすればよいですか?

答え1

関連ユーティリティ内でsystemd特権アクセスが必要なアクションは、PolicyKitを介してルーティングされます。pkactionPolicyKitで処理できるすべてのタスクのリストを表示するには、引数なしで実行してください。特定のタスクの現在のポリシーを表示するにはを使用してくださいpkaction --verbose --action-id <action identifier。たとえば、ホスト名を変更するには、次のようにします。

# pkaction | grep host
org.freedesktop.hostname1.set-hostname
org.freedesktop.hostname1.set-machine-info
org.freedesktop.hostname1.set-static-hostname

# pkaction --verbose --action-id org.freedesktop.hostname1.set-hostname
org.freedesktop.hostname1.set-hostname:
  description:       Set host name
  message:           Authentication is required to set the local host name.
  vendor:            The systemd Project
  vendor_url:        http://www.freedesktop.org/wiki/Software/systemd
  icon:              
  implicit any:      auth_admin_keep
  implicit inactive: auth_admin_keep
  implicit active:   auth_admin_keep

したがって、私のシステムの現在のホスト名変更ポリシーは次のとおりですauth_admin_keep。つまり、管理者パスワードが必要です。〜しない限りユーザーは最近同様のチェックに成功しました(sudo継続的なパスワード要求を避けることができるように)。

管理者は誰であり、誰のパスワードでこれらのタスクを承認できますか?私のDebian 9システムでは、ディレクトリ内のファイルによって決まります/etc/polkit-1/localauthority.conf.d/。デフォルトでは、root とsudoユーザーグループのメンバーのみが適格です。

このポリシーが気に入らない場合は、カスタム PolicyKit 構成ファイルを作成して簡単に変更できます。

PolicyKitは、管理するすべてのタスクに対して次の「セキュリティレベル」を要求するように設定できます。

  • yes- ユーザーはいつでも質問なしでこれを行うことができます。
  • auth_self_keep- ユーザーが最近パスワードの確認が必要な操作を行っていない場合は、ユーザーのパスワードを要求して実際に自分であることを確認してください。このレベルの複数の連続操作が数分以内に実行される場合は、最初の操作の後に検査をスキップできます。
  • auth_self- 常にユーザーにパスワードの確認を要求します。
  • auth_admin_keep- 管理ユーザーのパスワードが必要です。同様に、auth_self_keepパスワード(およびオプションでadminユーザー名)を一度入力した後、ユーザーはパスワードを要求せずに短時間でそのレベルで複数の操作を実行できます。
  • auth_admin- パスワードの確認は常に必須であり、パスワードの確認に応答するユーザーは管理者の一人でなければなりません。
  • no- 追加の質問なしで対応措置は拒否されます。

結果を維持するタイミングは..._keep明らかにPolicyKitアップストリームコードにハードコードされています。以下はPolicyKit Gitへのリンクです。

/* TODO: right now the time the temporary authorization is kept is hard-coded - we
 *       could make it a propery on the PolkitBackendInteractiveAuthority class (so
 *       the local authority could read it from a config file) or a vfunc
 *       (so the local authority could read it from an annotation on the action).
 */
 expiration_seconds = 5 * 60;

実行時にこの値を設定または設定した後に認証タイムスタンプを拡張するための規定がないようです。

OpenSuSEはこれを拡張して結果を得た...keep_sessionようです...keep_always明らかに、彼らはまた、これらの...keepタスクを「尋問プロセスが実行され続ける限り、結果を覚えている」という意味で再解釈しました。

関連情報