Como fazer com que chaves compartilhadas .ssh / authorized_keys e sudo funcionem juntas?

15

Eu configurei o .ssh / authorized_keys e consigo fazer login com o novo "usuário" usando a chave pub / private ... Eu também adicionei "user" à lista de sudoers ... o problema que tenho agora é quando eu tento executar um comando sudo, algo simples como:

$ sudo cd /root

ele solicitará minha senha, que eu insiro, mas não funciona (estou usando a senha da chave privada que eu configurei)

Além disso, desativei a senha do usuário usando

$ passwd -l user

O que estou perdendo?

Em algum lugar, minhas observações iniciais estão sendo mal entendidas ...

Estou tentando fortalecer meu sistema ... o objetivo final é usar chaves de pub / private para fazer logins versus autenticação de senha simples. Eu descobri como configurar tudo isso através do arquivo authorized_keys.

Além disso, acabarei por impedir logins do servidor através da conta root. Mas antes que eu faça isso eu preciso do sudo para trabalhar para um segundo usuário (o usuário que eu vou entrar no sistema com o tempo todo).

Para este segundo usuário eu quero evitar logins de senha regulares e forçar apenas logins de pub / private key, se eu não bloquear o usuário via "passwd -l user ... então se eu não usar uma chave, Ainda posso entrar no servidor com uma senha regular.

Mas, mais importante , preciso que o sudo funcione com uma configuração de pub / chave privada com um usuário cuja senha tenha sido desativada.

Editar: OK, acho que entendi (a solução):

1) Eu ajustei o / etc / ssh / sshd_config e configurei PasswordAuthentication no Isso evitará logins de senha ssh (certifique-se de ter uma configuração de chave pública / privada funcionando antes de fazer isso

2) Eu ajustei a lista de sudoers visudo e adicionei

root      ALL=(ALL) ALL
dimas     ALL=(ALL) NOPASSWD: ALL

3) root é a única conta de usuário que terá uma senha, estou testando com duas contas de usuário "dimas" e "sherry" que não possuem uma senha definida (as senhas estão em branco, passwd -d user )

O que foi mencionado acima essencialmente impede que todos façam login no sistema com senhas (uma chave pública / privada deve ser configurada).

Além disso, os usuários na lista de sudoers têm habilidades administrativas. Eles também podem su para contas diferentes. Então, basicamente, "dimas" pode sudo su sherry , no entanto "dimas NÃO pode fazer su sherry . Da mesma forma, qualquer usuário que NÃO esteja na lista de sudoers NÃO poderá fazer su user ou sudo su user .

OBSERVAÇÃO Os itens acima funcionam, mas são considerados de baixa segurança. Qualquer script que consiga acessar o código como os usuários "dimas" ou "xerez" poderá executar o sudo para obter acesso root. Um bug no ssh que permite que usuários remotos efetuem login apesar das configurações, execução remota de código em algo parecido com o Firefox ou qualquer outra falha que permita a execução de código indesejado, pois o usuário agora poderá rodar como root. Sudo deve sempre exigir uma senha ou você pode também logar como root ao invés de algum outro usuário.

    
por farinspace 15.07.2010 / 18:32

4 respostas

10

ssh e sudo não têm nada a ver um com o outro. A configuração de um método de autenticação ssh não fará nada para sudo . sudo não vai entender uma senha ssh .

passwd -l destina-se a bloquear a conta de um usuário, para que ele não possa mais ser autenticado por senha. Isso é basicamente o oposto do que você quer, que é permitir que o usuário autentique sem uma senha.

Acho que o que você deseja é a opção NOPASSWD no seu arquivo sudoers .

(PS, não há motivo para executar um comando cd com sudo . cd não se propaga para processos pai, portanto, assim que o sudo sair, você estará de volta ao início. )

