Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
Probleme beim Absetzen von SSH Befehlen über Apache(Scriptsprache PHP)

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Netzwerk
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Martin K.
Gast





BeitragVerfasst am: 28. Okt 2005 18:56   Titel: Probleme beim Absetzen von SSH Befehlen über Apache(Scriptsprache PHP)

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!
 

Lateralus
prolinux-forum-admin


Anmeldungsdatum: 05.05.2004
Beiträge: 1238

BeitragVerfasst am: 28. Okt 2005 19:51   Titel:

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

Code:

apache ALL = NOPASSWD: [befehl] [username]


Danach kannst du das ganze mit

Code:
exec(sudo [befehl])


ausführen.
 
Benutzer-Profile anzeigen Private Nachricht senden

Martin K.
Gast





BeitragVerfasst am: 29. Okt 2005 11:02   Titel:

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
 

Lateralus
prolinux-forum-admin


Anmeldungsdatum: 05.05.2004
Beiträge: 1238

BeitragVerfasst am: 30. Okt 2005 13:51   Titel:

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?
 
Benutzer-Profile anzeigen Private Nachricht senden

Martin K.
Gast





BeitragVerfasst am: 30. Okt 2005 17:12   Titel:

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
 

killerhippy



Anmeldungsdatum: 19.05.2000
Beiträge: 529

BeitragVerfasst am: 30. Okt 2005 19:07   Titel:

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
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen

Martin K.
Gast





BeitragVerfasst am: 31. Okt 2005 13:09   Titel:

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:

#User privileg specificatons

apache ALL=NOPASSWD:/usr/bin/ssh peter


eingefügt. Hab mein php-Script ausgeführt und wollte mir dann über den Befehl:

Code:
echo exec("sudo -u peter /usr/bin/ssh 192.168.0.1 /etc/init.d/httpd status");


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:

#User privileg specificatons

apache ALL=NOPASSWD:/usr/bin/ssh peter
benutzer ALL=NOPASSWD:/usr/bin/ssh peter


Wenn ich nun über die Konsole mit dem Benutzer "benutzer" den Befehl
Code:
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?!
 

killerhippy



Anmeldungsdatum: 19.05.2000
Beiträge: 529

BeitragVerfasst am: 01. Nov 2005 2:23   Titel:

Laut manpage:
Code:

       Runas_Spec

       A Runas_Spec is simply a Runas_List (as defined above) 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:

        dgb    boulder = (operator) /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:

apache ALL = (peter) /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
 
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen

Martin K.
Gast





BeitragVerfasst am: 01. Nov 2005 20:42   Titel:

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:

apache ALL = (peter) NOPASSWD:/usr/bin/ssh


und so funktioniert es auch prima.

Danke nochmal an alle die mitgeholfen haben!!
 

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Netzwerk Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy