ubuntuusers.de

Mit PHP anderes PHP-Skript mit sudo aufrufen

Status: Ungelöst | Ubuntu-Version: Ubuntu 14.04 (Trusty Tahr)
Antworten |

samtux

Anmeldungsdatum:
25. Dezember 2012

Beiträge: 172

Hallo.
Ich entwickle mir gerade ein eigenes Interface, dass eigene Konfigurationen auf einem Asterisk durchführt.
Dazu muss der Asterisk über die selbst geschriebene Weboberfläche neu gestartet werden. Und dazu braucht man root-Rechte.
Auf folgendem Weg habe ich probiert, das Problem zu lösen:

1. Skript wird über Weboberfläche aufgerufen. Dieses startet dann das eigentliche Skript:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
<?php
require_once 'config.php';

$cmd = "sudo php5 ".basedir."sipconfEinrichten.php";
$result = shell_exec("$cmd");

if($result == false){
	echo "FEHLER BEI AUSF&Uuml;HRUNG!";
}else{
	echo $result;
}

2. Das eigentliche Skript:

 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
<?php
require_once 'config.php';


$sip = "; hier etwas Inhalt für die sip.conf...
 
 ";

$result = $mysqli->query("SELECT nummer FROM telefone");
while($row = $result->fetch_object()){
	$sip = $sip . "[".$row->nummer."]
permit=192.168.1.0/255.255.255.0
type=friend
context=phones
host=dynamic
secret=PASSWORT
 
 ";
}
$result->close();

//sip.conf schreiben
file_put_contents("/etc/asterisk/sip.conf", $sip);

//asterisk: sip reload
$cmd = "asterisk -rx \"sip reload\"";
system("$cmd");

Damit der sudo-Aufruf möglich ist, habe ich die sudoers mit visudo bearbeitet und dabei folgende Zeile eingefügt:

www-data ALL=NOPASSWD: /var/www/html/telefonanlage/sipconfEinrichten.php

Wenn ich jetzt die 1. Datei über die Weboberfläche aufrufe, erhalte ich "FEHLER BEI DER AUSFÜHRUNG". Wenn ich ein anderes Skript ohne root-Rechte und ohne sudo aufrufe, funktioniert es.
Das Problem ist also der sudo-Aufruf.

Was muss ich noch machen, damit der Aufruf funktioniert?

Der Sicherheitsrisiken der root-Rechte bin ich mir bewusst. Der Zugriff auf die Weboberfläche und generell auf das Netzwerk über das die Oberfläche erreichbar ist, ist sehr abgeschottet.

ChickenLipsRfun2eat Team-Icon

Anmeldungsdatum:
6. Dezember 2009

Beiträge: 12067

Zum Thema Sicherheit enthalte ich mich mal, da du dir dessen ja nach eigener Angabe bewusst bist ☺

Frage: Hast du es schon mit absoluten Pfadangaben versucht? Also anstatt

 ls -lha /mein/Verzeichnis 

ein

 /bin/ls -lha /mein/Verzeichnis 

sebix Team-Icon

Moderator, Webteam

Anmeldungsdatum:
14. April 2009

Beiträge: 5582

Nach /var/log/auth.log loggt auch bei Problemen, Verstößen etc auch sudo.

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

samtux schrieb:

Wenn ich jetzt die 1. Datei über die Weboberfläche aufrufe, erhalte ich "FEHLER BEI DER AUSFÜHRUNG". Wenn ich ein anderes Skript ohne root-Rechte und ohne sudo aufrufe, funktioniert es.
Das Problem ist also der sudo-Aufruf.

Du rufst Dein Root-Skript aber immer noch mit sudo davor auf, oder ? - Das ist ja nach wie vor nötig, nur das Passwort entfällt dann dank des sudoers- Eintrags.

Und Du rufst es auch genau so auf, wie es in den sudoers steht, also ohne irgendwelche Parameter oder so ...?

track

samtux

(Themenstarter)

Anmeldungsdatum:
25. Dezember 2012

Beiträge: 172

ChickenLipsRfun2eat schrieb:

Hast du es schon mit absoluten Pfadangaben versucht?

Hatte ich noch nicht, wurde aber sofort nachgeholt: funktioniert auch nicht.


track schrieb:

Du rufst Dein Root-Skript aber immer noch mit sudo davor auf, oder ? - Das ist ja nach wie vor nötig, nur das Passwort entfällt dann dank des sudoers- Eintrags.

