学校や図書館で使用するマルチシートシステムをセットアップし、GDMが複数のXセッションを起動して、さまざまなユーザー/キーボード/モニターと同時に実行できるようにしたとします。
デフォルトでは、GnomeのDebian/Ubuntuでは、シャットダウンまたは再起動するためにrootである必要はありません。ただし、これは、すべてのユーザーが「再起動」または「シャットダウン」を選択して、他の3人のユーザーをキックオフできることを意味します。
サーバーへの物理アクセスをブロックしたため、サーバーは単に電源ボタンまたはリセットボタンを押すことができません。
GDM/Gnome /使用しているウィンドウマネージャーを介して通常のユーザーに公開される「シャットダウン」および「再起動」機能を無効にする正しい方法は何ですか?
まず、ConsoleKitのシャットダウン機能は「シングルユーザー」と「マルチユーザー」を考慮することに注意してください 2つの異なる状況として –システムをシャットダウンするには、他のユーザーがログインしている場合は常に管理者認証が必要です。
このようなアクションはすべてPolicyKitによって管理されます。ポリシーを調整する場合は、polkit(8)– /etc/polkit-1/rules.d/20-disallow-shutdown.rules
で説明されているように調整できます。
polkit.addRule(function(action、subject){ if((action.id == "org.freedesktop.consolekit.system.stop" || action.id == "org.freedesktop.consolekit.system.restart")&& subject.isInGroup( "users")){ return subject.active? polkit.Result.AUTH_ADMIN:polkit.Result.NO; } });
PolicyKit 0.105以前のバージョンでは、これが pklocalauthority(8) – /etc/polkit-1/localauthority/50-local.d/20-disallow-shutdown.pkla
:に記載されています。
[シャットダウンを許可しない] ID =unix-group:users Action = org.freedesktop.consolekit.system.stop; org.freedesktop.consolekit.system.restart ResultAny = no ResultInactive = no ResultActive =auth_admin
ザ・ Action
sはConsoleKit ポリシーファイル にリストされるか、pkaction
を実行します。
pkaction
# or /usr/share/polkit-1/actions/
/usr/share/polkit-1/actions/org.freedesktop.login1.policy
を確認する必要があります
最初にシステムメッセージの監視を開始して、新しいルールが機能するかどうかを確認します。
journalctl -f
次に、ファイル/etc/polkit-1/rules.d/60-noreboot_norestart.rules
(javascript内)を作成します。
このファイルでは、アクションをチェックしてusers
グループでpower
を許可するか、su
認証を要求するロジックを追加します。
polkit.addRule(function(action, subject) {
if (action.id == "org.freedesktop.login1.reboot" ||
action.id == "org.freedesktop.login1.reboot-multiple-sessions" ||
action.id == "org.freedesktop.login1.power-off" ||
action.id == "org.freedesktop.login1.power-off-multiple-sessions") {
if (subject.isInGroup("power")) {
return polkit.Result.YES;
} else {
return polkit.Result.AUTH_ADMIN;
}
}
});
ルールがロードされ、機能するはずです。以下の参照。
@jakegouldの答えのより洗練された最新のES6バージョンは次のとおりです。
/etc/polkit-1/rules.d/20-disable-unprivileged-power-controls.rules
/* jshint esnext:true */
/**
* @see https://superuser.com/questions/354678/what-is-the-correct-way-to-prevent-non-root-users-from-issuing-shutdowns-or-rebo
* @since 2019.05.26
*/
polkit.addRule( function(action, subject) {
const power_actions = [
'org.freedesktop.login1.reboot',
'org.freedesktop.login1.reboot-multiple-sessions',
'org.freedesktop.login1.power-off',
'org.freedesktop.login1.power-off-multiple-sessions',
];
if ( power_actions.includes( action.id ) ) {
let result = polkit.Result.AUTH_ADMIN;
if ( subject.isInGroup( 'wheel' ) ) {
result = polkit.Result.YES;
}
return result;
}
} );