Editar: Você continua dizendo que deseja bloquear a senha da conta e deseja que o sudo entenda as chaves pública / privada. Desculpe, o sudo não vai usar as chaves ssh. Não é ssh. Se você não quer que os usuários consigam logar com suas senhas, acho que a resposta é desabilitar a autenticação de senha ssh , não para bloquear a conta. Em seguida, você pode manter uma senha para os usuários, que eles podem usar para fazer o sudo depois que fizerem login via ssh authorized_keys.

    
por 15.07.2010 / 18:36
18

O que você quer fazer é possível, mas será necessária alguma experiência, pois você terá que compilar um módulo PAM chamado pam-ssh- agent-auth .

O processo é razoavelmente simples:

$ sudo aptitude install libssl-dev libpam0g-dev build-essential checkinstall
$ wget "http://downloads.sourceforge.net/project/pamsshagentauth/pam_ssh_agent_auth/v0.9.3/pam_ssh_agent_auth-0.9.3.tar.bz2"
$ tar -xjvf pam_ssh_agent_auth-0.9.3.tar.bz2
$ cd pam_ssh_agent_auth-0.9.3

$ ./configure --libexecdir=/lib/security --with-mantype=man

$ make
$ sudo checkinstall

A edição da configuração do sudo:

$ sudo visudo

Adicione o seguinte:

Defaults env_keep += SSH_AUTH_SOCK

Continue alterando as configurações do sudo PAM:

$ sudo vi /etc/pam.d/sudo

Adicione (logo acima das linhas @include):

**auth [success=2 default=ignore] pam_ssh_agent_auth.so file=~/.ssh/authorized_keys**
@include common-auth
@include common-account
    
por 21.08.2011 / 05:48
4

A resposta de Andre de Miranda fornece uma boa solução usando o pam_ssh_agent_auth , mas as partes estão desatualizadas. Particularmente as instruções /etc/pam.d/sudo ao usar muitas versões atuais do Linux.

Se você está usando o Ubuntu 12.04 preciso, eu realmente simplifiquei o processo, fornecendo uma compilação pam_ssh_agent_auth de um ppa: ppa: cpick / pam-ssh-agent-auth .

Você pode instalar o pacote executando:

sudo add-apt-repository ppa:cpick/pam-ssh-agent-auth
sudo apt-get install pam-ssh-agent-auth

Após a instalação, se você quiser usar este módulo PAM com o sudo, você terá que configurar o sudo e a configuração do PAM. No Ubuntu 12.04, você pode fazer isso criando os dois arquivos a seguir:

/etc/sudoers.d/pam-ssh-agent-auth:

Defaults    env_keep+="SSH_AUTH_SOCK"

/etc/pam.d/sudo:

ent#%PAM-1.0

auth       required   pam_env.so readenv=1 user_readenv=0
auth       required   pam_env.so readenv=1 envfile=/etc/default/locale user_readenv=0
auth       sufficient pam_ssh_agent_auth.so file=/etc/security/authorized_keys
@include common-auth
@include common-account
@include common-session-noninteractive

Se você estiver usando o chef, o processo acima pode ser automatizado com meu livro de receitas, encontrado em um dos dois locais a seguir: link
link .

O diretório files do livro de receitas contém os arquivos /etc/pam.d/sudo e /etc/sudoers.d/pam-ssh-agent-auth descritos acima que funcionam com o Ubuntu 12.04 precisos e devem ser um ponto de partida útil ao usar outras versões / distros.

    
por 28.06.2013 / 04:40
-1

A única maneira que conheço de ignorar a inserção de uma senha é desativando-a no arquivo sudoers .

Algo parecido com isso dará root e todos os membros do acesso wheel completo sem senha:

root    ALL=(ALL)   NOPASSWD: ALL
%wheel  ALL=(ALL)   NOPASSWD: ALL

No entanto, isso é absolutamente não recomendado . Se você tiver um comando específico para executar este servidor, conceda-lhe acesso apenas àquele comando. Ou, melhor ainda, encontre uma maneira diferente de realizar o que você quer fazer, o que não exige uma brecha na segurança.

    
por 15.07.2010 / 18:42