Jak przełączać się między użytkownikami na jednym terminalu?


480

Chciałbym zalogować się jako inny użytkownik bez wylogowywania się z bieżącego (na tym samym terminalu). W jaki sposób mogę to zrobić?


1
Zadałem podobne pytanie, ponieważ napotkałem problemy ze zmiennymi środowiskowymi XDG ( $XDG_RUNTIME_DIRw szczególności), które doprowadzały mnie do szału. -> unix.stackexchange.com/questions/354826/…
Jonathan Komar

Odpowiedzi:


561

Co powiesz na użycie supolecenia?

$ whoami
user1
$ su - user2
Password:
$ whoami
user2
$ exit
logout

Jeśli chcesz zalogować się jako root, nie musisz podawać nazwy użytkownika:

$ whoami
user1
$ su -
Password:
$ whoami
root
$ exit
logout

Zasadniczo można użyć sudodo uruchomienia nowej powłoki jako żądany użytkownik; -uflaga pozwala określić nazwę użytkownika, który ma:

$ whoami
user1
$ sudo -u user2 zsh
$ whoami
user2

Istnieją bardziej okrężne sposoby, jeśli nie masz dostępu do sudo, takie jak ssh nazwa użytkownika @ localhost, ale sudoprawdopodobnie jest najprostszy, pod warunkiem, że jest zainstalowany i masz pozwolenie na jego użycie.


17
Ponadto, su - [user]mogą być przydatne - dodatkowa kreska daje powłokę logowania.
ephemient

Otrzymuję ten błąd „-su: / dev / stderr: Odmowa uprawnień” po wykonaniu tego polecenia echo >>/dev/stderrprzy logowaniu za pomocą su --login ...jakiejkolwiek wskazówki? Znalazłem ten btw unix.stackexchange.com/questions/38538/…
Aquarius Power

Czy to pozwala każdemu nowemu użytkownikowi mieć inne, nadrzędne wartości zmiennych środowiskowych? np. git config do pracy, open source itp.
Kevin Suttle

