내 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 권한을 사용해야 했습니다.