[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.
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.

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 19:32:01

@wanne: Danke dafür! Kudos!
Der Service funzt schon mal.
Sind die Skripte die .sh-Skripte die vom Cronjob ausgeführt werden?
Und visudo gibt mir immer Fehler bei deinen Zeilen...

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 19:50:47

RobbiBlechdose hat geschrieben:Sind die Skripte die .sh-Skripte die vom Cronjob ausgeführt werden?
Dann könntest du das sudo weglassen. Ich finde es so mit sudo deutlich schöner, weil es dann eben instantan passiert.
Das cron script brauchst du dann nicht mehr.
RobbiBlechdose hat geschrieben:Und visudo gibt mir immer Fehler bei deinen Zeilen...
Kannst du mal sagen, in welcher Zeile? Ich habe mich eigentlich angestrengt. Sehe keinen Fehler in der Syntax. Aber die sudoers-Syntax ist IMHO auch absolut unintuitiv.
rot: Moderator wanne spricht, default: User wanne spricht.

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 19:54:49

Interessanterweise sind die Fehler in allen Zeilen...
Werden die .sh-Skripte dann direkt von PHP ohne cron gestartet?

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 19:55:35

Halt habe den Fehler gefunden. sudo will (aus guten Gründen) absolute Pfade.

Habe das korrigiert.

ACHTUNG: Auch die cgi-bin-scripte müssen (glaube ich) entsprechend angepasst werden. Habe auch das gemacht.
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 20:00:20

RobbiBlechdose hat geschrieben:Werden die .sh-Skripte dann direkt von PHP ohne cron gestartet?
Die sh scripte waren nicht als PHP-Scripte gedacht, sondern wie ursprünglich einfach für in den cgi-bin Ordner.
php wird dann nicht weiter benötigt (und kann deinstalliert werden.)
Wenn du schöne Webseiten haben willst, kannst du die auch einfach (X)HTML ausgeben lassen dn Content-type musst du dann entsprechend von text/plain nach application/xhtml+xml bzw. text/html ändern.
Ist aber nur eine schönheitssache. Würde ich mich an deiner stelle wenn überhaupt später drum kümmern.
rot: Moderator wanne spricht, default: User wanne spricht.

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

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

Beitrag von RobbiBlechdose » 01.07.2016 17:18:17

Vielen Dank!
Nun funktioniert alles!
:D

Antworten