Pode-se usar um keyfile como senha para o sudo?

10

Contexto

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 opção NOPASSWD no meu arquivo sudoers , mas é claro que qualquer um poderia usar o sudo como quiser.

Um pensamento importante que vem à minha mente é que existem programas de bloqueio. No entanto, eu prefiro usar um flash drive (e usá-lo apenas para sudo) porque ( 1) é mais rápido, (2) mais fácil do que digitar minha senha, e (3) não estou preocupado com pessoas acessando meu conteúdo nem fazendo coisas nefastas: o laptop estaria em público perto de outras pessoas, e a única propriedade intelectual na minha laptop é um projeto angular muito básico.

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

Pergunta

O que eu gostaria de fazer é colocar um arquivo de chaves em uma unidade flash e simplesmente conectar a unidade flash quando eu estiver no laptop e removê-la quando eu me afastar dela.

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

  1. Isso é possível com o sudo como está?
  2. Se não, 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 é Arch Linux com bspwm, sem ambiente de desktop. A maior parte do meu trabalho é desenvolvimento web em urxvt / vim e verificá-lo com o Chrome.

    
por Gage Sorrell 14.11.2017 / 19:57

1 resposta

3

Não tenho certeza se entendi por que a opção NOPASSWD não atende às suas necessidades por si só, mas se você quiser exigir a presença da unidade flash, posso pensar em algo que pode quase fazer o que você está procurando por.

Isso é mais uma solução alternativa, mas você pode criar um usuário administrativo local, digamos superuser , e conceder a esse usuário% desudo sem senha, ou seja, adicione a seguinte linha ao seu arquivo /etc/sudoers :

superuser ALL=(ALL) NOPASSWD:ALL

Em seguida, você pode desativar o login por senha e configurar a autenticação SSH apenas para chave para esse usuário, por exemplo, execute passwd -l superuser e adicione a seguinte sub-rotina a 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 a /home/superuser/.ssh/authorized_keys e coloque a chave privada no seu pen drive. Então, quando você quiser usar a conta superuser , conecte sua unidade flash e ssh na conta superuser usando sua chave privada. E voilà! Agora você tem passwordless sudo para seu usuário. É claro que você ainda precisará sair de suas sessões de shell quando terminar - desconectar o flash drive não será suficiente. Embora eu acho que você também pode configurar um Ganho de pré-encomenda para verificar a chave privada e sair automaticamente se não estiver presente (ou se for inválido).

    
por 15.11.2017 / 14:40