Na verdade, é bem simples obter exatamente o que você descreve; a chave é a opção "comando forçado" do ssh. Essencialmente, você diz ao ssh que, não importa o comando que o cliente tente executar, ele sempre executa o comando forçado. Você define o comando forçado para apontar para um script de wrapper simples que verifica se o comando é svnserve -t
. Se for, executa conforme solicitado. Caso contrário, sai. Este é o script que eu uso:
#!/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". if [[ $SSH_ORIGINAL_COMMAND = "svnserve -t" ]] then exec $SSH_ORIGINAL_COMMAND else echo "You are only allowed svn access to this server." fi
Existem duas maneiras de definir este comando forçado:
- Se os usuários estiverem efetuando login usando a autenticação baseada em chave (e devem), você poderá adicionar '' command="/ usr / local / sbin / validate_svn '' como o primeiro campo em sua chave pública em
~/.ssh/authorized_keys
. Para que isso seja seguro, no entanto, você terá que desativar a senha auth. Caso contrário, eles poderão efetuar login com uma senha (ignorando o comando forçado) e editar~/.ssh/authorized_keys
para remover a restrição. - Adicione uma sub-rotina "Match" ao final de
/etc/ssh/sshd_config
para o (s) usuário (s) que devem poder usar apenas o svn. Deve ser algo como isto:
Match user svn ForceCommand /usr/local/bin/validate_svn