![Wie verwende ich Befehlsargumente mit Cmnd_Alias in sudoers?](https://rvso.com/image/36001/Wie%20verwende%20ich%20Befehlsargumente%20mit%20Cmnd_Alias%20%E2%80%8B%E2%80%8Bin%20sudoers%3F.png)
Wie gebe ich Befehlsargumente in sudoers an? Als Hintergrund: aws
Der 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 sudo
sucht 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/cmd2
können beliebige andere Befehle sein.
Der Zweck ECHO_CMD
besteht darin, zu zeigen, dass sudo echo X A
nach einer Passphrase gefragt wird, obwohl sudo echo A X
dies 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-remove
Dadurch ist die Ausführung ohne Kennwort möglich. Wenn Sie jedoch einen .deb-Namen angeben, apt install
werden 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 cat
anstelle von echo
und 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!