Saya perlu mengizinkan pengguna dalam dba
grup untuk mengontrol database@
layanan. Jawaban untuk pertanyaan terkait ini adalah dengan hanya mencantumkan semua systemctl
"kata kerja" yang ingin saya izinkan dalam sudoers
file, namun, itu tidak berlaku untuk kasus saya karena saya tidak tahu sebelumnya apa basis data yang mungkin ada dalam sistem. Misalnya, jika saya daftar
%dba = /usr/bin/systemctl start database@awsesomeapp
%dba = /usr/bin/systemctl start database@anotherawsesomeapp
%dba = /usr/bin/systemctl start database@yetanotherawsesomeapp
%dba = /usr/bin/systemctl start database@wowyetanotherawsesomeapp
# ... other "verbs" omitted for brevity
itu tidak mencakup contoh yang mungkin ada di masa depan, dan dba tidak akan bisa
$ sudo systemctl start database@omgwowyetanotherawsesomeapp
Ngomong-ngomong, aku berpikir lebih dalam hal pengemasan daripada mengotak-atik sistem tertentu.
Perhatikan bahwa, seperti yang ditunjukkan dalam jawaban yang luar biasa untuk pertanyaan terkait lainnya , menggunakan sudo gumpalan untuk ini pada akhirnya tidak aman:
%dba ALL = /usr/bin/systemctl start database@[a-z]* # UNSAFE!
memang memungkinkan
$ sudo systemctl start database@awsesomeapp unrelatedservice
Saya curiga menggunakan sudo
tidak akan menyelesaikan masalah saya (meskipun saya harap saya salah). Apakah ada cara lain untuk memungkinkan pengguna non-root untuk mengontrol systemd
layanan?
Untuk apa nilainya, saya perlu melakukan ini dalam sistem CentOS 7, dan sistem RHEL7 di masa depan. Saya juga akan tertarik dengan solusi yang bekerja di Arch Linux.
sumber
Solusi yang diusulkan berdasarkan
SUID
Anda dapat membuat skrip yang menyebut systemctl dengan sudo. Jadikan skrip dimiliki oleh root. Berikan
SUID
izin untuk me-root dan membaca serta mengeksekusi izin ke grup administrator basis data (dba).Berhati-hatilah untuk tidak memberikan izin tertulis kepada grup atau orang lain karena dengan begitu mereka dapat mengubah skrip dan membuatnya menjalankan apa pun yang diawali dengan sudo! Pastikan juga skripnya tahan input peluru.
Skrip ini dapat diperbaiki dengan memeriksa apakah argumen tersebut benar-benar disertakan dan mencetak pesan Penggunaan: jika tidak ..., juga karena itu adalah skrip
SUID
yang akan cocok untuk diperiksa; untuk menghindari injeksi perintah lain yang mengikuti argumen. Atau bahkan lebih baik pastikan untuk mengizinkan sebagai masukan hanya satu dari string terkait aplikasi yang Anda sebutkan!Maka Anda harus memastikan izin untuk skrip ini benar-benar berikut ini:
Kemudian untuk memverifikasi izin yang benar:
Jadi, untuk rekap:
1.
owner of the script is root
file
can be read and executed by the dba group members
2.
no-one else will be able to even read
itu.4.
SUID
akan memungkinkan pengguna yang mengeksekusi skrip menjadi root selama skrip dieksekusi.5. Jadi sudo tidak akan berhenti untuk kata sandi.
Bagaimanapun, dalam sistem dengan banyak pengguna, berhati - hatilah
SUID
karena dapat meninggalkan ruang untuk penyalahgunaan izin.sumber
SUID
tidak akan berfungsi untuk skrip secara default.