Sudo validiert Befehlszeilenargumente über reguläre Ausdrücke falsch

Sudo validiert Befehlszeilenargumente über reguläre Ausdrücke falsch

Nehmen wir an, wir haben zwei Benutzer: Alex und Alexa. Wir möchten Alex erlauben, htopals Root ausgeführt zu werden, um Statistiken zur Festplattennutzung anzuzeigen, aber wir möchten nicht, dass er die Prozesse anderer Benutzer sieht, was Root tun kann. Dann müssen wir ihnen erlauben, htopmit dem -uFlag ihren eigenen Benutzernamen auszuführen.(Wichtiger Hinweis: Wie @HBruijn erwähnt hat, verhindert die Angabe des Benutzerflags htopnicht, dass der Executor den Benutzerfilter mit der Taste U ändert. Um das Problem zu veranschaulichen, nehmen wir an, dass das Flag den Executor einschränkt.). Wir müssen aber auch prüfen, ob das letzte angegebene -uArgument ist alex, und wir wollen nicht erzwingen, dass es das letzte angegebene Argument ist. Der reguläre Ausdruck lautet wie folgt:

^.*(--user=alex|-u alex)\b((?!-u).)*$
  • ^gibt den Anfang der Zeichenkette an
  • (--user=alex|-u alex)- die Erfassungsgruppe für den -uParameter
  • \b- Wortgrenze (also konnte Alex sie nicht angeben -u alexa)
  • ((?!-u).)*- negativer Lookahead, der alle -uPässe verweigert, nachdem der gültige ( -u alex) passiert wurde

Und wir schreiben es in die /etc/sudoersDatei:

echo "alex ALL=(ALL) NOPASSWD: /usr/bin/htop ^.*(--user=alex|-u alex)\b((?!-u).)*$" >> /etc/sudoers

Wenn Alex jedoch versucht, einen normalen Befehl auszuführen, verweigert sudo dies:

$ sudo /usr/bin/htop -u alex 
[sudo] password for alex: 
Sorry, user alex is not allowed to execute '/usr/bin/htop -u alex' as root on machine.

Beim Überprüfen von regulären Ausdrücken egrep(in der Dokumentation von sudo heißt es, dass dies der Überprüfung von Zeichenfolgen anhand regulärer Ausdrücke ähnlich ist) funktioniert es wie erwartet:

$ echo '-u alex' | egrep '^.*(--user=alex|-u alex)\b((?!-u).)*$'
-u alex

Was verursacht dieses Verhalten, bei dem sudo diese Übereinstimmung ignoriert? Ich verwende Ubuntu 22.04, Sudo 1.9.14p3.

verwandte Informationen