Consenti il ​​comando sudo complesso su Debian Linux


13

Devo consentire un comando specifico su un box Debian Linux per un singolo utente. Ho provato questo nel /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}'

Questo non funziona come previsto. Se eseguo il comando come utente zabbix con sudo, mi chiede la password (anche se ho specificato l' NOPASSWDopzione).

Tuttavia, questo funziona:

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

Ma ha lo svantaggio di consentire tutti i sottocomandi di apt-get. C'è un modo in cui posso risolvere questo problema per consentire solo un comando specifico?

Risposte:


10

Non sono d'accordo con la distensione. Anche se funzionerà, non è necessario awkeseguire come root. Non mi sentirei a mio agio con questo perché potresti essere in grado di attaccare awkin qualche modo. Dopotutto è un interprete del linguaggio di programmazione completo.

Quando uno viene eseguito sudo /usr/bin/apt-get --print-uris -qq -y upgrade 2>/dev/null |awk '{print $2}' | wc | awk '{print $1}', sono effettivamente in esecuzione sudo /usr/bin/apt-get --print-uris -qq -y upgradee quindi reindirizzano / reindirizzano come utente chiamante.

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

A proposito, non c'è niente di sbagliato nel mettere questo in una sceneggiatura come fa lain e puoi ancora farlo. Se possibile, eviterei di eseguire awk come root.


1
Hai ragione, ma se la sceneggiatura non è sicura, non importa cosa contiene, può essere sovrascritta e il mondo è la tua ostrica. Se lo script è sicuro, anche quello che contiene è sicuro.
utente9517

25

Probabilmente stai fallendo nel modo in cui il reindirizzamento interagisce con sudo. Il reindirizzamento viene eseguito all'utente chiamante e non all'utente privilegiato. Probabilmente sarebbe più facile per te avvolgere il tuo comando in uno script e quindi consentire all'utente zabbix di eseguire quello script, ad es.

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

il set sudoers come

zabbix  ALL=NOPASSWD: /path/to/script

Ora l'intero script verrà eseguito come utente privilegiato e non solo per il comando apt-get specifico. Assicurati però che l'utente zabbix non possa scrivere nello script.


1
Qualcuno può probabilmente correggermi se sudo si occupa già di esso (mi sembra di ricordare di avere problemi con le variabili env che non vengono passate), ma suggerirei di fare in modo che awk e wc abbiano i loro percorsi completi come best practice generale per gli script in modo che un utente possa 't do export PATH = ~ user / bin: $ PATH e attacca qualunque comando desideri in uno script chiamato awk (o wc) in ~ user / bin
Foon

@Foon: penso che tu stia confondendo sudo con cron.
utente9517

1
Non confondendolo, ma superuser.com/questions/232231/… indica che sudo impedisce la manipolazione di PATH (e LD_LIBARRAY_PATH per impostazione predefinita)
Foon,

Ho fatto qualcosa di simile solo se ho fatto uso della sceneggiatura evocativa e l'ho resa scrivibile solo da root. Verifica se funziona per l'utente con autorizzazioni 711, quindi non può nemmeno vedere cosa sta facendo per provare a aggirarlo.
Chris K,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.