Pode-se usar um arquivo de chave como uma senha para o sudo?

11

Contexto

Eu gosto de trabalhar em público no meu laptop, mas também gosto de usar o sudo sem uma senha. Com base no que sei agora, eu usaria a NOPASSWDopção no meu sudoersarquivo, mas é claro que qualquer um poderia usar o sudo como quisesse.

Um pensamento importante que me vem à mente é que existem programas de bloqueio. No entanto, eu preferiria usar uma unidade flash (e usá-la apenas para sudo) porque (1) é mais rápida, (2) mais fácil do que digitar minha senha e (3) não estou preocupada com as pessoas acessando meu conteúdo nem fazendo coisas nefastas coisas: o laptop estaria em público próximo a outras pessoas, e a única propriedade intelectual do meu laptop é um projeto Angular muito básico.

Além disso, eu e outras pessoas podemos desejar impedir o uso indevido do sudo em um computador que não esteja executando um ambiente X ou Wayland. Meu trabalho atual exige um navegador moderno, mas se eu tiver a chance de não usar o X e usar apenas um multiplexador, faço isso - meu laptop é um pouco velho e lento.

Questão

O que eu gostaria de fazer é colocar um arquivo de chave em uma unidade flash e simplesmente conectar a unidade flash quando estou no laptop e retirá-la quando me afastar dela.

Então, aqui estão minhas três perguntas derivadas desse problema:

  1. Isso é possível com o sudo como está?
  2. Caso contrário, eu seria capaz de escrever um programa que me permita fazer isso?
  3. Em caso afirmativo, qual idioma pode ser o melhor para escrever este programa?

(4. [Talvez uma pergunta estranha] Este pacote poderia ser separado ou precisaria ser um fork do sudo?)

Nota

Se for relevante, minha configuração é o Arch Linux com bspwm, sem ambiente de desktop. A maior parte do meu trabalho é desenvolvimento web no urxvt / vim e verificação no Chrome.

Gage Sorrell
fonte
1
O pam_usb atende às suas necessidades?
StrongBad 14/11
@StrongBad Oh ... sim. Parece que ele não faz imediatamente apenas sudo, e faz login e sudo juntos, mas isso não importa para mim. Obrigado!
precisa
2
Ok, para esclarecer, você deseja permanecer conectado constantemente e impedir que as pessoas usem o sudo em sua conta.
StrongBad 14/11
@StrongBad Correct.
precisa
Você pode configurar algo usando o rootpwsinalizador nos /etc/sudoersarquivos e a configuração pam_usbpara login raiz.
rubberstamp

Respostas:

3

Não sei se entendi por que a NOPASSWDopção não atende totalmente às suas necessidades, mas se você quiser exigir a presença da unidade flash, posso pensar em algo que quase faça o que você está procurando.

Isso é mais uma solução alternativa, mas você pode criar um usuário administrativo local, digamos superuser, e conceder a ele sudodireitos sem senha , ou seja, adicionar a seguinte linha ao seu /etc/sudoersarquivo:

superuser ALL=(ALL) NOPASSWD:ALL

Você pode desativar o login com senha e configurar a autenticação SSH somente com chave para esse usuário, ou seja, executar passwd -l superusere adicionar a seguinte estrofe ao seu /etc/ssh/sshd_config:

Match user superuser
PasswordAuthentication no

Em seguida, crie um par de chaves SSH para esse usuário. Adicione a chave pública /home/superuser/.ssh/authorized_keyse coloque a chave privada na sua unidade flash. Então, quando você quiser usar a superuserconta, conecte sua unidade flash e ssh à superuserconta usando sua chave privada. E voilà! Agora você tem senha sudopara o seu usuário. É claro que você ainda precisará sair das sessões do shell quando terminar - desconectar a unidade flash não será suficiente. Embora eu ache que você também possa configurar um gancho de pré - comando para verificar a chave privada e sair automaticamente se ela não estiver presente (ou se for inválida).

igal
fonte
uma resposta fácil para esclarecer porque você pode querer fazer isso. Para este servidor, estou tentando entrar novamente, só tenho a chave raiz, sem acesso root ssh, estou bloqueado no usuário ec2, que o sudo está pedindo a um pw que não tenho. Eu scp'd minha chave root no servidor, então, agora, idealmente, gostaria de usar essa chave para obter acesso ao sudo, para que eu possa consertar as coisas.
Brian Thomas