ubuntuusers.de

Shellscript per Html website starten

Status: Ungelöst | Ubuntu-Version: Kein Ubuntu
Antworten |

inception76

Anmeldungsdatum:
16. März 2017

Beiträge: 16

Hallo,

ich möchte ein startscript über meine html Seite starten wie soll ich das ganze machen? Ich denke mal das das ganze dann über php bzw exec laufen würde oder? Hab von dem leider echt kein Plan und will jetzt nicht stunden lang neue dinge lernen da ich dafür leider keine Zeit habe. Das Interesse besteht nur fehlt mir die zeit.

Mfg,

Daniel

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13166

inception76 schrieb:

ich möchte ein startscript über meine html Seite starten wie soll ich das ganze machen?

Was meinst Du denn mit "startscript"? Was soll das Skript machen?

Ich denke mal das das ganze dann über php bzw exec laufen würde oder? Hab von dem leider echt kein Plan und will jetzt nicht stunden lang neue dinge lernen da ich dafür leider keine Zeit habe. Das Interesse besteht nur fehlt mir die zeit.

Du erwähnst da jetzt schon PHP, also eine serverseitige Komponente. Aber wie gesagt. Wir müssen erst mal verstehen, was das Ziel ist. Dann können wir Dir konkretere Hilfestellung geben.

inception76

(Themenstarter)

Anmeldungsdatum:
16. März 2017

Beiträge: 16

Ein shellscript welches einen gamserver startet. Das script besteht schon ich will nur wissen wie ich es nun ausführen lassen kann durch das drücken eines buttons auf meiner website.

inception76

(Themenstarter)

Anmeldungsdatum:
16. März 2017

Beiträge: 16

Kennt ihr gute videos wo man bisschen was über php html etc lernen kann? Wie bereits gesagt interessiert mich das sehr nur weiß ich nicht so recht wo ich anfangen soll und habe zudem wenig zeit dafür.

ChickenLipsRfun2eat Team-Icon

Anmeldungsdatum:
6. Dezember 2009

Beiträge: 12067

Das betreiben eines Servers im Internet kann man imho nicht durch ein kurzes Video lernen. Da ist viel Zeit und Lesestoff nötig. Ggf. wäre da professioneller Support angeraten.

Abgesehen davon gibt es gute Tutorials zu php im Netz, aber eher nicht als Video. Je nachdem, wie du dir das Einrichten willst, gibt es mehrere Möglichkeiten. Dazu schau dir mal exec, passthru und system an. Kannst du schon eine Programmiersprache grundlegend oder fängst du bei Null an?

Aus Sicherheitsgründen würde ich auch nicht direkt auf den Game-Server zugreifen, sondern ein separates Script für www-data erstellen, welches nur exakt die Dinge tun kann, die es wirklich können muss - und keine Benutzervariablen zulassen, wenn du nicht weißt, wie du die gegen injections sichern kannst.

apt-ghetto

Anmeldungsdatum:
3. Juni 2014

Beiträge: 2943

Man nehme: keine Zeit, keine Ahnung, Linux-Server, PHP, exec, eine öffentlich zugängliche Webseite.

Wenn das nicht in einem Fiasko endet...

Serengeti

Avatar von Serengeti

Anmeldungsdatum:
24. Februar 2008

Beiträge: 1961

Das klingt danach, als wenn der PC der den Webserver betreibt nicht der selbe PC ist der den Gameserver betreibt. Somit benötigst du eine Kommunikation zwischen den beiden Geräten. Ich hatte mal eine Variante, die regelmässig geprüft hat ob eine Textdatei auf dem Webserver vorhanden ist und dann ein script ausführt.

Sollten beide auf dem selben Gerät sein, könnte das schnell sicherheitstechnisch heikel werden. Duckduckgo

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17599

Wohnort: Berlin

Ich würde sehr davon abraten, einen Server zu betreiben, wenn der am Internet hängen soll und nicht nur im Heimnetzwerk, wenn man keine Ahnung hat.

Ahnung bekommt man, wenn man einen im Heimnetzwerk einige Zeit betrieben und viel gelesen hat. Gute Videotutorials können auch hilfreich sein.

rafi

Avatar von rafi

Anmeldungsdatum:
7. Februar 2006

Beiträge: 1050

Wohnort: Baden-Baden

Hi,

also ich hab sowas mit nem schicken PHP Zweizeiler gelöst, der oft zum Einsatz kommt wenn auf Webservern kein vollwertigen ssh geht und nur so ein eingeschränktes sftp geht...

