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

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

<p>как насчет использования команды <code>su</code>?</p><pre><code>$ whoami user1 $ su - user2 password: $ whoami user2 $ exit logout </code></pre><p>если вы хотите войти в систему как root, вам не нужно указывать имя пользователя:</p><pre><code>$ whoami user1 $ su - password: $ whoami root $ exit logout </code></pre><p>как правило, вы можете использовать <code>sudo</code> для запуска новой оболочки как пользователь, которого вы хотите; <code>-u</code> flag позволяет указать желаемое имя пользователя:</p><pre><code>$ whoami user1 $ sudo -u user2 zsh $ whoami user2 существуют более замысловатые способы, если у вас нет доступа к sudo, например, ssh username @ localhost, но sudo, вероятно, самый простой, при условии, что он установлен и у вас есть разрешение на его использование.

обычно вы используете sudo для запуска новой оболочки в качестве пользователя, которого вы хотите; -u flag позволяет указать желаемое имя пользователя:[mrozekma@etudes-1 ~] % whoami mrozekma [mrozekma@etudes-1 ~] % sudo -u nobody zsh [nobody@etudes-1 ~] % whoami nobody есть более обходные способы, если у вас нет доступа к sudo, например ssh username@localhost, но я думаю, что sudo, вероятно, проще всего, если он установлен и у вас есть разрешение на его использование

$ whoami </code></pre><p>эта команда печатает текущего пользователя. чтобы сменить пользователя, нам нужно будет использовать эту команду (за которой следует пароль пользователя):</p><pre><code>$ su seconduser password: после ввода правильного пароля вы войдете в систему как указанный пользователь (это можно проверить, повторно запустив whoami.

если вы работаете в ubuntu и пользователь, которому вы хотите войти в систему, не имеет установленного пароля:sudo su - username введите свой пароль, и вы должны быть установлены. конечно, для этого требуется, чтобы у вашего пользователя были права на получение привилегий root с помощью sudo.

чтобы переключить сеанс терминала на другого пользователя, где этот пользователь не может вернуться обратно к исходному пользователю, используйте exec:<blockquote> $ | # exec su - [имя пользователя]</p> </blockquote><p>это технически войдет новый пользователь в новый процесс термина и закроет текущий. таким образом, когда пользователь пытается выйти или ctrl-d, терминал закрывается, как если бы этот пользователь был тем, кто его создал, то есть пользователь не может выйти обратно в исходный термин пользователя. это бессмысленно, учитывая, что они все еще могут просто начать новый сеанс терминала и автоматически войти в исходный пользовательский термин входа в систему, но это так.</p><p>правка: для чего стоит, вы можете использовать команду linux vlock в вашем ~/.bashrc для блокировки терминальных сессий по умолчанию, требуя пароль пользователя терминального сеанса для разблокировки. это в некоторой степени предотвратит перезапуск вышеупомянутого термина в исходном пользовательском контексте, учитывая, что термин не создается с использованием нестандартного ~/.bashrc пользователя, как настроено.</p>

<p><code>sudo -iu <your\_username></code> для меня сделать трюк</p>

<p>давайте сделаем это правильно: вы вошли как пользователь a и хотите "войти" как пользователь b, чтобы выполнить некоторые команды, но хотели бы вернуться к пользователю a, когда закончите. для простоты я предполагаю, что вы хотите запустить ls -l/tmp как userb. если вы <em>не</em> хотите покинуть текущую оболочку usera, а выполнить команду от имени userb и по-прежнему оставаться в системе как usera, вы должны сделать это:</p><pre><code>su - userb -c "ls -l /tmp" <-- just an example </code></pre><p>предполагается, что вы знаете пароль для пользователя b. однако, если вы не знаете пароль пользователя b, вам нужно знать пароль пользователя root. затем:</p><pre><code>sudo su - userb -c "ls -l /tmp" <-- userb's pw not needed here </code></pre><p>если вы предпочитаете временно войти в систему как userb для запуска большого количества команд, то просто выполните:</p><pre><code>sudo su - userb </code></pre><p>это даст вам новую оболочку для userb (проверьте это, введя id). когда вы закончите, вы можете сделать ctrl-d и вернуться к вашему логину.</p>

<p>еще один способ - запустить новую оболочку от имени другого пользователя (не являющегося пользователем root) и запускать команды от имени этого пользователя.</p><pre><code>ubuntu@aws-ip:~$ sudo -u mongodb bash #<-- or zsh, etc... mongodb@aws-ip:~$ mongod --configsvr --dbpath /data/configdb --fork </code></pre><p>примером этого является пользователь <code>mongodb</code>. при развертывании сегментированного кластера mongodb все необходимые процессы должны запускаться как <code>mongodb</code>, и нет необходимости (или полностью удобно) демонизировать процессы, используя сценарии инициализации для десятков узлов.</p>

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