Jedno stwierdzenie, kiedy wymieniłem envto, zobaczyłem, że wszystko było w porządku, a inspekcja wizualna może się udać; I jeszcze jedna rzecz była błędna: XAUTHORITY=/home/user1/.Xauthority'. Not sure _why_? So X-window doesn't work by default because the protection on plik ~ / .Xauthority` jest: -rw-------. Zrobiłem kopię i to pozwoliło mi uruchomić gedit jako eksperyment.
będzie

1
jeśli
pojawi

46

Zasadniczo używasz sudodo uruchamiania nowej powłoki jako użytkownik, którego chcesz; -uflaga pozwala określić nazwę użytkownika, który ma:

[mrozekma@etudes-1 ~] % whoami
mrozekma
[mrozekma@etudes-1 ~] % sudo -u nobody zsh
[nobody@etudes-1 ~] % whoami
nobody

Istnieją bardziej okrężne sposoby, jeśli nie masz dostępu do sudo ssh username@localhost, ale myślę, że sudojest to prawdopodobnie najprostsze, jeśli jest zainstalowane i masz pozwolenie na korzystanie z niego


Co jeśli mój system nie ma ani serwera ssh, ani sudo? Czy możesz podać tę część odpowiedzi?
tshepang

ok, Pratt odpowiedział, że jeden
tshepang

4
sudo -sdaje powłokę jak su, sudo -isymuluje logowanie jak su -. -u $userOczywiście można go połączyć z .
ephemient

znacznie bardziej wydajny. możliwość „zalogowania się” jako użytkownik, który normalnie nie może się zalogować, to świetny atut ..! całkowicie pozwoliło mi uruchomić instancję bazy danych bez bałagania się przy użyciu uprawnień lub selinux
Félix Gagnon-Grenier

20
$ whoami 

To polecenie drukuje bieżącego użytkownika. Aby zmienić użytkowników, będziemy musieli użyć tego polecenia (a następnie hasła użytkownika):

$ su secondUser
Password:

Po wprowadzeniu prawidłowego hasła zostaniesz zalogowany jako określony użytkownik (co możesz sprawdzić, uruchamiając ponownie) whoami.


Przydatne, jeśli nie jesteś sudoer.
Marco Sulla,

15

Jeśli używasz Ubuntu i jeśli użytkownik, którego chcesz się zalogować, nie ma ustawionego hasła:

sudo su - username

Wprowadź własne hasło i powinieneś zostać ustawiony. Oczywiście wymaga to, aby użytkownik miał uprawnienia do uzyskania uprawnień roota sudo.


8

Aby przełączyć sesję terminala na innego użytkownika, w przypadku gdy ten użytkownik nie może wrócić do pierwotnego użytkownika, użyj exec:

$ | # exec su - [nazwa użytkownika]

To technicznie zaloguje nowego użytkownika w procesie nowego okresu i zamknie bieżącego. W ten sposób, gdy użytkownik próbuje wyjść lub Ctrl-D, terminal zostanie zamknięty, jakby to ten użytkownik go utworzył, tj. Użytkownik nie może wrócić do pierwotnego terminu użytkownika. Niby bezcelowe, biorąc pod uwagę, że wciąż mogą po prostu rozpocząć nową sesję terminalową i automatycznie znajdować się w pierwotnym loginie użytkownika, ale tak jest.

EDYCJA: Aby uzyskać wartość, możesz użyć komendy linux vlock w swoim ~ / .bashrc, aby domyślnie zablokować sesje terminali, wymagając hasła użytkownika sesji użytkownika do odblokowania. To w pewien sposób zapobiegłoby wspomnianemu terminowi restart w oryginalnym kontekście użytkownika, biorąc pod uwagę, że termin nie jest tworzony przy użyciu domyślnego ~ / .bashrc użytkownika, zgodnie z jego konfiguracją.



2

Jeszcze inną drogą jest uruchomienie nowej powłoki jako inny użytkownik (inny niż root), aby uruchamiać komendy jako ten użytkownik.

ubuntu@aws-ip:~$ sudo -u mongodb bash          #<-- or zsh, etc... 
mongodb@aws-ip:~$ mongod --configsvr --dbpath /data/configdb --fork

Przykładem tego jest mongodbużytkownik. Podczas wdrażania podzielonego klastra MongoDB wszystkie niezbędne procesy muszą działać jako mongodbi nie jest konieczne (lub całkowicie wygodne) demonizowanie procesów za pomocą skryptów inicjujących dla kilkudziesięciu węzłów.


2

Pozwól nam to zrobić poprawnie: jesteś zalogowany jako Użytkownik A i chcesz „zalogować się” jako Użytkownik B, aby uruchomić niektóre polecenia, ale po zakończeniu chciałby wrócić do Użytkownika A. Dla uproszczenia zakładam, że chcesz uruchomić ls -l / tmp jako UserB. Jeśli nie chcesz opuszczać bieżącej powłoki UserA, a raczej uruchomić polecenie jako UserB i nadal pozostać zalogowanym jako UserA, powinieneś to zrobić:

su - UserB -c "ls -l /tmp"   <-- Just an example

Zakłada się, że znasz hasło dla UserB. Jeśli jednak nie znasz hasła użytkownika B, musisz znać hasło roota. Następnie:

sudo su - UserB -c "ls -l /tmp"   <-- UserB's pw not needed here

Jeśli wolisz tymczasowo zalogować się jako Użytkownik B, aby uruchomić wiele poleceń, po prostu wykonaj:

sudo su - UserB

To da ci nową powłokę dla UserB (sprawdź to, wpisując id). Po zakończeniu możesz zrobić ctrl-d i wrócić do swojego loginu.


1

Jeśli chcesz uruchomić tylko jedno polecenie, możesz użyć sudo: sudo -u username command


-1
~$ sudo login

Następnie wyświetli monit o podanie hasła sudo (hasło aktualnie zalogowanego użytkownika).

Ponadto: upewnij się, że bieżący użytkownik znajduje się w pliku sudoers!


2
Pytanie dotyczyło zalogowania się jako inny użytkownik.
Minix
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.