Basteln eines Webinterface's, externe scripts ausführen

Bash, Shell, PHP, Python, Perl, CGI
d3nation
Posts: 68
Joined: 2004-11-30 14:09

Basteln eines Webinterface's, externe scripts ausführen

Post by d3nation »

moin zusammen,

erstmal hiho alle ich bin neu hier :oops: aber gelesen hab ich schon viel hier drinne :P

so genug, jez zu meinem problem:

ich habe zusammen mit einem kollegen eine game/voiceserver hosting firma gegründet, und nun drengen immer mehr und mehr kunden nach einen webinterface. Das coden an sich ist kein problem, ich hab mir da schon ein bisschen was zusammengecodet, z.b. dass einrichten der gameserver- config datein durch user, abspeichern in die jeweils richtigen datein und so weiter. Schön und gut, aber nach jeder änderung in einer gameserver - config datei MUSS der gameserver neu gesatartet werden.

Ich dachte des ganze mach ich über php am einfachsten und mit exec() oder ähnlichen. Die root server sind alle mit suse 9.1 appache, php, mysql usw. alles drauf. Jedoch solln ja die gameserver unter verschiedenen benutzern ausgeführt werden, also kann ich ned einfach ein script per php exec() ausführe, da diese nur unter benutzer wwwrun gestartet werden. ist ja logisch. Nun, ich kann auch nicht erst auf ein anderes script zugreifen, dass dann mit "su blubb" und anschließend mit "/usr/apps/hlds-vorlage/hldsstart" oder so den server startet. Denn su erwartet eine eingabe des passworts. Wie kann ich also die gameserver-start-scripts per php ausführen, und einen anderen benutzer als wwwrun hernehmen? Ich denke für php an sich gibt es keine möglichkeit den benuzer zu wechseln, sprich irgendeinen linux script muss herhalten denke ich. Würd mich freuen wenn ihr ein paar anregungen hättet :)

thx @all

dee
cybermage
Posts: 158
Joined: 2002-12-10 22:10
Location: Ausgburg (Germany)

Re: Basteln eines Webinterface's, externe scripts ausführen

Post by cybermage »

sudo wäre eine möglichkeit
d3nation
Posts: 68
Joined: 2004-11-30 14:09

Re: Basteln eines Webinterface's, externe scripts ausführen

Post by d3nation »

erstmal danke für deine schnell antwort! Hm sudo, dass ist neuland für mich, kennst du dich damit aus, wie ich die /etc/sudoers datei bearbeiten muss? Reicht des wenn ich ich da reinschreibe

Code: Select all

wwwrun        ALL=(ALL)       NOPASSWD: ALL
?

wäre cool wenn du mich bissl unterstützen könntest :)

thx schonmal
cybermage
Posts: 158
Joined: 2002-12-10 22:10
Location: Ausgburg (Germany)

Re: Basteln eines Webinterface's, externe scripts ausführen

Post by cybermage »

d3nation wrote:

Code: Select all

wwwrun        ALL=(ALL)       NOPASSWD: ALL
dann kannst gleich den apache als root laufen lassen ;)

Code: Select all

wwwrun     ALL=(ALL)       NOPASSWD: /path/to/skript/
dann darf wwwrun alles in /path/to/skript/ als jeder beliebige user ausführen.
besser wäre das (ALL) so zu ersetzen, dass es nur die GS user sind.
man sudo ;)[/code]
d3nation
Posts: 68
Joined: 2004-11-30 14:09

Re: Basteln eines Webinterface's, externe scripts ausführen

Post by d3nation »

perfect, du bist n schatz ;) :-D

danke!!
d3nation
Posts: 68
Joined: 2004-11-30 14:09

Re: Basteln eines Webinterface's, externe scripts ausführen

Post by d3nation »

