pengguna systemd tidak bisa mendapatkan kemampuan grup pengguna

8

Saya menambahkan pengguna non-root di grup buruh pelabuhan, dan layanan lain berjalan karena pengguna non-root ini terhubung ke daemon buruh pelabuhan. tetapi layanan tidak dapat bekerja. Saya melakukan contoh uji untuk ini:

root@# systemctl start docker.service 
root@# gpasswd -a tiger docker

buat layanan systemd di harimau:

[Service]
ExecStart=/home/tiger/connectdocker
Restart=always
StartLimitInterval=0
Delegate=true
KillMode=process
[Install]
WantedBy=default.target

yang /home/tiger/connectdockerseperti ini:

docker run -itd busybox 2> connectdocker.log

mulai layanan ini:

tiger@# systemctl --user enable connectdocker.service
tiger@# systemctl --user start connectdocker.service

dan hasilnya:

Thu Jul 21 00:59:15 CST 2016
Cannot connect to the Docker daemon. Is the docker daemon running on this host?

tapi saya bisa terhubung ke docker.sock dengan harimau:

tiger@# docker run -itd busybox
997e99f959cfd5500319935ec17677775da9d367d203a11efef8b42161c3ee64

untuk membuktikan itu, saya mengubah /var/run/docker.sockgrup dari buruh pelabuhan ke harimau, dan layanan connectdocker dapat terhubung ke daemon buruh pelabuhan.

ubah /var/run/docker.sock:

ls -l /run/docker.sock
srw-rw---- 1 root docker 0 Jul 21 00:33 /run/docker.sock

untuk:

ls -l /run/docker.sock
srw-rw---- 1 root tiger 0 Jul 21 00:33 /run/docker.sock
yongsu zhang
sumber
1
Apakah Anda pernah berhasil ini?
Mark Stosberg

Jawaban:

1

Anda harus menggunakan User=arahan dalam systemdlayanan Anda .

Pengguna =, Grup =

Tetapkan masing-masing pengguna atau grup UNIX tempat proses dieksekusi. Mengambil satu pengguna atau nama grup, atau ID numerik sebagai argumen. Untuk layanan sistem (layanan yang dijalankan oleh manajer layanan sistem, yaitu yang dikelola oleh PID 1) dan untuk layanan pengguna dari pengguna root (layanan yang dikelola oleh instance root dari systemd --user), standarnya adalah "root", tetapi Pengguna = mungkin digunakan untuk menentukan pengguna yang berbeda. Untuk layanan pengguna dari pengguna lain mana pun, pengalihan identitas pengguna tidak diizinkan, karenanya satu-satunya pengaturan yang valid adalah pengguna yang sama dengan yang digunakan pengelola layanan pengguna. Jika tidak ada grup yang ditetapkan, grup default pengguna digunakan. Pengaturan ini tidak memengaruhi perintah yang baris perintahnya diawali dengan "+".

https://www.freedesktop.org/software/systemd/man/systemd.exec.html#User=

Saya juga merekomendasikan untuk memindahkan skrip Anda dari direktori home ke jalur standar, suka /usr/local/binatau semacamnya.

Anda juga harus memastikan pemesanan Anda connectdocker.servicedengan memberikannya After=docker.servicedan Requires=docker.service. Seperti yang tertulis, connectdocker.servicemungkin mencoba untuk memulai sekitar waktu yang sama dengan docker.service, dan Anda harus menunggu untuk docker.servicebangun sebelum Anda dapat terhubung.

Membutuhkan =

Mengkonfigurasi dependensi persyaratan pada unit lain. Jika unit ini diaktifkan, unit yang tercantum di sini juga akan diaktifkan. Jika salah satu unit lainnya dinonaktifkan atau aktivasi gagal, unit ini akan dinonaktifkan. Opsi ini dapat ditentukan lebih dari sekali atau beberapa unit yang dipisahkan ruang dapat ditentukan dalam satu opsi di mana dependensi persyaratan kasus untuk semua nama yang terdaftar akan dibuat. Perhatikan bahwa dependensi persyaratan tidak memengaruhi urutan layanan dimulai atau dihentikan. Ini harus dikonfigurasi secara independen dengan opsi Setelah = atau Sebelum =. Jika unit foo.service membutuhkan unit bar.service yang dikonfigurasikan dengan Membutuhkan = dan tidak ada pemesanan yang dikonfigurasikan dengan After = atau Sebelum =, maka kedua unit akan dimulai secara bersamaan dan tanpa penundaan di antara mereka jika foo.service diaktifkan. Sering,

Perhatikan bahwa tipe dependensi ini tidak menyiratkan bahwa unit lain selalu harus dalam keadaan aktif ketika unit ini berjalan. Khususnya: pemeriksaan kondisi gagal (seperti ConditionPathExists =, ConditionPathExists =, ... - lihat di bawah) tidak menyebabkan pekerjaan awal dari unit dengan ketergantungan Memerlukan = pada gagal. Selain itu, beberapa tipe unit dapat dinonaktifkan sendiri (misalnya, proses layanan dapat memutuskan untuk keluar dengan bersih, atau perangkat mungkin dicabut oleh pengguna), yang tidak disebarkan ke unit yang memiliki dependensi Membutuhkan =. Gunakan BindsTo = tipe dependensi bersama dengan After = untuk memastikan bahwa suatu unit mungkin tidak pernah dalam keadaan aktif tanpa unit lain yang spesifik juga dalam keadaan aktif (lihat di bawah).

Perhatikan bahwa dependensi dari tipe ini juga dapat dikonfigurasi di luar file konfigurasi unit dengan menambahkan symlink ke .requires / direktori yang menyertai file unit. Untuk detailnya, lihat di atas.

https://www.freedesktop.org/software/systemd/man/systemd.unit.html#Requires=

https://www.freedesktop.org/software/systemd/man/systemd.unit.html#Before=

Centimane
sumber