Hallo,
ich habe durch Zufall hier [1] eine Möglichkeit gesehen, die Temperatur-Werte von CPU und HDD auszulesen, zu sammeln und dann grafisch anzeigen zu lassen. Mit der CPU ist das kein Problem, weil sensors keine root-Rechte verlangt.
Probleme habe ich aber mit hddtemp. Zunächst will ich smartctl - wie vorgeschlagen - nicht nehmen. Als user wwwrun kann ich beide Programme ausführen. Im Gegensatz zu den Vorschlägen im www ist es daher sinnlos, die Rechte der binaries auf 777 zu setzen. Es liegt vielmehr daran, dass ich auf /dev/sda etc. ohne root keinen Zugriff bekomme. Insoweit ist es mir auch schleierhaft, wie der Code [wieder 1] laufen kann.
Kann mir jemand sagen, wie ich ohne root zu sein Zugriff auf /dev/sd? erhalte?
Gruß & Dank, Alex
[1] http://linux.blogteil.de/jpgraph.html
Hallo,
Am Sun, 25 Aug 2013, Alex Winzer schrieb:
Kann mir jemand sagen, wie ich ohne root zu sein Zugriff auf /dev/sd? erhalte?
[..]
Verwende statt smartctl einfach den hddtemp daemon, dann kannst du die Temperaturdaten einfacher per Socket abholen:
$ netcat localhost 7634 |/dev/sda|SAMSUNG SSD 830 Series|30|C||[..]
Das kannst du auch per PHP auslesen.
-dnh
Hallo und Danke für die Antworten!
On 25.08.2013 23:50, David Haller wrote:
Hallo,
Am Sun, 25 Aug 2013, Alex Winzer schrieb:
Kann mir jemand sagen, wie ich ohne root zu sein Zugriff auf /dev/sd? erhalte?
[..]
Verwende statt smartctl einfach den hddtemp daemon, dann kannst du die Temperaturdaten einfacher per Socket abholen:
$ netcat localhost 7634 |/dev/sda|SAMSUNG SSD 830 Series|30|C||[..]
Das kannst du auch per PHP auslesen.
Der hddtemp daemon läuft bei mir sowieso. Funktioniert also perfekt. Noch ein bisschen mit explode() und substr() nachgeholfen und man hat das Ergebnis.
Ich hatte schon angefangen, mit sudo rumzutesten. Hat ein Weile gedauert, dass hinzubekommen - ebenso wie es wieder rückgängig zu machen.
Nochmals Danke. Alex
Hallo,
Am Mon, 26 Aug 2013, Alex Winzer schrieb:
On 25.08.2013 23:50, David Haller wrote:
Am Sun, 25 Aug 2013, Alex Winzer schrieb:
Kann mir jemand sagen, wie ich ohne root zu sein Zugriff auf /dev/sd? erhalte?
[..]
Verwende statt smartctl einfach den hddtemp daemon, dann kannst du die Temperaturdaten einfacher per Socket abholen:
$ netcat localhost 7634 |/dev/sda|SAMSUNG SSD 830 Series|30|C||[..]
Das kannst du auch per PHP auslesen.
Der hddtemp daemon läuft bei mir sowieso. Funktioniert also perfekt. Noch ein bisschen mit explode() und substr() nachgeholfen und man hat das Ergebnis.
*bg* Meine Lösung steht unten (wie man das assoz.-Array an jpgraph verfüttert hab ich nimmer geschaut) ;)
Hach, das liebe ich an *nix einfach. Wobei, inzwischen kann man vielleicht auch unter >= Win7 per PowerShell was ähnliches machen, nur hängt da wohl dutzend-MB-weise .NET und anderer Krams dran. Denn untiges PHP geht auch mit shell / netcat / wohl awk / perl / python / ruby nochmal einiges schlanker als mit /usr/bin/php ;) Aber wenn man das in ne PHP-generierte Webseite einbetten will vergess sogar ich meinen Hass auf PHP.
HTH, -dnh
==== hddtemps.php ==== #!/usr/bin/php <?php error_reporting(E_ALL); $address = 'localhost'; $port = 7634; $temps = "";
if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) { echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n"; } if (socket_connect($sock, $address, $port) === false) { echo "socket_connect() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n"; } while ($out = socket_read($sock, 2048)) { $temps .= $out; } socket_close($sock);
$temps = trim($temps, "|"); $disks = explode("||", $temps);
foreach($disks as $val) { $t = explode("|", $val); if($t[0] && $t[2] != "ERR") { $disktemps[$t[0]] = $t[2]; } } print_r($disktemps); ?> ====
Anmerkung: ich hab hier für hddtemp auch für externe LWs was definiert (DEVICE="... SATA:/dev/sdj"), das gibt bei der Abfrage dann eben z.B.: |/dev/sdj|???|ERR|*| wenn /dev/sdj nicht da ist. Ist aber nützlich, wenn man mal ne größere Menge auf /dev/sdj schieben will welches (variierend) teils nicht gut gekühlt ist, also darauf ausgelegt, daß da auch mal eben z.B. 100GB drauf geschrieben werden sollen (man muß halt rchddtemp restart bzw. systemctl ... machen). Wenn man die Temperatur dann vom ext. LW im Blick hat (hier mit gkrellm), kann man ne Pause einlegen wenn's dem LW arg warm wird ... ;)
Die Einbindung der Diskbezeichungen und die evtl. Behandlung/Umrechnung/Ausgabe der Temperaturangaben in Fahrenheit etc. bleibt dem Leser überlassen.
Hallo,
ich habe durch Zufall hier [1] eine Möglichkeit gesehen, die Temperatur-Werte von CPU und HDD auszulesen, zu sammeln und dann grafisch anzeigen zu lassen. Mit der CPU ist das kein Problem, weil sensors keine root-Rechte verlangt.
Probleme habe ich aber mit hddtemp. Zunächst will ich smartctl - wie vorgeschlagen - nicht nehmen. Als user wwwrun kann ich beide Programme ausführen. Im Gegensatz zu den Vorschlägen im www ist es daher sinnlos, die Rechte der binaries auf 777 zu setzen. Es liegt vielmehr daran, dass ich auf /dev/sda etc. ohne root keinen Zugriff bekomme. Insoweit ist es mir auch schleierhaft, wie der Code [wieder 1] laufen kann.
Kann mir jemand sagen, wie ich ohne root zu sein Zugriff auf /dev/sd? erhalte?
Gruß & Dank, Alex
Hallo Alex,
ich glaube, die gängige Lösung ist, einer Gruppe (z.B. disk) den Zugriff auf die Festplatten zu erlauben und dann das binary auf 2777 chown irgendwas:disk zu setzen Falls es auf dem Rechner einen DVD Brenner gibt, sollte dessen Software ähnlich konfiguriert sein
Wolfgang
Hallo Wolfgang, hallo Leute,
Am Montag, 26. August 2013 schrieb hamann.w@t-online.de:
ich glaube, die gängige Lösung ist, einer Gruppe (z.B. disk) den Zugriff auf die Festplatten zu erlauben und dann das binary auf 2777 chown irgendwas:disk zu setzen
2777 ist keine gute Idee ;-)
2777 heißt u. a. Schreibrecht für alle (sprich: jeder darf das Binary verändern!)
In Kombination mit sgid (das ist die 2 von 2777) kann dann jeder das Binary mit den Rechten der Gruppe disk (in diesem Fall) ausführen.
Im Ergebnis bekommst Du also ein vom Benutzer änderbares/austauschbares Programm mit Rechten der Gruppe disk, also Lese- und Schreibrecht auf alle Festplatten. Das willst Du nicht wirklich ;-)
Die bessere Lösung ist 2711 oder 2755 - also ohne Schreibrechte fürs Binary (außer für den Eigentümer).
(Dass man mit suid- und sgid-Bits grundsätzlich zurückhaltend umgehen sollte, ist nochmal eine andere Geschichte ;-) - aber nicht Thema dieser Mail.)
Gruß
Christian Boltz
Hallo Leute,
On 26.08.2013 22:51, Christian Boltz wrote:
Hallo Wolfgang, hallo Leute,
Am Montag, 26. August 2013 schrieb hamann.w@t-online.de:
ich glaube, die gängige Lösung ist, einer Gruppe (z.B. disk) den Zugriff auf die Festplatten zu erlauben und dann das binary auf 2777 chown irgendwas:disk zu setzen
2777 ist keine gute Idee ;-)
2777 heißt u. a. Schreibrecht für alle (sprich: jeder darf das Binary verändern!)
In Kombination mit sgid (das ist die 2 von 2777) kann dann jeder das Binary mit den Rechten der Gruppe disk (in diesem Fall) ausführen.
Im Ergebnis bekommst Du also ein vom Benutzer änderbares/austauschbares Programm mit Rechten der Gruppe disk, also Lese- und Schreibrecht auf alle Festplatten. Das willst Du nicht wirklich ;-)
Die bessere Lösung ist 2711 oder 2755 - also ohne Schreibrechte fürs Binary (außer für den Eigentümer).
Ich habe zwischenzeitlich das Problem und "die Lösung" entdeckt: Der cronjob, mit dem die Daten mittels hddtemp/sensors abgerufen und in die mysql-Datenbank eingetragen werden, kann als root ausgeführt werden. Wie durch ein Wunder haben sich damit die Rechte-Probleme in Luft aufgelöst. Einmal bei mysql eingetragen, kann jeder wwwrun-Benutzer diese dort abrufen.
Im Grunde besteht damit gar kein Rechte-Problem! Dieses hatte ich mehr oder weniger selbst generiert, weil ich das php-Skript zum bestücken der mysql-Datenbank mittels Firefox ausprobieren wollte und mich wunderte, dass mir nur sensors Werte ausgab. Dann stellte ich - wie das Thema zeigt - fest, dass nur root auf /dev/sd? zugreifen kann.
Ich hatte das zum Testen dann mit sudo gelöst, was ich persönlich besser/sicherer finde als irgend welche Rechte oder suid-/sgid-Bits zu setzen. Aber evtl. ist ja selbst das nur Geschmacksfrage. Abgesehen davon, dass das mit dem hddtemp-Daemon genausogut funktioniert, wollte ich mich insofern nicht selbst bloßstellen.
(Dass man mit suid- und sgid-Bits grundsätzlich zurückhaltend umgehen sollte, ist nochmal eine andere Geschichte ;-) - aber nicht Thema dieser Mail.)
Gruß & nochmals Dank an alle Mitdenkenden. Alex
Hallo Wolfgang, hallo Leute,
Am Montag, 26. August 2013 schrieb hamann.w@t-online.de:
ich glaube, die gängige Lösung ist, einer Gruppe (z.B. disk) den Zugriff auf die Festplatten zu erlauben und dann das binary auf 2777 chown irgendwas:disk zu setzen
2777 ist keine gute Idee ;-)
Hallo Christian,
danke für die Korrektur. Ich wollte 2755 schreiben
Wolfgang