uiuiui noch was anderes, ich merke gerade dass irgendwie keine variabeln eines html-documentes aus einem forumlar darin in ein php script übernommen werden.. hum, dass gar ned gut, exact des gleichen beiden datein arbeiten auf einen unabhängigen ftp server perfect. jemand ideen? ich kann auch eine php_info() erstelln wenns weiterhilft :(
d3nation
Posts: 68
Joined: 2004-11-30 14:09

Re: Basteln eines Webinterface's, externe scripts ausführen

Post by d3nation »

sodala, auch gemeistert, war eine variabel in der php.ini die auf ON musste, und dann noch appache restarten, aber musste stoppen und starten, einfach restart ging ned so ganz :S egal :)

ich hab schon WIEDER ein prob, eher für die php freaks oder so...:

eine php datei soll per fwrite eine datei erstellen, die später per exec ausgeführt wird. alles kein problem, diese datei muss jedoch mehrere zeilen haben, siehe hier: (ausschnitt!)

Code: Select all

$move = ""; 


$move = $move ."sudo -u root  cp -R /usr/apps/hlds-vorlage /usr/apps/k-cs-"$name"; 
$move = $move ."sudo -u root mv ./plugins.ini /usr/apps/k-cs-"$name"/cstrike/addons/metamod"; 

$movedat = "move.inc"; 
$dz = fopen($movedat, "w"); 
fwrite ($dz, $move); 
fclose ($dz); 
so gut. geht auch prima, allerdings sind des mehr als nur die beiden zeilen von $move die da rein müssen, und wie kann ich jedes in eine extra zeile machen <br> is n schmarrn, die datei move.inc wird ja keine html datei, sondern von der linux shell ausgeführt.

plz help :D

thx, dee
curly
Posts: 13
Joined: 2004-07-25 23:41

Re: Basteln eines Webinterface's, externe scripts ausführen

Post by curly »

d3nation wrote:sodala, auch gemeistert, war eine variabel in der php.ini die auf ON musste,
Eigentlich sollte die aber auf OFF bleiben und du solltest eher deine scripte anpassen.
d3nation
Posts: 68
Joined: 2004-11-30 14:09

Re: Basteln eines Webinterface's, externe scripts ausführen

Post by d3nation »

mh, aber anders wurden die variabeln nicht weitergegeben, hab auch in nem anderen nachgelsen, is ned weiter dragisch, wenns dich interesiert, kann ich nachsachaun wie die hieß?!

:)

des andere prob. hab ich au schon gelöst, einfach n dahinter... :)
curly
Posts: 13
Joined: 2004-07-25 23:41

Re: Basteln eines Webinterface's, externe scripts ausführen

Post by curly »

d3nation wrote:mh, aber anders wurden die variablen nicht weitergegeben,
Du hast Register Globals auf on gestellt, was bei schlampigen Scripten und bösen Menschen zu großen Problemen auf dem Server führen kann. Stell es wieder auf off und greif auf deine Variablen mit
$_GET['deineVar'];
oder
$_POST['deineVar'];
zu.
Je nachdem wie du sie weitergegeben hast.
[tom]
Posts: 656
Joined: 2003-01-08 20:10
Location: Berlin

Re: Basteln eines Webinterface's, externe scripts ausführen

Post by [tom] »

d3nation wrote:

Code: Select all

$move = $move ."sudo -u root  cp -R /usr/apps/hlds-vorlage /usr/apps/k-cs-"$name"; 
$move = $move ."sudo -u root mv ./plugins.ini /usr/apps/k-cs-"$name"/cstrike/addons/metamod"; 
Und das funktioniert? Die Anführungszeichen sind doch gar nicht richtig terminiert.

d3nation wrote: geht auch prima, allerdings sind des mehr als nur die beiden zeilen von $move die da rein müssen, und wie kann ich jedes in eine extra zeile machen <br> is n schmarrn, die datei move.inc wird ja keine html datei, sondern von der linux shell ausgeführt.

Code: Select all

$text  = "";
$text .= "Zeile 1n";
$text .= "Zeile 2n";

[TOM]
d3nation
Posts: 68
Joined: 2004-11-30 14:09

Re: Basteln eines Webinterface's, externe scripts ausführen

