Solusi 1:
Saya dapat memikirkan dua cara untuk melakukan ini:
Salah satunya adalah dengan menjadikan layanan sebagai layanan pengguna, bukan layanan sistem.
Alih-alih membuat unit sistem, unit systemd akan ditempatkan di bawah direktori home pengguna layanan, di $HOME/.config/systemd/user/daemon-name.service
. Pengguna yang sama kemudian dapat mengelola layanan dengan systemctl --user <action> daemon-name.service
.
Agar unit pengguna dapat memulai saat boot, root harus mengaktifkan sisa akun, yaitu sudo loginctl enable-linger username
. Satuannya juga harus WantedBy=default.target
.
Cara lain adalah dengan mengizinkan akses pengguna untuk mengelola unit sistem melalui PolicyKit. Ini membutuhkan systemd 226 atau lebih tinggi (dan PolicyKit>=0,106 untuk file JavaScript rules.d – periksa dengan pkaction --version
). Perhatikan bahwa Debian sengaja menahan PolicyKit ke versi 0,105 yang berusia hampir satu dekade yang tidak mendukung fungsi ini, tampaknya karena pendapat pribadi satu orang, dan baik itu maupun distribusi yang berasal darinya (seperti Ubuntu) tidak dapat menggunakan metode ini.
Anda akan membuat file konfigurasi PolicyKit baru, mis. /etc/polkit-1/rules.d/57-manage-daemon-name.rules
yang memeriksa atribut yang ingin Anda izinkan. Misalnya:
// Allow alice to manage example.service;
// fall back to implicit authorization otherwise.
polkit.addRule(function(action, subject) {
if (action.id == "org.freedesktop.systemd1.manage-units" &&
action.lookup("unit") == "example.service" &&
subject.user == "alice") {
return polkit.Result.YES;
}
});
Pengguna bernama kemudian dapat mengelola layanan bernama dengan systemctl
dan tanpa menggunakan sudo
.
Solusi 2:
sudo
dibuat untuk itu. Edit /etc/sudoers
Anda file dengan visudo
untuk menambahkan Cmd_alias
untuk perintah yang Anda inginkan agar dapat digunakan oleh pengguna yang tidak memiliki hak istimewa:
# game server commands
Cmnd_Alias GAME_CMDS = /usr/bin/systemctl start <game service>, /usr/bin/systemctl stop <game service>
dan tambahkan baris untuk mengizinkan pengguna yang tidak memiliki hak untuk menggunakan perintah yang ditentukan dengan alias seperti ini:
unprivileged_user ALL=(ALL) NOPASSWD: GAME_CMDS
Baca lebih banyak dokumentasi tentang topik untuk berbagai parameter perintah sudo.
Anda mungkin perlu memasang sudo
paket untuk memiliki sudo
tersedia di sistem Anda.