Dengan sysvinit
, sudoers
entri seperti ini sudah cukup:
%webteam cms051=/sbin/service httpd *
Ini akan memungkinkan perintah seperti:
sudo service httpd status
sudo service httpd restart
Sekarang, dengan systemd
, nama layanan adalah argumen terakhir. Yaitu, restart layanan akan dilakukan dengan:
systemctl restart httpd.service
Secara alami, saya pikir mendefinisikan perintah sebagai systemctl * httpd.service
akan bekerja tetapi itu akan memungkinkan sesuatu seperti systemctl restart puppet.service httpd.service
yang bukan efek yang diinginkan.
Dengan mempertimbangkan itu, apa cara terbaik yang memungkinkan pengguna non-root untuk mengontrol system.d
layanan? Ini tidak harus sudoers
; mungkin perubahan izin file mungkin cukup?
sudo
konfigurasi untuk sementara waktu, tetapi tidak bisakah Anda melakukan sesuatu seperti itucms051=systemctl * httpd.service
?Jawaban:
Cukup tambahkan semua perintah yang diperlukan
sudoers
secara terpisah:sumber
cms051
?*
atau pola serupa.@ jofel menjawab persis apa yang saya butuhkan untuk mendapatkan pengaturan yang berfungsi. Meminta ini untuk orang lain yang tersandung pada pertanyaan ini. Saya membutuhkan cara untuk
capistrano
me-restart aplikasi Ruby saya setelah menggunakan dari mesin lokal saya. Itu berarti saya memerlukan akses tanpa kata sandi untuk memulai kembalisystemd
layanan. INI adalah apa yang saya miliki dan bekerja dengan sangat baik!Catatan : pengguna dan grup saya disebut
deployer
Masukkan kode dalam file khusus di sini:
/etc/sudoers.d/deployer
Kode:
sumber
deployer
dalam kasus ini, Anda harus menjalankansystemctl
perintah dengan sudo.Buat alias perintah dengan perintah yang Anda ingin mereka akses. Kemudian tetapkan grup ke alias perintah itu:
Ini juga merupakan praktik yang baik untuk menempatkan pengeditan di /etc/sudoers.d/filename Anda daripada langsung mengedit file sudoers. Pastikan untuk menunjuk ke nama file .d / Anda di sudoers, yang kebanyakan distro baru lakukan. Menempatkan 2 baris ini di sudoers Anda harus melakukan trik:
Catatan: Bahwa # di depanir tidak termasuk komentar. Itu harus tetap.
sumber
Paling aman untuk memerinci mereka seperti yang disarankan jofel .
Jika saya ingin mengizinkan seseorang menggunakan subset terbatas dari kemampuan perintah, saya tidak akan mempercayai wildcard dalam garis sudoers untuk melakukannya. Bahkan jika bahasanya lebih ekspresif daripada shell shell, ada terlalu banyak kotak sudut untuk dilacak.
Baris "
service httpd *
" relatif aman karena (verifikasi ini :)service
hanya memiliki satu flag yang berguna (--status-all
) yang tidak melakukan apa pun yang sangat sensitif, dan (verifikasi ini juga :)/etc/init.d/httpd
hanya akan menerima baris perintah yang ingin Anda izinkan.Jika ada begitu banyak kombinasi yang membuat daftar menjadi aneh, Anda mungkin harus mempertanyakan apa yang Anda lakukan. Tapi Anda bisa memberi mereka akses ke skrip pembantu yang ditulis dengan hati-hati yang menjalankan perintah untuk mereka (seperti
/etc/init.d/http
). Bahkan dalam kasus ini Anda harus setepat dan sejelas mungkin untuk mencantumkan dengan tepat perintah dan opsi apa yang diizinkan, dan jangan memberikan input pengguna apa pun secara langsung ke perintah target.sumber