Post by d3nation »

sodala, alles geht perfect, nur mit den variabeln muss ich noch schaun, is viel arbeit des umzuschreiben... ich kann euch wenn ihr wollt ma n link zum q.text geben.

@[T0M]

Code: Select all

$move = $move ."sudo -u root  cp -R /usr/apps/hlds-vorlage /usr/apps/k-cs-"$name";
ja war da nur so hingeschmirrt, aber so gehts wirklich:

Code: Select all

$move = $move ."sudo -u root  cp -R /usr/apps/hlds-vorlage /usr/apps/k-cs-$name n";
$move = $move ."sudo -u root mv ./plugins.ini /usr/apps/k-cs-$name/cstrike/addons/metamod n";
so, des webinterface wird langsam interesannt, restart stop usw. geht schon, und die einrichtung auch perfect, nacher gibts den quelltext zu begutachten :P[/code]
dogholiday
Posts: 17
Joined: 2004-09-30 16:36

Re: Basteln eines Webinterface's, externe scripts ausführen

Post by dogholiday »

Kleiner schönheits tipp:
ALT:
$move = $move ."sudo -u root cp -R /usr/apps/hlds-vorlage /usr/apps/k-cs-$name n";

NEU:
$move .= "sudo -u root cp -R /usr/apps/hlds-vorlage /usr/apps/k-cs-".$name."n";

und wenn du $name per FORM übertragen bekommen hast :

$move .= "sudo -u root cp -R /usr/apps/hlds-vorlage /usr/apps/k-cs-".$_POST[name]"n";

$name = solltest du test das dort keine .. oder / bzw. irgendwelche anderen sonderzeichen drin sind, sonst könnte irgendjemand mal deine Server löschen oder hacken. Kenne ja dein script noch nicht, aber du solltest gerade bei ausführbaren sachen sehr vorsichtig sein.
d3nation
Posts: 68
Joined: 2004-11-30 14:09

Re: Basteln eines Webinterface's, externe scripts ausführen

Post by d3nation »

heyja, thx :) ok ich bin noch am rumscripten, is ned so einfach, die ganze datei is ein wenige "größer" :)

aber freut mich dass sich immer mehr leute hier für interesieren, ich hab noch ein prob. zum fixen und dann kommt der QT (=quelltext) mal :)

bis nacher und thx,

dee
d3nation
Posts: 68
Joined: 2004-11-30 14:09

Re: Basteln eines Webinterface's, externe scripts ausführen

Post by d3nation »

soooodala, ich habs bissl editiert und komentare eingefügt, zum verständniss der datei.

link zum quelltext: aber man wird vielleicht bissl brauchen um des ganze zu verstehen, es ist doch insgsammt ein weniger koplex als einfach eine homepage erstellen... hab eh wenig hoffnung dass sich des viele leute anschauen, aber ohne die komentare gelesen zu haben wird man wohl kaum verstehn was ich wirklich will :) von dem her: ran an den speck :P

link zum QT: http://wserver2.ath.cx/WI/test/qt

achja nochmal thx @dogholiday und auch @curly! ich hab register globals wieder auf off, und des mit $_POST['deineVar']; funzt prima, 1a, mag ja keine lücken haben :P

ok wenn man sich den QT angeschaut hat, fragt man sich viel wie des startscript an sich echt auschaut, erkennt man ja ned sooo gut in der datei, erfordert bissl fantasie ;) deswegen hier ein link zum startscript (von der php datei erstelllt):
http://wserver2.ath.cx/WI/test/starts

so, noch ein letzer link, in dem fall um sich ein bild von dem "webinterface" zu machen, deren gestalltung @0% liegt!! es geht mir bei der ganzen sache erst mal darum dass es funktioniert!!! (ihr könnt ruhig alles ausprobieren mit stoppen/restarten, die dateien gibt es nicht mehr, nur dass WI an sich :))
http://wserver2.ath.cx/WI/test/test/


