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?
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).
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.
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.
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ść.
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.
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.
sudo su -c "zsh"
, w moim przypadku, utrzymuje mnie w bieżącym katalogu i ładuję zsh jako powłokę z użytkownikiem root.ctrl+d
po 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ę.Odpowiedzi:
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).
źródło
asuser git reset --hard
. Alesu - <user> -m -c "git reset --hard"
isudo -u <user> git reset --hard
uratuje 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 "cdpwd
; bash" jest lepsze.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.
źródło
Jeśli korzystasz
su
bez niego-
, powinien on znajdować się w bieżącym katalogu.-
,-l
Lub--login
powiedzieć su:Lub po prostu użyj sudo, ma wiele innych zalet. Lub klucze ssh.
źródło
Zdecydowanie powinieneś użyć sudo.
Dzięki temu będziesz w folderze po przejściu na root.
Korzyści z używania sudo
źródło
.bashrc
użytkownika zewnętrznego, a nie głównego.Jeśli naprawdę chcesz używać
su
, istnieje sposób na pozostanie w tym samym katalogu.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 odwrotnychpwd
poleceń , polecenie jest sprawdzane przed uruchomieniemsu
polecenia, 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 „uruchombash
(nowa powłoka) po uruchomieniucd
polecenia, a powłoka bash nie zostanie zakończona, dopóki się z niej nie wylogujemy.źródło
su - [user] -c "cd $(pwd); bash"
może być nieco lepszy (zmień backticks na$()
).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ść.
źródło
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.
źródło
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