그룹의 사용자가 다음 foogroup
을 수행할 수 있기를 바랍니다.
systemctl start foo.service
,systemctl stop foo.service
,systemctl status foo.service
, 그리고journalctl -u foo.service
상승된 권한을 사용하지 마십시오. 그게 가능합니까?
다음과 같은 시스템 서비스가 있습니다.
[Unit]
Description=foo service
[Service]
Type=simple
ExecStart=/bin/sleep infinity
User=foobot
Group=foogroup
foobot
시스템 사용자는 어디에 있습니까?
권한이 없는 사용자가 systemd를 사용할 수 있도록 단위 파일을 설치할 수 있다는 것을 알고 있지만 ~/.config/systemd/user/
이는 실제로 커뮤니티에 도움이 되지 않습니다.
참고: 사용할 계획입니다.SD 버스API의libsystem-dev
그리고조종석따라서 추가해도 systemctl
도움 /etc/sudoers
이 되지 않습니다.
별로 상관하지 않습니다 systemctl enable
. 더 높은 권한이 필요한지 여부는 중요하지 않습니다.
답변1
이것이 제가 마침내 생각해낸 해결책입니다. 내가 만든다:
/etc/polkit-1/localauthority/50-local.d/service-auth.pkla
---
[Allow foogroup to start/stop/restart services]
Identity=unix-group:foogroup
Action=org.freedesktop.systemd1.manage-units
ResultActive=yes
이는 특히 Debian/Ubuntu에서 사용되는 polkit <106에 적용됩니다. 다른 배포판에서는 다음을 수행하는 최신 버전의 polkit을 사용합니다.
/etc/polkit-1/rules.d/foogroup.rules
---
polkit.addRule(function(action, subject) {
if (action.id == "org.freedesktop.systemd1.manage-units" &&
subject.isInGroup("foogroup")) {
return polkit.Result.YES;
} });
단일 서비스로 제한하고 시작/중지/다시 시작만 하려면 다음과 같이 사용하세요.
polkit.addRule(function(action, subject) {
if (action.id == "org.freedesktop.systemd1.manage-units" &&
subject.isInGroup("foogroup")) {
if (action.lookup("unit") == "foo.service") {
var verb = action.lookup("verb");
if (verb == "start" || verb == "stop" || verb == "restart") {
return polkit.Result.YES;
}
}
}
});
답변2
나는 해결책을 찾고 있지만 실제로 나를 만족시키는 해결책을 찾을 수 없습니다. 만족스러운 해결책은 에서 그룹 지원을 제공하는 것입니다 systemd
. 그런데 이 해결 방법을 찾았습니다. 액세스 권한 을 부여하려는 사용자가 및 이라고 가정합니다 ann
. 그들은 모두 하나의 그룹에 속해야 합니다 .ben
chris
awesomeproject
- 새 사용자를 생성
awesomeproject
하고 해당 사용자를 그룹에 추가합니다awesomeproject
.
sudo adduser awesomeproject
sudo usermod -a -G awesomeproject ann
sudo usermod -a -G awesomeproject ben
sudo usermod -a -G awesomeproject chris
systemctl
그룹의 모든 사용자를 새 사용자의 sudoer에 추가합니다.
sudo visudo
이러한 항목은 다음과 같아야 합니다.
ann ALL=(awesomeproject) NOPASSWD: /bin/systemctl
ben ALL=(awesomeproject) NOPASSWD: /bin/systemctl
chris ALL=(awesomeproject) NOPASSWD: /bin/systemctl
에 넣는 것보다 배포판에 따라 사용하는 것보다 /etc/sudoers
넣는 것이 더 나을 수도 있습니다 ./etc/sudoers.d/awesomeproject
sudo visudo -f /etc/sudoers.d/awesomeproject
awesomeproject
그룹 구성원이 액세스할 수 있도록 파일 및 디렉터리에 대한 권한을 적절하게 관리합니다~awesomeproject
.이제 다음 명령이
ann
,ben
및 에서 작동합니다chris
.
sudo awesomeproject systemctl ...