soo zum schluss noch ein paar screens, zum verständnis :) aber bitte trotzdem erst den quelltext lesen, sonst ist wahrscheinlich kein verständniss da :)

http://wserver2.ath.cx/s1.JPG
http://wserver2.ath.cx/s2.JPG
http://wserver2.ath.cx/s3.JPG
http://wserver2.ath.cx/s4.JPG
http://wserver2.ath.cx/s5.JPG
http://wserver2.ath.cx/s6.JPG

sodala, jez wisst ihr über meinen aktuellen status bescheid, wer mir helfen möchte des ganze zu vollenden, würde mich freuen :) auch bei fragen oder so einfach schreiben, ich freu mich au über jede anmerkung :)

heute werde ich mich erstmal damit beschäftigen, wie ich die verzeichnisse passwortschützen kann, und auch ob es ned sinnvoller ist, wenn man für die kunden WI's nicht so eine url: http://url/kundenname/
hat sondern vielleicht: http://kundenname.url was fändet ihr besser?

thx fürs interesse :)

mfg dee
d3nation
Posts: 68
Joined: 2004-11-30 14:09

Re: Basteln eines Webinterface's, externe scripts ausführen

Post by d3nation »

So, des WI ist entzwischen schon ziemlich weit, allerdings habe ich eine frage an alle die ahnung von dynamischen seiten haben und externen datein usw.

also: ich will auf meinem webinterface externe datein (z.b. server.cfg) die nur text enthalten bearbeiten können. Dazu wäre es am besten, wenn der schon bestehende inhalt in einer textarea ausgegeben wird, diese sollte man dann verändern und abschliesend speichern können. Mir sind alle methoden recht, javascript, php oder sonst was :)

danke
niklas_
Posts: 122
Joined: 2003-08-13 20:46

Re: Basteln eines Webinterface's, externe scripts ausführen

Post by niklas_ »

Indem du sieh einfach per PHP öffnest und editierst.
Wichtig ist dafür, dass du die entsprechenden Rechte hast; das wäre also der Fall, wenn du mit dem richtigen UnixBenutzer die Datei öffnest. Das das nicht so einfach geht, weißt du spätestens seit du dich mit diesem Thema beschäftigst.
Möglich wäre es den User, der die Gameserver startet und den Webserver-Benutzer wwwrun zb. in eine gleiche Gruppe zu stecken. Der Datei dann das Recht geben: Gruppe: editieren, löschen (siehe chmod) und du solltest Zugriff haben.

Ich habe - wenn du gestattest - einige Fragen an dich :)
1.) Wieso erstellst du einen eigenen Ordner für jeden Nutzer? Was befindet sich darin?
2.) Wieso installierst du für jeden Server eine Kopie der Steamsoftware? Kann man nicht aus einer Installation mehrere Server starten?
3.) Man kann zur Zeit leider nicht den Sourcecode einsehen (HTTP Error). Kannst du ihn neu uploaden und mir die URL mal schicken?

Vielen Dank, niklas ^^
d3nation
Posts: 68
Joined: 2004-11-30 14:09

Re: Basteln eines Webinterface's, externe scripts ausführen

Post by d3nation »

Hi niklas_ :) freut mich dass sich jemand dafür interessiert, natürlich sind deine fragen gestattet und auch berechtigt!! danke :)

zur beantwortung:

erstmal sind die quelttexte wieder zu sehn, tut mir leid ich hatte sie ausversehn verschoben ^^
http://wserver2.ath.cx/WI/test/qt
So, dazu muss ich allerdings nochmal was sagen: Ich habe des konzept ein wenig verändert, und zwar habe ich ein administratives formular, mit dem ich nur server erstellen kann, dieses könnt ihr euch hier anschaun:

http://wserver2.ath.cx/WI/test/admin.php
Beim absenden des ausgeführten formulares wird dieses durch das php script des oberen links ausgewertet. Dieses hatt dann den sinn, dass eingentliche kunden-webinterface zu erstellen, und den server zu erstellen. Dazu gehört natürlich die entsprechende server.cfg anzulegen, den port usw. ändern und die gewünschten mods installieren, dass startscript zu erstellen usw...

