Perl und Root (jelöst)

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Ozelot
Beiträge: 1507
Registriert: 18.11.2007 09:52:58

Perl und Root (jelöst)

Beitrag von Ozelot » 18.08.2023 04:08:02

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
Zuletzt geändert von JTH am 18.08.2023 20:46:40, insgesamt 2-mal geändert.
Grund: Nach „Softwareentwicklung und -paketierung, Scripting“ verschoben

Benutzeravatar
GregorS
Beiträge: 2626
Registriert: 05.06.2008 09:36:37
Wohnort: Freiburg
Kontaktdaten:

Re: Perl und Root

Beitrag von GregorS » 18.08.2023 05:36:27

Ozelot hat geschrieben: ↑ zum Beitrag ↑
18.08.2023 04:08:02
...Ich möchte in perl ein "losetup -f" aufrufen. ... "Kommando nicht gefunden", ...
Hast Du auch einen Aufruf mit vollständiger Pfadangabe (/usr/sbin/losetup) probiert?

Gruß

Gregor
Wenn man keine Probleme hat, kann man sich welche machen. ("Großes Lötauge", Medizinmann der M3-Hopi [und sog. Maker])

uname
Beiträge: 12075
Registriert: 03.06.2008 09:33:02

Re: Perl und Root

Beitrag von uname » 18.08.2023 08:03:29

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 Debiansudo. Eigentlich ist sudo genau für dein Problem gemacht (und nicht dafür wofür Ubuntu es nutzt :facepalm: ). 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).

Ozelot
Beiträge: 1507
Registriert: 18.11.2007 09:52:58

Re: Perl und Root

Beitrag von Ozelot » 18.08.2023 20:34:32

:facepalm: Genau - mit Pfad klappts. Danke, daran hatte ich partout nicht gedacht..

Sudo: Hast auch recht.

Danke Euch --

Ozelot
Beiträge: 1507
Registriert: 18.11.2007 09:52:58

Re: Perl und Root (..doch nicht gelöst)

Beitrag von Ozelot » 19.08.2023 17:59:15

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.

Code: Alles auswählen

/usr/sbin/losetup /dev/loop0 PfadZuLuksContainer
funktioniert auf der Konsole, als perl systemcall bekomme ich aber

Code: Alles auswählen

losetup: /dev/loop0: Datei oder Verzeichnis nicht gefunden
sh: 2: ./PfadZuLuksContainer: Permission denied
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)

uname
Beiträge: 12075
Registriert: 03.06.2008 09:33:02

Re: Perl und Root (jelöst)

Beitrag von uname » 19.08.2023 20:39:17

sh: 2: ./PfadZuLuksContainer
Könnte sein, dass da ein Zeilenumbruch ist. Vielleicht musst du den Befehl irgendwie vollständig zusammenbauen. Poste mal das ganze Script.

Antworten