Basteln eines Webinterface's, externe scripts ausführen

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

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

Post by d3nation »

hm nene bei suse 9.1 wird alleine durch die angabe von -d /usr/apps/--
schon des homeverzeichnis angegeben ;)
niklas_
Posts: 122
Joined: 2003-08-13 20:46
 

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

Post by niklas_ »

ich rede von anlegen im sinne von erstellen.
defakto machst du das mit einem befehl einige zeilen vorher.

-d definiert ein homeverzeichnis,welches aber vorhanden sein muss
-m legt dieses an; erstelllt es (mkdir..)
d3nation
Posts: 68
Joined: 2004-11-30 14:09
Contact:
 

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

Post by d3nation »

achsoo, joa now got it. Sry :)

ich befass mich jezt damm mal mit mySql, hab da schonmal was gemacht ist aber LANG her :S

kennst du dich damit aus?
niklas_
Posts: 122
Joined: 2003-08-13 20:46
 

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

Post by niklas_ »

die qt datei ist immer die aktuelle?


schön, dass es soweit funktioniert. das ganze ist noch ein wenig ungeordnet muss ich sagen.
von der struktur her würde ich es so machen, wie man es auf der shellebene macht:
1) Unixuser anlegen
2) hlds dir verschieben
3) serverconfig
4) metamod plugin.ini
5) startscript

was mir noch aufgefallen ist:

Code: Select all

$startscript = "k-cs-$name";
$dz = fopen($startscript, "w");
fwrite ($dz, $start);
fclose ($dz);


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

system("rm move.inc");

passthru("sudo -u $name ./k-cs-$name start");
Das Startscript liegt im Verzeichnis von dem installierenden (qt datei) Script, richtig?
Wieso verschiebst du es nicht nach /usr/apps/ ?
Nochwas: Du führst das Script als $name aus (sudo)! Deshalb brauchst du im Script selbst kein su $name.....
Mach das Startscript doch variabel mit Ã?bergabe von Prametern
startscript start/stop "+maxplayers 2 +port 293...."
Vorteil: Man kann später Startmap und Maxplayers anpassen!
Um später auch andere Spiele zu unterstützen würde ich folgene Ã?nderung in Sachen Dateistruktur machen:
/usr/apps/gs/ als basis verzeichnis
/usr/apps/gs/$name/ als Startverzeichnis für die Kundendaten
/usr/apps/gs/$name/cstrike/ -> verzeichnis der cs serverdateien
/usr/apps/gs/$name/startscript -> startscript
alternativ hier den namen in "cstrike" für das startscript ändern (also in den namen des spielverzeichnisses)
So kann man nämlich in eine Datenbank den Namen des Verzeichnisses für das Spiel Cstrike eingeben + Namen des Startscriptes.


MySQL kann ich, ja :)

Code: Select all

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

$sudoersdat = "/etc/sudoers";
$dz = fopen($sudoersdat, "a");
fwrite ($dz, $sudoersIh);
fclose ($dz);
und ds funktioniert? Ich dachte genau das geht eben nicht!
moskito
Posts: 8
Joined: 2004-04-18 08:11
 

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

Post by moskito »

Hallo erstmal...

mal ne andere Frage, hast Du etwa auf jedem Server auch noch Apache laufen ??

Also ich vermiete auch Server und hab auf jedem Rechner nur die Gameserver laufen.
Ich habe auf einem Server das Webinterface laufen und führe Scripts über ssh aus.
Der Apache User steht in der authorized_user der einzelnen Gameserveruser.
So kann ich auch die configs einlesen etc.

Neue Server werden auf einen klick hin installiert.
Reinstall etc, für alles gibt es scripts die im skel Verzeichnis liegen und bei der ersten Einrichtung direkt mitkopiert werden.

Plugins installieren und vieles mehr.

Wieviel Server hast Du denn schon ?
niklas_
Posts: 122
Joined: 2003-08-13 20:46
 

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

Post by niklas_ »

Moskito wrote:Hallo erstmal...

mal ne andere Frage, hast Du etwa auf jedem Server auch noch Apache laufen ??

Also ich vermiete auch Server und hab auf jedem Rechner nur die Gameserver laufen.
Ich habe auf einem Server das Webinterface laufen und führe Scripts über ssh aus.
Der Apache User steht in der authorized_user der einzelnen Gameserveruser.
So kann ich auch die configs einlesen etc.