Zu deinen fragen:
1.) Wieso erstellst du einen eigenen Ordner für jeden Nutzer? Was befindet sich darin?
Also, dass script erstellt einmal einen GAME-ordner in /usr/apps/k-cs-$kundenname ; da dass admin webinterface in /srv/www/htdocs/irgendwas/ liegt, wir dort direkt auch noch ein ordner namens $kundenname erstellt, in dies wird ein fertiges standart webinterface aus /srv.../WIV/ kopiert, (WIV = webinterfacevorlage :P) und nur die entsprechenden seiten wie z.b. den zugriff auf das startsctipt usw. werden verändert bzw. von der php datei erstellt und hineinkopiert.

Dies hat mitunter auch den sinn dass der kunde nicht per FTP (homeverzeichnis /usr/apps/k-cs-$kundenname) auf sein webinterface zugreifen kann, denn dies wäre ein sicherheits-risiko, da er unter umständen dass startscript ändern kann, auf 32 slot und anschliesend den server über's webinterface neustartet. Ein weiterer grund ist auch dass ich alles schön geordnet habe und die WI (=webinterface) verzeichnisse alle zusammen sind und ich den überblick behalte.

zu deiner 2ten frage:
dieses script ist erstmal NUR zur erstellung von STEAM CS 1.6 servern, dies abzuändern wird kein großes thema, aber ein großteil unserer kunden haben CS server, diese sind haben vorrang. Später sollen auch ET, COD usw. server erstellt werden können :) aber wie gesagt sollte kein großes thema sein, denn man muss in prinzip ja nur das verzeichniss des vorlage-spieles angeben und anschliesend dass startsctipt noch ein WENIG verändern, fast alle gameserver lassen sich gleich starten :P


Mit den rechten ist dass ganze noch SEHR problematisch, da bräuchte ich vielleicht wie dus (niklas) schon angedeutet hast ein wenig rat von jemanden der mehr erfahrung hat, würde mich freun wenn ich mich bissl an dich wenden könnte :)

Ich habe jetzt noch einmal einen TEST-server erstellt, (cs 1.6) der auch wirklich läuft und dessen TEST!-WI für alle zugänglich ist. Daran könnt ihr die funkionalität prüfen, aber BITTE nicht dass design kritisieren :P es ist ein TEST und geht um die funktion.

Bei anregungen usw. bitte schreiben :) ich habe auch noch ein paar fragen, werde sie morgen oder so posten, bin sehr happy dass ichs entlich geschafft habe dass man übers WI die config datein so bearbeiten kann, dass es sie auch richtig abspeichert usw. : :wink:

Ok, bis morgen :) und nochmals thx 4 deine antwort, wie gesagt freut mich dass sich noch leute hier dafür interesieren :)


achso *edit* sry ^^ des WI des Test-server ist natürlich hier erreichbar:
http://wserver2.ath.cx/WI/rootforum/
Wie gesagt, es ist mir egal was da drauf geändert wird, probiert ruhig aus, ich HOFFE dass keine bugs drin sind. :) Die server ip ist auch auf dem WI sichtbar
niklas_
Posts: 122
Joined: 2003-08-13 20:46

Re: Basteln eines Webinterface's, externe scripts ausführen

Post by niklas_ »

Vielen Dank für deinen ausführlichen Post.

Mir sind mehrere Dinge aufgefallen, die geändert werden sollten, oder über die man zumindest nachdenken sollte:
1) Unix-Nutzer
Du erstellst einen neuen User namens $name, der mittels FTP den Ordner /k-cs-$name aufrufen kann.
Problem 1: Dieser Ordner gehört dem Nutzer root und nicht dem nutzer $name -> chown für diesen ordner ausführen
Problem 2: chmod(777) ermöglicht es _Jedem_ in diesem Verzeichnis zu suchen und zu schreiben. chmod(666) muss ausreichen.