Und Du rufst es auch genau so auf, wie es in den sudoers steht, also ohne irgendwelche Parameter oder so ...?

Ich rufe das Skript ohne Parameter auf. Das mit dem Passwort versteh ich gerade nicht. Der Eintrag in der sudoers bedeutet doch: Der Nutzer www-data darf das Skript soundso per sudo als Admin ausführen, sogar ohne ein Passwort eingeben zu müssen.

Ich habe das Skript sipConfEinrichtenStart.php. Das wird über einen Link auf der Website vom Nutzer aufgerufen. Also durch den Apache als www-data. Und dieses Skript beinhaltet dann den sudo-Aufruf auf das PHP-Skript, das auch in der sudoers angegeben wurde.


In der auth.log steht tatsächlich etwas:

Jun 20 16:10:30 SERVER sudo: www-data : command not allowed ; TTY=unknown ; PWD=/var/www/html/telefonanlage ; USER=root ; COMMAND=/usr/bin/php5 /var/www/html/telefonanlage/sipconfEinrichten.php

Ich weiß dadurch nur nicht, warum es nicht erlaubt sein soll...

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11250

Wohnort: München

samtux schrieb:

In der auth.log steht tatsächlich etwas:

Jun 20 16:10:30 SERVER sudo: www-data : command not allowed ; TTY=unknown ; PWD=/var/www/html/telefonanlage ; USER=root ; COMMAND=/usr/bin/php5 /var/www/html/telefonanlage/sipconfEinrichten.php

Ich weiß dadurch nur nicht, warum es nicht erlaubt sein soll...

Weil du nur den direkten Aufruf (einer ausführbaren) Datei /var/www/html/telefonanlage/sipconfEinrichten.php erlaubt hast anstelle von

/usr/bin/php5 /var/www/html/telefonanlage/sipconfEinrichten.php

das du in deinem PHP-Skript nutzt.

samtux

(Themenstarter)

Anmeldungsdatum:
25. Dezember 2012

Beiträge: 172

Funktioniert nach dem Ändern mit gleichem Fehler in auth.log trotzdem noch nicht...

sebix Team-Icon

Moderator, Webteam

Anmeldungsdatum:
14. April 2009

Beiträge: 5582

samtux schrieb:

Funktioniert nach dem Ändern mit gleichem Fehler in auth.log trotzdem noch nicht...

Wie sieht /etc/sudoers jetzt aus und was steht nun im auth.log?

samtux

(Themenstarter)

Anmeldungsdatum:
25. Dezember 2012

Beiträge: 172

cat /etc/sudoers:

#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults	env_reset
Defaults	mail_badpass
Defaults	secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root	ALL=(ALL:ALL) ALL
www-data ALL=NOPASSWD: /usr/bin/php5 /var/www/html/telefonanlage/sipconfEinrichten.php

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo	ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d

auth.log:

Jun 20 22:00:28 SERVER sudo: www-data : command not allowed ; TTY=unknown ; PWD=/var/www/html/telefonanlage ; USER=root ; COMMAND=/usr/bin/php5 /var/www/html/telefonanlage/sipconfEinrichten.php

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Wenn ich Deinen Eintrag mit meinen Einträgen vergleiche, habe ich den Verdacht, dass bei Dir der "Runas"- Eintrag fehlt. (→ man sudoers, Stichwort "Runas")

Ergänze Deinen Eintrag doch bitte mal probeweise:

www-data ALL=(root)NOPASSWD: /usr/bin/php5 /var/www/html/telefonanlage/sipconfEinrichten.php

LG,

track

samtux

(Themenstarter)

Anmeldungsdatum:
25. Dezember 2012

Beiträge: 172

Ich habe es gerade ergänzt und es kommt immer noch der gleiche Fehler...
Es nützt auch nichts, wenn ich zusätzlich noch das Skript zur sudoers hinzufüge, dass das andere Skript mit sudo aufruft.

samtux

(Themenstarter)

Anmeldungsdatum:
25. Dezember 2012

Beiträge: 172

Ich habe jetzt in der sudoers noch folgendes eingefügt:

www-data ALL=(root)NOPASSWD: ALL

Damit funktioniert es zumindest. Ist aber nicht die Optimallösung...

Da muss doch eigentlich in der Zeile

www-data ALL=(root)NOPASSWD: /usr/bin/php5 /var/www/html/telefonanlage/sipconfEinrichten.php

ein Fehler sein. Ich finde ihn aber nicht...

Antworten |