Einzelne Programme als sudo ausführen

Hi zusammen,
ich habe vor auf Linux-Clients (Ubuntu 20.04), alle Benutzer bestimmte Skripte, die Programme starten, als sudo ausführen zu lassen, ohne dass ein Passwort eingegeben werden muss. Was in den Skripten drin steht, können die Benutzer natürlich nur als sudo ändern und dafür müsste dann wieder ein Passwort nötig sein. Jetzt hab ich mir überlegt, dass das doch mit folgender Datei gehen sollte:
/etc/sudoers.d/sudoausnahme:

ALL ALL = NOPASSWD: /opt/programmstarter/*

Auch wenn ich den Stern durch ein bestimmtes Skript ersetze, hat das leider keinen Effekt. Den ganzen Pfad durch ALL zu ersetzen tut aber - ist natürlich nicht ratsam und auch keine Option.

Ich habe bisher nur gefunden, dass es daran liegen kann, dass nachfolgende Regeln meine Regel überschreiben könnten. Ich hab auch die Datei schonmal in XXsudoausnahme umbenannt, damit sie garantiert als letzte in diesem Ordner gelesen wird. Auch ohne Erfolg.

Führt Linuxmuster irgendwo noch weitere Ausnahmeregeln aus, die ich übersehen habe? Woran könnte es liegen, dass ich da nach wie vor ein Kennwort eingeben muss?

Liebe Grüße und schonmal vielen Dank!
Patrick

Hallo, Patrick,

die Antwort auf Dein Problem findest Du hier:

Liebe Grüße
Christoph

Leider nein,
es endet mit einer leeren Zeile. Sorry, hab den Inhalt abgetippt, nicht kopiert. Und sudo visudo akzeptiert die Datei auch als valide.
LG Patrick

Hallo, Patrick,

bei mir funktioniert das - auch mit „*“ in Kombination mit dem von Dir angegebenen sudo für alle (ALL ALL) und einem beliebigen Skriptnamen auf ein Skript, das root gehört und nur er ausführen darf unter /opt/test/.

Blöde Frage: Hast Du das x-Flag gesetzt ?

L.G.
Christoph

Hi Christoph,
die Skripte gehören root, und haben den Modus 755. Sie enthalten Skripte wie

sudo chown $USER:root -R /opt/programm

und fragen trotz des Eintrags in sudoers.d nach einem Kennwort:

linuxadmin@testraum-pc1:~$ /opt/programmstarter/programm.sh 
[sudo] Passwort für linuxadmin:

Da das Skript perfekt funktioniert, wenn da kein Programmpfad steht, dachte ich vielleicht, dass diese sudoers.d-Skripte irgendwann später nochmal von linuxmuster überschrieben werden. Das war das einzige, was mir in den Sinn kam. Ich glaube auch, dass die Syntax stimmt und wenns bei dir tut, sind wir da ja schonmal 2 XD

LG Patrick

Hallo Patrick,

ist das der Inhalt der ganzen Zeile? Zeige doch mal den kompletten Inhalt deiner /etc/sudoers am besten mit cat -A /etc/sudoers

Beste Grüße

Thorsten

Hi Thorsten,
ich habe /etc/sudoers unverändert gelassen:

#$
# This file MUST be edited with the 'visudo' command as root.$
#$
# Please consider adding local content in /etc/sudoers.d/ instead of$
# directly modifying this file.$
#$
# See the man page for details on how to write a sudoers file.$
#$
Defaults^Ienv_reset$
Defaults^Imail_badpass$
Defaults^Isecure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"$
$
# Host alias specification$
$
# User alias specification$
$
# Cmnd alias specification$
$
# User privilege specification$
root^IALL=(ALL:ALL) ALL$
$
# Members of the admin group may gain root privileges$
%admin ALL=(ALL) ALL$
$
# Allow members of group sudo to execute any command$
%sudo^IALL=(ALL:ALL) ALL$
$
# See sudoers(5) for more information on "#include" directives:$
$
#includedir /etc/sudoers.d$

Ich habe in /etc/sudoers.d/ die Datei sudoausnahme erstellt, und die enthält nur die Zeile

ALL ALL = NOPASSWD: /opt/programmstarter/*$

(Die abgebildeten Zeilen sind jeweils das Ergebnis der Ausgaben mit cat -A)
Ich habe das jetzt auch auf nem zweiten Rechner ohne linuxmuster-Kontext nachgestellt. Da geht es bei mir auch nicht :frowning:
Also liegt es nicht daran, dass Linuxmuster danach noch irgendwas überschreibt, sondern, dass da irgendwas nicht stimmt.

Rechte deiner Datei sudoausnahme?

# Note that there must be at least one file in the sudoers.d directory (this
# one will do), and all files in this directory should be mode 0440.

Modus 440 ist eingestellt. :man_shrugging:t3:

OK!

Dann mach mal den Inhalt nach diesem Muster:

ALL   ALL=(ALL:ALL) /opt/programmstarter/*

Hallo,

bei mir klappt es so:

ALL ALL=(ALL) NOPASSWD:/opt/programmstarter/*

Und dann der Aufruf:

sudo /opt/programmstarter/programm.sh

Also mit einer leicht anderen Syntax und vor allem dem Aufruf mit „sudo“.

Beste Grüße

Jörg

Naja wenn man halt auch am Aufruf das sudo weglässt … :man_facepalming:t3:
Danke Jörg!!