GNU/Linux >> Belajar Linux >  >> Linux

systemd:Berikan izin pengguna yang tidak berhak untuk mengubah satu layanan tertentu

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.


Linux
  1. Menambahkan layanan baru ke sistem Linuxd

  2. Howto MySQL:Buat pengguna dan berikan izin ke database

  3. Bagaimana Cara Mengubah Pengguna Untuk Banyak File Layanan Systemd?

  1. Izin SELECT INTO OUTFILE ditolak tetapi pengguna dapat menulis ke direktori

  2. Cara memulai layanan systemd setelah pengguna masuk dan menghentikannya sebelum pengguna keluar

  3. aktivasi soket systemd vs xinetd

  1. Kelola startup menggunakan systemd

  2. 10 perintah systemd yang berguna:Referensi

  3. SSH:satu authorized_keys untuk beberapa akun layanan