hi,
ich wollte mir ein webinterface in php schreiben für bouncer, gameserver etc neustarten zu können ... aber da jeder bouncer als anderer user läuft kann ich das nicht machen weil der apache keine rechte dafür hat.. wie kann ich das am besten machen ?
das ich als user : www-data genug rechte hab um andere prozesse zu killen und neuzustarten.. am idealsten wären natürlich root rechte...
thx im vorraus..
mfg
mc
apache + php +rechte
Eine Möglichkeit...
Schreib ein Script in /usr/local/sbin (shellscript, Perl, whatever), dass die gewünschten Veränderungen vornimmt.
Dieses Script läuft mit ROOT-Rechten, darf es also alles.
Editiere die Datei /etc/sudoers, am besten mit visudo.
Trage hier z.B. ein:
Das heißt, die Mitglieder der Gruppe www-data (sollte der Apache ja sein) dürfen per Kommando sudo (führe einen Befehl mit Root-Rechten aus) den Befehl /usr/local/sbin/DeinScriptName ausführen.
In dem PHP-Script kommt dann entsprechend eine Zeile hinzu:
(siehe auch http://www.php.net)
$output ist ein Array, das die Ausgabe Deines Skripts enthält, $ret enthält den Rückgabe-Code - i.d.R 0 für alles OK.
So kann der Apache Kommandos ausführen, die Root-Rechte benötogen, ohne das Risiko einzugehen, dass er alles im System darf.
Gruss
Sven
Dieses Script läuft mit ROOT-Rechten, darf es also alles.
Editiere die Datei /etc/sudoers, am besten mit visudo.
Trage hier z.B. ein:
(siehe auch http://www.fibel.org/linux/node243.html)%www-data localhost=/usr/local/sbin/DeinSkriptName
Das heißt, die Mitglieder der Gruppe www-data (sollte der Apache ja sein) dürfen per Kommando sudo (führe einen Befehl mit Root-Rechten aus) den Befehl /usr/local/sbin/DeinScriptName ausführen.
In dem PHP-Script kommt dann entsprechend eine Zeile hinzu:
Code: Alles auswählen
exec ("sudo /usr/local/sbin/DeinSkriptName", $output, $ret);
$output ist ein Array, das die Ausgabe Deines Skripts enthält, $ret enthält den Rückgabe-Code - i.d.R 0 für alles OK.
So kann der Apache Kommandos ausführen, die Root-Rechte benötogen, ohne das Risiko einzugehen, dass er alles im System darf.
Gruss
Sven
hi
thx erstma.. an sowas wäre ich bestimmt erst in 2 jahren gekommen )
wenn ich in der console bin und es ausführen will kommt das hier :
welches pw will der von mir ????
mfg
mc
thx erstma.. an sowas wäre ich bestimmt erst in 2 jahren gekommen )
wenn ich in der console bin und es ausführen will kommt das hier :
Code: Alles auswählen
darula:/usr/local/sbin$ sudo /usr/local/sbin/bncupgrade.sh
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these two things:
#1) Respect the privacy of others.
#2) Think before you type.
Password:
mfg
mc
password...
der will bestimmt das Passwort von dem aufrufenden Benutzer.
In diesem Falle wäre es wohl sinnvoll, den Aufruf ohne Passwort zu ermöglichen. Das ist immer noch besser, als das PW in PHP-Scripts zu hinterlegen.
/etc/sudoers
ist das gleiche, was Du schon hast. Jetzt sind nur die Aliase hinzugekommen und die Einstellung, dass kein Passwort verlangt wird.
Gruss
Sven
In diesem Falle wäre es wohl sinnvoll, den Aufruf ohne Passwort zu ermöglichen. Das ist immer noch besser, als das PW in PHP-Scripts zu hinterlegen.
/etc/sudoers
Code: Alles auswählen
# sudoers file.
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the man page for details on how to write a sudoers file.
#
# Host alias specification
# User alias specification
User_Alias WWW = www-data
# Cmnd alias specification
Cmnd_Alias BNDUPGRADE = /usr/local/sbin/bncupgrade.sh
# User privilege specification
root ALL=(ALL) ALL
WWW ALL=NOPASSWD: BNDUPGRADE
Gruss
Sven