Das gehört zwar zur Hälfte in ein Perlforum, aber vielleicht weiß ja jemand in Smalltalk was dazu, da es vor allem um Rechteverwaltung geht:
Ich möchte in perl ein "losetup -f" aufrufen. Systemaufrufe macht man dort mit Backticks bzw. dem qx operator. Nun braucht der Befehl freilich Rootrechte, aber ich bekomme die Ausgabe "Kommando nicht gefunden", was wohl heißt, dass das nicht mit Root-rechten läuft. Ein "whoami" auf die gleiche Weise aufgerufen gibt mir allerdings "root" zurück. Nun wäre das erklärbar, wenn ich keine login-shell aufgerufen hätte, habe ich aber ("su -"). Bei Systemaufrufen von perl wird das also wohl ignoriert?
Als Behelf könnte ich mir vorstellen, das als User auszuführen, der dann alle Rootbefehle per sudo aufruft. Da aber dann sudo für den User ohne Passwortabfrage eingerichtet sein muss, damit das Programm durchläuft, bekäme der User ja das Äquivalent von Superuser-rechten, was ich vermeiden will.
Falls jemand Lösungen hat, immer her damit.
Edit JTH: Nach „Softwareentwicklung und -paketierung, Scripting“ verschoben
Perl und Root (jelöst)
Perl und Root (jelöst)
Zuletzt geändert von JTH am 18.08.2023 20:46:40, insgesamt 2-mal geändert.
Grund: Nach „Softwareentwicklung und -paketierung, Scripting“ verschoben
Grund: Nach „Softwareentwicklung und -paketierung, Scripting“ verschoben
Re: Perl und Root
Hast Du auch einen Aufruf mit vollständiger Pfadangabe (/usr/sbin/losetup) probiert?Ozelot hat geschrieben:18.08.2023 04:08:02...Ich möchte in perl ein "losetup -f" aufrufen. ... "Kommando nicht gefunden", ...
Gruß
Gregor
Wenn man keine Probleme hat, kann man sich welche machen. ("Großes Lötauge", Medizinmann der M3-Hopi [und sog. Maker])
Re: Perl und Root
Ich denke auch, dass der Pfad fehlt. Zudem solltest du alleine aus Sicherheitsgründen in Scripten für alle Befehle immer die vollständigen Pfade angeben und die Befehle nicht über die PATH-Suche finden. Das ist im Übrigen auch der Grund, warum der aktuelle Pfad nicht im Suchpfad von root ist.
Anstatt Backticks nutze ich im Übrigen $() siehe z. B. hier. Ist aber für deine Fragestellung eher weniger interessant.
Zu sudo. Eigentlich ist sudo genau für dein Problem gemacht (und nicht dafür wofür Ubuntu es nutzt ). Entweder könnte ein normaler Benutzer über sudo das Script als root ausführen oder im Script sind root-Befehle mit sudo definiert, damit der Benutzer das Script als normaler Benutzer ausführen kann. In beiden Fällen muss der Benutzer entsprechend über /etc/sudoers (visudo) etweder für das Script oder /usr/sbin/losetup berechtigt werden. Sicherheitsmäßig ist das kein Problem. Alternativ muss ja auch ein Benutzer das Recht haben erst root zu werden, um dann das Script auszuführen. Vor allen auf Mehrbenutzersystemen kann es schon sinnvoll sein sudo zu nutzen, um eigentlich weniger priviligierten Benutzer zu erlauben Einzelbefehle wie dein Script bzw. Einzelbefehle wie /usr/sbin/losetup per sudo als root auszuführen ohne dem Benutzer den vollständigen Zugang zu root zu geben (root-Passwort oder sudo-Konzept von Ubuntu).
Anstatt Backticks nutze ich im Übrigen $() siehe z. B. hier. Ist aber für deine Fragestellung eher weniger interessant.
Zu sudo. Eigentlich ist sudo genau für dein Problem gemacht (und nicht dafür wofür Ubuntu es nutzt ). Entweder könnte ein normaler Benutzer über sudo das Script als root ausführen oder im Script sind root-Befehle mit sudo definiert, damit der Benutzer das Script als normaler Benutzer ausführen kann. In beiden Fällen muss der Benutzer entsprechend über /etc/sudoers (visudo) etweder für das Script oder /usr/sbin/losetup berechtigt werden. Sicherheitsmäßig ist das kein Problem. Alternativ muss ja auch ein Benutzer das Recht haben erst root zu werden, um dann das Script auszuführen. Vor allen auf Mehrbenutzersystemen kann es schon sinnvoll sein sudo zu nutzen, um eigentlich weniger priviligierten Benutzer zu erlauben Einzelbefehle wie dein Script bzw. Einzelbefehle wie /usr/sbin/losetup per sudo als root auszuführen ohne dem Benutzer den vollständigen Zugang zu root zu geben (root-Passwort oder sudo-Konzept von Ubuntu).
Re: Perl und Root
Genau - mit Pfad klappts. Danke, daran hatte ich partout nicht gedacht..
Sudo: Hast auch recht.
Danke Euch --
Sudo: Hast auch recht.
Danke Euch --
Re: Perl und Root (..doch nicht gelöst)
Ich kann jetzt zwar alles ausführen - aber ein Problem habe ich noch: Die devices sind nicht verfügbar, wenn ich sie über perl aufrufe.
funktioniert auf der Konsole, als perl systemcall bekomme ich aber
Als bash-script funktioniert es, aber das ist gerade nicht, was ich will.
Würde sudo mit den devices helfen? (ich tue mich gerade noch schwer damit ein halbwegs überschabares Howto dafür zu finden)
Code: Alles auswählen
/usr/sbin/losetup /dev/loop0 PfadZuLuksContainer
Code: Alles auswählen
losetup: /dev/loop0: Datei oder Verzeichnis nicht gefunden
sh: 2: ./PfadZuLuksContainer: Permission denied
Würde sudo mit den devices helfen? (ich tue mich gerade noch schwer damit ein halbwegs überschabares Howto dafür zu finden)
Re: Perl und Root (jelöst)
Könnte sein, dass da ein Zeilenumbruch ist. Vielleicht musst du den Befehl irgendwie vollständig zusammenbauen. Poste mal das ganze Script.sh: 2: ./PfadZuLuksContainer