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


481

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


1
Я задал похожий вопрос, потому что столкнулся с проблемами с переменными среды XDG ( $XDG_RUNTIME_DIRв частности), которые сводили меня с ума. -> unix.stackexchange.com/questions/354826/…
Джонатан Комар

Ответы:


562

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

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

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

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

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

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

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


17
Кроме того, su - [user]может быть полезно - дополнительная черта дает вам оболочку входа.
Эфимент

Я получаю эту ошибку "-su: / dev / stderr: В доступе отказано" после выполнения этой команды echo >>/dev/stderrпри входе в систему с su --login ...любой подсказкой? Я нашел это между прочим unix.stackexchange.com/questions/38538/…
Водолей Power

Позволяет ли это каждому новому пользователю иметь разные, переопределяющие значения для переменных среды? например, git config для работы, с открытым исходным кодом и т. д.
Кевин Саттл

Одна находка, когда я перечислил envэто, увидела, что все было в порядке, а визуальный осмотр может пойти; И одна вещь была неправильно: XAUTHORITY=/home/user1/.Xauthority'. Not sure _why_? So X-window doesn't work by default because the protection on ~ / .Xauthority` файл: -rw-------. Я сделал копию, и это позволило мне запустить gedit в качестве эксперимента.
будет

1
если вы получаете «Эта учетная запись в данный момент недоступна»: su -s / bin / bash - www-data
max4ever

47

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

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

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


Что если в моей системе нет ни ssh-сервера, ни sudo? Можете ли вы упомянуть эту часть в ответе?
Чепанг

хорошо, Пратт ответил, что один
tshepang

4
sudo -sдает вам оболочку как su, sudo -iимитирует логин как su -. Можно сочетать с -u $user, конечно.
Эфимент

гораздо эффективнее возможность "войти в систему" как пользователь, который не может нормально войти, является большим преимуществом ...! полностью позволил мне запустить экземпляр базы данных, не шутя с разрешениями или selinux
Феликс Ганьон-Гренье

21
$ whoami 

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

$ su secondUser
Password:

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


Полезно, если вы не sudoer.
Марко Сулла

15

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

sudo su - username

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


8

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

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

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

РЕДАКТИРОВАТЬ: Для чего бы то ни было, вы можете использовать команду linux vlock в вашем ~ / .bashrc для блокировки терминальных сессий по умолчанию, требуя пароль пользователя терминальной сессии для разблокировки. Это в некоторой степени предотвратило бы перезапуск вышеупомянутого термина в исходном пользовательском контексте, учитывая, что термин не создается с использованием нестандартного ~ / .bashrc пользователя, как настроено.



2

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

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

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


2

Давайте сделаем это правильно: вы вошли как пользователь 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 и вернуться к вашему логину.


1

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


-1
~$ sudo login

Затем вам будет предложено ввести пароль sudo (текущий зарегистрированный пароль пользователя).

Также: убедитесь, что текущий пользователь находится в файле sudoers!


2
Вопрос был о том, чтобы войти как другой пользователь.
Minix
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.