Criando contas de usuários limitadas no servidor Ubuntu

4

Usando o servidor Ubuntu, preciso criar algumas contas de usuário com as seguintes limitações:

(1) O usuário só pode ver e manipular arquivos em seu diretório pessoal.

(2) O usuário só pode executar comandos relacionados ao rsync e sftp.

Eu quero que os usuários possam fazer backup de arquivos usando o rsync, e eu quero que eles possam recuperar arquivos usando um cliente sftp como o FileZilla.

Fora isso, eu não quero que os usuários possam visualizar outros arquivos no sistema, ou executar qualquer comando que possa mexer com o sistema.

Sou mais um usuário do Ubuntu Desktop e tenho pouca experiência em administrar um servidor linux. A maioria dos tutoriais que eu descobri supõem que eu conheço coisas que não conheço. Então, estou com dificuldades para configurar isso.

    
por LonnieBest 20.03.2010 / 21:28

2 respostas

6

Tudo o que o usuário faz requer acesso a grandes partes do sistema de arquivos. Para provar isso para você mesmo, execute o seguinte comando:

strace -e trace=file /bin/ls/$HOME

Você verá que listar o conteúdo de seu próprio diretório inicial requer a abertura e a leitura de pelo menos 40 outros arquivos espalhados pelo sistema. Outros comandos, como sftp e outros, requerem acesso muito mais amplo.

Os sistemas Unix são projetados com base no conceito de usuários com acesso somente leitura à maioria do sistema operacional. Com permissões e grupos cuidadosos, você pode facilmente proibi-los de ver o conteúdo dos diretórios uns dos outros. Com o pam_apparmor , você poderá restringir quais aplicativos eles podem executar.

EDITAR: Acabei de reler seus requisitos. Não parece que você precisa deles para fazer login em um shell totalmente interativo. Se este for o caso, existem duas maneiras de proceder:

  1. %código%. Em seguida, defina shell do usuário para ser 'scponly'. Não deixe que o nome esteja cheio de você; Ele também funciona com o sftp. Se você quiser bloqueá-los ainda mais, consulte a documentação em aptitude install scponly sobre a configuração de um "chroot" por usuário.
  2. Se você precisar permitir o acesso a mais comandos do que apenas sftp / scp (como o rsync), precisará rolar seu próprio validador de comandos e configurar um "comando forçado" ssh. Adicione um bloco desse tipo ao seu /usr/local/share/doc/scponly :

    Match group sftponly
        ForceCommand /usr/local/bin/validate_sftp
    

    Em seguida, escreva o script /etc/ssh/sshd_config . Algo semelhante a isto:

    #!/bin/bash
    if [[ $SSH_ORIGINAL_COMMAND = "rsync --server" ]]
    then
        exec $SSH_ORIGINAL_COMMAND
    elif [[ $SSH_ORIGINAL_COMMAND = "/usr/lib/openssh/sftp-server" ]]
    then
        exec $SSH_ORIGINAL_COMMAND
    else
        echo "You are only allowed rsync or sftp access to this server."
    fi
    

    Adicione o (s) usuário (s) ao grupo "sftponly" (você terá que adicionar o grupo, é claro) e eles estarão restritos aos comandos permitidos pelo seu script.

por 20.03.2010 / 22:11
2

Eu não sei se isso pode atender às suas necessidades, mas como você diz que isso deve ser uma máquina servidora, pode valer a pena pensar em abordar o problema de um lado diferente:

  • Talvez os usuários não precisem de uma conta unix no sistema.
  • Poderia algo semelhante ser alcançado configurando, e. um servidor sftp (ou algo semelhante, por exemplo, WebDAV) nesse sistema? E o sistema fornece uma solução de backup automatizada? (Se você quiser, você pode até mesmo fornecer versões automáticas com o Subversion + WebDAV.)

... Apenas uma ideia, porque há sempre um certo risco de segurança envolvido (e requer gerenciamento de permissões de usuário e arquivo) ao dar aos usuários uma conta do sistema - pelo menos enquanto você não configurar um servidor virtual para todos.

    
por 20.03.2010 / 22:51