web-dev-qa-db-fra.com

Comment utiliser les arguments de commande avec Cmnd_Alias ​​dans sudoers?

Comment spécifier des arguments de commande dans sudoers? En arrière-plan, la commande aws est en fait une passerelle vers tout un tas de sous-systèmes et je veux restreindre l'utilisateur à exécuter uniquement aws s3 cp ...any other args...

Lorsque j'essaie ce qui suit dans /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

Le shell demande malheureusement un mot de passe

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

Si je supprime la commande args dans Cmnd_Alias, elle s'exécute comme vous le souhaitez (sans invite de mot de passe), mais l'autorisation est beaucoup trop large. Alors, quelle est la bonne façon de se limiter à certains types d'appels de commandes.

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

Alors

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

Merci beaucoup.

38
Dinesh

Vous n'avez utilisé aucun caractère générique, mais avez fourni deux arguments. Par conséquent, Sudo recherche les commandes exactement telles qu'elles sont écrites (à l'exception de la recherche de chemin) (from 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).

Essayez quelque chose comme:

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

Notez que:

 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. 

Ainsi, un seul caractère générique est nécessaire par commande.

48
muru

Identique à @muru, mais pour ceux qui aiment l'exemple complet:

# 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

Tandis que /sbin/cmd1, /sbin/cmd2 peut être n'importe quelle autre commande.

Le but de ECHO_CMD est de présenter que Sudo echo X A demandera une phrase secrète, tandis que Sudo echo A X non, et pour vous permettre de gagner en confiance grâce à une expérience aussi simple.

(On a supposé que l'écho se trouvait dans /bin/echo, pour vérifier où il se trouve sur votre système, essayez whereis echo)

6