Polkitルールが機能しません。

Polkitルールが機能しません。

私のpkactionのバージョンは0.112です。

私のルートディレクトリにサービスがあり、ユーザーグループにサービスを実行するための管理者権限を与えたいと思います。

このサービスは次に存在します。/root/home/custom_service/service.service

chgrp admin ./home/custom_service/頑張ったchmod g+rx ./home/custom_service/

権限を確認するls -l ./home/custom_service/-rw-r-xr-- 1 root admin 449 May 30 11:23 service.service

私のtestUsrアカウント(グループマネージャにあります)でサービスを実行しようとすると、結果は次のようになります。

私は走る:

systemctl start service.service

結果:

==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to manage system services or units.
Authenticating as: scarycall
Password:
polkit-agent-helper-1: pam_authenticate failed: Permission denied
==== AUTHENTICATION FAILED ===
Failed to start service.service: Access denied
See system logs and 'systemctl status service.service' for details.

注:ルートでサービスを実行できます。

だから私は次のようにpolkitルールを有効にしました:

// vi: ft=javascript
// Allow user in admin group to manage specific systemd units
Array.prototype.includes = function(variable) {
    for (var i = 0; i < this.length; i++) { if (this[i] === variable) { return true; } }
    return false;
}

polkit.addRule(function(action, subject) {
    var allowed = {
        units: [
            "service.service"
        ],
        actions: [
            "org.freedesktop.systemd1.manage-unit-files"
        ],
        verbs: [
            "start", "stop", "restart"
        ]
    }
    var unit_name = action.lookup("unit");
    if (allowed.actions.includes(action.id) &&
        allowed.units.includes(unit_name) &&
        allowed.verbs.includes(action.lookup("verb")) &&
        subject.isInGroup("admin")
    ) {
        return polkit.Result.YES;
    }
});

これは次の場所に保存されます。/etc/polkit-1/rules.d/60-service.rules

"systemctl start service.service"を再実行すると、このルールは機能せず、上記の結果がまだ得られます。

修正する: 私が実行しているシステムには、ジョブの単位と動詞の詳細をサポートする正しいバージョンのsystemdがありません。そのため、sudo権限を使用する必要がありました。

関連情報