Debian: Problem med ttyS0. *Löst*

Elektronik- och mekanikrelaterad mjukvara/litteratur. (T.ex schema-CAD, simulering, böcker, manualer mm. OS-problem hör inte hit!)
Användarvisningsbild
JimmyAndersson
Inlägg: 26417
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

Jag kör Apache2.

Speakman brukar ha bra koll på det mesta inom Linux, men han har nog inte sett dagens inlägg än. :)


Man kanske kan spara ut allt som skapas i /proc/"PID"/fd..

Jag har kikat lite på det men inte kommit på exakt hur än.
bos
Inlägg: 2308
Blev medlem: 24 februari 2007, 23:29:15
Kontakt:

Inlägg av bos »

JimmyAndersson skrev:Men frågan är varför. www-data är ju den användare som apache använder. Den tillhör gruppen dialout.
Det där har inte så mycket med saken att göra. Apache, som standard, forkar sin egen process under en annan användare med sämre rättigheter, ibland "nobody" och ibland "daemon". Om sen föräldraprocessen så är medlem i root eller farmors_syklubb spelar ingen roll, du får ändå EACCESS.

Du kan, om du vill öppna rejäla säkerhetshål, köra "chmod u+S /dev/tty*", då slipper du få EACCESS på dina processer. Men du *vill* inte göra så.

Om du ger mig en bra motivering till varför du vill använda serieporten så kan jag undersöka lämplig omväg till en lösning.
Användarvisningsbild
JimmyAndersson
Inlägg: 26417
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

Motivering??

Nä du, man ska inte behöva motivera varför man vill använda något i ett projekt. :?
Hjälp mig om du vill, annars behöver du inte. :)
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

Det är väl enklare om du bara kör igång filen direkt via php-tolken istället.

php /var/www/test/example.php
Användarvisningsbild
JimmyAndersson
Inlägg: 26417
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

då får jag:

bash: php: command not found


hmmm..? Något som saknas?
Notera det jag skrev om PHP CLI på förra sidan.


edit:
Har dubbelkollat med dmesg | grep tty och ttyS0 och ttyS1 är ok.
Har även kikat i /var/logs men inte hittat någon ledtråd om vad som är galet.
Ser inget felmeddelande om ttyS0 i /var/log/messages

Har även kört chmod 660 /dev/ttyS0 för säkerhetskull, men ingen skillnad.
Användarvisningsbild
speakman
Inlägg: 4838
Blev medlem: 18 augusti 2004, 23:03:32
Ort: Ånge

Inlägg av speakman »

Har du startat om Apache2 sedan du lade till den nya gruppen? Den får inte nya accessen förrän sessionen är omstartad.

Ang. CLI så prova apt-get install php5-cli. Borde ju finnas om php5 finns...

FYI (er andra) så forkas apache2 i Debian till www-data när den startar.
Senast redigerad av speakman 21 januari 2008, 08:56:08, redigerad totalt 1 gång.
bos
Inlägg: 2308
Blev medlem: 24 februari 2007, 23:29:15
Kontakt:

Inlägg av bos »

JimmyAndersson skrev:Nä du, man ska inte behöva motivera varför man vill använda något i ett projekt. :?
Med tanke på att det handlar om säkerhet, så.

Men visst. Gör såhär: Istället för att i php-programmet skriva direkt till porten så skriver du data till en fil. Sätt sen upp ett cron-job som en gång i sekunden (eller så) pollar filen, och separat kör php-scriptet (som root) som skriver denna data till porten. Då slipper du blanda in Apache-användare och - ännu bättre - slipper ändra rättigheter på porten.
Användarvisningsbild
speakman
Inlägg: 4838
Blev medlem: 18 augusti 2004, 23:03:32
Ort: Ånge

Inlägg av speakman »

bos: Så du menar att det är hög säkerhet att köra php-script som root? Istället för att lösa det "rätt" väg genom att ge programmet rätt rättigheter?
Och "chmod u+S /dev/tty*" - vad menar du att det gör?

Nej, Jimmy. Fortsätt i den riktining du redan är så löser vi det på ett korrekt vis istället.
bos
Inlägg: 2308
Blev medlem: 24 februari 2007, 23:29:15
Kontakt:

Inlägg av bos »

Du har missat ett par fragment av relevans ur tråden.

Långt tidigare skrev jag att det är ingen höjdare att rota på device-rättigheter, men Jimmy orkade inte ge en motivering till varför han skulle skriva direkt till serieporten och ville istället ha en lösning som fixade allt "utan krångel", därav inlägget.
Användarvisningsbild
007sweden
Inlägg: 3500
Blev medlem: 3 mars 2005, 20:18:12
Skype: oo7sweden

