it-swarm-ru.tech

Как переключаться между пользователями на одном терминале?

Я хотел бы войти как другой пользователь без выхода из текущего (на том же терминале). Как я могу это сделать?

535
tshepang

Как насчет использования команды su?

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

Если вы хотите войти в систему как root, вам не нужно указывать имя пользователя:

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

Как правило, вы можете использовать Sudo для запуска новой оболочки как пользователь, которого вы хотите; -u flag позволяет указать желаемое имя пользователя:

$ whoami
user1
$ Sudo -u user2 zsh
$ whoami
user2

Существуют более замысловатые способы, если у вас нет доступа к Sudo, например, ssh username @ localhost, но Sudo, вероятно, самый простой, при условии, что он установлен и у вас есть разрешение на его использование.

630
Pratt

Обычно вы используете Sudo для запуска новой оболочки в качестве пользователя, которого вы хотите; -u flag позволяет указать желаемое имя пользователя:

[[email protected] ~] % whoami
mrozekma
[[email protected] ~] % Sudo -u nobody zsh
[[email protected] ~] % whoami
nobody

Есть более обходные способы, если у вас нет доступа к Sudo, например ssh [email protected], но я думаю, что Sudo, вероятно, проще всего, если он установлен и у вас есть разрешение на его использование

51
Michael Mrozek
$ whoami 

Эта команда печатает текущего пользователя. Чтобы сменить пользователя, нам нужно будет использовать эту команду (за которой следует пароль пользователя):

$ su secondUser
Password:

После ввода правильного пароля вы войдете в систему как указанный пользователь (это можно проверить, повторно запустив whoami.

25
Ashish Saini

Если вы работаете в Ubuntu и пользователь, которому вы хотите войти в систему, не имеет установленного пароля:

Sudo su - username

Введите свой пароль, и вы должны быть установлены. Конечно, для этого требуется, чтобы у вашего пользователя были права на получение привилегий root с помощью Sudo.

17
Sundae

Чтобы переключить сеанс терминала на другого пользователя, где этот пользователь не может вернуться обратно к исходному пользователю, используйте exec:

$ | # exec su - [имя пользователя]

Это технически войдет новый пользователь в новый процесс термина и закроет текущий. Таким образом, когда пользователь пытается выйти или Ctrl-D, терминал закрывается, как если бы этот пользователь был тем, кто его создал, то есть пользователь не может выйти обратно в исходный термин пользователя. Это бессмысленно, учитывая, что они все еще могут просто начать новый сеанс терминала и автоматически войти в исходный пользовательский термин входа в систему, но это так.

Правка: Для чего стоит, вы можете использовать команду linux vlock в вашем ~/.bashrc для блокировки терминальных сессий по умолчанию, требуя пароль пользователя терминального сеанса для разблокировки. Это в некоторой степени предотвратит перезапуск вышеупомянутого термина в исходном пользовательском контексте, учитывая, что термин не создается с использованием нестандартного ~/.bashrc пользователя, как настроено.

9
SYANiDE

Sudo -iu <your_username> для меня сделать трюк

3
andilabs

Давайте сделаем это правильно: вы вошли как пользователь A и хотите "войти" как пользователь B, чтобы выполнить некоторые команды, но хотели бы вернуться к пользователю A, когда закончите. Для простоты я предполагаю, что вы хотите запустить ls -l/tmp как UserB. Если вы не хотите покинуть текущую оболочку UserA, а выполнить команду от имени UserB и по-прежнему оставаться в системе как UserA, вы должны сделать это:

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

Предполагается, что вы знаете пароль для пользователя B. Однако, если вы не знаете пароль пользователя B, вам нужно знать пароль пользователя root. Затем:

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

Если вы предпочитаете временно войти в систему как UserB для запуска большого количества команд, то просто выполните:

Sudo su - UserB

Это даст вам новую оболочку для UserB (проверьте это, введя id). Когда вы закончите, вы можете сделать Ctrl-D и вернуться к вашему логину.

2
Hopping Bunny

Еще один способ - запустить новую оболочку от имени другого пользователя (не являющегося пользователем root) и запускать команды от имени этого пользователя.

[email protected]:~$ Sudo -u mongodb bash          #<-- or zsh, etc... 
[email protected]:~$ mongod --configsvr --dbpath /data/configdb --fork

Примером этого является пользователь mongodb. При развертывании сегментированного кластера MongoDB все необходимые процессы должны запускаться как mongodb, и нет необходимости (или полностью удобно) демонизировать процессы, используя сценарии инициализации для десятков узлов.

2
azatar

Если вам нужно запустить только одну команду, вы можете использовать Sudo: Sudo -u username command

1
Maksim Luzik