Mit PHP auf USB-Modem mittels dio unter Unix zugreifen?!

Gast #2464007
Lesenswert?

Hallo,

ich betreibe seit kurzem eine kleine Unix-Maschine, auf der Debian Lenny 
installiert ist.
Diese Maschine möchte ich als kleinen Webserver für zu Hause verwenden.
Als Webserver läuft lighttpd und kann bereits fehlerfrei PHP-Seiten 
aufrufen.
Außerdem möchte ich mehr "Unix" mit der Maschine lernen...

Nun möchte ich auch auf die USB-Schnittstelle mittels PHP zugreifen.
Angeschlossen ist ein USB-Modem, das in /etc/ttyACM0 zu finden ist.
Mittels dem Tool screen habe ich Zugriff auf dieses Modem, allerdings 
scheitere ich beim Zugriff mit PHP.
Es kommen folgende Warnmeldungen:
Warning: dio_open() [function.dio-open]: cannot open file /dev/ttyACM0 
with flags 2306 and permissions 0: Permission denied in 
/websites/testusb.php on line 3
-
Warning: dio_tcsetattr() expects parameter 1 to be resource, boolean 
given in /websites/testusb.php on line 10
-
Warning: dio_close() expects parameter 1 to be resource, boolean given 
in /websites/testusb.php on line 11

Natürlich ist das dio-Paket auch installiert, vorher wurde der Fehler 
angezeigt, dass dio_open() nicht bekannt ist!

Hier die testusb.php (nicht meckern, ist eh erstmal ein Test):
1
<?php
2

3
$fd = dio_open('/dev/ttyACM0', O_RDWR | O_NOCTTY | O_NONBLOCK);
4
  dio_tcsetattr($fd, array(
5
    'baud' => 9600,
6
    'bits' => 8,
7
    'stop' => 1,
8
    'parity' => 0,
9
    'is_canonical' => 0
10
  ));
11
dio_close($fd);
12

13
?>

Die Rechte der testusb.php habe ich auf 0777 gesetzt, allerdings keine 
Besserung.
Da ich sowieso root bin, denke ich mal, dass ich noch irgendwo etwas 
anpassen muss, nur wo?

Gruß,
Till
Gast #2464066
Lesenswert?

Oliver R. schrieb:
> Ich
> würde aber eher nicht den Webserver bzw. PHP als root laufen lassen,
> sondern eher die Zugriffsrechte der Schnittstelle ändern.

Danke, Oliver R., das klingt plausibel.
Hhm, dann muss ich mich auf die Suche machen, wie man die Rechte der 
Schnittstelle ändert, denn das hat mich bis jetzt noch nie betroffen. ;)
Für einen Tipp wäre ich als Anfänger sehr dankbar!
Gast #2464150
Lesenswert?

Hhm, also angemeldet bin ich momentan als root.

Habe den Ordner /dev mit ls -l ausgegeben und folgendes gefunden:
crw-rw---- 1 root dialout 166,   0 Dec 18 18:31 ttyACM0

dialout wird wohl die Gruppe sein; viele Einträge in /dev sind aber dem 
root zugeordnet.
Was verstehe ich denn unter "Webserver-User"? Wie heißt der denn?
Ist das der "zweite" User, den ich bem Installieren erstellen musste?
Wenn ich die Unix-Maschine neu starte, ich mich nicht mit der Konsole 
darauf einwähle und nur die Adresse http://IP-der-Maschine im Browser 
eingebe, wer ist dann der Webserver-User?
Das verstehe ich noch nicht ganz!

Der Link zum udev ist klasse und geht wohl in die richtige Richtung, 
danke, aber da muss ich mich erstmal reinarbeiten.
Auf dem ersten Blick sieht das ganz schön wild aus!
#2464159
Lesenswert?

Es dürfen nur root und Benutzer, die mitglied der Gruppe dialout sind 
auf das Modem zugreifen.
Nun läuft aber der lighthttpd als ein Benutzer, der fast nichts darf. 
Wie dieser heißt, ist den Konfigurationsdateien zu entnehmen. Wenn du 
den lighthttpd-Benutzer in die dialout Gruppe aufnimmst, darf auch 
lighthttpd sich auf dem Modem austoben.
Gast #2464172
Lesenswert?

Oliver R. schrieb:
> Der lighttpd ist ja ein Prozess, der vom System gestartet wird. Dieser
> läuft unter einer bestimmten User-ID. Du musst da mal in die
> entsprechende Konfigurationsdatei schauen. Meist liegt die unter
> /etc/lighttpd oder ähnlich.
Lukas K. schrieb:
> Nun läuft aber der lighthttpd als ein Benutzer, der fast nichts darf.
> Wie dieser heißt, ist den Konfigurationsdateien zu entnehmen.

Ich möchte nichts falsch machen. Meint ihr das?
In der Datei /etc/lighttpd/lighttpd.conf steht folgendes:
## change uid to <uid> (default: don't care)
server.username            = "www-data"
## change uid to <uid> (default: don't care)
server.groupname           = "www-data"

Lukas K. schrieb:
> Wenn du
> den lighthttpd-Benutzer in die dialout Gruppe aufnimmst, darf auch
> lighthttpd sich auf dem Modem austoben.
Oliver R. schrieb:
> Schau dir auch mal den Befehl useradd an:
> http://linux.die.net/man/8/useradd
> Damit solltest du den Webserver-User zur Gruppe dialout hinzufügen
> können.
Danke, ich werde es probieren! :)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren