Systemadministration über Webserver (Apache)
Habe ein kleines Problem mit der Rechteverwaltung unter Linux. Ich möchte remote über einen HTTP Server Änderungen am System vornehmen, die normalerweise root vorbehalten sind. Das ganze soll über das CGI funktionieren. Das einfachste Bsp. setzen der Systemzeit: Shell Script geschrieben, mit a+x ausführbar gemacht. Dieses Script lasse ich über einen kleines C-Programm aufrufen (Ist nötig, da man bei Scripten das UID bzw. GID Bit zwar setzen kann, dieses aber von Linux ignoriert wird) Der C-Wrapper ist ebenfalls ausführbar (a+xs), gehört dem user/group root und die UID bzw. GID Bits sind gesetzt. Meine Annahme, dass das Programm nun das Shell Script mit Root-Rechten ausführt und meine Systemzeit gesetzt wird, scheint aber falsch zu sein (der Server läuft als /wwwrun/nogroup) Mit sudo könnte ich mein Problem lösen, kommt aber definitiv nicht in Frage. Ebenfalls möchte ich den Apache so lassen wie er ist, da das ganze sonst ein zu großes Sicherheitsrisiko darstellt (Es gibt die Möglichkeit Apache neu zu kompelieren und dabei die suexec auszuschalten, bezeichnender weise heißt die dazu nötige Funktion DBIG_SECURITY_HOLE ;-)). Auf einen anderen Server auszuweichen sollte auch schwer fallen, es gibt glaube ich nur den webmin der einen Zugriff auf Systemfunktionen zulässt (scheidet aber ebenfalls definitiv aus). Habe schon überlegt die ganze Sache komplett in C zu machen. Mit Hilfe der time.h sollte so einiges möglich sein, aber auch das Setzen der Systemzeit??? Gibt es in Linux Systembefehle mit denen man so etwas direkt erledigen kann und wie müsste ich die einbinden??? Allerdings stehen noch weitere Problemchen an, die sich über Shell Scripts nun einmal viel einfacher lösen lassen (z.B setzen IP, Netmask, Passwort....). Würde mich über jegliche Hinweise oder auch Links freuen, bin aber noch Linux Anfänger daher bitte nicht allzu kryptisch ;-). nun ja jeder verabschiedet sich irgendwann von Microsoft. -------------------------------------------- Markus
Moin Moin, Am Freitag, 22. November 2002 09:55 schrieb Markus Langner:
Habe ein kleines Problem mit der Rechteverwaltung unter Linux. Ich möchte remote über einen HTTP Server Änderungen am System vornehmen, die normalerweise root vorbehalten sind. Das ganze soll über das CGI funktionieren.
So a la confixx? Über ein Webinterface? Da gibt es mehrere Möglicheiten, ich empfehle jedenfalls eine DB dazwischen zuklemmen. Das Webinterface schafft nur die Daten ran, CRON ruft dann ein script (perl?) auf, das die Daten aus der DB in Deinem System einstellt. SSL solltest Du schon aufsetzen, wegen der Sicherheit und so. Mit SSH kann man auch 'ne Menge machen.
Das einfachste Bsp. setzen der Systemzeit: Shell Script geschrieben, mit a+x ausführbar gemacht. Dieses Script lasse ich über einen kleines C-Programm aufrufen (Ist nötig, da man bei Scripten das UID bzw. GID Bit zwar setzen kann, dieses aber von Linux ignoriert wird)
Das entfällt, wenn Du über die DB gehst. root (über crond) macht dann alle arbeiten (oder der User, der die Rechte hat). [...]
Mit sudo könnte ich mein Problem lösen, kommt aber definitiv nicht in Frage. Ebenfalls möchte ich den Apache so lassen wie er ist, da das ganze sonst ein zu großes Sicherheitsrisiko darstellt
Was hat das mit dem Apache zu tun? Das ist IMHO eine reine Rechte Frage, es gibt nunmal Sachen, die darf nur root! Es darf aber jeder registrierte User in die DB schreiben, root braucht dann nur noch die Daten prüfen und eventuell im System eintragen.
(Es gibt die Möglichkeit Apache neu zu kompelieren und dabei die suexec auszuschalten, bezeichnender weise heißt die dazu nötige Funktion DBIG_SECURITY_HOLE ;-)). Auf einen anderen Server auszuweichen sollte auch schwer fallen, es gibt glaube ich nur den webmin der einen Zugriff auf Systemfunktionen zulässt (scheidet aber ebenfalls definitiv aus).
Wieso scheidet Webmin aus, dann kannst Du viel über SSH machen. Jedes Script mit "ssh user@host 'foo.sh'", wie man kein Login brauchst, kann man in suse-linux nachlesen {:-)
Habe schon überlegt die ganze Sache komplett in C zu machen. Mit Hilfe der time.h sollte so einiges möglich sein, aber auch das Setzen der Systemzeit??? Gibt es in Linux Systembefehle mit denen man so etwas direkt erledigen kann und wie müsste ich die einbinden??? Allerdings stehen noch weitere Problemchen an, die sich über Shell Scripts nun einmal viel einfacher lösen lassen (z.B setzen IP, Netmask, Passwort....).
IMHO kannst Du mit C alles machen, denke jedenfalls an SSH, spart Zeit und nerven... Bye Andre
Am Freitag, 22. November 2002 09:55 schrieb Markus Langner:
Habe ein kleines Problem mit der Rechteverwaltung unter Linux. Ich möchte remote über einen HTTP Server Änderungen am System vornehmen, die normalerweise root vorbehalten sind. Das ganze soll über das CGI funktionieren.
-------------------------------------------- Markus
Hallo Markus, schau dir mal webmin an. http://www.webmin.com MfG Michael -- Nur ein Kleingeist hält Ordnung !! Ein Genie überlebt das Chaos !! [:-)]
Hi Markus, Deine Zeilen sind zu lang. Kannst Du sie bitte nach max. 72 Zeichen umbrechen? Mit Konsolen-Mailern ist die Lesbarkeit sonst besch... On Fre, 22 Nov 2002 at 09:55 (+0100), Markus Langner wrote:
Habe ein kleines Problem mit der Rechteverwaltung unter Linux. Ich möchte remote über einen HTTP Server Änderungen am System vornehmen, die normalerweise root vorbehalten sind. Das ganze soll über das CGI funktionieren.
Das einfachste Bsp. setzen der Systemzeit: Shell Script geschrieben, mit a+x ausführbar gemacht. Dieses Script lasse ich über einen kleines C-Programm aufrufen (Ist nötig, da man bei Scripten das UID bzw. GID Bit zwar setzen kann, dieses aber von Linux ignoriert wird)
Kein Wunder. Ein Shell-Script ist eine Datei, die vom Interpreter (der bash) gelesen und interpretiert wird. Das Script wird nicht vom OS ausgeführt.
Der C-Wrapper ist ebenfalls ausführbar (a+xs), gehört dem user/group root und die UID bzw. GID Bits sind gesetzt. Meine Annahme, dass das Programm nun das Shell Script mit Root-Rechten ausführt und meine Systemzeit gesetzt wird, scheint aber falsch zu sein (der Server läuft als /wwwrun/nogroup) [...]
Hast Du per setuid(0) die effektive User-ID nach root gewechselt? Die Set-ID Bits des Programms geben dem Programm nur das Recht, die ID zu wechseln, das Programm muss selbst dafür sorgen. Siehe man setuid man setgid Jan
participants (4)
-
Andre Heine
-
Jan.Trippler@t-online.de
-
Markus Langner
-
Michael Steffen