Das bedeutet aber auch wieder ein Problem beim ausführen der Shellscripte zum starten / stoppen denn in Zukunft sollte zum Starten / Stoppen nicht "sudo -u root" genutzt werden, denn das könnte zu Problemen führen.
Man müsste also sudo umkonfigurieren, dass er für jeden nutzer $name wwwrun Befehle entgegen nimmt

Code: Select all

wwwrun     ALL=($name)       NOPASSWD: /usr/apps/k-cs-$name/startscript.sh
Das könnte man auch generalisieren mit:

Code: Select all

wwwrun     ALL=(ALL)       NOPASSWD: /usr/apps/
aber das wäre wieder so eine Sache.
Alternativ müsste man auf das Anlegen eines eigenen UnixUsers verzichten und die Gameserver alle unter dem Unixuser "hlds" anlegen, denn dann würde:

Code: Select all

wwwrun     ALL=(hlds)       NOPASSWD: /usr/apps/
funktionieren; sicherhetisrisiko hier _geringer_.
Nicht gerade einfach zu lösen. So wie es im Moment ist, kann man es aber eigentlich - auch wenn es funktioniert - nicht lassen..

2) Port
Ã?berprüfst du, ob der Serverport noch frei ist? Stell dir vor ich gebe Port 80 ein ;)

3) MySQL
Deshalb auch uA. der Vorschlag, die Nutzerdaten in einer MySQL Datenbank zu speichern.
Sonst weißt du ja auch am Ende nicht wer so alles einen Server auf deinem Server besitzt, wenn du mal einen Server löschen möchtest.

4) Mods
Mods sind hier ja keine GameMods sondern Modifikation für MetaMod, korrekt?
Das heisst, du hast Metamod aber auch alle Plugins bereits in der Vorlage eingespielt.
Weil effektiv trägst du die vom User gewünschten Mods ja nur noch in die plugins.ini ein.
Auch hier könnte man auf MySQL setzen, wenn man später eine wirklich Installation von Mods haben will (Installdir, version, installiert ja/nein?)
Wichtig wäre dies auch, um im Kundenbereich nicht immer alle Konfigurationsdateien zum Editieren anzuzeigen (man kann ja alle Konfigs auswählen, auch wenn man sie streng genommen gar nicht installiert hat). --> Einfache Abfrage der DB ob das Plugin installiert ist und dann die Konfigurationsdateien anzeigen.

5) Kundeninterface
Es ist absolut unpraktisch für jeden Nutzer ein eigenes Webinterface zu installieren. Viel zu großer Aufwand, wenn du mal was ändern _musst_.
Deshalb: 1 Webinterface mit Auslesen der Kundendaten aus der MySQL Datenbank (da könntest du ausserdem gleich die Nutzerdaten für einen Login speichern).


Soviel erstmal dazu :)) Reicht erstmal :D
d3nation
Posts: 68
Joined: 2004-11-30 14:09

Re: Basteln eines Webinterface's, externe scripts ausführen

Post by d3nation »

Ok, VIELEN dank für deinen post, echt nice dass du mit hilfst :)

ich muss sagen du hast in allen punkten recht. Ich beschäftige mich heute mal mit punkt 1, den Benutzern usw, und die anderen punkte danach wenns dir nix ausmacht :) ;)

ersteinmal das problem mit dem FTP verzeichnissen. Es sollte für den FTP benutzer schon erreichbar und zu verändern sein, da es bereits die zeile

Code: Select all

$move = $move ."sudo -u root chmod -R 777 /usr/apps/k-cs-$name/ n";
Da dies wie du schon sagtest aber sehr unsicher ist habe ich die komplett gelöscht und einfach hierdurch ersetzt:

Code: Select all

