[Gelöst] XAMPP Webserver – Wie Bash-Skripts ausführen?

Debian macht sich hervorragend als Web- und Mailserver. Schau auch in den " Tipps und Tricks"-Bereich.
uname
Beiträge: 12072
Registriert: 03.06.2008 09:33:02

Re: XAMPP Webserver – Wie Bash-Skripts ausführen?

Beitrag von uname » 28.06.2016 15:13:33

Im nächsten Schritt schreibst du erst mal ein Programm:

/usr/local/sbin/restart.sh:

Code: Alles auswählen

#!/bin/bash
file="/var/www/html/restart.txt"
if [ -f "$file" ]
then
        echo "$file gefunden."
else
        echo "$file nicht gefunden."
fi
Ausführbar machen:

Code: Alles auswählen

chmod 755 /usr/local/sbin/restart.sh
Nun führst du als root aus:

Code: Alles auswählen

/usr/local/sbin/restart.sh
Je nachdem ob die Datei vorhanden ist oder nicht sollte die Ausgabe unterschiedlich sein.
Die Datei musst du noch manuell zwischendurch löschen. Lege sie aber über die Webseite entsprechend an. Teste. Lösche sie als root. Teste erneut usw.
Sollte das gehen kannst du dich wieder melden. Dann kommt der letzte Schritt.

Benutzeravatar
RobbiBlechdose
Beiträge: 20
Registriert: 23.06.2016 20:20:45

Re: XAMPP Webserver – Wie Bash-Skripts ausführen?

Beitrag von RobbiBlechdose » 28.06.2016 19:29:26

Die HTML/PHP Datei legt interessanterweise leider keine .txt an.
Falls ich den Code in eine separate .php packe (und den Fehler bei fwrite entferne, es fehlte ein String zum reinschreiben, ich habe einfach "Start" angegeben), bekomme ich bei Aufruf über den Browser in der error.log von apache2 ein Permission Denied...

thoerb
Beiträge: 1677
Registriert: 01.08.2012 15:34:53
Lizenz eigener Beiträge: MIT Lizenz

Re: XAMPP Webserver – Wie Bash-Skripts ausführen?

Beitrag von thoerb » 28.06.2016 19:47:08

RobbiBlechdose hat geschrieben:Die HTML/PHP Datei legt interessanterweise leider keine .txt an.
Falls ich den Code in eine separate .php packe (und den Fehler bei fwrite entferne, es fehlte ein String zum reinschreiben, ich habe einfach "Start" angegeben), bekomme ich bei Aufruf über den Browser in der error.log von apache2 ein Permission Denied...
Die Zeile mit dem fwrite kannst eigentlich weglassen, es soll ja nur eine leere Datei angelegt werden. Aber wenn du da was reinschreibst, stört es auch nicht.

Wenn die Datei nicht geschrieben werden kann, liegt das wohl an fehlenden Rechten ich /var/www/html. Darauf hatte ich aber schon hingewiesen.

wanne
Moderator
Beiträge: 7462
Registriert: 24.05.2010 12:39:42

Re: XAMPP Webserver – Wie Bash-Skripts ausführen?

Beitrag von wanne » 28.06.2016 21:10:53

RobbiBlechdose hat geschrieben:Tatsächlich bin ich relativ neu, was Serverbetrieb angeht. XAMPP sah halt einfach zu installieren aus, vor allem, weil ich vorher öfters Probleme mit nichtvorhandenden Dependencies hatte, die ich mir manuell aus der Online-Repo ziehen musste.
Ja einfach zu installieren und unmöglich zu warten. Du hast die zwei Sicherheitslücken gefixt, die das Ding sei Mai wieder hatte?
XMPP besteht auf ca. 40 Programmen die zum groß teil erstmals laufen. Die alle sicher zu konfigurieren und aktuell zu halten ist eine Mammutaufgabe. (Und für Leute, die die nicht mal aufzählen können garantiert unmöglich. (Wenn du weißt, welche Progamme du benötigst, lädst du dir die runter und nicht das ganze Bundel mit massenweise Müll.))
Ganz nett für Leute die mal ausprobieren und keine Ahnung haben aber auf einem Rechner in dem in irgend einer weise ein Netzwerkkabel steckt hat das nichts zu suchen.

