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?


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).


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.


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.


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


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.

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ść.


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.


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.