Desativando a substituição de comandos no shell

3

Eu tenho uma caixa ssh que executa os serviços Subversion e Mercurial. Na conexão a esta caixa, um script verifica se o usuário está apenas executando comandos relacionados ao mercurial ou ao svn:

    #!/bin/bash
    #
    # Verify that the requested command is an svnserve call.
    #
    # Note that sshd stores the command requested by the client in
    # the variable "SSH_ORIGINAL_COMMAND".

    echo $SSH_ORIGINAL_COMMAND | grep -E '^hg -R'
    ISHG=$?

    if [[ $SSH_ORIGINAL_COMMAND = "svnserve -t" || $ISHG -eq 0 ]]
    then
            exec $SSH_ORIGINAL_COMMAND
    else
            echo "You are only allowed svn access to this server."
    fi

O problema é que a verificação hg não é muito limpa ou segura. Se eu incluir backticks no meu comando ssh remoto, a linha "echo $ SSH_ORIGINAL_COMMAND" ficará feliz em executá-lo. Alguém tem alguma sugestão para limpar isso um pouquinho?

Obrigado!

    
por EightyEight 01.02.2011 / 19:19

2 respostas

4

Sim. Não use shell para isso. Escreva um programa em um idioma que permita que você se certifique de que os únicos binários que serão executados sejam listados em branco.

    
por 01.02.2011 / 19:26
2

O Mercurial vem com uma ferramenta exatamente para isso! Use o script contrib/hg-ssh que fornecemos para restringir os comandos. O arquivo contém este cabeçalho para explicar como usá-lo:

To be used in ~/.ssh/authorized_keys with the command option, see sshd(8):

command="hg-ssh path/to/repo1 /path/to/repo2 ~/repo3 ~user/repo4" ssh-dss ...

(probably together with these other useful options: no-port-forwarding, no-X11-forwarding, no-agent-forwarding)

This allows pull/push over SSH from/to the repositories given as arguments. If all your repositories are subdirectories of a common directory, you can allow shorter paths with:

command="cd path/to/my/repositories && hg-ssh repo1 subdir/repo2"

You can use pattern matching of your normal shell, e.g.:

command="cd repos && hg-ssh user/thomas/* projects/{mercurial,foo}" 
    
por 24.12.2011 / 03:12