Como automatizar com segurança os comandos em execução como root com “sudo su -”?

2

dica (no lado do cliente, como criptografar arquivos / pwd's):

# encrypt pwd with ssh key: 
openssl rsa -in ~/.ssh/id_rsa -outform pem > ~/.ssh/TEMP-id_rsa.pem 2>/dev/null
openssl rsa -in ~/.ssh/id_rsa -pubout -outform pem > ~/.ssh/TEMP-id_rsa.pub.pem 2>/dev/null
echo $PWDHERE > ~/.ssh/TEMP.pwd
openssl rsautl -encrypt -pubin -inkey ~/.ssh/TEMP-id_rsa.pub.pem -in ~/.ssh/TEMP.pwd -out ~/.ssh/TEMP.pwd.enc 2>/dev/null
rm ~/.ssh/TEMP.pwd > /dev/null 2>&1

# decrypt: 
PWDHERE='openssl rsautl -decrypt -inkey ~/.ssh/TEMP-id_rsa.pem -in ~/.ssh/TEMP.pwd.enc'

Então ... seria uma tarefa muito fácil automatizar a execução de comandos via SSH em servidores com o usuário root no lado do servidor (no final, precisamos executar um script de uma máquina desktop no lado do servidor com o usuário root, mas rodar um comando automatizado seria o suficiente para saber, a partir daí poderíamos fazer a coisa ..).

MAS: a pergunta é que como automatizar com segurança os comandos em execução com o root se tivermos que "sudo su -" primeiro no servidor e dar a senha nele?

UPDATE: modificar o arquivo sudoers não é uma opção. (talvez fantoche pode fazer isso ??)

UPDATE # 2:

echo myPassword | sudo -S ls /tmp

não é seguro na AFAIK. (porque se os ps -ef de outros usuários pudessem ver o pwd por um tempo?) Então, isso também não é uma solução.

UPDATE # 3: Eu quero fazer "Controle remoto de uma máquina (s) com comandos ad-hoc"

    
por gasko peter 26.03.2013 / 08:19

5 respostas

0

This não é a melhor maneira de fazer isso . No entanto, sua abordagem não tem o defeito que você reivindica. Quando você corre

echo myPassword | sudo -S ls /tmp

a senha nunca aparece como o argumento de um comando externo: todos os shells lá fora (exceto algumas instalações do BusyBox - isso depende de uma opção de compilação) possuem echo embutido.

    
por 27.03.2013 / 00:30
8

O que você está tentando fazer é insetos em si e realmente não deve ser feito.

Sob essa luz, talvez você queira repensar seus requisitos em "segurança". Por que diabos incomodar com sudo ? Você pode configurar um (segundo) servidor SSH que aceita login como usuário root, mas somente com autenticação de chave pública. Dessa forma, você não precisa transmitir senhas e apenas efetuar login como usuário root e executar seus comandos. Você pode simplesmente

  • copie a configuração do servidor ssh atual, que provavelmente está armazenada em /etc/ssh/sshd_config
  • modifique-o para
    • permitir login de raiz,
    • permitir autenticação de chave pública,
    • negar autenticação de senha,
    • faça-o ouvir em uma porta diferente, por exemplo, 666
  • inicie uma nova sshd instância, usando o novo arquivo de configuração alternativa usando a opção -f .

Em seguida, você configura a autenticação de chave pública para que possa ssh root@server -p 666 "rm -rf /" da sua máquina desktop sem a necessidade de sudo e senha.

Good Riddance: -)

    
por 26.03.2013 / 13:10
1

Na verdade, eu uso python fabric e capistrano . Ambos são bastante fáceis de aprender e facilitarão muito a sua vida.

    
por 25.04.2013 / 00:10
1

Seria melhor projetar sua automação de forma que ela seja disparada do crontab no próprio servidor.

Outra possibilidade é criar um wrapper setUID (que pode ser algo parecido com um programa C que chame execv("/path/to/script",argc,argv); ou algo parecido) para os comandos root-required, e permitir que seus usuários de automação o executem por meio de permissões de grupo. eg

chown root /usr/local/sbin/trustedWrapper
chmod 4750 /usr/local/bin/trustedWrapper
chgrp scriptrunners /usr/local/bin/trustedWrapper

Como último recurso, configure o sudo para não exigir uma senha para o usuário, adicionando a opção NOPASSWD à entrada de sudoers, por exemplo,

admin ALL=NOPASSWD:ALL

embora você provavelmente deva restringir a lista de programas executáveis somente àqueles que devem ser acessados via automação. Para segurança extra, você provavelmente desejará desabilitar logins de senha para este usuário e SOMENTE permitir login via chave ssh.

    
por 29.04.2013 / 20:05
0

Eu acho que essa é a abordagem errada, o que você está tentando fazer?

Controle remotamente uma máquina (s) com comandos ad-hoc e, em seguida, use algo como csshx

Ou, automaticamente, têm tarefas executadas pelo root através do cron e, em seguida, apenas configuram tarefas do cron no servidor, o servidor não depende da máquina do cliente para efetuar login e iniciar o trabalho.

    
por 30.04.2013 / 16:47