Systemdでホスト名を変更する新しい方法は次のようです。
hostnamectl set-hostname NEWNAME
ただし、管理者権限を持つユーザーとしてログインする場合は、パスワードは必要ありません(どのグループがカウントされるかはわかりません)。管理者以外のユーザーの場合は、特権ユーザーの1人のパスワードを要求するダイアログがポップアップ表示されます。
「shutdown-hnow」は、管理者以外のユーザーでも機能すると思います。
これらは両方とも新しいsystemd関連のコマンドだと思います。
コマンドを送信するユーザーがコマンドを実行する権限を持っているかどうかをどのように確認しますか?どうすればパスワードを要求したり、sudoを要求したりできますか?
systemd
および関連するユーティリティでは、特権アクセスを必要とする可能性のあるアクションはPolicyKitを介してルーティングされます。パラメータなしでpkaction
を実行して、PolicyKitによって処理されるすべての可能なアクションのリストを表示します。特定のアクションの現在のポリシーを確認するには、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
連続したパスワード要求を回避できます)。
そして、パスワードでこれらのアクションを承認できる管理者は誰ですか?私のDebian9システムでは、これは/etc/polkit-1/localauthority.conf.d/
ディレクトリ内のファイルによって決定されます。デフォルトでは、rootとSudo
ユーザーグループのメンバーのみが対象となります。
このポリシーが気に入らない場合は、カスタムPolicyKit構成ファイルを作成することで簡単に変更できます。
PolicyKitは、それによって管理されるアクションに対して次の「セキュリティレベル」を要求するように構成できます。
yes
-ユーザーはいつでもそれを行うことができ、質問はありませんauth_self_keep
-ユーザーが最近パスワードチェックを必要とすることを何もしていない場合は、ユーザーのパスワードを要求して、それが本当に彼/彼女であることを確認します。このレベルの複数の連続したアクションが数分ウィンドウ内に実行される場合、最初のチェックの後にチェックをスキップできます。auth_self
-常にユーザーのパスワードチェックが必要auth_admin_keep
-管理ユーザーのパスワードが必要です。 auth_self_keep
と同様に、パスワード(およびオプションで管理者ユーザー名)を1回入力すると、ユーザーはパスワードを要求することなく、短い時間枠内でこのレベルの複数のアクションを実行できます。auth_admin
-常にパスワードチェックが必要であり、パスワードチェックに応答するユーザーは管理ユーザーの1人である必要があります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
アクションを再解釈して「結果を覚えている限り質問プロセスは実行され続けます。」