Come posso usare gli argomenti dei comandi con Cmnd_Alias ​​nei sudoer?


36

Come posso specificare gli argomenti dei comandi nei sudoer? Come sfondo, il awscomando è in realtà un gateway per tutta una serie di sottosistemi e voglio limitare l'utente solo all'esecuzioneaws s3 cp ...any other args...

Quando provo quanto segue /etc/sudoers

Cmnd_Alias AWSS3_CMD = /usr/local/bin/aws s3 cp, /usr/local/aws/bin/aws s3 cp
gbt1 ALL=(gbt-ops) NOPASSWD: AWSS3_CMD

Purtroppo la shell richiede la password

$ sudo -u gbt-ops aws s3 cp helloworld s3://my-bucket/hw.1
gbt-ops's password:

Se rimuovo il comando args in Cmnd_Alias, allora scorre come desiderato (senza richiesta password), ma le autorizzazioni sono troppo ampie. Quindi, qual è il modo giusto di limitare solo a determinati tipi di invocazioni di comandi .

Cmnd_Alias AWSS3_CMD = /usr/local/bin/aws, /usr/local/aws/bin/aws

Poi

$ sudo -u gbt-ops aws s3 cp helloworld s3://my-bucket/hw.1
...happy

Molte grazie.


Perché hai / usr / local / bin / aws, / usr / local / aws / bin / aws? Voglio dire, hai ripetuto il comando due volte nella stessa riga?
Mohammed Noureldin,

Risposte:


47

Non hai utilizzato alcun carattere jolly, ma hai fornito due argomenti. Quindi sudocerca i comandi esattamente come scritto (tranne path-lookup) (da man 5 sudoers):

 If a Cmnd has associated command line arguments, then the arguments in
 the Cmnd must match exactly those given by the user on the command line
 (or match the wildcards if there are any).

Prova qualcosa del tipo:

Cmnd_Alias AWSS3_CMD = /usr/local/bin/aws s3 cp *, /usr/local/aws/bin/aws s3 cp *

Nota che:

 Wildcards in command line arguments should be used with care.  Because
 command line arguments are matched as a single, concatenated string, a
 wildcard such as ‘?’ or ‘*’ can match multiple words. 

Pertanto, è necessario un solo carattere jolly per comando.


1
+1 per una breve spiegazione e condivisione della conoscenza, grazie.
Dinesh,

1
Nota che sudo non rispetta correttamente la separazione degli argomenti che in alcuni casi possono essere utilizzati per exploit, vedi unix.stackexchange.com/a/279142/43920 . Quindi, invece di specificare /usr/local/bin/aws s3 cpin sudoers, è più sicuro sostituirlo con uno script (scrivibile solo da root).
pcworld,

6

Lo stesso di @muru, ma per coloro a cui piace l'esempio di lavoro completo:

# Cmnd alias specification
Cmnd_Alias ECHO_CMD=/bin/echo A *,/bin/echo B *

# Make USER run specific commands on given HOSTNAME
# USER_NAME 

#userx
userx ALL=(root) NOPASSWD: /sbin/cmd1,/sbin/cmd2,ECHO_CMD

Mentre /sbin/cmd1, /sbin/cmd2può essere qualsiasi altro comando.

Lo scopo ECHO_CMDè quello di presentare che sudo echo X Ati chiederà passphrase, mentre sudo echo A Xno, e di permetterti di acquisire sicurezza attraverso un esperimento così semplice.

(Si presumeva che l'eco si trovi dentro /bin/echo, per verificare dove si trova sul sistema, provare whereis echo)


Sì, esiste un /bin/echobinario, ma la maggior parte delle shell ha anche una funzione integrata echoche verrà utilizzata al posto di questo binario se non si fornisce un percorso completo.
Marki555,
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.