Saya membuat beberapa layanan systemd yang pada dasarnya berfungsi:
lokasi:
/etc/systemd/system/multi-user.target.wants/publicapi.service
kandungan:
[Unit]
Description=public api startup script
[Service]
Type=oneshot
RemainAfterExit=yes
EnvironmentFile=-/etc/environment
WorkingDirectory=/home/techops
ExecStart=/home/techops/publicapi start
ExecStop=/home/techops/publicapi stop
[Install]
WantedBy=multi-user.target
Ketika saya mencoba me-restart layanan sebagai pengguna techops di baris perintah, saya mendapatkan output berikut:
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to start 'publicapi.service'.
Multiple identities can be used for authentication:
1. Myself,,, (defaultuser)
2. ,,, (techops)
Choose identity to authenticate as (1-2):
Saya ingin hanya Techops yang dapat me-restart layanan dan saya ingin prompt ini tidak muncul ketika sedang login sebagai Techops. Bagaimana saya bisa melakukan itu?
Saya membaca bahwa ada pendekatan berbeda dengan polkit-1 atau sudoers, tapi saya tidak yakin.
[UPDATE] 2019-01-27 4:40 pm
Terima kasih atas jawaban komprehensif ini untuk Thomas dan Perlduck. Ini membantu saya meningkatkan pengetahuan saya tentang systemd.
Menurut pendekatan untuk memulai layanan tanpa kata sandi, dan saya ingin meminta maaf bahwa saya tidak cukup menekankan masalah sebenarnya:
Sebenarnya, yang paling penting bagi saya adalah bahwa tidak ada pengguna selain techops yang harus menghentikan atau memulai layanan. Tetapi setidaknya dengan dua pendekatan pertama saya masih bisa menjalankan service publicapi stop
dan saya mendapatkan prompt ==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
lagi. Ketika saya memilih pengguna default dan mengetahui kata sandi, saya bisa menghentikan semua layanan. Saya ingin menolak pengguna ini melakukan hal itu, meskipun ia memiliki kata sandi . Info latar belakang penting untuk lebih memahami mengapa ini adalah bagian yang lebih penting bagi saya:
Pengguna default adalah satu-satunya pengguna yang terkena ssh tetapi pengguna ini tidak dapat melakukan hal lain (kecuali mengubah ke pengguna lain jika Anda memiliki kata sandi dari pengguna lain ini) . Tetapi saat ini, ia dapat memulai atau menghentikan layanan, tetapi pengguna ini tidak boleh melakukan ini.
Jika seseorang mendapatkan kata sandi pengguna default dan masuk melalui ssh, maka dia bisa menghentikan semua layanan saat ini. Inilah yang saya maksudkan dengan "Saya ingin hanya techops yang dapat memulai kembali layanan". Maaf, saya tidak tepat pada pertanyaan awal saya. Saya pikir sudoing pengguna techops mungkin akan memotong masalah ini, tetapi tidak. Masalahnya bukan menjalankan perintah tanpa kata sandi. (Saya bisa dengan mudah melakukan itu sebagai pengguna Techops ketika saya baru saja menjalankan /home/techops/publicapi start
). Masalahnya sendiri adalah untuk mengunci pengguna default dari memulai layanan ini.
Dan saya berharap ada solusi yang bisa melakukannya.
Saya mulai dengan pendekatan Thomas. Pendekatan dengan sudo berfungsi ketika saya tidak ingin dimintai kata sandi untuk pengguna techops ketika saya menjalankan perintah seperti yang dijelaskan, misalnya
sudo systemctl start publicapi.service
sudo systemctl stop publicapi.service
Pendekatan kedua belum bekerja untuk saya. Saya tidak dapat memulai layanan tanpa prompt kata sandi ==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
dan saya berhenti dapat login sebagai pengguna default ketika saya memiliki kata sandi pengguna ini.
Dengan pendekatan ketiga, layanan ini bahkan tidak mulai saat proses boot lagi jadi saya tidak yakin apakah pendekatan ini yang tepat untuk saya. Saya bahkan tidak bisa melakukannya dengan systemctl enable publicapi.service
yang membawa saya ke kesalahan berikut:
Failed to enable unit: Unit file mycuisine-publicapi.service does not exist.
Kesalahan tidak terjadi ketika saya memindahkan semua layanan kembali ke / etc / systemd / system / dan jalankan systemctl enable publicapi.service
. Kemudian layanan mulai lagi saat boot.
Semua pendekatan ini akan sedikit banyak membantu untuk mem-bypass prompt kata sandi untuk pengguna techops tetapi ketika saya menjalankan service publicapi stop
atau systemctl stop publicapi
dengan pengguna default, saya dapat menghentikan layanan jika saya memiliki kata sandi. Tetapi target saya adalah untuk mengunci pengguna default dari memulai atau menghentikan layanan sama sekali.
/etc/sudoers
file Anda jika ada referensi untuk pengguna itu.
systemctl --user ...
sebagai penggunatechops
bukan sebagai root. Baik saran saya maupun salah satu dari @PerlDuck memberikan setiapsudo
hak Anda defaultuser tetapi hanya untuk techops pengguna.