Ich möchte wissen, wie man (wenn möglich) ein Bash-Skript erstellt, das als root auf Debian läuft, unabhängig vom Benutzer, der es ausführt, ohne nach irgendeiner Art von Authentifizierung zu fragen.
Diese Datei führt alle ihre Befehle so aus, als wäre sie der Root-Benutzer, aber nur der echte Root-Benutzer kann sie lesen oder darauf schreiben.
Ich brauche das, weil ich Befehle wie swapoff
ausführen möchte , swapon
, apt
, etc… Aber durch eine andere Anwendung, und ich möchte, dass sie mich nicht nach einem Passwort fragt.
Die Befehle werden korrigiert (diese Root-Befehle werden ihre Parameter in der Datei haben, nicht als Eingabe), also sind die Auswirkungen auf die Sicherheit nicht gerade meine Hauptbeschäftigung, aber ich akzeptiere auch Erklärungen.
Akzeptierte Antwort:
Der Low-Level-Weg, ein Programm immer unter einer bestimmten UID laufen zu lassen, ist das setuid-Bit in der Binärdatei. So geht z.B. sudo
und su
ihre Root-Berechtigungen erhalten, auch wenn sie normalerweise von normalen Benutzern gestartet werden.
Aber im Allgemeinen unterstützen Unix-ähnliche Systeme keine setuid Skripte , siehe:Setuid in Shell-Skripten zulassen
Was Sie jedoch tun können, ist, sudo
zu konfigurieren oder ein anderes solches Tool, um den Benutzern zu ermöglichen, einige bestimmte Dateien mit den entsprechenden Berechtigungen auszuführen. Beispielsweise würde dies viceadmin
erlauben um /usr/local/bin/sudoswapon
auszuführen mit beliebigen Argumenten und ohne Authentifizierung:
viceadmin ALL = NOPASSWD:/usr/local/bin/sudoswapon
Nun, seit sudo
befasst sich mit dem Ändern von Privilegien selbst, sudoswapon
kann ein Shell-Skript sein.
Sie haben Recht, wenn Sie anmerken, dass das Skript vorsichtig sein müsste, wie es mit Befehlszeilenargumenten umgeht, und zwar alle es gelten die Fallstricke der Shell-Sprache. Zum Glück sudo
filtert die meisten Umgebungsvariablen heraus, zumindest wenn env_reset
Option ist gesetzt.