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
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
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
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
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
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... | <?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 4 Kerne 8GB Ram 100GB HDD 1 Gbit/s für Minecraft Server, TS3 Miscbot, Ts3 Controlbot 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
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)
| www-data ALL = NOPASSWD: /bin/bash /home/user1/testscript.bash
|
3. /home/user1/testscript.bash erstellen
| #!/bin/bash
echo "Testeintrag" >> testfile
|
FERTIG !!! ACHTUNG: Damit kann aber jede Nutzer, der deine Seite aufruft das Script starten !!!
|
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
Anmeldungsdatum: 31. Dezember 2008
Beiträge: 4101
|
halloICKEbins schrieb: 2. /etc/sudoers bearbeiten (Der Gruppe www-data das Ausführen des Scriptes erlauben)
| 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.
|