Warum hat ein Shebang-Skript, das als „init=“ ausgeführt wird, eine EUID von 0, wenn es von einem Initrd ausgeführt wird, andernfalls aber nicht?

Warum hat ein Shebang-Skript, das als „init=“ ausgeführt wird, eine EUID von 0, wenn es von einem Initrd ausgeführt wird, andernfalls aber nicht?

Ich versuche, mein eigenes PID 1-Init-Skript zu erstellen, das von der Boot-Befehlszeile mit init=/myscript aufgerufen werden kann. Wie kann ich es auf einem realen Dateisystem mit einem beliebigen Kernel zum Laufen bringen?

Wenn es in einem Initrd ausgeführt wird, funktioniert es einwandfrei und kann Dinge mounten usw. – aber wenn ich es auf meinem Dateisystem ohne Initrd verwende, kann es Dinge nicht mounten, weil:

mount: only root can do that (effective UID is 1000)

Wenn ich einen fehlgeschlagenen Befehl ausführe, wird zwangsläufig geteuid32() ausgegeben und 1000 zurückgegeben. Warum? Wie kann ich als EUID 0 ausführen?

Antwort1

Es gibt keine spezielle Behandlung für initon initrd, also muss es ein anderes Problem geben.

Bei der Ausführung als rootwird euidmit dem Besitzer der Binärdatei abgeglichen, wenn das setuidBit gesetzt ist.

Überprüfen Sie den Besitz auf /bin/mount.

Antwort2

Verwenden von Sudo von nicht privilegierten Konten

Der Fehler sagt Ihnen, wo das Problem liegt: Sie verwenden ein „normales“ Konto mit UID 1000, nicht das Root-Konto mit UID 0, um mount aufzurufen. Viele Systemfunktionen müssen als Root ausgeführt werden. Viele Prozesse wie initrd werden als Root ausgeführt, sodass die Befehle über ausreichende Berechtigungen verfügen, um ausgeführt zu werden. Wenn Sie jedoch Dinge von Ihrem normalen Benutzerkonto aus ausführen, benötigen Siesoodersudoum Aktionen als anderer Benutzer auszuführen.

Fürmontieren, würden Sie es folgendermaßen aufrufen wollen:

sudo mount /mnt/foo

Sofern nicht anders durch das Flag angegeben -u, ist der Benutzer für sudo-Befehle standardmäßig root. Das Ausführen Ihres Befehls über sudo sollte das beschriebene Problem lösen, vorausgesetzt, das Konto mit UID 1000 ist im entsprechenden/etc/sudoersoder/etc/sudoers.dDatei.

Siehe auch

  • man 5 sudo
  • man 5 sudoers
  • man 8 visudo

verwandte Informationen