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 init
on initrd
, also muss es ein anderes Problem geben.
Bei der Ausführung als root
wird euid
mit dem Besitzer der Binärdatei abgeglichen, wenn das setuid
Bit 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