Im Moment geht's gerade wieder aber zu Hochzeiten hatte ich auf meinem Serrver so ca. 10Anfragen/s die nur darauf aus wahren XAMPP Installationen zu übernehmen. Und das nicht ohne Grund. Die Dinger sind DIE Grundlage für Spamschleudern.
uname hat geschrieben:Du schreibst ein ordentliches Stück HTML mit PHP,
Du empfiehlst ernsthaft PHP laufen zu lassen um alle paar Wochen mal eine Datei anzulegen?

Hier das ganze, als bash script

Code: Alles auswählen

#!/bin/dash

echo "Content-type: text/plain; charset=iso-8859-1"
echo
echo "Server startet..."
touch /var/www/html/restart.txt
rot: Moderator wanne spricht, default: User wanne spricht.

uname
Beiträge: 12072
Registriert: 03.06.2008 09:33:02

Re: XAMPP Webserver – Wie Bash-Skripts ausführen?

Beitrag von uname » 29.06.2016 13:36:09

Du empfiehlst ernsthaft PHP laufen zu lassen um alle paar Wochen mal eine Datei anzulegen?
Soll doch webbasiert sein. Alternativ können wir natürlich wieder ganz oben im Thread anfangen.

Zu den Benutzerrechten. Wem gehört den /var/www/html? Poste Auszüge aus "ls -l" usw.

Benutzeravatar
RobbiBlechdose
Beiträge: 20
Registriert: 23.06.2016 20:20:45

Re: XAMPP Webserver – Wie Bash-Skripts ausführen?

Beitrag von RobbiBlechdose » 29.06.2016 16:31:58

"ls -l" sagt:

Code: Alles auswählen

insgesamt 4
drwxrwxr-x 3 root root 4096 Jun 28 18:26 html

DeletedUserReAsG

Re: XAMPP Webserver – Wie Bash-Skripts ausführen?

Beitrag von DeletedUserReAsG » 29.06.2016 17:00:05

Warum gehört das root? Gib‘s dem User, unter dem dein httpd läuft.

Benutzeravatar
RobbiBlechdose
Beiträge: 20
Registriert: 23.06.2016 20:20:45

Re: XAMPP Webserver – Wie Bash-Skripts ausführen?

Beitrag von RobbiBlechdose » 29.06.2016 17:11:09

Tut mir leid, ich bin hier echt neu. Welcher User ist der apache2 Standarduser?

DeletedUserReAsG

Re: XAMPP Webserver – Wie Bash-Skripts ausführen?

Beitrag von DeletedUserReAsG » 29.06.2016 17:23:52

Normalerweise www-data, aber da es sich hier wohl nicht um ein normales Setup, sondern um ein externes XAMPP-Paket handelt, müsstest du entweder selbst nachsehen (mit z.B. ps), in die Doku schauen oder warten, bis jemand, der’s weiß, es hier schreibt.

Benutzeravatar
RobbiBlechdose
Beiträge: 20
Registriert: 23.06.2016 20:20:45

Re: XAMPP Webserver – Wie Bash-Skripts ausführen?

Beitrag von RobbiBlechdose » 29.06.2016 17:27:24

Danke sehr.
XAMPP ist inzwischen auf Hinweise von allen deinstalliert.
ich habe apache2 wie von uname beschrieben installiert.

Benutzeravatar
RobbiBlechdose
Beiträge: 20
Registriert: 23.06.2016 20:20:45

Re: XAMPP Webserver – Wie Bash-Skripts ausführen?

Beitrag von RobbiBlechdose » 29.06.2016 17:35:22

