Wie kann ich als root in ein Verzeichnis cd?

10

Angenommen, es gibt ein Verzeichnis, auf das ich nicht zugreifen kann. Offensichtlich sudo cd foowird es nicht funktionieren, da cdin jeder Shell jemals eine Shell eingebaut ist.

Bisher habe ich nur sudo basheine Root-Eingabeaufforderung verwendet (ja, ich weiß, dass es bessere Möglichkeiten gibt). Dann kann ich cdin das Verzeichnis stöbern.

Gibt es einen besseren Weg, dies zu tun?

strugee
quelle
Warum möchten Sie cdals Root (es sei denn, Sie befinden sich tatsächlich in einer Root-Shell)?
Tripleee
Wenn ein Verzeichnis im Besitz von root war und es keine globale Ausführung gab
strugee
1
Das ist kein wirklich gültiger Fall. Es kann nützlich sein, das Verzeichnis lesen zu können, aber dafür muss das Verzeichnis nicht Ihr Arbeitsverzeichnis sein, dh Sie brauchen es nicht cd.
Tripleee
Ja, das habe ich erst bemerkt, als die akzeptierte Antwort darauf hinwies, dass ich es einfach könnte sudo ls.
strugee

Antworten:

12

Nein, es gibt keinen Weg zu cdeinem Verzeichnis, das nur root zulässt, ohne root zu sein. Es sollte wirklich nicht zu viele Verzeichnisse geben, die diese Einschränkung haben. Meistens ist der Zugriff auf eine bestimmte Datei eingeschränkt, z. B. auf die /etc/shadowDatei oder bestimmte Protokolldateien unter /var/log.

Sie können verwenden sudo ls <dir>, um sie anstelle von zu sehen bash. Auch wenn Sie verwenden sudo, um root zu werden, möchten Sie normalerweise Benutzer ( suBefehl) anstelle von festlegen. Verwenden Sie stattdessen bashdiesen Befehl:

$ sudo su -

Sie können dasselbe auch mit einem Sudo- -iSchalter erreichen:

$ sudo -i

Auszug aus der Manpage zu sudo -i

Mit der Option -i (Erstanmeldung simulieren) wird die im Eintrag passwd (5) des Zielbenutzers angegebene Shell als Anmeldeshell ausgeführt. Dies bedeutet, dass anmeldespezifische Ressourcendateien wie .profile oder .login von der Shell gelesen werden. Wenn ein Befehl angegeben wird, wird er zur Ausführung an die Shell übergeben. Andernfalls wird eine interaktive Shell ausgeführt.

Für die Dateien, auf die Sie nicht zugreifen können, können Sie einen der folgenden sudoBefehle verwenden:

$ sudo tail /var/log/messages

$ sudo less /etc/shadow
slm
quelle
3
Warum würden Sie sudo su -anstelle von verwenden sudo -i? Beide geben Ihnen alle Superuser-Berechtigungen, obwohl Sie nur die CAP_DAC_READ_SEARCH-Funktion benötigen.
Stéphane Chazelas
@StephaneChazelas - Ich habe diesen Wechsel noch nie bemerkt. Meine ursprüngliche Einführung in sudowar durch Solaris-Umgebungen und die Version sudodavon war dort nicht enthalten. Wenn Sie sich das Sudo-Änderungsprotokoll ansehen , sieht es so aus, als ob diese Option im Jahr 2004 hinzugefügt wurde. Ich schätze, ich datiere mich damit, aber Sie haben 8-) gefragt. Ich werde die Antwort so ändern, dass sie beide enthält, danke!
slm
@ StéphaneChazelas Ich stimme zu. Ich bevorzuge es, sudo -Hiweil es auch das Home-Verzeichnis festlegt (es ist in meiner Distribution nicht standardmäßig auf home eingestellt, die Standardeinstellung kann variieren). Wenn Sie dies nicht tun, erhalten Sie möglicherweise Root-Dateien in Ihrem Haus, wenn dort neue Dateien erstellt werden.
Doug65536
5

Nein, gibt es nicht. Sie benötigen eine Shell, die als Root ausgeführt wird.

Ignacio Vazquez-Abrams
quelle
Und wie in den Kommentaren erwähnt, ist es ziemlich sinnlos, es cdsei denn, Sie führen eine Shell oder einen vergleichbaren Prozess aus.
Tripleee
0

Richtig, das kannst du nicht. Hier ist eine Problemumgehung:

sudo sh -c "cd restricted-dir; some_command"
Tagar
quelle