$move = $move ."sudo -u root chown -R $name /usr/apps/k-cs-$name/ n";
Dazu ist mir noch ein peinliches Problem eingefallen: :oops: ich habe noch gar kein PASSWORT gesetzt für den benutzer! :oops: Aber wie tun? "passwd" erwartet ja eine eingabe, oder kann ich die irgendwie reinpipen? Ich vermute des wird auch ein größeres problem sein, viell. gibts da aber auch irgendeine möglichkeit über ein programm ähnlich wie sudo nur eben für den zweck?! Da frag ich heute mal einen kollegen der sich mit solchen themen gut auskennt. Ok weiter im text:
Alternativ müsste man auf das Anlegen eines eigenen UnixUsers verzichten und die Gameserver alle unter dem Unixuser "hlds" anlegen, denn dann würde:
dass halte ich leider für keine gute idee, zwecks ftp usw.

Code: Select all

wwwrun     ALL=($name)       NOPASSWD: /usr/apps/k-cs-$name/startscript.sh
Eine SEHR gute idee, ich mache dass am besten folgendermaßen: des ganze wird direkt in die sudoers datei geschrieben, muss aber ja auch von der PHP datei da rein geschrieben werden, sonst würde des einrichten ja ned mehr ganz automatisch ablaufen. Hmm, aber ich kann die datei ja nicht per fopen() öffnen, und anschliesend dies reischreiben, dadie datei ja nur als root lesbar ist. Deshalb öffne ich sie ersteinmal selber nocheinmal manuell und schreib folgendes rein:

Code: Select all

wwwrun  ALL=(ALL)       NOPASSWD: /etc/sudoers
Damit sollte des problem gelöst sein und die php datei kann mit folgenden zeilen die entsprechenden rechte für dass startsctipt setzen:

Code: Select all

$WI-path = "/srv/www/htdocs/WI/$name";

$sudoersIh = "n wwwrun    ALL=($name)     NOPASSWD: $WI-path/k-cs-$name";


$sudoersdat = "/etc/sudoers";
$dz = fopen($sudoersdat, "a");
fwrite ($dz, $sudoersIh);
fclose ($dz);
Somit können auch folgende zeile (endlich :wink: ) abgeändert werden:

Code: Select all

system("chmod 777 ./k-cs-$name");
zu
system("chown $name ./k-cs-$name");


passthru("sudo -u root ./k-cs-$name start");
zu
passthru("sudo -u $name ./k-cs-$name start");


$irframe = $irframe ."passthru("sudo -u root checkproc /usr/apps/k-cs-$name/hlds_amd && echo \"CS-Server <b>RUNNING</b>\" || echo \"CS-Server <b>NOT RUNNING</b>\" "); n";
zu
$irframe = $irframe ."passthru("sudo -u $name checkproc /usr/apps/k-cs-$name/hlds_amd && echo \"CS-Server <b>RUNNING</b>\" || echo \"CS-Server <b>NOT RUNNING</b>\" "); n";
(boar ich hasse diese zeile^^)


damit dies alles funktioniert muss natürlich auch der server unter dem $name laufen. Deshalb:
$gs_user = "root";
zu
$gs_user = "$name"; 

dann noch ein paar andere zeilen, will aber ned alle posten :P wär viel. doch bissl ZU lang ;)

Sooooo... damit sollten die ersten grundzüge geschafft sein dass des ganze ein wenig sicherer wird... obs funktioniert ist die andere frage, teste ich gleich, der qt (http://wserver2.ath.cx/WI/test/qt) wurde auch geupdatet :)

mfg dee

ich schreib glei ob des so alles funktioniert (*hoff*) ;)
d3nation
Posts: 68
Joined: 2004-11-30 14:09

Re: Basteln eines Webinterface's, externe scripts ausführen

Post by d3nation »

uiiiiiiiiiiiiii perfect. So, der testserver läuft nun als user test und es werden kaum noch befehle per root ausgeführt.

Damit hab ich des ganze schon einmal um einiges sicherer gemacht, waren noch eine bug drinnen, jedoch alles geglättet und fertig. jetzt habe ich nur noch 2 probleme zu deiner anmerkung 1) :)

