Essas preocupações de segurança estão certas. Então, para responder a sua primeira pergunta: para que funcione como quiser, você deve colocar validate_rsync em um diretório em que user12
tenha permissão de execução, mas não escreva. O mesmo arquivo validate_rsync
deve ter permissões de leitura e execução para o usuário, mas é claro que não deve ser gravado. O problema aqui é que /root
por padrão é acessível apenas por root
user, você precisa de um caminho onde cada diretório tenha permissão de execução para user12
. Por exemplo, você pode copiar validate_rsync
para /usr/local/bin
e torná-lo de propriedade de root
. Enquanto user12
puder executar e ler, tudo bem.
Você não precisa proteger seu arquivo authorized_keys
. Seria melhor forçar user12
a executar um comando por configuração, colocando em sshd_config
o seguinte:
Match user user12
ForceCommand /usr/local/bin/validate_rsync
Acho que esta solução é melhor do que mexer com authorized_keys.
Além disso, no seu validate_rsync
, citaria $SSH_ORIGINAL_COMMAND
(mais seguro), e alteraria sua sentença case
para verificar a validade do comando para uma expressão regular usando grep
; mais fácil, mais compacto e mais potente:
echo "$SSH_ORIGINAL_COMMAND" >> /var/log/synchronize-log.log
if echo "$SSH_ORIGINAL_COMMAND" | grep -qE '[&;<>'|]'; then
echo Rejected
elif [[ "${SSH_ORIGINAL_COMMAND:0:14}" == "rsync --server" ]]; then
$SSH_ORIGINAL_COMMAND
else
echo Rejected
fi
Para responder sua segunda pergunta, enquanto você está registrando o SSH_ORIGINAL_COMMAND, você pode executar um teste com os diretórios que deseja considerar e, em seguida, examinar o SSH_ORIGINAL_COMMAND que você está obtendo. Então você pode fazer validate_rsync
validar apenas esse comando.