Como alternar entre usuários em um terminal?

480

Gostaria de fazer login como um usuário diferente sem sair do atual (no mesmo terminal). Como faço isso?

tshepang
fonte
1
Fiz uma pergunta semelhante, porque tive problemas com variáveis ​​de ambiente XDG ( $XDG_RUNTIME_DIRem particular) que estavam me deixando louco. -> unix.stackexchange.com/questions/354826/…
Jonathan Komar

Respostas:

562

Que tal usar o sucomando?

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

Se você deseja fazer login como root, não há necessidade de especificar o nome de usuário:

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

Geralmente, você pode usar sudopara iniciar um novo shell como o usuário que você deseja; o -usinalizador permite especificar o nome de usuário que você deseja:

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

Existem maneiras mais tortuosas se você não tem acesso ao sudo, como ssh username @ localhost, mas sudoé provavelmente o mais simples, desde que esteja instalado e você tenha permissão para usá-lo.

Pratt
fonte
17
Além disso, su - [user]pode ser útil - o traço extra fornece um shell de login.
ephemient 27/10/10
Estou recebendo este erro "-su: / dev / stderr: permissão negada" após executar este comando echo >>/dev/stderrem um login com su --login ...alguma dica? Eu encontrei este btw unix.stackexchange.com/questions/38538/…
Aquarius Power
Isso permite que cada novo usuário tenha valores diferentes e superiores para variáveis ​​de ambiente? por exemplo, git config for work, open source, etc.
Kevin Suttle
Uma constatação, quando listei o artigo env, vi que tudo estava em ordem, assim como uma inspeção visual pode ser executada; E uma coisa estava errada: XAUTHORITY=/home/user1/.Xauthority'. Not sure _why_? So X-window doesn't work by default because the protection on arquivo ~ / .Xauthority` é: -rw-------. Fiz uma cópia e isso me permitiu executar o gedit como um experimento.
vai
1
se você receber "Esta conta não está disponível no momento": su -s / bin / bash - www-data
max4ever 15/03
46

Geralmente você usa sudopara iniciar um novo shell como o usuário que você deseja; o -usinalizador permite especificar o nome de usuário que você deseja:

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

Existem maneiras mais tortuosas se você não tiver acesso ao sudo ssh username@localhost, mas acho que sudoprovavelmente é mais simples se estiver instalado e você tiver permissão para usá-lo.

Michael Mrozek
fonte
E se meu sistema não tiver servidor ssh ou sudo? Você pode mencionar essa parte na resposta?
tshepang
ok, Pratt respondeu que #
tshepang 27/10/10
4
sudo -sdá-lhe um shell como su, sudo -isimula o login como su -. Pode ser combinado com -u $user, é claro.
ephemient 27/10/10
muito mais eficiente. poder "logar" como um usuário que normalmente não pode logar é um grande trunfo ..! totalmente me permitiu executar uma instância de banco de dados sem mexer com permissões ou selinux
Félix Gagnon-Grenier
20
$ whoami 

Este comando imprime o usuário atual. Para alterar usuários, teremos que usar este comando (seguido da senha do usuário):

$ su secondUser
Password:

Após digitar a senha correta, você efetuará login como o usuário especificado (que você pode verificar executando novamente whoami.

Ashish Saini
fonte
Útil se você não é sudoer.
Marco Sulla
15

Se você estiver executando o Ubuntu e se o usuário que você deseja fazer login como não tiver uma senha definida:

sudo su - username

Digite sua própria senha e você deve estar definido. Obviamente, isso exige que seu usuário tenha direitos para obter privilégios de root sudo.

Sundae
fonte
8

Para alternar a sessão do terminal para um usuário diferente, onde esse usuário não pode voltar ao usuário original, use exec:

$ | # exec su - [nome de usuário]

Tecnicamente, isso fará o login do novo usuário em um novo processo de termo e fechará o atual. Dessa forma, quando o usuário tenta sair ou com a tecla Ctrl-D, o terminal fecha como se o usuário tivesse instanciado, ou seja, o usuário não pode voltar ao termo original do usuário. Meio inútil, considerando que eles ainda podem iniciar uma nova sessão de terminal e estar automaticamente no login de termo de usuário original, mas existe.

EDIT: Para o que vale a pena, você pode usar o comando linux vlock no seu ~ / .bashrc para bloquear sessões de terminal por padrão, exigindo a senha do termo user da sessão para desbloquear. Isso impediria de alguma forma o termo mencionado reiniciar no contexto original do usuário, dado que o termo não é instanciado usando o ~ / .bashrc não padrão do usuário, conforme configurado.

SYANiDE
fonte
3

sudo -iu <your_username> para mim fazer o truque

andilabs
fonte
2

Ainda outra rota é lançar um novo shell como um usuário diferente (não raiz) para executar comandos como esse usuário.

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

Um exemplo disso é o mongodbusuário. Ao implantar um cluster MongoDB fragmentado, todos os processos necessários devem ser executados mongodbe não é necessário (ou inteiramente conveniente) daemonizar os processos usando scripts init para dezenas de nós.

azatar
fonte
2

Vamos acertar: Você está logado como UsuárioA e deseja "logar" como UsuárioB para executar alguns comandos, mas gostaria de voltar ao UsuárioA quando terminar. Por uma questão de simplicidade, presumo que você deseja executar ls -l / tmp como UsuárioB. Se você não deseja deixar o shell atual do UsuárioA, mas executar um comando como UsuárioB e ainda permanecer conectado como UsuárioA, faça o seguinte:

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

Isso pressupõe que você saiba a senha do UsuárioB. No entanto, se você não souber a senha do UsuárioB, precisará saber a senha raiz. Então:

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

Se você preferir fazer login temporariamente como UserB para executar muitos comandos, basta:

sudo su - UserB

Isso fornecerá um novo shell para o UserB (verifique isso digitando id). Quando terminar, você pode pressionar ctrl-d e retornar ao seu login.

Hopping Bunny
fonte
1

Se você precisar executar apenas um único comando, poderá usar o sudo: sudo -u username command

Maksim Luzik
fonte
-1
~$ sudo login

Em seguida, será solicitada a senha do sudo (a senha do usuário atualmente conectado).

Além disso: verifique se o usuário atual está no arquivo sudoers!

Tshepo
fonte
2
A pergunta era sobre o login como um usuário diferente.
Minix 27/05