Jak mogę cd do katalogu jako root?

10

Załóżmy, że istnieje katalog, do którego nie mam uprawnień dostępu. Oczywiście sudo cd foonie będzie działać, ponieważ cdjest ona wbudowana w każdą powłokę.

Do tej pory używałem sudo bash(tak, wiem, że są lepsze sposoby), aby uzyskać monit o rootowanie. Następnie mogę cdwejść do katalogu, żeby się wkurzyć.

Czy jest na to lepszy sposób?

strugee
źródło
Dlaczego miałbyś chcieć cdjako root (chyba że faktycznie jesteś w powłoce root)?
tripleee
jeśli katalog był własnością roota i nie było globalnego wykonania
strugee
1
To nie jest tak naprawdę przypadek. Może być przydatne czytanie katalogu, ale nie wymaga to, aby katalog był katalogiem roboczym, tzn. Nie jest potrzebny cd.
tripleee
tak, nie zdawałem sobie z tego sprawy, dopóki zaakceptowana odpowiedź nie wskazała, że ​​mogę po prostu sudo ls.
strugee

Odpowiedzi:

12

Nie, nie ma sposobu na przejście do cdkatalogu, który pozwala tylko na rootowanie bez rootowania. Naprawdę nie powinno być zbyt wielu katalogów, które mają takie ograniczenie. W większości przypadków dostęp do danego pliku jest ograniczony, na przykład /etc/shadowplik lub określone pliki dziennika /var/log.

Możesz użyć, sudo ls <dir>aby je zobaczyć zamiast bash. Również przy korzystaniu sudoz roota zwykle chcesz ustawić użytkownika ( supolecenie) zamiast bash, więc zamiast tego użyj tego polecenia:

$ sudo su -

Możesz to zrobić również za pomocą -iprzełącznika sudo :

$ sudo -i

fragment strony podręcznika dotyczący sudo -i

Opcja -i (symuluj początkowe logowanie) uruchamia powłokę określoną we wpisie passwd (5) użytkownika docelowego jako powłokę logowania. Oznacza to, że pliki zasobów specyficzne dla logowania, takie jak .profile lub .login, zostaną odczytane przez powłokę. Jeśli podano polecenie, jest ono przekazywane do powłoki w celu wykonania. W przeciwnym razie wykonywana jest interaktywna powłoka.

Do plików, do których nie masz dostępu, możesz użyć jednego z następujących sudopoleceń:

$ sudo tail /var/log/messages

$ sudo less /etc/shadow
slm
źródło
3
Dlaczego miałbyś używać sudo su -zamiast sudo -i? Oba dają ci wszystkie uprawnienia superużytkownika, chociaż wszystko czego potrzebujesz to możliwość CAP_DAC_READ_SEARCH.
Stéphane Chazelas
@StephaneChazelas - Nigdy wcześniej nie zauważyłem tego przełącznika. Moje oryginalne wprowadzenie dotyczyło sudośrodowisk Solaris, a jego wersja sudonie zawierała tego przełącznika. Przeglądając dziennik zmian sudo wygląda na to, że ta opcja została dodana w 2004 roku. Zgaduję, że się z tym umawiam, ale zapytałeś 8-). Zmienię odpowiedź, aby uwzględnić oba, dzięki!
slm
@ StéphaneChazelas Zgadzam się. Wolę, sudo -Hiponieważ ustawia także katalog domowy (domyślnie nie ustawia home w mojej dystrybucji, domyślnie może się różnić). Jeśli tego nie zrobisz, możesz skończyć z plikami należącymi do roota w domu, jeśli utworzą tam nowe pliki.
doug65536,
5

Nie, nie ma. Potrzebujesz powłoki działającej jako root.

Ignacio Vazquez-Abrams
źródło
I, jak wskazano w komentarzach, nie ma sensu, cdchyba że uruchamiasz powłokę lub porównywalny proces.
tripleee
0

Racja, nie możesz. Oto obejście:

sudo sh -c "cd restricted-dir; some_command"
Tagar
źródło