1
2
3
4
<?php
$output = shell_exec('./MEINSKRIPT');
echo "<pre>$output</pre>";
?>

das ganze packst du in eine Datei.php und führst sie von dem Browser deiner Wahl durch ansurfen aus.

das wird vom www-data user ausgeführt. Wenn du mehr Rechte brauchst, kannst du es auch über PHP als root machen.

Ansonsten gibts auch so rootkits, die sind richtig mächtig, da hat man wie eine Console im Browser, aber davon hab ich immer die Finger gelassen, weil die Provider das nicht gerne sehen.

inception76

(Themenstarter)

Anmeldungsdatum:
16. März 2017

Beiträge: 16

Das Script besteht bereits und sieht wie folgt aus:(falls benötigt könnt ihr es gerne benutzen)

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
#!/bin/bash
BINDIR=$(dirname "$(readlink -fn "$0")")
cd "$BINDIR"
APPLICATION_NAME="Arvl Minecraft Server"
SCREEN_NAME="arvlmc"
EXECUTION_FILE="java -Xmx4096M -Xms4096M -XX:ParallelGCThreads=4 -jar craftbukkit-1.11.2.jar nogui"
EXECUTING_USER="arvl"
BINDIR=$(dirname "$(readlink -fn "$0")")
cd "$BINDIR"
case "$1" in
	start)
		if whoami | grep -q "root" && [ ${EXECUTING_USER} != "root" ]; then
			if sudo -u ${EXECUTING_USER} screen -list | grep -q ${SCREEN_NAME}; then
				echo -e "Der ${APPLICATION_NAME} läuft bereits!";
			else
				echo -e "Der ${APPLICATION_NAME} wird gestartet..."
				sudo -u ${EXECUTING_USER} screen -AdmS ${SCREEN_NAME} ${EXECUTION_FILE} &
				PID=$!
				ps -p ${PID} > /dev/null 2>&1
				if [ "$?" -ne "0" ]; then
					echo -e "Fehler beim starten von dem ${APPLICATION_NAME}!"
				fi;
			fi
		elif whoami | grep -q "${EXECUTING_USER}"; then
			if screen -list | grep -q ${SCREEN_NAME}; then
				echo -e "Der ${APPLICATION_NAME} läuft bereits!"
			else
				echo -e "Der ${APPLICATION_NAME} wird gestartet..."
				screen -admS ${SCREEN_NAME} ${EXECUTION_FILE} &
				PID=$!
				ps -p ${PID} > /dev/null 2>&1
				if [ "$?" -ne "0" ]; then
					echo -e "Fehler beim starten von dem ${APPLICATION_NAME}!"
				fi;
			fi
		else
			echo -e "$Du hast keine Berechtigung den ${APPLICATION_NAME} zu starten!"
		fi
	;;
	stop)
		if whoami | grep -q "root" && [ ${EXECUTING_USER} != "root" ]; then
			if sudo -u ${EXECUTING_USER} screen -list | grep -q ${SCREEN_NAME}; then
				echo -e "Der ${APPLICATION_NAME} wird gestoppt! Bitte warte einige Sekunden..."
				sudo -u ${EXECUTING_USER} screen -S ${SCREEN_NAME} -X stuff "save-all^M"
				sleep 3
				sudo -u ${EXECUTING_USER} screen -S ${SCREEN_NAME} -X stuff "say Server wird gestoppt in...^M"
				sleep 1
				sudo -u ${EXECUTING_USER} screen -S ${SCREEN_NAME} -X stuff "say 3^M"
				sleep 1
				sudo -u ${EXECUTING_USER} screen -S ${SCREEN_NAME} -X stuff "say 2^M"
				sleep 1
				sudo -u ${EXECUTING_USER} screen -S ${SCREEN_NAME} -X stuff "say 1^M"
				sleep 0.5
				sudo -u ${EXECUTING_USER} screen -S ${SCREEN_NAME} -X stuff "stop^M"
			else
				echo -e "$Der ${APPLICATION_NAME} läuft nicht!"
			fi
		elif whoami | grep -q "${EXECUTING_USER}"; then
			if screen -list | grep -q ${SCREEN_NAME}; then
				echo -e "Der ${APPLICATION_NAME} wird gestoppt! Bitte warte einige Sekunden..."
				screen -S ${SCREEN_NAME} -X stuff "save-all^M"
				sleep 3
				screen -S ${SCREEN_NAME} -X stuff "say Server wird gestoppt in...^M"
				sleep 1
				screen -S ${SCREEN_NAME} -X stuff "say 3^M"
				sleep 1
				screen -S ${SCREEN_NAME} -X stuff "say 2^M"
				sleep 1
				screen -S ${SCREEN_NAME} -X stuff "say 1^M"
				sleep 0.5
				screen -S ${SCREEN_NAME} -X stuff "stop^M"
			else
				echo -e "Der ${APPLICATION_NAME} läuft nicht!"
			fi
		else
			echo -e "Du hast keine Berechtigung den ${APPLICATION_NAME} zu stoppen!"
		fi
	;;
	restart)
		if whoami | grep -q "root" && [ ${EXECUTING_USER} != "root" ]; then
			if sudo -u ${EXECUTING_USER} screen -list | grep -q ${SCREEN_NAME}; then
				echo -e "Der ${APPLICATION_NAME} wird neugestartet! Bitte warte einige Sekunden..."
				sudo -u ${EXECUTING_USER} screen -S ${SCREEN_NAME} -X stuff "save-all^M"
				sleep 3
				sudo -u ${EXECUTING_USER} screen -S ${SCREEN_NAME} -X stuff "say Server wird neugestartet in...^M"
				sleep 1
				sudo -u ${EXECUTING_USER} screen -S ${SCREEN_NAME} -X stuff "say 3^M"
				sleep 1
				sudo -u ${EXECUTING_USER} screen -S ${SCREEN_NAME} -X stuff "say 2^M"
				sleep 1
				sudo -u ${EXECUTING_USER} screen -S ${SCREEN_NAME} -X stuff "say 1^M"
				sleep 0.5
				sudo -u ${EXECUTING_USER} screen -S ${SCREEN_NAME} -X stuff "stop^M"
				sleep 3
				sudo -u ${EXECUTING_USER} screen -admS ${SCREEN_NAME} ${EXECUTION_FILE} &
				PID=$!
				sleep 3
				ps -p ${PID} > /dev/null 2>&1
				if [ "$?" -ne "0" ]; then
					echo -e "Fehler beim starten von dem ${APPLICATION_NAME}!"
				fi;
			else
				echo -e "Der ${APPLICATION_NAME} läuft nicht!"
			fi
		elif whoami | grep -q "${EXECUTING_USER}"; then
			if screen -list | grep -q ${SCREEN_NAME}; then
				echo -e "Der ${APPLICATION_NAME} wird neugestartet! Bitte warte einige Sekunden..."
				screen -S ${SCREEN_NAME} -X stuff "save-all^M"
				sleep 3
				screen -S ${SCREEN_NAME} -X stuff "say Server wird neugestartet in...^M"
				sleep 1
				screen -S ${SCREEN_NAME} -X stuff "say 3^M"
				sleep 1
				screen -S ${SCREEN_NAME} -X stuff "say 2^M"
				sleep 1
				screen -S ${SCREEN_NAME} -X stuff "say 1^M"
				sleep 0.5
				screen -S ${SCREEN_NAME} -X stuff "stop^M"
				sleep 3
				screen -admS ${SCREEN_NAME} ${EXECUTION_FILE} &
				PID=$!
				sleep 3
				ps -p ${PID} > /dev/null 2>&1
				if [ "$?" -ne "0" ]; then
					echo -e "Fehler beim starten von dem ${APPLICATION_NAME}!"
				fi;
			else
				echo -e "Der ${APPLICATION_NAME} läuft nicht!"
			fi
		else
			echo -e "Du hast keine Berechtigung den ${APPLICATION_NAME} neu zu starten!"
		fi
	;;
	status)
		if whoami | grep -q "root" && [ ${EXECUTING_USER} != "root" ]; then
			if sudo -u ${EXECUTING_USER} screen -list | grep -q ${SCREEN_NAME}; then
				echo -e "Der ${APPLICATION_NAME} läuft!"
			else
				echo -e "Der ${APPLICATION_NAME} läuft nicht!"
			fi
		elif whoami | grep -q "${EXECUTING_USER}"; then
			if screen -list | grep -q ${SCREEN_NAME}; then
				echo -e "Der ${APPLICATION_NAME} läuft!"
			else
				echo -e "Der ${APPLICATION_NAME} läuft nicht!"
			fi
		else
			echo -e "Du hast keine Berechtigung den Status von dem ${APPLICATION_NAME} zu sehen!"
		fi
	;;
	console)
		if whoami | grep -q "root" && [ ${EXECUTING_USER} != "root" ]; then
			if sudo -u ${EXECUTING_USER} screen -list | grep -q ${SCREEN_NAME}; then
				sudo -u ${EXECUTING_USER} script -q -c "screen -rxS ${SCREEN_NAME}"
			else
				echo -e "Der ${APPLICATION_NAME} läuft nicht!"
			fi
		elif whoami | grep -q "${EXECUTING_USER}"; then
			if screen -list | grep -q ${SCREEN_NAME}; then
				script -q -c "screen -rxS ${SCREEN_NAME}"
			else
				echo -e "Der ${APPLICATION_NAME} läuft nicht!"
			fi
		else
			echo -e "Du hast keine Berechtigung die Console des ${APPLICATION_NAME}s zu öffnen!"
		fi
	;;
	cmd)
		if whoami | grep -q "root" && [ ${EXECUTING_USER} != "root" ]; then
			if su -c "screen -list" -s /bin/sh ${EXECUTING_USER} | grep -q ${SCREEN_NAME}; then
				echo -e "Command gesendet."
				sudo -u ${EXECUTING_USER} screen -S ${SCREEN_NAME} -X stuff "$2^M"
			else
				echo -e "Der ${APPLICATION_NAME} läuft nicht!"
			fi
		elif whoami | grep -q "${EXECUTING_USER}"; then
			if screen -list | grep -q ${SCREEN_NAME}; then
				echo -e "Command sent."
				screen -S ${SCREEN_NAME} -X stuff "$2^M"
			else
				echo -e "Der ${APPLICATION_NAME} läuft nicht!"
			fi
		else
			echo -e "Du hast keine Berechtigung die Console des ${APPLICATION_NAME}s zu öffnen!"
		fi
	;;
	backup)
		cd /home/kunden/blkt
		tar cpfz /home/backups/kunden/blkt/mcblkt_backup_"$(date +%d_%m_%y_%H_%M_%S)".tar.gz mc
		cd /var/www/html/arvlmcdl
		rm mostrecent_mcblkt_backup.tar.gz
		cd /home/kunden/blkt
		tar cpfz /var/www/html/mcwebinterface/mcmapdl/mostrecent_mcblkt_backup.tar.gz mc/world mc/world_nether mc/world_the_end
		;;
	delbackup)
		cd /home/backups/kunden/blkt
		if [ "$(ls /home/backups/kunden/blkt | wc -l)" -gt 5 ]; then
				ls -t | sed -e '1, 5d' | xargs -d '\n' rm
		fi
		;;
	lsbackups)
		echo "Folgende Backups sind verfuegbar "
		ls -t /home/backups/kunden/blkt
		;;
	help)
		case "$2" in
			start)
				echo -e "Benutze: \"${0} ${2}\" um den ${APPLICATION_NAME} zu starten."
			;;
			stop)
				echo -e "Benutze: \"${0} ${2}\" um den ${APPLICATION_NAME} zu stoppen."
			;;
			status)
				echo -e "Benutze: \"${0} ${2}\" um zu sehen ob der ${APPLICATION_NAME} online oder offline ist."
			;;
			console)
				echo -e "Benutze: \"${0} ${2}\" um die ${APPLICATION_NAME}-Console zu öffnen."
			;;
			cmd)
				echo -e "Benutze: \"${0} ${2} <Command>\" um einen command in die ${APPLICATION_NAME}-Console zu senden."
			;;
			backup)
				echo -e "Benutze: \"${0} ${2}\" um ein backup für den ${APPLICATION_NAME} zu erstellen."
			;;
			delbackup)
				echo -e "Benutze: \"${0} ${2}\" um alle bis auf die aktuellsten 5 backups des ${APPLICATION_NAME} zu löschen."
			;;
			lsbackups)
				echo -e "Benutze: \"${0} ${2}\" um alle backups des ${APPLICATION_NAME} aufzuliesten."
			;;
			*)
				echo -e "Benutze: \"${0} help <start|stop|status|console|cmd>\" für Hilfe"
		esac
	;;
	*)
		echo -e "Benutzung: ${0} {start|stop|restart|status|console|cmd|help|backup|delbackup|lsbackups}"
		exit 1
