Saya menjalankan server permainan pribadi di kotak linux tanpa kepala. Karena saya bukan orang idiot, kata server berjalan sebagai pengguna yang tidak memiliki hak pribadi dengan hak akses minimum yang diperlukan untuk mengunduh pembaruan dan memodifikasi database dunia.
Saya juga membuat file unit systemd untuk memulai, menghentikan, dan me-restart server dengan benar (untuk pembaruan tersebut, misalnya).
Namun, untuk benar-benar menelepon systemctl
atau service <game> start/stop/restart
saya masih harus masuk sebagai root atau sudo
pengguna yang mampu.
Apakah ada cara untuk memberi tahu systemd bahwa untuk <game>
layanan ini, pengguna yang tidak gamesrv
memiliki hak diizinkan untuk menjalankan perintah start / stop / restart?
Jawaban:
Saya dapat memikirkan dua cara untuk melakukan ini:
Salah satunya adalah dengan membuat layanan layanan pengguna daripada 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 dengansystemctl --user <action> daemon-name.service
.Untuk memungkinkan unit pengguna untuk memulai saat boot , root harus mengaktifkan berlama-lama untuk akun, yaitu
sudo loginctl enable-linger username
. Unit juga harusWantedBy=default.target
.Cara lainnya adalah dengan memungkinkan pengguna mengakses 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
).Anda akan membuat file konfigurasi PolicyKit baru, misalnya
/etc/polkit-1/rules.d/57-manage-daemon-name.rules
yang memeriksa atribut yang ingin Anda izinkan. Sebagai contoh :Pengguna yang disebutkan kemudian dapat mengelola layanan yang dinamai dengan
systemctl
dan tanpa menggunakansudo
.sumber
loginctl
bekerja.sudo
dibuat untuk itu. Edit/etc/sudoers
file Anda denganvisudo
untuk menambahkanCmd_alias
perintah yang Anda inginkan agar pengguna yang tidak berhak dapat menggunakan:dan tambahkan baris untuk memungkinkan pengguna yang tidak memiliki hak menggunakan perintah yang didefinisikan dengan alias seperti ini:
Baca beberapa dokumentasi lebih lanjut tentang topik untuk berbagai parameter perintah sudo.
Anda mungkin perlu menginstal
sudo
paket agarsudo
tersedia di sistem Anda.sumber
systemd
file unit adalah menentukan bahwa itu perlu dijalankan sebagaigamesrv
.Anda dapat mengaitkan
sudo
dengan menyediakan akses yang setara denganroot
, tetapi dapat juga digunakan untuk memungkinkan akses root pengguna tertentu untuk serangkaian perintah tertentu dan terbatas.Bagaimana hal itu telah dijawab di Server Fault, di [ Memberikan akses serangkaian perintah ke pengguna non-root tanpa sudo akses dari serangkaian perintah ke pengguna non-root tanpa sudo).
Menggunakan PolicyKit masih jarang. Menggunakan "unit pengguna" systemd harus bekerja dengan baik, tetapi secara historis tujuan Anda telah terpenuhi berkali-kali dengan menggunakan kemampuan
sudo
untuk memungkinkan pengguna untuk menjalankan perintah tertentu sebagai root.sumber