1stens Ich kann die sudoers datei nicht mit fopen() öffnen, selbst wenn ich sie für wwwrun zugänglich mache (auch eben in dieser sudoers datei festgelegt)

2tens Wie kann ich dass FTP passwort festlegen?


Ich hoffe dass ihr mit helfen könnt bei den beiden punkten. Danke schoneinmal im vorraus!

dee
niklas_
Posts: 122
Joined: 2003-08-13 20:46

Re: Basteln eines Webinterface's, externe scripts ausführen

Post by niklas_ »

Beim Anlegen des Users würde ich gleich eine Gruppe mit angeben, damit wwwrun und der Account $name in eine Gruppe kommen, denn dann reicht chmod 666 der konfigurationsdatei aus, um die datei zu editieren.

etwa so:

Code: Select all

useradd -d /usr/apps/k-cs-$name -g gs -m -p $passwort
-g : gruppe zuordnen, die aber existieren muss
-m : anlegen des homedirs, falls es nicht existiert
-p : passwort

bei -p bin ich mir nicht sicher, ob man da einfach ein passwort angeben kann; die man page (man useradd) hilft mir da nicht.
niklas_
Posts: 122
Joined: 2003-08-13 20:46

Re: Basteln eines Webinterface's, externe scripts ausführen

Post by niklas_ »

die sudodatei ändern:
das wirst du als root machen müssen!?

Code: Select all

debian:~# echo "test222" >> /etc/sudoers
fügt test222 an das ende der datei an.
die frage ist nur, wie du später diese zeile wieder löschen kannst.

besonders schön wäre es ja, wenn du in die sudoers

Code: Select all

include /mein/eigene/sudoers
schreiben könntest. Die eigene sudoers würde ich einfach regelmäßig mit Hilfe der Eintrage in der Datenbank neu schreiben. Das wäre wirklich einfach!
vielleicht kannst du in diese richtung mal ein bisschen testen?

EDIT:
Ich habe etwas interessantes gefunden: es scheint wirklich zu funktionieren.

Code: Select all

#include <files/sudoers_files.cfg>
das in die sudoers und nur noch diese datei editieren.
am besten wie angesprochen später mit php + mysql erstellen lassen.
oder was du auch mal probieren kannst: diese datei dem user wwwrun geben (chown). dann kann wwwrun diese datei öffnen und editieren und sudoers fügt sie ein.
d3nation
Posts: 68
Joined: 2004-11-30 14:09

Re: Basteln eines Webinterface's, externe scripts ausführen

Post by d3nation »

ah perfect, danke! hm beim einrichten der user dient "-d" zur angabe des homeverzeichnisses, "-m" wird nicht benötigt, erzeugt für diesen zweck nur unötige dateien denke ich.

Die sudoers datei MUSS als root bearbeitet werden, ja, denn sonst könnte ja jeder x-beliebige user sich die rechte geben als root was auszuführen :) ;)

Code: Select all

#include <files/sudoers_files.cfg>
Des wäre ja schoneinmal sehr sehr gut, aber nocheinmal eine frage dazu:

ist es so richtig oder muss die raute auch mit oder so?

Code: Select all

include /srv/www/htdocs/WI/sudoers_wi
schon einmal danke, ich mach des mit dem ftp und benutzer passwort noch schnell und teste des mal. Danke :)
niklas_
Posts: 122
Joined: 2003-08-13 20:46

Re: Basteln eines Webinterface's, externe scripts ausführen

Post by niklas_ »

d3nation wrote:ah perfect, danke! hm beim einrichten der user dient "-d" zur angabe des homeverzeichnisses, "-m" wird nicht benötigt, erzeugt für diesen zweck nur unötige dateien denke ich.
hm.. über die verwendung von -d sind wir uns einig
aber auch -m ist doch praktisch, oder? -m legt das homedir von alleine an, sofern es nicht existier. das heisst du musst es manuell nicht anlegen.

so muss es heissen sagt die quelle im internet, die ich gefunden habe

Code: Select all

#include <files/sudoers_files.cfg>