Root-Benutzer, um ein Skript ohne Berechtigungen auszuführen, aber Sudo-Befehle ohne Kennwort ausführen zu lassen

402
eskhool

Als root (in /etc/rc.local) möchte ich also ein Skript ausführen, ohne dass root-Berechtigungen die Verwendung von su bedeuten

su - myuser -c myscript 

aber im myscript möchte ich einen Befehl ausführen, sudoohne ein Passwort anzugeben . Ich möchte jedoch nicht zulassen, dass myuser diesen Befehl ohne Kennwort ausführt, andernfalls (da ich Sudoers nicht hinzufügen möchte).

Ist das überhaupt möglich?

1
Hört sich nicht so an. Sie möchten, dass der Benutzer etwas tun kann, für das ein Kennwort erforderlich ist, ohne ein Kennwort anzugeben. Alternativ möchten Sie, dass der Benutzer etwas ohne Kennwort tut, während er die Verwendung eines Kennworts verlangt. Es gibt eindeutig einen besseren Weg, um das zu tun, was Sie versuchen. [XY-Problem?] (Https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) Appleoddity vor 5 Jahren 0

1 Antwort auf die Frage

1
AFH

Wenn sich der angeforderte Befehl nicht innerhalb eines Blocks befindet (z. B. Schleife oder Bedingung), können Sie das Skript in drei Teile aufteilen: Die vorhergehenden Befehle werden ausgeführt als myuser, der geschützte Befehl wird mit ausgeführt sudo(was nicht bereits gefragt wird root) und die übrigen Befehle. auch laufen als myuser: -

su - myuser -c myscript-preamble sudo myscript-protected-command su - myuser -c myscript-postamble 

Im Allgemeinen gibt es einen Trick, mit dem Sie sudodie gespeicherten Anmeldeinformationen verwenden können: -

sudo -u myuser sudo -S true <<< password 2>/dev/null su - myuser -c myscript sudo -u myuser sudo -k 

Es gibt eine Reihe von Überlegungen - dies sind die ersten, die mir einfallen: -

  • Das Skript (oder zumindest die erste Zeile) muss in einer schreibgeschützten Datei ( -rwx------) oder in einem durch die Ausführung geschützten Verzeichnis ( drwx------) ausgeführt werden, deren Besitzer beide sind root.
  • Der Trick erfordert, dass die sudoAnmeldeinformationen für eine definierte Zeit (eine normale Standardeinstellung) gespeichert werden und die sudoin myscriptdieser Zeit ausgeführt wird.
  • Wenn myuserläuft, myscriptwährend rootgleichzeitig es läuft, wird die Erinnerung Anmeldeinformationen verwendet werden, wenn der sudoBefehl vor Erreichen rootläuft sudo -k.

Wie Sie sehen können, ist dies unter Sicherheitsaspekten keine ideale Lösung, kann jedoch in Ihrer Umgebung funktionieren.

Andernfalls müssen Sie sudo -Awie in diesem Auszug aus dem sudoHandbuch beschrieben Folgendes verwenden: -

 -A, --askpass Normally, if sudo requires a password, it will read it from the user's terminal. If the -A (askpass) option is specified, a (possibly graphical) helper program is executed to read the user's password and output the password to the standard output. If the SUDO_ASKPASS environment variable is set, it specifies the path to the helper program. Otherwise, if sudo.conf(5) contains a line specifying the askpass program, that value will be used. For example:  # Path to askpass helper program Path askpass /usr/X11R6/bin/ssh-askpass  If no askpass program is available, sudo will exit with an error. 

Um dies zu implementieren, müssen Sie ein Programm schreiben, das überprüft, ob es ausgeführt wird als root: Wenn ja, gibt es das Kennwort für myuser(aus verschleierten Daten natürlich) aus; Andernfalls werden Sie normalerweise zur Eingabe des Kennworts aufgefordert und geben die Antwort des Benutzers aus.

Ja, es ist möglich, das zu tun, was Sie möchten, es kann jedoch ein erheblicher Arbeitsaufwand erforderlich sein, abhängig von der Sicherheitsstufe, die Sie benötigen.