Izinkan perintah sudo kompleks di Debian Linux


13

Saya perlu mengizinkan perintah khusus pada kotak Linux Debian untuk satu pengguna. Saya sudah mencoba ini di /etc/sudoersfile:

# User privilege specification
zabbix  ALL=NOPASSWD: /usr/bin/apt-get --print-uris -qq -y upgrade 2>/dev/null |awk '{print $2}' | wc | awk '{print $1}'

Ini tidak berfungsi seperti yang diharapkan. Jika saya menjalankan perintah sebagai pengguna zabbix dengan sudo, ia meminta kata sandi (meskipun saya telah menentukan NOPASSWDopsi).

Namun, ini berfungsi:

# User privilege specification
zabbix  ALL=NOPASSWD: /usr/bin/apt-get

Tetapi memiliki kelemahan bahwa semua sub perintah dari apt-getallowd. Apakah ada cara bagaimana saya bisa memperbaikinya hanya mengizinkan perintah tertentu?

Jawaban:


10

Saya tidak setuju dengan berbaring. Meskipun akan berfungsi, Anda tidak perlu awkmenjalankannya sebagai root. Saya tidak akan nyaman dengan ini karena Anda mungkin bisa menyerang awkdengan cara tertentu. Bagaimanapun, ini adalah juru bahasa pemrograman penuh.

Ketika satu berjalan sudo /usr/bin/apt-get --print-uris -qq -y upgrade 2>/dev/null |awk '{print $2}' | wc | awk '{print $1}', Mereka benar-benar berjalan sudo /usr/bin/apt-get --print-uris -qq -y upgradedan kemudian pemipaan / redirect sebagai pengguna panggilan.

Coba ini: zabbix ALL=NOPASSWD: /usr/bin/apt-get --print-uris -qq -y upgrade

Ngomong-ngomong, tidak ada yang salah dengan meletakkan skrip ini seperti yang dilakukan oleh orang lain dan Anda masih bisa melakukannya. Saya hanya akan menghindari menjalankan awk sebagai root jika memungkinkan.


1
Anda benar tetapi jika skripnya tidak aman maka tidak masalah apa yang ada di dalamnya, itu bisa ditimpa dan dunia adalah tiram Anda. Jika skrip aman maka apa yang ada di dalamnya juga aman.
user9517

25

Anda mungkin tidak menyukai cara pengalihan berinteraksi dengan sudo. Pengalihan dilakukan pada pengguna panggilan bukan pengguna istimewa. Mungkin akan lebih mudah bagi Anda untuk membungkus Anda dengan perintah dalam skrip dan kemudian mengizinkan pengguna zabbix untuk menjalankan skrip itu misalnya

#!/bin/bash
/usr/bin/apt-get --print-uris -qq -y upgrade 2>/dev/null |awk '{print $2}' | wc | awk '{print $1}'

mengatur sudoers sebagai

zabbix  ALL=NOPASSWD: /path/to/script

Sekarang seluruh skrip akan dijalankan sebagai pengguna istimewa dan bukan hanya perintah apt-get tertentu. Meskipun demikian pastikan bahwa pengguna zabbix tidak dapat menulis ke skrip.


1
Seseorang mungkin dapat memperbaiki saya jika sudo sudah mengatasinya (saya sepertinya ingat memiliki masalah dengan variabel env tidak dilewatkan), tetapi saya sarankan membuat awk dan wc memiliki fullpath sebagai praktik umum terbaik untuk skrip sehingga pengguna dapat 't do export PATH = ~ user / bin: $ PATH dan tempel perintah apa pun yang diinginkan dalam skrip bernama awk (atau wc) di ~ user / bin
Foon

@Foon: Saya pikir Anda membingungkan sudo dengan cron.
user9517

1
Tidak membingungkan, tetapi superuser.com/questions/232231/… memang mengindikasikan bahwa sudo mencegah manipulasi PATH (dan LD_LIBARRAY_PATH secara default)
Foon

Saya melakukan sesuatu yang serupa hanya saya suid'd skrip membangkitkan & membuatnya hanya dapat ditulis oleh root. Uji apakah itu berfungsi untuk pengguna dengan izin 711, maka mereka bahkan tidak dapat melihat apa yang dilakukannya untuk mencoba dan mengelak.
Chris K
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.