NEWS
[offen] root Rechte für exec()
-
@equilora:Im Falle von "SU Root" um mir eine Rootshell temporär zu generieren verwende ich im Skript.
my $suCaller = 'expect -c "set timeout 20; spawn -noecho su - ' . $tarUser . '; expect "Password:"; send "' . $tarPassword . '\r"; interact;"';
My 2 Cents
Equilora `
Danke für den Input. Ich muss zugeben, dass ich kein Wort verstanden habe. Einen Artikel zu expect lese ich gerade.
Momentan verstehe ich nicht, wie das anzuwenden wäre :?
-
Jo Ruhr70,
wollte Dich nicht verwirren….
Wenn Du in der Linux Shell z.b "su root" eingibst.... dann kommt sicher ein Propmt, welcher nach dem Password frägt.
Das kannst Du mit den üblichen Shell Scripts nicht mehr automatisiert erledigen, ausser Deine Linux Distribution ist noch aus der Steinzeit.
Passwörter im Klartext in Skripts ist mittlerweile verboten
Deswegen der Umweg mittels Expect.
Equilora
-
@equilora:Passwörter im Klartext in Skripts ist mittlerweile verboten
Deswegen der Umweg mittels Expect.
Equilora `
Mein root Passwort hätte ich auch höchst ungern in das Skript gepackt.
Den Umweg über Expect verstehe ich allerdings nicht, bzw. Deine Beispielzeile.
Ich welche Richtung muss ich denken?
Gehört das ins ioBrkoer Javascript (da würde die Syntax nicht passen)?
In ein Skript unter Linux?
Ein schnelles google brachte mich gar nicht weiter.
Ein kleiner Schubser, in welche Richtung ich da überhaupt denken muss.. :roll:
Wie wende ich Deine Zeile in Verbindung mit meinem Skript an?
-
Hallo Ruhr70,
du verwendest EXEC damit führst Du ja Befehle auf der OS Ebene aus…..
Deswegen kannst Du Expect innerhalb der IOB Skript Umgebung verwenden.
Achtung Expect muss unter Umständen nachinstalliert werden (z.B Debian).
Der Hintergrund ist einfach... mittels Expect rufst Du OS Befehle auf welche z.B ein Password brauchen, expect kapselt diese Programme und erlaubt dann
z.B das Passwort via Skript zu senden, was im Umfeld einer Bash nicht funktionieren würde.
Noch mehr verwirrt?
Equilora
-
@equilora:Noch mehr verwirrt?
Equilora `
Nein. Das habe ich verstanden
Danke für die Erläuterung!
Wie verwendest Du denn Deine Zeile im Skript?
Mit den Anführungszeichen und Hochkommas passt das nicht so im Skript. Deine Kommando öffnet dann eine Root Shell. Wie kommt dann das gewünschte Kommando von mir zum Zuge!
Danke noch einmal für die Erklärung!
Gesendet von iPad mit Tapatalk
-
Hallo Ruhr70,
entschuldige die holperige Konversation wir hatten einen heftigen Sturm hier und ich musste erstmal die Pferde ruhig bekommen und hier hat es grad ein Baum die Stromleitung geknickt….
Mein Beispiel ist ein wenig holperig weil basierend auf Perl...
my $suCaller = 'expect -c "set timeout 20; spawn -noecho su - ' . $tarUser . '; expect "Password:"; send "' . $tarPassword . '\r"; interact;"';
Mittels exec rufst Du expect -c "set timeout ....
ist warten das expect geladen wurde
-nonecho ist eine Option welche Rückmeldungen unterdrückt,
die $dingsda sind Parameter welche als Variablen vorliegen, welche ich dann einfach abrufe....
Im Grunde muss das ganze nur in Java Script Notation verpackt werden.....
Ich such mir mal ein paar Fälle wo root zwingend notwendig ist ohne gleich das gesamte System herunterfahren zu müssen, bin wie die Anderen
auch noch beruflich tätig... please stay tuned.
Equilora
-
Oh je, der Sturm hat Dich ja ganz schön erwischt.
Ich danke Dir jedenfalls für die ausführlichen Erklärungen und Deine Geduld!
-
Hi Ruhr70,
man(n) baut für Katastrophen vor…
Oh je, der Sturm hat Dich ja ganz schön erwischt.
Ich danke Dir jedenfalls für die ausführlichen Erklärungen und Deine Geduld! `
Ich kann das erstmal nur als Prototyp bauen. Das Password für Root muss ich aus diesem Grund erstmal deklarieren als Variable und fest einbinden, da wohl kaum jemand hier seine Passwörter rotiert, jede paar Stunden diese ändert, und über einen Web Service abruft und nach Gebrauch, Rückgabe, Erledigung einer Aufgabe wieder rotiert. :)…... Bluefox killt mich ohnehin da ich Exec verwende
Wo am Ende das Password hinterlegt wird, das darfst Du selbst festlegen.....
In Linux sind einige Aufgaben nur mit Root Rechten ausführbar... z.b Port 80 einstellen.... alle Ports unter 1024 geht nur mit Root, auf eine Hardwareschnitte zugreifen zur Laufzeit geht auch nur mit Root Rechten usw usw....
Expect ist StdIn and StdOut - Shit in and Shit Out.. bei Dir also Ubuntu.... hab mit grad ein Image gebaut...
Equilora
-
@equilora:In Linux sind einige Aufgaben nur mit Root Rechten ausführbar… z.b Port 80 einstellen.... alle Ports unter 1024 geht nur mit Root, auf eine Hardwareschnitte zugreifen zur Laufzeit geht auch nur mit Root Rechten usw usw....
Expect ist StdIn and StdOut - Shit in and Shit Out.. bei Dir also Ubuntu.... hab mit grad ein Image gebaut...
Equilora `
Machst Du das eigentlich beruflich oder warum bist Du da so tief drin?
-
Ist das mittlerweile gelöst?
Ich würde ebenfalls in einem exec gerne sudo machen auf einen anderen user, damit scp funktioniert.ciao
frank -
@lost-in-translation Wenn du eine halbwegs aktuelle Installation hast, musst du dem User
iobroker
erlauben, sich als der andere User anzumelden.Dazu legst du am besten in
/etc/sudoers.d
eine Datei ab, z.B.iobroker-scp
oder so. Darin definierst du, dassiobroker
ein bestimmtes Kommando als ein anderer User ausführen darf. Ich nenne diesen User hier malfrank
:iobroker ALL=(frank) NOPASSWD: /pfad/zu/scp
Den vollständigen Pfad zur
scp
binary findest du perwhich scp
.Zum Erstellen der Datei am besten
visudo
verwenden, weil da gleich eine Prüfung auf Syntaxfehler ausgeführt wird, die im schlimmsten Fall zu nicht-Funktionieren vonsudo
führen. Mehr Details hier:
https://kofler.info/sudo-ohne-passwort/Ich empfehle, sonst nichts zu ändern. Die Berechtigungen sind extra so gewählt, dass das System möglichst sicher im Umgang mit root-Rechten ist.
-
Hallo,
ich habe auch (wieder) ein Problem mit den Rechten meiner Installation.
Es lief ca. 6 Monate, und jetzt seit 2 Monaten läuft es nicht mehr.
Ob es mit einem Update zusammenhängt oder andere Ursachen hat kann ich jetzt nicht mehr sagen.
Mir ist es erst jetzt aufgefallen.Wenn jemand bei mir klingelt kopiere ich Snapshots der Kamera auf ein NAS.
mit dem Befehlcp -r /opt/iobroker/iobroker-data/files/vis.0/main/snapshots/Set1/ /mnt/DS112/FOTO/Besucherfotos/2019/2019.08.06_14.19.11/
Dieser wird wohl auch immer noch abgesetzt, aber nicht mehr korrekt umgesetzt. Denn die Fotos liegen zwar im iobroker, aber nicht auf dem NAS. (Die letzten wurden eben vor 2 Monaten raus kopiert)
Wenn ich den Befehl im putty eingebe (angemeldet als root), funktioniert es.
In der sudoers.d habe ich folgende Anpassung gemacht:iobroker ALL=(ALL) NOPASSWD: /opt/iobroker/iobroker-data/files/vis.0/main/snapshots/
Das scheint aber nicht auszureichen. Es funktioniert trotzdem nicht.
Was kann ich noch tun?
-
Hat denn der User "iobroker" überhaupt Schreibrechte auf deinem NAS?
-
@aleks-83 sagte in [offen] root Rechte für exec():
In der sudoers.d habe ich folgende Anpassung gemacht:
iobroker ALL=(ALL) NOPASSWD: /opt/iobroker/iobroker-data/files/vis.0/main/snapshots/In der
sudoers.d
musst du Befehle angeben, nicht Ordnerpfade. Überprüfe mal, was @SBorg gefragt hat.iobroker
bzw. ein User mit der gleichen UID benötigt Schreibzugriff aufs NAS. -
Der user "iobroker" ist im WebInterface der Synology mit Schreibrechten in dem Verzeichnis angelegt.
ist dieser user dann nur für das WebInterface oder ist ein kompletter "Linux-User"?in der /etc/passwd steht der user folgendermaßen drin.
Hat es damit überhaupt was zu tun?iobroker:x:1028:100:iobroker:/var/services/homes/iobroker:/bin/sh
Wenn ich mich als root per putty am iobroker anmelde und den cp Befehl ausführe geht es ja.
Über welchen user läuft das denn dann am NAS?Als "iobroker" kann ich mich per putty nicht am iobroker anmelden. Das Fenster schließt immer sofort wieder wenn ich das pw eingegeben habe. Ist das normal?
-
@aleks-83 sagte in [offen] root Rechte für exec():
Als "iobroker" kann ich mich per putty nicht am iobroker anmelden. Das Fenster schließt immer sofort wieder wenn ich das pw eingegeben habe. Ist das normal?
Der User
iobroker
hat keine Anmeldeshell, das ist normal. Du brauchst auf dem NAS einen User, der die gleiche UID hat wie der Useriobroker
mit dem ioBroker ausgeführt wird - zu ermitteln mitid -u iobroker
. Dieser User benötigt Schreibrechte.
Skripte etc werden nämlich als Useriobroker
ausgeführt und haben damit nur dessen Berechtigungen. -
OK, danke.
Die UIDs sind auf beiden Seiten gleich (1028)
-
Versuche doch mal was er da als Fehler ausgibt:
sudo -u iobroker cp -r /opt/iobroker/iobroker-data/files/vis.0/main/snapshots/Set1/ /mnt/DS112/FOTO/Besucherfotos/2019/2019.08.06_14.19.11/
-
root@ioBroker:~# sudo -u iobroker cp -r /opt/iobroker/iobroker-data/files/vis.0/main/snapshots/Set1/ /mnt/DS112/FOTO/Besucherfotos/2019/ cp: auf '/mnt/DS112/FOTO/Besucherfotos/2019/' konnte nicht zugegriffen werden: Keine Berechtigung
Die Rechte im gemounteten Verzeichnis sehen so aus:
root@ioBroker:~# ls -ldh /mnt/DS112/FOTO/Besucherfotos/ drwx------ 9 nobody users 4,0K Jun 19 09:16 /mnt/DS112/FOTO/Besucherfotos/
-
@aleks-83 sagte in [offen] root Rechte für exec():
Keine Berechtigung
Jo, ist wohl ziemlich eindeutig
Das Verzeichnis hat auch nur "rwx", also kann nur "nobody" schreiben/lesen/ausführen. Da stimmt etwas mit den Einstellungen der Berechtigungen (User und/oder [Unter-]Verzeichnis) deines NAS nicht.