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


480

Я хотів би увійти як інший користувач, не виходячи з поточного (на тому ж терміналі). Як це зробити?


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

Відповіді:


561

Як щодо використання 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 ...будь-яким підказом? Я знайшов це btw unix.stackexchange.com/questions/38538/…
Водолій Сила

Чи дозволяє це кожному новому користувачеві мати різні, переважаючі значення змінних середовища? наприклад, 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

46

Зазвичай ви використовуєте sudoдля запуску нової оболонки як потрібного користувача; -uпрапор дозволяє вказати ім'я користувача ви хочете:

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

Є більш схематичні способи, якщо у вас немає доступу до судо, наприклад ssh username@localhost, але я думаю, sudoце, мабуть, найпростіше, якщо він встановлений і у вас є дозвіл на його використання


Що робити, якщо в моїй системі немає ні ssh-сервера, ні sudo? Чи можете ви згадати цю частину у відповіді?
tshepang

Ок, Прат відповів, що один
thepang

4
sudo -sнадає вам оболонку на зразок su, sudo -iімітує вхід у систему su -. Можна поєднувати -u $user, звичайно.
ефемія

набагато ефективніше. можливість "увійти" як користувач, який не може нормально увійти, - великий актив ..! повністю дозволив мені запустити екземпляр бази даних, не возившись з дозволами чи selinux
Félix Gagnon-Grenier

20
$ whoami 

Ця команда друкує поточного користувача. Щоб змінити користувачів, нам доведеться використовувати цю команду (з наступним паролем користувача):

$ su secondUser
Password:

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


Корисно, якщо ви не sudoer.
Марко Сулла

15

Якщо ви працюєте з Ubuntu і якщо користувач, який ви хочете увійти, не має пароля:

sudo su - username

Введіть власний пароль, і вам слід встановити. Звичайно, для цього потрібно, щоб ваш користувач мав права отримувати права root на sudo.


8

Щоб переключити сеанс терміналу на іншого користувача, де цей користувач не може вийти назад у вихідного користувача, використовуйте exec:

$ | # exec su - [ім'я користувача]

Це технічно увійде нового користувача в новий термін, і закриє поточного. Таким чином, коли користувач намагається вийти або Ctrl-D, термінал закриється, як ніби саме той користувач був тим, хто його створив, тобто користувач не може вийти назад у початковий термін користувача. Вигляд безглуздий, враховуючи, що вони все ще можуть просто запустити новий термінальний сеанс і автоматично перейти в оригінальний логін користувача, але він є.

EDIT: Для того, що варто, ви можете використовувати команду llock vlock у ~ / .bashrc для блокування термінальних сеансів за замовчуванням, вимагаючи розблокувати пароль користувача термінальної сесії. Це дещо завадить перезапустити вищезазначений термін у початковому контексті користувача, враховуючи, що термін не є ініційованим, використовуючи невстановлений ~ / .bashrc користувача, як налаштовано.



2

Ще один шлях полягає у запуску нової оболонки як інший (некоріозний) користувач, який виконує команди як цей користувач.

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

Прикладом цього є mongodbкористувач. Під час розгортання ошаленого кластера MongoDB всі необхідні процеси повинні запускатися як mongodbі не потрібно (або цілком зручно) демонструвати процеси, використовуючи скрипти init для десятків вузлів.


2

Давайте нам правильно це зробити: Ви увійшли в систему як UserA і хочете "увійти" як UserB, щоб виконати деякі команди, але хотіли б повернутися до UserA, коли закінчите. Для простоти я припускаю, що ви хочете запустити ls -l / tmp як UserB. Якщо ви не хочете залишати поточну оболонку UserA, а скоріше запускаєте команду як UserB і все ще залишаєтесь увійти як UserA, слід зробити це:

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

Це передбачає, що ви знаєте пароль для UserB. Однак якщо ви не знаєте пароль UserB, вам потрібно знати пароль 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
Питання полягало в тому, щоб увійти як інший користувач.
Мінікс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.