Permissões do diretório do usuário no servidor SSH

1

Eu tenho um servidor SSH sendo executado principalmente para mim, mas agora tenho algum código que gostaria de compartilhar com meus colegas por meio do SVN.

Eu posso compartilhá-lo com svn + ssh criando uma conta separada chamada 'svn', mas 'svn' também pode ser usado para logar e visualizar meus arquivos (em / home / mine / Documents / etc.) . Eu tentei definir o shell de bin / sh para bin / false em / etc / passwd, mas isso também irá bloquear os usuários de obter meus programas através de svn + ssh.

Você tem alguma sugestão?

Muito obrigado! -Stephen

    
por hatmatrix 24.07.2009 / 16:59

6 respostas

4

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:

  1. 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.
  2. 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
    
por 25.07.2009 / 05:31
1

Você precisa alterar as permissões no seu diretório pessoal.

$ chmod 750 /home/mine
    
por 24.07.2009 / 20:31
0

Você não pode usar http / https? Você pode simplesmente usar um mecanismo de autenticação de estilo .htaccess / htpasswd, em vez de criar contas de shell adequadas.

Você pode especificar autenticação alternativa (usando um arquivo de senhas separado) para o svn + ssh também, mas eu nunca fiz isso.

    
por 24.07.2009 / 17:01
0

Se você não quiser que o usuário chamado "svn" consiga visualizar seus arquivos - ou seja, você só quer que o usuário tenha acesso a qualquer coisa que não seja o repositório SVN, você só precisa ajustar as permissões. pouco. Você sabe usar o chmod?

    
por 24.07.2009 / 17:14
0

Obrigado a todos pela vossa ajuda !! Eu não sabia que eu só tinha que chmod o diretório de nível superior. Eu escrevo muitos programas de análise de números para pesquisa científica, mas apenas começo no controle de revisão e na distribuição de código (se eu tivesse algum ponto de 'reputação', eu o ajudaria muito). Insyte: Estou incrivelmente satisfeito com suas instruções para usar o ForceCommand - Eu tenho outra tarefa de compartilhamento (dados arquivados para os quais não estou usando o SVN, então tentarei descobrir como usar para scp) para o qual essa será uma solução muito elegante ! -Stephen

    
por 25.07.2009 / 14:01
0

Pensou em chroot ing o servidor SSH e iniciar o servidor subversion dentro deste ambiente chrooted?

Pode ser um pouco difícil de configurar, mas deve ser mais seguro, porque ninguém deve ser capaz de fazer nada fora dessa » jail « (isso também impede o escalonamento de privilégios).

    
por 25.07.2009 / 18:24