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?

Daniel
sumber

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.

pengguna606723
sumber
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.

user9517
sumber
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