it-swarm.com.de

Wie verwende ich Befehlsargumente mit Cmnd_Alias ​​in Sudoern?

Wie gebe ich Befehlsargumente in Sudoern an? Als Hintergrund ist der Befehl aws tatsächlich ein Gateway zu einer ganzen Reihe von Subsystemen, und ich möchte den Benutzer darauf beschränken, nur aws s3 cp ...any other args... Auszuführen.

Wenn ich Folgendes in /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

Die Shell fordert leider zur Eingabe eines Passworts auf

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

Wenn ich die Befehlsargumente in Cmnd_Alias ​​entferne, fließt sie wie gewünscht (ohne Passwortabfrage), aber die Autorisierung ist viel zu weit gefasst. Was ist also der richtige Weg, um nur bestimmte Arten von Befehlsaufrufen zu beschränken?.

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

Dann

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

Vielen Dank.

38
Dinesh

Sie haben keine Platzhalter verwendet, aber zwei Argumente angegeben. Daher sucht Sudo genau wie geschrieben nach Befehlen (mit Ausnahme der Pfadsuche) (von 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).

Versuchen Sie etwas wie:

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

Beachten Sie, dass:

 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. 

Pro Befehl wird also nur ein Platzhalter benötigt.

48
muru

Das gleiche wie @muru, aber für diejenigen, die ein voll funktionsfähiges Beispiel mögen:

# 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

Während /sbin/cmd1, /sbin/cmd2 kann ein beliebiger anderer Befehl sein.

Der Zweck von ECHO_CMD soll das präsentieren Sudo echo X A fragt nach der Passphrase, während Sudo echo A X nicht, und damit Sie durch solch ein einfaches Experiment Vertrauen gewinnen können.

(Es wurde angenommen, dass das Echo in /bin/echo, um zu überprüfen, wo es sich auf Ihrem System befindet, versuchen Sie whereis echo)