Kann ich einen Prozess als root starten, ohne die Login-Shell von root zu starten?

8

Ich habe versucht, die Login-Shell zu ändern.

So /etc/passwdsieht die erste Zeile aus (bei einer Debian Wheezy-Installation):

rootx:0:0:root:/root:/:zsh

Wenn ich versuche mich anzumelden als root:

Cannot execute zsh: No such file or directory

Ich weiß, zshist verfügbar:

$ which zsh
/usr/bin/zsh

Okay, es scheint logisch, zshdurch seinen vollständigen Pfad zu ersetzen . Aber wie kann ich das machen?

Ich habe einen anderen Benutzer auf dem System ( user), aber es hat keine Root-Rechte und sudoist nicht auf dem System installiert.

Angenommen, ich kann aus irgendeinem Grund (Verschlüsselung, physischer Zugriff, ...) nicht auf einer Live-CD booten, um die Datei zu ändern.

Ich kenne jedoch die Anmeldeinformationen für das rootKonto.

Meine Frage ist: Gibt es eine Möglichkeit, auch programmgesteuert einen Prozess mit dem rootKonto zu starten, ohne zuerst die Anmeldeshell zu starten?

Rahmu
quelle
was ist mit su? oder gksu? so etwas wiesu -c 'sed -i s,root:/:zsh,root:/:/usr/bin/zsh, /etc/passwd'
qdii
Sollte die Zeile der passwd-Datei nicht / usr / bin / zsh sein? Warum hast du nur den String zsh gesetzt?
slm
@slm Das ist die Änderung, die das OP vornehmen möchte ...
ein CVn
1
Wenn @qdii Vorschlag funktioniert (dh das su -c "<commands>"funktioniert) ... könnten wir dann nicht einfach verwenden su -c "/bin/bash", um zu einer funktionierenden Bash mit User Root zu gelangen ?
Menschheit und
1
@humanityANDpeace: das soll nicht funktionieren. Der übergebene Befehl -cwird über die Login-Shell des Benutzers ausgeführt. -skann verwendet werden, um eine andere Shell zu verwenden ... nur wenn die vorhandene Login-Shell gültig ist oder der Aufrufer root ist.
Mat

Antworten:

4

Habe su Berechtigungen

Mit dem folgenden Befehl können Sie die Shell aller Benutzer ändern.

su -c "/usr/bin/chsh -s /bin/bash root"

Wenn Sie physischen Zugang haben

Während Ihres Grub-Starts können Sie in jedes System gelangen, solange Sie Konsolenzugriff haben und kein Kennwort Sie daran hindert, auf das Grub-Menü zuzugreifen.

Wenn Sie beim ersten Start des Systems, wenn das Grub-Menü angezeigt wird, das Menü aufrufen und die Kernelzeile bearbeiten ( eTaste drücken ), können Sie eine der folgenden Aktionen hinzufügen, um den Kernel im Einzelbenutzermodus zu starten.

  • Single
  • init = / bin / sh
  • 1

Die Linie sieht ungefähr so ​​aus:

 kernel /vmlinuz-2.6.15-27-386 root=/dev/mapper/Ubuntu-root ro init=/bin/bash

In Grub sollte es ungefähr so ​​aussehen:

       ss von grub

Sobald Sie die Änderungen vorgenommen haben, starten Sie den Kernel (drücken Sie die Taste b).

Auf diese Weise erhalten Sie temporären Zugriff auf das System mit einer Shell, in der Sie mit vi / vim alle erforderlichen Änderungen an Ihrer /etc/passwdDatei vornehmen können . Geben rebootSie einfach ein, wenn Sie fertig sind.

slm
quelle
2
Er sagt, er habe keinen physischen Zugang, daher werde er das GRUB-Menü wahrscheinlich nicht sehen können.
Renan
@ Renan. OK, das habe ich bei den ersten Lesungen nicht verstanden. Es ist in der Zeile über "..Ich kann nicht auf einer Live-CD booten .." versteckt, die für mich seltsam formuliert ist.
slm
4
Ihr suBefehl funktioniert nicht, da er versucht, die nicht vorhandene Root-Shell aufzurufen.
Gilles 'SO - hör auf böse zu sein'
@ Gilles: Hast du noch andere Ideen? Ich sehe dann keine Möglichkeit, dies ohne physischen Zugriff zu beheben. Wir haben das Gefühl, dass wir genau gegen das arbeiten, was das System zu diesem Zeitpunkt verhindern soll.
slm
1
@slm Ohne sudo ist das Root-Konto meiner Meinung nach gesperrt, sodass ein physischer Zugriff erforderlich ist.
Gilles 'SO - hör auf böse zu sein'