permitir sudo para outro usuário sem senha

46

Eu quero poder 'su' para um usuário específico, permitindo que eu execute qualquer comando sem que uma senha seja inserida.

Por exemplo:

Se meu login fosse user1 e o usuário ao qual eu quero 'su' for user2:

Eu usaria o comando:

su - user2

mas então ele me pede

Password:

zio
fonte
Peça ao outro usuário a senha. Pelo menos o outro usuário sabe o que foi feito com seu ID.
Nómada global
1
Isso não tem nada a ver com outro usuário físico. Os dois IDs são meus. Conheço a senha ao criar a conta. Só não quero digitar a senha todas as vezes.
zio
Seria bom ssh para o usuário ou você precisa herdar um shell em particular e precisa de su para funcionar?
bmike
1
@zio Ótimo caso de uso. Não open -na Skypefunciona para você?
bmike

Respostas:

66

sudo pode fazer exatamente isso por você :)

Porém, ele precisa de um pouco de configuração, mas uma vez feito, você faria apenas isso:

sudo -u user2 -s

E você estaria logado como usuário2 sem inserir uma senha.

Configuração

Para sudo configure, você deve editar seu arquivo de configuração via: visudo. Nota: este comando abrirá a configuração usando o vieditor de texto; se você não se sentir confortável com isso, precisará definir outro editor (usando export EDITOR=<command>) antes de executar a linha a seguir. Outro editor de linha de comando, às vezes considerado mais fácil nano, é o que você faria export EDITOR=/usr/bin/nano. Você geralmente precisa de privilégios de superusuário para visudo:

sudo visudo

Este arquivo está estruturado em uma seção diferente, os aliases, depois os padrões e, finalmente, no final, você tem as regras. É aqui que você precisa adicionar a nova linha. Então você navega no final do arquivo e adiciona isto:

user1    ALL=(user2) NOPASSWD: /bin/bash

Você pode substituir também /bin/bashpor ALLe, em seguida, você poderia lançar qualquer comando como user2 sem uma senha: sudo -u user2 <command>.

Se você quiser mudar para qualquer usuário, basta usar

user1    ALL=(ALL) NOPASSWD: /bin/bash

Atualizar

Acabei de ver seu comentário sobre o Skype. Você pode considerar adicionar o Skype diretamente ao arquivo de configuração do sudo. Suponho que você tenha o Skype instalado na sua pasta Aplicativos :

user1    ALL=(user2) NOPASSWD: /Applications/Skype.app/Contents/MacOS/Skype

Então você ligaria do terminal:

sudo -u user2 /Applications/Skype.app/Contents/MacOS/Skype
Huygens
fonte
Isso é muito menos complicado do que a idéia das teclas ssh, portanto, use isso a menos que você precise das chaves ssh para acesso remoto também.
bmike
2
Uma coisa a ser observada do ponto de vista da segurança é que especificar um comando específico implica que ele deve ser um comando somente leitura para o usuário1; Caso contrário, eles podem substituir o comando por outra coisa e executá-lo como usuário2. E se você não se importa com isso, é melhor especificar que user1 pode executar qualquer comando como user2 e, portanto, ter uma configuração sudo mais simples.
26515 Stan Standdiel
@StanKurdziel good point! Embora seja algo para estar ciente, é muito raro ter executáveis ​​do sistema graváveis ​​pelos usuários, a menos que você seja root, mas nesse caso você não precisa do sudo ;-) Mas você está certo em adicionar este comentário porque é muito raro que eu provavelmente já esqueci isso mais de uma vez.
Huygens
Para obtê-lo mais perto do comportamento su - user2em vez de su user2, os comandos devem, provavelmente, todos envolvem sudo -u user2 -i, a fim de simular um login inicial como user2
Gert van den Berg
4

Eu configuraria chaves ssh públicas / privadas para a segunda conta e armazenaria a chave na primeira conta.

Então você pode executar um comando como:

 ssh user@localhost -n /Applications/Skype.app/Contents/MacOS/Skype &

Você ainda tem os problemas em que o Skype fica confuso, pois duas instâncias estão em execução em uma conta de usuário e os arquivos lidos / gravados por esse programa podem entrar em conflito. Também pode funcionar bem o suficiente para suas necessidades e você não precisaria de um iPod touch para executar sua segunda instância do Skype.

bmike
fonte
1
Essa é uma boa solução segura para o caso geral de login sem senha em qualquer conta em qualquer host, mas eu diria que provavelmente será um exagero quando as duas contas estiverem no mesmo host e pertencerem ao mesmo usuário.
Calum_b
@scottishwildcat É muito mais seguro do que a alternativa de criar scripts para a senha e alimentá-la em texto não criptografado ou usar uma variável e armazenar a senha no chaveiro e usar uma ferramenta como expectscript da interação. Eu apenas uso sudo su - blahe digito minha senha. Eu acho que a outra resposta cobre o sudo bem o suficiente para manter isso como um comentário.
Bmike
Ah, eu certamente não estava sugerindo que sua resposta deveria ser removida ... Eu nem votei para baixo, é uma resposta perfeitamente boa.
Calum_b
Parece que estamos em total acordo - obrigado pela adição - fique à vontade para editá-lo na resposta, se você puder melhorar.
bmike
A solução aceita ( sudo -u user2 <...>) tem a vantagem de não poder ser usada remotamente, o que pode ajudar na segurança - não existe uma chave privada para o usuário1 que possa ser roubada.
Gert van den Berg