Inlägg av 007sweden »

Alltså php-skriptet skall skicka data direkt till en pic utan fördröjning, därav så är bos' fil-ide inte gångbar, det bästa (enda) är att phpskriptet skriver direkt till porten.
Användarvisningsbild
speakman
Inlägg: 4838
Blev medlem: 18 augusti 2004, 23:03:32
Ort: Ånge

Inlägg av speakman »

Jag tyckte inte förslaget lät som en enklare lösning, men framförallt inte säkrare.
Användarvisningsbild
JimmyAndersson
Inlägg: 26417
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

Håller helt klart med.

Nu ska vi se...


Speakman:
"Har du startat om Apache2 sedan du lade till den nya gruppen? Den får inte nya accessen förrän sessionen är omstartad."

Japp. Jag var inte helt säker på ifall man var tvungen att starta om för att ändringarna skulle gälla, så jag har startat om varje gång jag har ändrat. Bra att få det bekräftat att man måste det. :)

Hittade php5-cli och provade att ladda/köra example.php
Då blev det såhär:

Kod: Markera allt

<html>
        <head>







</head>



<body bgcolor="#000000" text="#FFFFFF" link="#FFFFFF" alink="#FFFFFF"   vlink="#FFFFFF">
<center>

<form method="get" action="example.php">

Position:<input type="text" name="position" value="


Sedan stannade markören efter "-tecknet. Provade att skriva 100 och trycka enter, men den fortsatte inte. Fick avbryta.


Första delen av example.php ser ut såhär:


Kod: Markera allt


EDIT 2:
-- Klippte bort koden eftersom en mer fullständig version finns i nästa inlägg.


edit: Klippet i koden är för att det inte ska bli så långt, men jag skickar data såhär:

$serial->sendMessage("Data som skall sändas");
Denna data hämtas från forumulärets inmatningsruta.
Senast redigerad av JimmyAndersson 21 januari 2008, 18:15:03, redigerad totalt 1 gång.
Användarvisningsbild
speakman
Inlägg: 4838
Blev medlem: 18 augusti 2004, 23:03:32
Ort: Ånge

Inlägg av speakman »

Det hade varit ganska vitalt att få med den borttagna delen av koden...
Rensa hellre bort alla tomrader för att få det mer kompakt.
Användarvisningsbild
JimmyAndersson
Inlägg: 26417
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

ok, då gör jag ett nytt försök. :)
Har plockat bort lite helt vanlig html-kod i mitten som garanterat fungerar.

Kod: Markera allt

<head>
</head>
<body bgcolor="#000000" text="#FFFFFF" link="#FFFFFF" alink="#FFFFFF" vlink="#FFFFFF">
<center>

<form method="get" action="example.php">

Position:<input type="text" name="position" value="<?php
include "php_serial.class.php";

// Let's start the class
$serial = new phpSerial;

// First we must specify the device. This works on both linux and windows (if
// your linux serial device is /dev/ttyS0 for COM1, etc)
$serial->deviceSet("/dev/ttyS0");
$serial->confBaudRate(9600);
$serial->confParity("none");
$serial->confStopBits(1);
$serial->confFlowControl("none");
$serial->confCharacterLength(8);
// Then we need to open it
$serial->deviceOpen();


$file = "position.txt";    
!$file_handle = fopen($file,"r");
!$startposition = fread($file_handle, filesize($file));
fclose($file_handle); 


$message = chr(0x02).chr(0x30).$startposition.chr(0x03);
$serial->sendMessage($message);


$position = $_GET["position"];

if($position > 999 || $position < 0){

echo "Error, keep number between 0 and 999";
} else {

$message = chr(0x02).chr(0x30).$position.chr(0x03);
$serial->sendMessage($message);
echo $position;


if (!$file_handle = fopen($file,"w")) { echo "Cannot open file"; }   
!fwrite($file_handle, $position);
fclose($file_handle);

}


// If you want to change the configuration, the device must be closed
$serial->deviceClose();

?>">
<br>
<br>
<input type=submit value="Send!">
</form>

</center>
</body>
</html>
Användarvisningsbild
speakman
Inlägg: 4838
Blev medlem: 18 augusti 2004, 23:03:32
Ort: Ånge

Inlägg av speakman »

Kör med "php -a fil.php" och stega dig fram så ser du var den låser på.

edit: Det verkar inte fungera såsom det framstod. Händer inget mer så prova peta in lite debugrader efter varje gång du gör något med serieporten eller den andra filen.
Vad betyder egentligen interactive?!
Skriv svar