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/…
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.
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:
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.
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ą.
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.
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.
$XDG_RUNTIME_DIR
w szczególności), które doprowadzały mnie do szału. -> unix.stackexchange.com/questions/354826/…Odpowiedzi:
Co powiesz na użycie
su
polecenia?Jeśli chcesz zalogować się jako root, nie musisz podawać nazwy użytkownika:
Zasadniczo można użyć
sudo
do uruchomienia nowej powłoki jako żądany użytkownik;-u
flaga pozwala określić nazwę użytkownika, który ma:Istnieją bardziej okrężne sposoby, jeśli nie masz dostępu do sudo, takie jak ssh nazwa użytkownika @ localhost, ale
sudo
prawdopodobnie jest najprostszy, pod warunkiem, że jest zainstalowany i masz pozwolenie na jego użycie.źródło
su - [user]
mogą być przydatne - dodatkowa kreska daje powłokę logowania.echo >>/dev/stderr
przy logowaniu za pomocąsu --login ...
jakiejkolwiek wskazówki? Znalazłem ten btw unix.stackexchange.com/questions/38538/…env
to, 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.Zasadniczo używasz
sudo
do uruchamiania nowej powłoki jako użytkownik, którego chcesz;-u
flaga pozwala określić nazwę użytkownika, który ma:Istnieją bardziej okrężne sposoby, jeśli nie masz dostępu do sudo
ssh username@localhost
, ale myślę, żesudo
jest to prawdopodobnie najprostsze, jeśli jest zainstalowane i masz pozwolenie na korzystanie z niegoźródło
sudo -s
daje powłokę jaksu
,sudo -i
symuluje logowanie jaksu -
.-u $user
Oczywiście można go połączyć z .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):
Po wprowadzeniu prawidłowego hasła zostaniesz zalogowany jako określony użytkownik (co możesz sprawdzić, uruchamiając ponownie)
whoami
.źródło
Jeśli używasz Ubuntu i jeśli użytkownik, którego chcesz się zalogować, nie ma ustawionego hasła:
Wprowadź własne hasło i powinieneś zostać ustawiony. Oczywiście wymaga to, aby użytkownik miał uprawnienia do uzyskania uprawnień roota
sudo
.źródło
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:
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ą.
źródło
sudo -iu <your_username>
dla mnie załatw sprawęźródło
Jeszcze inną drogą jest uruchomienie nowej powłoki jako inny użytkownik (inny niż root), aby uruchamiać komendy jako ten użytkownik.
Przykładem tego jest
mongodb
użytkownik. Podczas wdrażania podzielonego klastra MongoDB wszystkie niezbędne procesy muszą działać jakomongodb
i nie jest konieczne (lub całkowicie wygodne) demonizowanie procesów za pomocą skryptów inicjujących dla kilkudziesięciu węzłów.źródło
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ć:
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:
Jeśli wolisz tymczasowo zalogować się jako Użytkownik B, aby uruchomić wiele poleceń, po prostu wykonaj:
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.
źródło
Jeśli chcesz uruchomić tylko jedno polecenie, możesz użyć sudo:
sudo -u username command
źródło
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!
źródło