Gut. Bei der HTML mit eigenem PHP passiert nach "chown -hR www-data /var/www" noch immer nichts, aber bei Kopie des PHP-Codes in eine eigene Datei wird das Skript gestartet. Dass ich danach "Zurück" klicken muss, damit kann ich leben.

eggy
Beiträge: 3331
Registriert: 10.05.2008 11:23:50

Re: XAMPP Webserver – Wie Bash-Skripts ausführen?

Beitrag von eggy » 29.06.2016 17:52:18

Nimm Dir mal nen paar Minuten Dich über "Dateiberechtigungen bei Linux" zu informieren ( zB auf http://debiananwenderhandbuch.de/gruppe ... echte.html ), wahrscheinlich läuft Dein Script auf der Shell halt als root ("ich darf alles") und als Script im Webserver unter www-data ("darf fast nigends was, und das ist gut so."). Jenachdem wo jetzt hingeschrieben werden soll / Dienst angehalten/gestoppt werden soll darf derjenige das oder auch nicht.

wanne
Moderator
Beiträge: 7462
Registriert: 24.05.2010 12:39:42

Re: XAMPP Webserver – Wie Bash-Skripts ausführen?

Beitrag von wanne » 29.06.2016 18:47:07

uname hat geschrieben:Soll doch webbasiert sein.
Ja und? HTML ausgeben kann jede Programmiersprache so gut wie PHP. Und Datei IO ist garantiert nicht die stärke von PHP. PHP ist auchnoch super fett schwerfällig und prädestiniert für Injection.
rot: Moderator wanne spricht, default: User wanne spricht.

thoerb
Beiträge: 1677
Registriert: 01.08.2012 15:34:53
Lizenz eigener Beiträge: MIT Lizenz

Re: XAMPP Webserver – Wie Bash-Skripts ausführen?

Beitrag von thoerb » 29.06.2016 19:11:29

RobbiBlechdose hat geschrieben:Gut. Bei der HTML mit eigenem PHP passiert nach "chown -hR www-data /var/www" noch immer nichts, aber bei Kopie des PHP-Codes in eine eigene Datei wird das Skript gestartet. Dass ich danach "Zurück" klicken muss, damit kann ich leben.
Was sagt den jetzt:

Code: Alles auswählen

ls -l /var/www/
Ich verstehe den Satz nicht so ganz, wo genau hast du was hin kopiert? Und wohin musst du zurück klicken?

Du musst die Datei auch mit der Endung *.php speichern. Nicht als html.

Benutzeravatar
RobbiBlechdose
Beiträge: 20
Registriert: 23.06.2016 20:20:45

Re: XAMPP Webserver – Wie Bash-Skripts ausführen?

Beitrag von RobbiBlechdose » 29.06.2016 19:25:23

Dein Code müsste also als .php und nicht .html gespeichert werden? Aha...
Also, ich habe den php-Code aus deiner Datei einfach in eine eigene .php gepackt, auf die die .html dann verweist (beim Button-Click). Hinterher muss ich dann natürlich im Browser "Zurück" klicken.
Die Sache ist jetzt die: Die Datei wird angelegt, und ich habe in "etc/crontab"

Code: Alles auswählen

* * * * * root /var/www/html/check_start.sh
und _stop.sh-Zeilen, die .sh-Dateien entsprechen denen von uname, mit der Abweichung, dass ich eine rm-Zeile für die .txt hinzugefügt und noch weitere Commands für java oder pkill java eingebaut habe. Nur löscht er weder die Dateien noch startet noch killt er den Server. Wenn ich die Skripte manuell ausführe, funzt das aber...

thoerb
Beiträge: 1677
Registriert: 01.08.2012 15:34:53
Lizenz eigener Beiträge: MIT Lizenz

Re: XAMPP Webserver – Wie Bash-Skripts ausführen?

Beitrag von thoerb » 29.06.2016 19:40:22

RobbiBlechdose hat geschrieben:Dein Code müsste also als .php und nicht .html gespeichert werden? Aha....
Genau du speicherst meinen Code z.B. als restart.php nach /var/www/html/. Die Zeile mit dem fwrite($file); kannst du entfernen. Und dann sollte das funktionieren. Wenn eine html-Datei php-code beinhaltet musst du die mit der Endung *.php speichern, damit das auch geparst wird.

Es wäre besser, wenn du hier mal den Code von deiner check_start.sh zeigen würdest, dann kann man dir besser helfen.

wanne
Moderator
Beiträge: 7462
Registriert: 24.05.2010 12:39:42

Re: XAMPP Webserver – Wie Bash-Skripts ausführen?

Beitrag von wanne » 30.06.2016 01:50:14

@RobbiBlechdose: Also ich finde die Idee immer noch nicht sinnvoll auf PHP umzusteigen. Nimm eine Programmiersprache, die du kennst und in der du fit bist. Und PHP ist zwar stark verbreitet aber ein Graus. Es gibt absolut keinen vernünftigen Grund sowas für ein neues Projekt zu verwenden. Nimm eine Sprache die dir liegt und verbanne den Rest wieder von deinem Rechner.

Pass das Shell-Script auf die entsprechenden Tipps an und gut ist:
* Guck dass es für www-data ausführbar ist. (chgrp www-data cgi-bin/scriptname; chmod g+x cgi-bin/scriptname)
* Guck unter welchem user der minecraft-Server läuft.
* Lasse dein Programm eine Datei anlegen.
* mache entweder einen cron-job, der unter dem passenden User für den Minecraft server die entsprechenden Aktionen ausführt.


Wenn du einigermaßen Fit in C(++) oder Haskell bist kannst du auch ein stattdessen ein passendes Programm schreiben, dass dem Minecraft User geben und ein suid-Bit dranhängen.
Solange du die Usereingaben einfach ganz ignorierst, und das Ding immer nur das gleiche macht, kann man da sicherheitstechnisch eigentlich auch nicht viel falsch machen.

Du kannst uch ein basic auth (httaccess) in das cgi-bin Verzeichnis hängen. Dann können nur authentifizierte Nutzer die entsprechenden Aktionen ausführen.
rot: Moderator wanne spricht, default: User wanne spricht.

uname
Beiträge: 12072
Registriert: 03.06.2008 09:33:02

Re: XAMPP Webserver – Wie Bash-Skripts ausführen?

Beitrag von uname » 30.06.2016 08:02:19

Hast du die Crontab mit "crontab -e" editiert? Evtl. kannst du mal einen Testeintrag machen (z.B. Beenden Apache2). Oft liegt es an den Umgebungsvariablen von root, die unter Cron anders gesetzt sind. Poste mal dein Script?

Benutzeravatar
RobbiBlechdose
Beiträge: 20
Registriert: 23.06.2016 20:20:45

Re: XAMPP Webserver – Wie Bash-Skripts ausführen?

Beitrag von RobbiBlechdose » 30.06.2016 09:38:18

Die Crontab habe ich mit "nano /etc/crontab" editiert, weil ich als root angemeldet bin (immer).
Mein Start-Skript:

Code: Alles auswählen

#!/bin/sh
file="/var/www/html/start.txt"
if [ -f "$file" ]
then
        echo "$file gefunden."
	rm /var/www/html/start.txt
	cd /root/Schreibtisch/MC_ULTRA_Mini_Server
	java -Xms128M -Xmx1024M -jar forge-1.7.10-10.13.4.1558-1.7.10-universal.jar nogui
else
        echo "$file nicht gefunden."
fi
Stopp-Skript:

Code: Alles auswählen

#!/bin/sh
file="/var/www/html/stop.txt"
if [ -f "$file" ]
then
        echo "$file gefunden."
	rm /var/www/html/stop.txt
        pkill java
else
        echo "$file nicht gefunden."
fi
@wanne Leider kann ich weder C(++) noch Haskell, sondern nur Java, Arduino und etwas Quickbasic.
Vielleicht sollte ich mal C(++) lernen...

Wo liegt denn bei standard apache2 das cgi-bin-Verzeichnis?

wanne
Moderator
Beiträge: 7462
Registriert: 24.05.2010 12:39:42

Re: XAMPP Webserver – Wie Bash-Skripts ausführen?

Beitrag von wanne » 30.06.2016 15:51:02

RobbiBlechdose hat geschrieben:@wanne Leider kann ich weder C(++) noch Haskell, sondern nur Java, Arduino und etwas Quickbasic.
Quick Basic wirst du auf nem Modernen Betriebssystem wohl nicht mehr zum laufen bringen. (Gibt wohl mit FreeBASIC einen Compiler für aktuelle Betriebssysteme...) Darf man rein Interessehalber fragen, welche Generation Minecraftserver betreibt und gleichzeitig noch Quickbasic kann?

An java-Programme kannst du leider so leicht kein SUID bit dranhängen. Gäbe allerdings die Möglichkeit mit sudo und einem Wrapperscript. Solltest du aber drauf achten, dass sudo die enviroment säubert. (CLASSPATH und so.) Würde aber bei dem Shell Script bleiben. Ich meine tut ja seinen Job. Und du kannst da genauso sudo vor das java und pkill reinhängen.

Arduinos programmiert man doch in C oder?

Ansonsten:
Der cron Job soll gerade nicht als root laufen. Dein Minecraft Server läuft (hoffentlich) auch nicht als root sondern als minecraft. Entsprechend sollte auch der Befehl als minecraft laufen.
rot: Moderator wanne spricht, default: User wanne spricht.

uname
Beiträge: 12072
Registriert: 03.06.2008 09:33:02

Re: XAMPP Webserver – Wie Bash-Skripts ausführen?

Beitrag von uname » 30.06.2016 16:08:31

Also beim PHP-Ansatz mit dem Cron als Folge braucht man weder C++ noch CGI. Das Problem sehe ich immer noch bei Cron und beim Script. Aber es ist natürlich richtig den Prozess nach Möglichkeit per Minecraft zu starten/stoppen. Nur da muss man sicherstellen, dass dieser Benutzer auch die Datei wieder löschen kann. Bei root wäre das kein Problem.

Dimejo
Beiträge: 503
Registriert: 21.07.2014 13:37:23

Re: XAMPP Webserver – Wie Bash-Skripts ausführen?

Beitrag von Dimejo » 30.06.2016 16:15:23

Wieso muss es unbedingt ein Webserver sein, um die Skripte aufzurufen? Du könntest doch auch einfach die Skripte auf den Desktop legen, und mit einem Doppelklick starten, oder?

wanne
Moderator
Beiträge: 7462
Registriert: 24.05.2010 12:39:42

Re: XAMPP Webserver – Wie Bash-Skripts ausführen?

Beitrag von wanne » 30.06.2016 16:21:09

Hier z.B. Deine Scripte angepasst mit sudo:

Code: Alles auswählen

!/bin/sh

echo "Content-type: text/plain; charset=iso-8859-1"
echo
echo "Server startet..."
#sh /root/Schreibtisch/Start_Server.sh
cd /root/Schreibtisch/MC_ULTRA_Mini_Server
sudo -u minecraft /usr/bin/java -Xms128M -Xmx1024M -jar /path/to/forge-1.7.10-10.13.4.1558-1.7.10-universal.jar nogui

Code: Alles auswählen

#!/bin/sh

echo "Content-type: text/plain"
echo
echo "Server wird heruntergefahren..."
sudo -u minecraft /usr/bin/pkill java
/etc/sudoers

Code: Alles auswählen

Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

www-data   ALL=(minecraft:minecraft) NOPASSWD: /usr/bin/java -Xms128M -Xmx1024M -jar /path/to/forge-1.7.10-10.13.4.1558-1.7.10-universal.jar nogui
www-data   ALL=(minecraft:minecraft) NOPASSWD: /usr/bin/pkill java
Blibt dass die pkill variante ziemlich dämlich ist. (Weil sie eben alle java programme und nicht nur Minecraft beendet.) Liegt aber zum großen Teil daran, dass Minecraft einfach keine PIDfiles oder so erstellt. Schöner wäre wenn man da einen systemd-Service draus baut.
Goole mal ob das einer gemacht hat. Vielleicht habe ich nacher bock das entsprechend anzupassen.
rot: Moderator wanne spricht, default: User wanne spricht.

wanne
Moderator
Beiträge: 7462
Registriert: 24.05.2010 12:39:42

Re: XAMPP Webserver – Wie Bash-Skripts ausführen?

Beitrag von wanne » 30.06.2016 16:35:58

uname hat geschrieben:Also beim PHP-Ansatz mit dem Cron als Folge braucht man weder C++ noch CGI.
Der Cron ansatz ist völlig unabhängig von der Programmiersprache.
Dafür Cron FastCGI und PHP. jede einzelne dieser Bestandteile dürft um ein deutliches vielfaches größer sein als CGI.

Hier mal die größen:

fastCGI-PHP: 8940kiB
fastCGI: 279kiB
php5: 1312+818+12540=14670kiB
cron: 300kiB

CGI ist eh immer im Apache aber hier eine alternative Implementierung
speedyCGI: 71kiB
Noch fragen was bloat ist?
rot: Moderator wanne spricht, default: User wanne spricht.

wanne
Moderator
Beiträge: 7462
Registriert: 24.05.2010 12:39:42

Re: XAMPP Webserver – Wie Bash-Skripts ausführen?

Beitrag von wanne » 30.06.2016 17:36:10

Hier das ganze als Systemd-Service:

Datei /etc/systemd/system/minecraft.service anlegen:

Code: Alles auswählen

[Unit]
Description=Minecraft service

[Service]
WorkingDirectory=/home/minecraft/MC_ULTRA_Mini_Server
ExecStart=/usr/bin/java -Xms128M -Xmx1024M -jar /home/minecraft/MC_ULTRA_Mini_Server/forge-1.7.10-10.13.4.1558-1.7.10-universal.jar nogui
User=minecraft

[Install]
WantedBy=multi-user.target
Danach einmalig das ausfüheren

Code: Alles auswählen

adduser minecraft
mv /root/Schreibtisch/MC_ULTRA_Mini_Server /home/minecraft/
chown -R minecraft:minecraft /home/minecraft/
systemctl daemon-reload
Minecraft server beenden.
Ab jetzt startest du deinen Minecraft server mit

Code: Alles auswählen

systemctl start minecraft
Und beendest ihn über

Code: Alles auswählen

systemctl stop minecraft
Vorteil dabei mit

Code: Alles auswählen

systemctl status minecraft
Kannst du abfragen was der denn gerade so macht.


Die scripte sehen dann so aus

Code: Alles auswählen

echo "Content-type: text/plain"
echo
echo "Server wird heruntergefahren..."
sudo /bin/systemctl stop minecraft

Code: Alles auswählen

echo "Content-type: text/plain"
echo
echo "Server wird heruntergefahren..."
sudo /bin/systemctl start minecraft
Und ganz netter Zusatz:

Code: Alles auswählen

echo "Content-type: text/plain"
echo
sudo /bin/systemctl status -l minecraft
Gibt infos über den aktuellen Minecraft server aus.

visudo:

Code: Alles auswählen

Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"


www-data   ALL=(root:root) NOPASSWD: /bin/systemctl start minecraft
www-data   ALL=(root:root) NOPASSWD: /bin/systemctl stop minecraft
www-data   ALL=(root:root) NOPASSWD: /bin/systemctl status -l minecraft
Speichern uns schließen.

Damit ist dein minecraft zeug auch mal ein bisschen aufgeräumt.
rot: Moderator wanne spricht, default: User wanne spricht.

Antworten