Probleme beim Absetzen von SSH Befehlen über Apache(Scriptsprache PHP)

Post Reply
Message
Author
Martin K.

Probleme beim Absetzen von SSH Befehlen über Apache(Scriptsprache PHP)

#1 Post by Martin K. »

Hallo zusammen!!

Hoffe ihr könnt mir helfen, soooo vielleicht beschreib ich erstmal was ich im Allgemeinen machen will.
Ich habe einen kleinen Serververbund und soll zentral über einen Hauptserver, auf den ich über einen WebBrowser drauf kann, die anderen Server monitoren und verwalten
(So ähnlich wie Webmin, aber das Script läuft halt zentral auf einem Server)

Zum Monitoren gehört Serverdienste abfragen. Hab mir erstmal gedacht dass ein pidof <dienstname> reichen sollte.
Das Verwalten beinhaltet im wesentlichen das starten und stoppen dieser Dienste.
Das ganze wird so realisiert (zumindest sollte es so gemacht werden)...auf meinem zentralen Server hab ich meinen Webserver und meine php-scripte. (Hab mich für php entschieden da ich dass wenigstens ein bißchen kann)
Meine Abfragen ob ein Dienst auf einem Server läuft will ich über SSL realisieren, also ein exec(SSL benutzer@ip pidof <dienst>)

Hab damit ich kein Passwort für den Benutzer eingeben muss public-/private key verfahren benutzt.

So und jetzt komm ich auch schon zu meinem Problem.
Und zwar ist das eine bißchen verzwickte Angelegenheit. Apache läuft unter dem Benutzer "apache" und für diesen Benutzer kann ich keinen rsa-key erstellen da ich mich ja nicht als User "apache" einloggen kann.

Bin dass ganze mal umgangen in dem ich beim Apache den User auf "peter" gestellt habe und auf einem Testserver mit dem User "peter" die keys ausgetauscht habe.
und siehe da es hat funktioniert. Ich konnte ohne Passworteingabe über den Webserver die Dienste abfragen. Abeeerrr...der User peter hat aber nun bei meinen Scripten Probleme bereitet da ich z.B. in meinen Scripten Sessions verwende, jedoch der Benutzer Peter keine Rechte hat welche zu starten.

Hab nun überlegt den Apache wieder auf standard apache Benutzer zu stellen und evtl.
erstmal sowas wie einen Benutzerwechsel in mein Script einzufügen. Also d.h. apache schaltet über einen befehl in dem Script auf peter und führt die SSH-Befehle als peter aus...

Weiß aber net wie ich dass am besten realisieren kann..bzw. wie der Befehl zum Benutzerwechsel ohne seperate Passwordabfrage aussieht.
Ich bräuchte sowas wie exec(login -u peter:password) oder so...
Die Server basieren alle auf RedHat AS 3.0.

Ich glaube jetzt hab ich echt genug geschrieben. Hoffe es war wenigstens verständlich.
So ich danke jetzt schonmal jedem der sich da ein bißchen Gedanken macht um mir zu helfen.

@moderator: Entschuldige wenn ich im falschen Thema gepostet haben sollte. Bin mir aber nicht ganz sicher ob es eher zur Programmierung oder Netzwerk gehört...Einfach verschieben fall ich falsch sein sollte. Danke!

User avatar
Lateralus
prolinux-forum-admin
Posts: 1238
Joined: 05. May 2004 7:35

#2 Post by Lateralus »

Ich denke, du solltest das ganze über sudo Regeln. Einfach mit "visudo" das sudoers-file ändern und einen Eintrag dieser Art tätigen:

Code: Select all

apache ALL = NOPASSWD&#58; &#91;befehl&#93; &#91;username&#93;
Danach kannst du das ganze mit

Code: Select all

exec&#40;sudo &#91;befehl&#93;&#41;
ausführen.

Martin K.

#3 Post by Martin K. »

Danke für die schnelle Antwort!!

An die Lösung mit einem sudo für den apache hab ich auch schon gedacht. Hab aber mir aber gedacht dass die Sicherheit des Systems nicht mehr gegeben wäre.

Bei der sudo-Variante würde ja auch die Authentifizierung des Rechners über den rsa-key wegfallen. D.h. ich könnte mich von jedem Rechner aus auf die Server über Benutzer apache und den sudo Befehl connecten...

Es sollte möglichst so sein , dass nur vom Webserver aus die Befehle abgesetzt werden können.

btw: Ist der sudo-User durch die Regelerstellung für ihn wirklich so eingeschränkt oder hat er die Möglichkeit dass ganze zu umgehen.

Danke nochmal für die Mühe!!

Gruß
Martin

User avatar
Lateralus
prolinux-forum-admin
Posts: 1238
Joined: 05. May 2004 7:35

#4 Post by Lateralus »

Auf Rechner W (Webserver) läuft der Apache und du willst per ssh einen Befehl auf einem anderen Rechner C ausführen, wofür du aber die Rechte von "Peter" (auf C und W) brauchst. Also:

Apache bekommt via sudo die Erlaubnis als "Peter" auf W den Befehl auszuführen (ssh -l Peter [IP von C] [Befehl]) auszuführen und kann dann dessen Ausgabe bereitstellen. Wo ist jetzt die Unsicherheit? Du legst mit sudo genau einen Befehl fest, der für apache als Peter ausgeführt werden kann und die verschlüsselte Verbindung zwischen W und C besteht nach wie vor.

Oder missverstehe ich dich?

Martin K.

#5 Post by Martin K. »

Ah okey ich glaube ich hab dich beim ersten mal missverstanden...

Also du meinst dass Benutzer "apache" sudo-Rechte bekommt um lokal als Benutzer "peter" einen ssh-Befehl auf Rechner C absetzen zu können...auf Beiden Rechnern muss Benutzer "peter" angelegt sein!?

Hoffe das stimmt so...danke für den Rat...werde es morgen gleich mal ausprobieren.

Gruß
Martin

User avatar
killerhippy
Posts: 529
Joined: 19. May 2000 19:36
Contact:

#6 Post by killerhippy »

Ich lasse bei sowas semaphoren files erzeugen, die entweder von root's crontab oder root's daemonisiertem (Endlosschleife mit while true) in einer screen session laufendem script (wenn die Reaktionsszeit kürzer als die von crontab sein soll) ausgewertet werden.

Damit hat sich das Rechteproblem erledigt und die Funktionalität ist gewährleistet. Zudem ist die Sicherheit nicht belastet, da keinem Prozess/User zusätzliche Rechte eingeräumt werden müssen.
Es gibt keine dumme Fragen!

Killerhippy

Martin K.

#7 Post by Martin K. »

Hallo ich bins nochmal...

und zwar bin ich gerade dabei dass mit den sudo-Rechten umzusetzen, jedoch hab ich dabei ein bißchen Probleme.

Also hab unter root ganz normal visudo gestartet und im feld:

Code: Select all

#User privileg specificatons

apache ALL=NOPASSWD&#58;/usr/bin/ssh peter
eingefügt. Hab mein php-Script ausgeführt und wollte mir dann über den Befehl:

Code: Select all

echo exec&#40;"sudo -u peter /usr/bin/ssh 192.168.0.1 /etc/init.d/httpd status"&#41;;
den Status des http-Dienstes auf dem Server mit der IP:192.168.0.1 anzeigen lassen. Dies jedoch ohne Erfolg.

Habe testweise auch einen neuen Benutzer angelegt mit dem ich mich lokal anmelden kann...und hab dann in visudo folgendes eingefügt:

Code: Select all

#User privileg specificatons

apache ALL=NOPASSWD&#58;/usr/bin/ssh peter
benutzer ALL=NOPASSWD&#58;/usr/bin/ssh peter
Wenn ich nun über die Konsole mit dem Benutzer "benutzer" den Befehl

Code: Select all

sudo -u peter /usr/bin/ssh 192.168.0.1 /etc/init.d/httpd status
gibt er mir folgendes zurück:
"Sorry user benutzer is not allowed to execute '/usr/bin/ssh 192.168.0.2 /etc/init.d/http status' as peter on localhost.localdomain"

Hat jemand ne Ahnung woran das liegen könnte?!

User avatar
killerhippy
Posts: 529
Joined: 19. May 2000 19:36
Contact:

#8 Post by killerhippy »

Laut manpage:

Code: Select all

       Runas_Spec

       A Runas_Spec is simply a Runas_List &#40;as defined above&#41; enclosed in a
       set of parentheses.  If you do not specify a Runas_Spec in the user
       specification, a default Runas_Spec of root will be used.  A Runas_Spec
       sets the default for commands that follow it.  What this means is that
       for the entry&#58;

        dgb    boulder = &#40;operator&#41; /bin/ls, /bin/kill, /usr/bin/lprm

       The user dgb may run /bin/ls, /bin/kill, and /usr/bin/lprm -- but only
       as operator.  E.g.,

        $ sudo -u operator /bin/ls.
Du muesstes also deine Zeile korrigieren:

Code: Select all

apache ALL = &#40;peter&#41; /usr/bin/ssh
Das NOPASSWD ist unnötig, da ssh von jedem user ohne Restriktionen ausgeführt werden kann.
Es gibt keine dumme Fragen!

Killerhippy

Martin K.

#9 Post by Martin K. »

Danke für die hilfreichen Antworten!!

Das NOPASSWD musste doch rein. Vorher hat er immernoch eine Passwortabfrage getätigt.
Der Eintrag sieht jetzt folgendermaßen aus:

Code: Select all

apache ALL = &#40;peter&#41; NOPASSWD&#58;/usr/bin/ssh
und so funktioniert es auch prima.

Danke nochmal an alle die mitgeholfen haben!!

Post Reply