Neue Server werden auf einen klick hin installiert.
Reinstall etc, für alles gibt es scripts die im skel Verzeichnis liegen und bei der ersten Einrichtung direkt mitkopiert werden.

Plugins installieren und vieles mehr.

Wieviel Server hast Du denn schon ?
ganz genau. das system - so wie es im moment läuft - benötigt auf jedem server apache damit es funktioniert.
niklas_
Posts: 122
Joined: 2003-08-13 20:46
 

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

Post by niklas_ »

hast du ein wenig weiterprobiert? wie weit bist du?
d3nation
Posts: 68
Joined: 2004-11-30 14:09
Contact:
 

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

Post by d3nation »

ich bin gerade am rumprobieren mit mySql, hatte probleme mit der installation, aber hat sich schon :)

hatte in den letzen tage nicht so viel zeit leider :( aber die woche gehts wieder, ich bastel gerade rum dass der des in die richtigen zeilen schreibt und wieder lesen kann...

bis jetzt funktioniert des nicht so ganz, ich weis leider nicht warum.

kann ich bei mysql_connect eigentlich auch als host wserver2.ath.cx angeben oder MUSS ich ip oder so?

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

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

Post by niklas_ »

Das ist abhängig von der MySQL Konfiguration. Standard ist: 'localhost', was also auch bedeutet, dass du nur vom Server direkt connecten kannst.
Das ganze kann man aber auch umstellen, wenn man möchte.


Machst du das jetzt mit #include <eigene/sudoers.conf> ? Klappt das?
d3nation
Posts: 68
Joined: 2004-11-30 14:09
Contact:
 

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

Post by d3nation »

hm, ne ich lass mysql nicht auf dem server local laufen, sondern auf "wserver1.ath.cx", des WI zum testen liegt atm auf wserver2.ath.cx ...wäre viel zu umständlich für jeden server mysql zu installieren und einzurichten und so weiter. Auf diesen wserver1.ath.cx habe ich auch meinen mail-/ftp/ts/ server und webseiten liegen.

Code: Select all

#include <eigene/sudoers.conf> 
Funktioniert leider so NICHT. Kannst du mir die quelle zeigen wo du des her hast? Wenn ichs GENAU so eintrage nur die pfadangabe ändere geschieht gar nichts. Wenn ich die # am anfang weglasse, sagt er mir fehler in zeile...

Ich kann mir auch nicht vorstellen dass ich des mit # reinschreiben muss und des funktioniert, schlieslich sind auch in der sudoers datei schon kommentare die mit # am anfang gekennzeichnet worden sind.

Mit mysql komm ich leider immer noch nicht so ganz zurecht aber wird sich zeigen ob ich nicht einfach phpMyAdmin dafür hernehme (oder SqlMyAdmin?!)
niklas_
Posts: 122
Joined: 2003-08-13 20:46
 

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

Post by niklas_ »

Dann musst du in der MySQL Datenbank von wserver1 wserver2.ath.cx als Server eintragen, von dem aus Verbindungen hergestellt werden dürfen.

Laut der Quelle im Internet (Adresse nicht mehr bekannt) soll es gehen:

Code: Select all

#INCLUDE /etc/sudoers.own.config
Es ist ja ein #INCLUDE und kein #[LEERZEICHEN]INCLUDE...vielleicht liegt es daran?
Wem gehört diese Datei? Wem hast du sie mittels chown zugeteilt?
Was steht darin und wie trägst du es ein? Was trägst du ein?


phpMyAdmin ist ein Verwaltungstool für eine MySQL Datenbank. Nicht aber kann man es für wirklich für ein Webinterface benutzen, weil du ja nicht gleiczeitig anderen Code ausführen kannst.....also unsinnig!
Wo liegt das Problem? Schick mir den Code, der zb. eine Fehlermeldung gibt und ich schaue kurz ob ich den Fehler finde.
d3nation
Posts: 68
Joined: 2004-11-30 14:09
Contact:
 

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

Post by d3nation »

Wegen dem include:

die zu includirende datei heist "sudo-dat.cfg" und liegt in src/www/htdocs/WI/ oder so. Ich schreib des ohne leerzeichen und die datei wird von php bearbeitet, spriche neue sachen reingeschrieben, dies geschieht folgendermaßen:

- sudo macht die datei 777
- php bearbeitet die datei
- sudo macht die datei chown root

so sollte des immer funktionieren, in der datei stehts auch richtig drinnen da bin ich mir 100% sicher. Ich vermute dass das leider nicht funktioniert und ich mir was anderes einfallen lassen muss, z.b. die sudoers datei einfach gleich per sudo für wwwrun zugänglich zu machen.. sicherheitsrisiko :(
niklas_
Posts: 122
Joined: 2003-08-13 20:46
 

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

Post by niklas_ »

warum so kompliziert
mach folgenden versuch
trag in sudoers ein, dass wwwrun ein script (chmod normal + chown testuser) von testuser ausführen darf. dieses script schreibt einfach in irgendeine datei 'test' rein -> zb. via bash scripting: echo "test" > testdatei
führ diese datei via browser aus. solllte klappen, das hast du ja schonmal versucht.
als nächstes kopierst du diese zeile in deine sudoers-dat.cfg ein und fügst #INCLUDE /path/sudoers-dat.cfg in die sudoers ein. anschließend nochmal script ausführen von oben. dann siehst du obs klappt.
niklas_
Posts: 122
Joined: 2003-08-13 20:46
 

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

Post by niklas_ »

Hast du es mal so probiert?
Ich habe noch eine Alternative gefunden.
d3nation
Posts: 68
Joined: 2004-11-30 14:09
Contact:
 

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

Post by d3nation »

ne sry des mit sudo bzw. des includieren klappt leider nicht so. :( oh dass wäre echt cool, poste mal waste gefunden hast :)

hatte die woche leider auch sehr wenig zeit, tut mir leid, privater stress...

denke mal die woche werde ich (endlich) wieder bisschen weitermachen können :)
svenk
Posts: 36
Joined: 2003-03-12 09:19
 

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

Post by svenk »

Wieso speicherst du nciht alles in einer art "todo" sql tabelle. So hab cih das auch laufen. ein zentrales interface mit allen relevanten daten usw.. dann setze ich zb den wert startserver auf 1 mit der server id. auf den ganzen kisten rennt dann jeweils ein kleines script was über einen ssh tunnel die datenbank abfragt und schaut ob was zutun ist. wenn ja macht es das. ( rennt als root ) start befehl kanste dann per screen machen und unterm anderen user.

Dann braucht man auch nciht auf jeder kiste wo die kunden sind den apache laufen lassen. sondern nur perl oder halt php.

Und man hat die verwaltung zentral.

Nur ein vorschlag :)
niklas_
Posts: 122
Joined: 2003-08-13 20:46
 

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

