Sida 2 av 3
Postat: 20 januari 2008, 20:30:10
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.
Postat: 20 januari 2008, 20:35:30
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.
Postat: 20 januari 2008, 20:42:44
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.

Postat: 20 januari 2008, 21:16:54
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
Postat: 20 januari 2008, 21:39:38
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.
Postat: 21 januari 2008, 06:58:36
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.
Postat: 21 januari 2008, 07:15:15
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.
Postat: 21 januari 2008, 09:02:15
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.
Postat: 21 januari 2008, 16:39:29
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.
Postat: 21 januari 2008, 16:48:30
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.
Postat: 21 januari 2008, 16:57:34
av speakman
Jag tyckte inte förslaget lät som en enklare lösning, men framförallt inte säkrare.
Postat: 21 januari 2008, 17:35:32
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.
Postat: 21 januari 2008, 17:53:02
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.
Postat: 21 januari 2008, 18:13:38
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>
Postat: 21 januari 2008, 18:20:25
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?!