Wie kann ein Webserver-Benutzer ein Skript auslösen, für das Sudo-Berechtigungen erforderlich sind?

563
Hugo Paiva

Kann der Webserver-Benutzer lighttpdin meinem Fall dazu veranlasst werden, ein bestimmtes Skript auszulösen, das mit sudoBerechtigungen ausgeführt werden muss?

Ich möchte nur, dass der lighttpdBenutzer das eine Skript mit sudoBerechtigungen auslösen kann .

Das Skript, nennen wir es createFolder.sh, erstellt einen Ordner aus einer Vorlage in der oberen Ebene einer Freigabe. Die Benutzer verfügen nicht über Schreibberechtigungen auf der oberen Ebene der Freigabe, sollten jedoch über Schreibberechtigungen in der neu erstellten Ordnerstruktur verfügen. Daher setzt das Skript die richtigen Berechtigungen für die Unterordner und das ist, wo die Notwendigkeit der Verwendung sudokommt ( chown, chmodund setfacl).

Der Grund, aus dem ich eine Webschnittstelle verwenden möchte, ist, dass die Benutzer die Daten für den Ordnernamen und die Einstellungen einfügen können, die die genaue Ordnerstruktur definieren.

Ich dachte, es wäre so einfach wie das Hinzufügen eines Eintrags /etc/sudoers, damit der lighttpdBenutzer das createFolder.shohne Kennwort ausführen kann . Anscheinend war ich falsch, als ich die folgende Fehlermeldung bekomme:

sudo: mkdir / var / db / sudo / lighttpd nicht möglich: Berechtigung abgelehnt

Wir vertrauen darauf, dass Sie den üblichen Vortrag vom lokalen Systemadministrator erhalten haben. Es läuft normalerweise auf diese drei Dinge hinaus:

1) Respektieren Sie die Privatsphäre anderer.
2) Denken Sie nach, bevor Sie tippen.
3) Mit großer Kraft kommt große Verantwortung.

sudo: kein tty vorhanden und kein askpass-Programm angegeben

Wenn es möglich war, das Skript so einzustellen, dass es immer als Benutzer mit den richtigen Berechtigungen ausgeführt wird, würde es das Problem lösen, aber ich konnte nicht herausfinden, wie es gemacht wird oder ob es möglich ist.

Als Randbemerkung habe ich Linux selbst gelernt und selbst wenn ich zuversichtlich in meine Fähigkeiten bin, bin ich kein Spezialist und bin immer auf der Suche nach Verbesserungen.

Ich verwende eine CentOS 7-Box.

BEARBEITEN : Ich habe das Problem gelöst, indem ich mit inotify mein createFolder.shSkript auslöste, wenn eine Textdatei geändert wird. Siehe die richtige Antwort und ihre Kommentare. Danke, dass Sie mich in die richtige Richtung gebracht haben.

1

1 Antwort auf die Frage

0
Andre Terra

Sie sollten das Stammskript vom regulären "ziehen" haben, anstatt das letztere auf das erste zu "schieben". Als illustratives Beispiel:

  1. Erstellen Sie einen Cron-Job, der nach einer Liste von Ordnern sucht, die in einer Textdatei erstellt werden sollen
  2. Lassen Sie das lighttpd-Benutzerskript den gewünschten Ordner an diese Textdatei anhängen

Sie können dies eleganter mit einem Warteschlangen- / Nachrichtensystem machen, aber das liegt bei Ihnen.

Inotify-Tools können auch verwendet werden, um eine sofortige Antwort vom Backend-Skript zu erhalten Sampo Sarrala vor 7 Jahren 0
Andre Terra bedankt sich für den Vorschlag, das Problem anzugehen. Nun, da Sie es erwähnen, kann ich das Problem nicht anders betrachten. Ein Cron-Job könnte definitiv funktionieren, aber wie Sie sagten, wird es keine sehr elegante Lösung sein. Ich werde versuchen, Inotify zu verwenden (danke @Sampo Sarrala), da es einfacher zu sein scheint als das Warteschlangen- / Nachrichtensystem. Ich werde euch das Ergebnis so schnell wie möglich mitteilen. Hugo Paiva vor 7 Jahren 1