Debian Linux'ta karmaşık sudo komutuna izin ver


13

Tek bir kullanıcı için Debian Linux kutusunda belirli bir komuta izin vermeliyim. /etc/sudoersDosyada bunu denedim :

# 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}'

Bu beklendiği gibi çalışmaz. Komutu sudo ile kullanıcı zabbix olarak çalıştırırsam, şifreyi ister ( NOPASSWDseçeneği belirtmiş olmama rağmen ).

Ancak, bu işe yarar:

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

Ancak tüm alt komutlarının izin verdiği dezavantajı vardır apt-get. Bunu yalnızca belirli bir komuta izin vermek için nasıl düzeltebileceğim bir yolu var mı?

Yanıtlar:


10

Ben yalan söylemiyorum. Çalışmasına rağmen, awkroot olarak çalıştırmanıza gerek yoktur . Bu konuda rahat olmazdım çünkü bir şekilde saldırabilirsiniz awk. Ne de olsa tam bir programlama dili yorumlayıcısıdır.

Biri çalıştığında sudo /usr/bin/apt-get --print-uris -qq -y upgrade 2>/dev/null |awk '{print $2}' | wc | awk '{print $1}', onlar aslında çalışıyor sudo /usr/bin/apt-get --print-uris -qq -y upgradeve daha sonra arayan kullanıcı olarak boru / yönlendirme.

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

Bu arada, bunu bir senaryoya lain gibi koymak yanlış bir şey yok ve yine de bunu yapabilirsiniz. Mümkünse awk'yi root olarak çalıştırmaktan kaçınırım.


1
Haklısın ama senaryo güvensiz ise, içinde ne olduğu önemli değil, üzerine yazılabilir ve dünya senin istiridye. Komut dosyası güvenliyse içinde ne varsa güvenlidir.
user9517

25

Muhtemelen yeniden yönlendirmenin sudo ile etkileşime girme şekline düşüyorsunuz. Yeniden yönlendirme ayrıcalıklı kullanıcı değil, arayan kullanıcıda gerçekleştirilir. Komutu bir komut dosyasına sarmanız ve daha sonra zabbix kullanıcısının bu komut dosyasını çalıştırmasına izin vermeniz daha kolay olacaktır.

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

set sudoers olarak

zabbix  ALL=NOPASSWD: /path/to/script

Artık tüm komut dosyası, sadece belirli apt-get komutu değil, ayrıcalıklı kullanıcı olarak çalıştırılacaktır. Ancak zabbix kullanıcısının betiğe yazamadığından emin olun.


1
Birisi sudo zaten ilgilenirse muhtemelen beni düzeltebilir (Env değişkenleri geçmeyen sorunları olduğunu hatırlıyorum), ancak awk ve wc komut dosyalarının genel yollarını komut dosyaları için genel bir en iyi uygulama olarak yapmasını öneriyorum. PATH = ~ user / bin: $ PATH dosyasını dışa aktarmayın ve ~ user / bin içindeki awk (veya wc) adlı bir komut dosyasında istenen komutları yapıştırın
Foon

@Foon: Sanırım sudo'yu cron ile karıştırıyorsun.
user9517

1
Kafa karıştırıcı değil, ancak superuser.com/questions/232231/… sudo'nun PATH manipülasyonunu önlediğini gösteriyor (ve varsayılan olarak LD_LIBARRAY_PATH)
Foon

Ben benzer bir şey yaptım sadece ben uyarıcı komut suid'd ve sadece kök tarafından yazılabilir yaptı. 711 izinleri olan kullanıcı için çalışıp çalışmadığını test edin, sonra denemek ve atlatmak için ne yaptığını bile göremezler.
Chris K
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.