Execute um script como root em cada login do ssh

4

Existe uma maneira possível de executar um script, digamos abc.sh ; como usuário root em cada login no meu sistema via SSH?

Eu já passei por uma pergunta semelhante que diz para adicionar o execução de script para o arquivo .bashrc . Isso não é muito útil, pois eu teria que adicioná-lo ao arquivo de configuração de cada usuário. Além disso, eles ainda teriam capacidade de removê-lo.

A execução como raiz não é tão importante quanto negar aos usuários o poder de interromper sua execução. O sistema operacional é debian, se isso ajudar de alguma forma.

    
por hjpotter92 14.07.2013 / 11:35

3 respostas

1

Esta é uma resposta tardia, mas você pode executá-la em cada login E executá-la como root (ou qualquer outro usuário que você queira), fazendo o seguinte:

  1. Escreva seu script, com os comandos que você deseja executar como root, e salve-o, por exemplo como /path/to/root-script.sh .
  2. Faça root (ou o usuário desejado) o proprietário do script.

    chown root:root /path/to/root-script.sh'
    
  3. Defina o bit setuid no script, com outras permissões desejadas. (certifique-se de que não é universalmente gravável, etc.)

    chmod 4755 /path/to/root-script.sh
    

    O 4 significa definir o bit setuid, o que fará com que o script seja executado como o proprietário do script. Isso é o que o sudo usa para garantir a execução como root.

  4. Para garantir que ele seja executado em cada login, execute o conjunto de bits fixos root-script.sh de /etc/profile . O /etc/profile deve ser executado independentemente do shell usado pelo usuário. Observe que isso se aplicará apenas a logins interativos, no entanto.

Editar . Como observado por Scott nos comentários, esta solução geralmente NÃO funciona em nenhum sistema moderno com qualquer script diferente do Perl < 5.12.0. Os kernels modernos ignorariam os scripts com um bit setuid, a menos que tenham sido corrigidos, o que não seria recomendado por razões de segurança.

Em vez disso, o setuid geralmente funciona apenas em binários compilados e [versões antigas do Perl] [ link  que pode usar (Perl < 5.12.0) com suidperl .

Esta questão do Unix / Linux SE tem uma resposta completa do motivo pelo qual o setuid é ignorado por scripts shebang, com seu resumo: DR;

Setuid shebang is insecure but usually ignored. If you run a program with privileges (either through sudo or setuid), write native code or perl, or start the program with a wrapper that sanitizes the environment (such as sudo with the env_reset option).

    
por 04.10.2016 / 09:11
2

Você pode adicionar a chamada em /etc/bash.bashrc - isso é processado em cada login do Bash, portanto, supondo que seus usuários estejam usando o Bash como shell, ele deve executar o script.

    
por 14.07.2013 / 13:16
1

O OpenSSH suporta a variável de configuração ForceCommand que pode ser definida para o nome do caminho de um script que

  1. Algo administrativo - veja abaixo para detalhes.
  2. Chamadas

    $(SHELL) -c "$SSH_ORIGINAL_COMMAND"
    

    ou

    eval "$SSH_ORIGINAL_COMMAND"
    

    depois disso, para realmente executar a tarefa que o usuário pretendia realizar.

Agora, o problema é que o comando forçado é executado com as credenciais do usuário conectado. Para combater isso, basta usar algum tipo de IPC para se comunicar com um processo daemon, rodando como root. Soquetes do domínio Unix parecem ser a melhor opção para mim, pois permitem a transferência das credenciais antes que a troca de dados real seja necessária lugar (usando a chamada getsockopt(SO_PREERCRED) ). A desvantagem é que você terá que escrever um par de ferramentas para fazer isso (bem, a parte do cliente pode ser tratada por socat ).

Veja também este tópico .

    
por 15.07.2013 / 15:44