Post by niklas_ »

d3nation wrote:ne sry des mit sudo bzw. des includieren klappt leider nicht so. :( oh dass wäre echt cool, poste mal waste gefunden hast :)

hatte die woche leider auch sehr wenig zeit, tut mir leid, privater stress...

denke mal die woche werde ich (endlich) wieder bisschen weitermachen können :)
Alles klar. Problem kannst du umgehen, indem du nicht mit einem User in der suoers sondern mit einer Gruppe arbeitest.
Erlaube einer Gruppe, ein bestimmtes Script auszuführen und weise jedem neuen User diese Gruppe zu. Dann klappt es ohne Probleme!
SvenK wrote:Wieso speicherst du nciht alles in einer art "todo" sql tabelle. So hab cih das auch laufen. ein zentrales interface mit allen relevanten daten usw.. dann setze ich zb den wert startserver auf 1 mit der server id. auf den ganzen kisten rennt dann jeweils ein kleines script was über einen ssh tunnel die datenbank abfragt und schaut ob was zutun ist. wenn ja macht es das. ( rennt als root ) start befehl kanste dann per screen machen und unterm anderen user.

Dann braucht man auch nciht auf jeder kiste wo die kunden sind den apache laufen lassen. sondern nur perl oder halt php.

Und man hat die verwaltung zentral.

Nur ein vorschlag Smile
Ist möglich. Problem: Eine Verzögerung von x Minuten. Die Variante mit sudo erlaubt eine Realtime-Ausführung. Ein weiteres Problem dass daraus resultiert: Was passiert, wenn 2 mal das Cronscript (welches alle x Minuten ausgeführt wird) gestartet wird? Führt meiner Meinung nach unweigerlich zu "Guddelmuddel".

Des weiteren soll mit sudoers die Anzahl der mit 'root' gestarteten Befehle minimiert werden, um kein Sicherheitsrisiko darzustellen.
Auf all deinen Server läuft das Script als root und bietet eine Angriffsfläche!

Ausserdem wird es Problematisch eine Browserbasierende Editierung der Konfigurationsdateien zu ermöglichen, oder? Wie kommst du vom zentralen Server an die Konfigurationsdatei von Server XY?

Wie funktioniert der ssh tunnel?


Gruß NIklas
d3nation
Posts: 68
Joined: 2004-11-30 14:09
Contact:
 

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

Post by d3nation »

Hi zusammen,

sry dass ich atm nicht so aktiv bin, ich lieg mit einer magenschleimhautentzündung im bett und versuch meine bananen runterzuwürgen ;)

http://wserver2.ath.cx/WI/rootforum/ ich hab was zum uploaden von maps gebasteld, das formular nimmt nur .zip oder .bsp dateien an (cs 1.6 map formate..) nun erkennt das formular auch ob es .zip oder .bsp ist, und ladet es ins jeweils entsprechende verzeichniss, .zip dateien werden extrahiert. Zum erkennen der endung da hatte ich einige probleme, habs einfach so gelöst:

Code: Select all

$endung = substr($_FILES['Datei']['name'], -3, 3);
und anschliesend einfach mit einer If-abfrage... siehe hier:

Code: Select all

if ($endung == "bsp") {
$Upload = "$path/cstrike/maps/$Datei_name";
copy ($Datei,$Upload);
echo "<H1>$Datei_name wurde hochgeladen.</H1>";
}
if ($endung == "zip") {
$Upload = "$path/cstrike/$Datei_name";
copy ($Datei,$Upload);
system("unzip $path/cstrike/$Datei_name -d $path/cstrike/");
echo "<H1>$Datei_name wurde hochgeladen und entpackt.</H1>";
}
if ($endung == "zip") {
echo "Die datei liegt im .zip Format vor!";
} elseif ($endung == "bsp") {
echo "Die datei liegt im .bsp Format vor!";
}
und letzendes natürlich noch (fals nicht .zip oder .bsp ist)

Code: Select all

 else {
echo "Die datei MUSS im .bsp oder .zip Format vorliegen";
}
auch die eine maximale größe ist festgelegt.

______
Ich sehe keine Probleme damit auf jedem server apache laufen zu lassen, des verursacht ja keine oder kaum performance-einschnitte, benötigt ja keinen cpu oder speicher (so gut wie keinen...)

Ein nachteil hat es aber: wenn alle webinterface's geändert werden müssen, muss ich auf jeden server extra connecten um die datein zu ersetzen... viel. aber auch ganz am ende einenen ssh tunnel oder so aufbauen oder so.. mal sehn.
Alles klar. Problem kannst du umgehen, indem du nicht mit einem User in der suoers sondern mit einer Gruppe arbeitest.
Erlaube einer Gruppe, ein bestimmtes Script auszuführen und weise jedem neuen User diese Gruppe zu. Dann klappt es ohne Probleme!
Gute idee!
Werd ich ausprobieren, hört sich aber so an als wie wenn es klappt ;)



Ok wegen mysql: ich bekomme immer die meldung:

Code: Select all

Warning: mysql_connect(): Lost connection to MySQL server during query in /srv/www/htdocs/WI/test/db/test.php on line 8

Fatal error: Call to undefined function: mysql_create_db() in /srv/www/htdocs/WI/test/db/test.php on line 11
und dass bei folgendem QT:

Code: Select all

<?php

$Host = "213.239.207.11";
$Name = "wi";
$Kennwort = "wer*i*";

$sql = mysql_connect($Host,$Name,$Kennwort);

$dbname = "test";
mysql_create_db($dbname,$sql);
mysql_select_db($dbname);

$create = "CREATE TABLE test (name VARCHAR(30), email VARCHAR(30), passwort VARCHAR(30)";
mysql_query($create, $sql);

$insert = "INSERT INTO test (name, email, passwort) values ('dee', 'josef@werbinek.net', 'wer*i*')";
mysql_quary($insert, $sql);
echo "...done<br><br><br>";