esac
exit 0

ich habe 2 vServer

  1. 4 Kerne 8GB Ram 100GB HDD 1 Gbit/s für Minecraft Server, TS3 Miscbot, Ts3 Controlbot

  2. 1 Kern 512mb Ram 20GB HDD 100 Mbit/s für Teamspeak 3 Server

soll ich die Website auf den kleinen vServer verschieben? Wegen Sicherheitslücken etc ? Meine Website ist eher unbesucht mache das ganze eher spaßeshalber. Dann brächte ich aber eine Kommunikation zwischen den 2 Servern da man über das Minecraft Webinterface das aktuelle backup usw herunterladen kann usw.

inception76

(Themenstarter)

Anmeldungsdatum:
16. März 2017

Beiträge: 16

rafi schrieb:

das ganze packst du in eine Datei.php und führst sie von dem Browser deiner Wahl durch ansurfen aus.

geht das auch durchs klicken auf einen button?

halloICKEbins

Avatar von halloICKEbins

Anmeldungsdatum:
12. September 2017

Beiträge: 226

Klar geht das mit dem Button...

Ich erkläre es mal dir mal Schrittweise...

1. PHP-Datei mit Button erstellen

2. sudeors bearbeiten

3. Shellscript erstellen


1. PHP-Datei

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
<?php
if (isset($_POST['startscript']))
{
$cmd = "sudo /bin/bash /home/user1/testscript.bash";
exec($cmd . " > /dev/null &");
}
?>

