Linux - użyj „su -”, ale zachowaj bieżący katalog

14

Kiedy robię, su -aby dostać się do roota, mój bieżący katalog jest ustawiony na home roota. Czy istnieje sposób na utrzymanie bieżącego katalogu, w którym byłem, podobnie jak sudo -s. A może odpowiedź na użycie sudo?

Rory
źródło
5
Pamiętaj, że nie chcę brzmieć niegrzecznie, ale dlaczego ten problem nie został rozwiązany za pomocą „man su”?
Myrrdyn
1
@Rory proszę przeczytać komentarz
Myrrdyn
Lubię używać sudo su -c "zsh", w moim przypadku, utrzymuje mnie w bieżącym katalogu i ładuję zsh jako powłokę z użytkownikiem root. ctrl+dpo i wrócisz do bieżącego użytkownika. W przypadku katalogu działa dla mnie bezpośrednio na centos, ale może dodanie `&& cd $ (pwd)` wewnątrz przekazanego polecenia może załatwić sprawę.
GabLeRoux
@Myrrdyn Dokumentacje są świetne, gdy wiesz, czego szukasz. Kiedy tego nie robisz, pytanie ekspertów o porady jest szybsze i bardziej dydaktyczne.
Romain Vincent

Odpowiedzi:

18

Zawsze lepiej jest używać sudo, jeśli to możliwe, ponieważ wtedy nie musisz znać (ani podawać komuś) hasła roota. Ustaw hasło roota na coś długiego i okropnego, a następnie zamknij je w sejfie.

Jeśli chcesz później odmówić komuś dostępu, po prostu usuń jego dostęp do sudo, zamiast uczyć wszystkich innych nowego hasła roota.

Jednak - nie musisz używać parametru „-”, jeśli nie chcesz. Otrzymasz powłokę jako root, po prostu nie będzie to powłoka logowania (więc nie będzie ona uruchamiać pliku .profile użytkownika root).

crb
źródło
1
W moim przypadku potrzebowałem aliasu, aby zrobić coś takiego asuser git reset --hard. Ale su - <user> -m -c "git reset --hard"i sudo -u <user> git reset --harduratuje moje środowisko, a git spróbuje odczytać konfigurację git bieżącego użytkownika. Chciałem tylko powiedzieć, że czasami rozwiązanie user205705 korzystające z su - <user> -c "cd pwd; bash" jest lepsze.
ReFruity,
16

Zgadzam się, że sudo jest prawie zawsze lepszą odpowiedzią, ale odpowiedź na drugą część pytania ...

„-” w „su -” oznacza, że ​​chcesz emulować login administratora, a nie tylko uruchamiać go z uprawnieniami administratora.

Jeśli użyjesz zwykłego „su” zamiast „su -” pozostaniesz w tym samym katalogu; jednak będziesz także działał w tym samym środowisku, więc może być konieczne zmodyfikowanie ścieżki w celu uzyskania dostępu do niektórych poleceń administratora.

Russell Heilling
źródło
9

Jeśli korzystasz subez niego -, powinien on znajdować się w bieżącym katalogu. -, -lLub --login powiedzieć su:

Zapewnij środowisko podobne do oczekiwań użytkownika, gdyby użytkownik zalogował się bezpośrednio.

Lub po prostu użyj sudo, ma wiele innych zalet. Lub klucze ssh.

freiheit
źródło
6

Zdecydowanie powinieneś użyć sudo.

su -m
-m (-p): nie resetuj zmiennych środowiskowych (generalnie niezalecane)

Dzięki temu będziesz w folderze po przejściu na root.

Korzyści z używania sudo

Jindrich
źródło
1
Nie widzę, jak to się różni od samego „su”, poza tym, że prawdopodobnie nie resetuje środowiska PATH, co jest możliwym problemem bezpieczeństwa.
David Pashley,
@DavidPashley na przykład wykonuje .bashrcużytkownika zewnętrznego, a nie głównego.
phil294
4

Jeśli naprawdę chcesz używać su, istnieje sposób na pozostanie w tym samym katalogu.

su - <user> -c "cd `pwd`; bash"

Co tu się dzieje:

  • su - <user> = zaloguj się jako
  • -c co oznacza „uruchom polecenie w powłoce nowego
  • -c "cd `pwd`" polecenie, które dajemy, polega na przełączeniu się na bieżącą direcotory ( pwd) - ale ponieważ używamy odwrotnych pwdpoleceń , polecenie jest sprawdzane przed uruchomieniem supolecenia, dzięki czemu faktycznie przełączamy się do katalogu, w którym jesteśmy NOW jako stary użytkownik. Jedynym problemem jest to, że nowa powłoka wychodzi bezpośrednio po uruchomieniu polecenia, więc dodajemy:
  • -c "cd `pwd`; bash" co oznacza „uruchom bash(nowa powłoka) po uruchomieniu cdpolecenia, a powłoka bash nie zostanie zakończona, dopóki się z niej nie wylogujemy.
will.barley
źródło
1
To właściwie jedyna odpowiedź na pytanie. Dobra robota!
Cacahuete Frito
W rzeczywistości su - [user] -c "cd $(pwd); bash"może być nieco lepszy (zmień backticks na $()).
Cacahuete Frito
3

Użyj sudo :). Poważnie, nie potrzebujesz su. „sudo” jest lepsze, ponieważ używasz go tylko do uprzywilejowanych poleceń i może pomóc uniknąć błędów. Otrzymujesz także odpowiedzialność.

chmeee
źródło
2

Jeśli używasz „su”, robi on interaktywną powłokę. Jest to to samo, co „sudo -s”. „su -” tworzy powłokę logowania, która zastąpi środowisko. „sudo -i” jest odpowiednikiem sudo. Jeśli próbujesz uzyskać interaktywną powłokę, zawsze powinieneś używać formularza sudo -i (lub su -), w przeciwnym razie możesz uzyskać dziwne uprawnienia do plików w katalogu domowym użytkownika.

David Pashley
źródło
0

musisz zmodyfikować źródło su, aby wykonać to zadanie. istnieje procedura chdir w procedurze inicjalizacji zmiennych środowiska. skomentuj te stwierdzenia, które zawierały to połączenie. a teraz możesz zrobić „su -”, ale zachowuje bieżący katalog.


źródło