Wie verwende ich Befehlsargumente mit Cmnd_Alias ​​in sudoers?

Wie verwende ich Befehlsargumente mit Cmnd_Alias ​​in sudoers?

Wie gebe ich Befehlsargumente in sudoers an? Als Hintergrund: awsDer Befehl ist eigentlich ein Gateway zu einer ganzen Reihe von Subsystemen und ich möchte den Benutzer darauf beschränken, nur auszuführenaws s3 cp ...any other args...

Wenn ich Folgendes versuche 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

Leider fordert die Shell 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, läuft es wie gewünscht (ohne Kennwortabfrage), aber die Berechtigungen sind viel zu weit gefasst.Wie kann man also die Aufrufe auf bestimmte Arten 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.

Antwort1

Sie haben keine Platzhalter verwendet, sondern zwei Argumente angegeben. Daher sudosucht es nach Befehlen genau so, wie sie geschrieben sind (außer der Pfadsuche) (vonman 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. 

Daher wird pro Befehl nur ein Platzhalter benötigt.

Antwort2

Dasselbe wie @muru, aber für diejenigen, die ein vollständiges funktionierendes 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/cmd2können beliebige andere Befehle sein.

Der Zweck ECHO_CMDbesteht darin, zu zeigen, dass sudo echo X Anach einer Passphrase gefragt wird, obwohl sudo echo A Xdies nicht der Fall ist, und Ihnen durch solch ein einfaches Experiment zu ermöglichen, Vertrauen zu gewinnen.

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

Antwort3

Sie können reguläre Ausdrücke auch in Sudoers verwenden.

/usr/bin/apt update upgrade and auto-removeDadurch ist die Ausführung ohne Kennwort möglich. Wenn Sie jedoch einen .deb-Namen angeben, apt installwerden Sie dennoch zur Eingabe eines Kennworts aufgefordert.

Cmnd_Alias UPDATES = /usr/bin/apt (update|upgrade|auto-remove)
%sudo ALL=(ALL:ALL) NOPASSWD: UPDATES
%sudo ALL=(ALL:ALL) ALL

Antwort4

Ich weiß, das ist alt, aber nehmen wir an, das ist catanstelle von echound es gibt eine Datei C, auf die ein Benutzer keinen Zugriff hat. Sie fügen den Benutzer zu sudoers hinzu, was Folgendes ermöglicht:

# Cmnd alias specification
Cmnd_Alias ECHO_CMD=cat A *,cat B *

Ich hätte dann Zugriff auf die Datei C, indem ich Folgendes ausführe:

sudo echo A C

da C die Platzhaltersyntax richtig befolgt. Ich denke, dies ist ein gutes Beispiel für mangelnde Sicherheit bei der Verwendung von Platzhaltern in Sudo-Befehlen. Ich wäre bei dieser Verwendung sehr vorsichtig und würde jede mögliche Variation berücksichtigen, die der Platzhalter erzeugen könnte!

verwandte Informationen