<HTML>
 <HEAD></HEAD>
 <BODY>
  <FORM action=testseite.php target="#" method=post><INPUT name='startscript' type=submit value="Script starten"></form>
 </BODY>
</HTML>

2. /etc/sudoers bearbeiten (Der Gruppe www-data das Ausführen des Scriptes erlauben)

1
www-data ALL = NOPASSWD: /bin/bash /home/user1/testscript.bash

3. /home/user1/testscript.bash erstellen

1
2
3
#!/bin/bash

echo "Testeintrag" >> testfile

FERTIG

!!! ACHTUNG: Damit kann aber jede Nutzer, der deine Seite aufruft das Script starten !!!

Dakuan

Avatar von Dakuan

Anmeldungsdatum:
2. November 2004

Beiträge: 6479

Wohnort: Hamburg

Nur mal so zur Info, eigentlich sollte (fast) jeder Server ein Script direkt starten können.

Der Server muss dazu allerdings für CGI konfiguriert werden. Normalerweise verwendet man allerdings lieber Fast-CGI und CGI ist meistens nicht konfiguriert. Ich habe das bei meinem lighttpd mal gemacht.

Das Testscript sieht so aus:

#!/bin/bash

echo "Content-type: text/plain"
echo ""
env
echo

Aufruf mit:

http://silo.lan/cgi/env.cgi

Auszug aus der Konfig des Servers:

cgi.assign      = (
        ".pl"  => "/usr/bin/perl",
        ".php" => "/usr/bin/php-cgi",
        ".py"  => "/usr/bin/python",
        ".cgi" => "/bin/bash",
        ".sh"  => "/bin/bash",
)

inception76

(Themenstarter)

Anmeldungsdatum:
16. März 2017

Beiträge: 16

halloICKEbins schrieb:

!!! ACHTUNG: Damit kann aber jede Nutzer, der deine Seite aufruft das Script starten !!!

Die Seite wird ja passwortgeschützt sein und das Verzeichnis würde man nicht aufrufen können. Wäre das ok so oder sollte ich das doch lieber auf eine andere art machen? Wäre es auch möglich das sich nicht das php script im browser öffnet sondern das ich einfach auf den button clicke und es ausgeführt wird

Developer92 Team-Icon

Avatar von Developer92

Anmeldungsdatum:
31. Dezember 2008

Beiträge: 4101

halloICKEbins schrieb:

2. /etc/sudoers bearbeiten (Der Gruppe www-data das Ausführen des Scriptes erlauben)

1
www-data ALL = NOPASSWD: /bin/bash /home/user1/testscript.bash

Tut mir leid, aber das ist sicherheitstechnisch wohl das schlimmste was man machen kann. Nicht nur, dass du damit das Skript als root ausführen kannst, nein, jeder der Zugriff auf deinen Webserver erlangt, hat damit Rootrechte. Genau das will man durch das Rechtemanagement verhindern.

Nur um das nochmal zusammenzufassen: Der einzige Teil deines Servers, der direkt mit Unbekannten kommuniziert, kann dadurch Rootrechte erlangen. Nicht einmal per SSH würde ich meinem User so Rootrechte erlangen lassen.

Antworten |