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 NOPASSWD
opção no meu sudoers
arquivo, 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:
- Isso é possível com o sudo como está?
- Caso contrário, eu seria capaz de escrever um programa que me permita fazer isso?
- 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.
rootpw
sinalizador nos/etc/sudoers
arquivos e a configuraçãopam_usb
para login raiz.Respostas:
Não sei se entendi por que a
NOPASSWD
opçã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 elesudo
direitos sem senha , ou seja, adicionar a seguinte linha ao seu/etc/sudoers
arquivo: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 superuser
e adicionar a seguinte estrofe ao seu/etc/ssh/sshd_config
:Em seguida, crie um par de chaves SSH para esse usuário. Adicione a chave pública
/home/superuser/.ssh/authorized_keys
e coloque a chave privada na sua unidade flash. Então, quando você quiser usar asuperuser
conta, conecte sua unidade flash e ssh àsuperuser
conta usando sua chave privada. E voilà! Agora você tem senhasudo
para 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).fonte