$sel = mysql_query("SELECT * FROM test");
$Reihen = mysql_num_rows($sel);
echo "Anzahl der Reihen in <i>personen</i>: $Reihen.<BR>";
while ($datensatz = mysql_fetch_row($sel)){;
foreach ($datensatz as $feld) {
echo "$feld<br>";
}
echo "<br>";
}
mysql_close($sql);
?>
hehe sry dass ich meinen ganzen beitrag so zuspamme aber ist viel. leichter die lösung des problemes zu finden...
Hier noch ein screenshot von phpmyadmin: http://wserver2.ath.cx/sql.jpg ich hoff ihr könnt mir weiterhelfen :)
thx!





@SvenK: es stimmt, es hat den Vorteil dass man eine administrative oberfläche hat, ich muss jedoch niklas_ zustimmen, da die kunden ja in "realtime" arbeiten können sollen. Auch ist die gefahr da, dass wenn der "verwaltungsserver" ausfällt oder ähnliches geht nichts mehr und es hagelt an fehlermeldungen da die einzelnen server nicht nach x mins. überprüfen können ob es was zu tun gibt. nicht böse gemeint :)


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

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

Post by niklas_ »

Code: Select all

<?php

$Host = "213.239.207.11";
$Name = "wi";
$Kennwort = "wer*i*";

$sql = mysql_connect($Host,$Name,$Kennwort);

$dbname = "test";
# die datenbank ist doch schon erstellt, also nicht bei jedem aufruf neu erstellen
#mysql_create_db($dbname,$sql);
mysql_select_db($dbname);

# das anlegen der testtabelle auch einmalig über phpmyadmin 
$create = "CREATE TABLE test (name VARCHAR(30), email VARCHAR(30), passwort VARCHAR(30)";
mysql_query($create, $sql);

$insert = "INSERT INTO test (name, email, passwort) values ('dee', 'josef@werbinek.net', 'wer*i*')";
mysql_quary($insert, $sql);
echo "...done<br><br><br>";

$sel = mysql_query("SELECT * FROM test");
$Reihen = mysql_num_rows($sel);
echo "Anzahl der Reihen in <i>personen</i>: $Reihen.<BR>";
while ($datensatz = mysql_fetch_row($sel)){;
foreach ($datensatz as $feld) {
echo "$feld<br>";
}
echo "<br>";
}
mysql_close($sql);
?> 
sonst schauen die befehle gut aus
d3nation
Posts: 68
Joined: 2004-11-30 14:09
Contact:
 

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

Post by d3nation »

ach verdammt :D ich idiot (#mysql_create_db($dbname,$sql);
) vielen dank, werd nacher mal schaun, poste so gegen 5 wieder wenn ich zu hause bin. Danke, bis dann
d3nation
Posts: 68
Joined: 2004-11-30 14:09
Contact:
 

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

Post by d3nation »

:S er sagt mir allerdings immer noch

Code: Select all

Warning: mysql_connect(): Lost connection to MySQL server during query in /srv/www/htdocs/WI/test/db/test.php on line 8

Fatal error: Call to undefined function: mysql_create_db() in /srv/www/htdocs/WI/test/db/test.php on line 11
Muss doch was mit der verbindung sein dass sie nicht erlaubt ist oder so

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

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

Post by niklas_ »

stell mal im phpmyadmin ein, dass die verbindungen von überall erlaubt sind und gibt also keine ip ein
d3nation
Posts: 68
Joined: 2004-11-30 14:09
Contact:
 

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

Post by d3nation »

ok geht :)

ne andere frage an alle:

SCREEN

ist es möglich zu einem "Detached screen" befehle zu senden?

wäre sehr nutzvoll


thx
Roger Wilco
Posts: 5923
Joined: 2004-05-23 12:53
 

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

Post by Roger Wilco »

d3nation wrote:ist es möglich zu einem "Detached screen" befehle zu senden?

Code: Select all

$ screen --help|grep Execute
-X            Execute <cmd> as a screen command in the specified session.
d3nation
Posts: 68
Joined: 2004-11-30 14:09
Contact:
 

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

Post by d3nation »

tja danke für die antwort aber ich komm damit leider gar ned zurecht..

man screen sagt mir:
SYNOPSIS
screen [ -options ] [ cmd [ args ] ]


...

-X Send the specified command to a running screen ses�­
sion. You can use the -d or -r option to tell screen
to look only for attached or detached screen ses�­
sions. Note that this command doesn't work if the
session is password protected.

...
Aber es will und will nicht funktionieren. Was mache ich falsch?

Code: Select all

screen -X ls 2853.pts-1.linux
Post Reply