Como posso chroot usuários SSH sftp apenas em suas casas? O

108

Eu quero dar a um cliente acesso ao meu servidor, mas quero limitar esses usuários a seus diretórios pessoais. Vou montar o bind em qualquer arquivo que eu queira que eles possam ver.

Eu criei um usuário chamado bob e o adicionei a um novo grupo chamado sftponly . Eles têm um diretório inicial em /home/bob . Eu mudei seu shell para /bin/false para parar logins SSH. Aqui está sua /etc/passwd line:

bob:x:1001:1002::/home/bob:/bin/false

Eu também alterei o /etc/ssh/sshd_config para incluir o seguinte:

Match Group sftponly
        ChrootDirectory /home/%u
        ForceCommand internal-sftp
        AllowTcpForwarding no

Quando tento fazer login como eles, aqui está o que eu vejo

$ sftp bob@server
bob@server's password: 
Write failed: Broken pipe
Couldn't read packet: Connection reset by peer

Se eu comentar a linha ChrootDirectory , posso fazer SFTP, mas eles têm controle livre sobre o servidor. Eu descobri que ChrootDirectory /home funciona, mas ainda dá acesso a qualquer diretório pessoal. Eu tentei explicitamente ChrootDirectory /home/bob , mas isso não funciona.

O que estou fazendo de errado? Como posso limitar bob a /home/bob/ ?

---- EDITAR -----

Ok, então eu só dei uma olhada em /var/log/auth.log e vi isso:

May  9 14:45:48 nj sshd[5074]: pam_unix(sshd:session): session opened for user bob by (uid=0)
May  9 14:45:48 nj sshd[5091]: fatal: bad ownership or modes for chroot directory component "/home/bob/"
May  9 14:45:48 nj sshd[5074]: pam_unix(sshd:session): session closed for user bob

Eu não tenho certeza do que está acontecendo lá, mas sugere que algo está errado com o diretório do usuário. Aqui está a ls -h /home output:

drwxr-xr-x 26 oli      oli      4096 2012-01-19 17:19 oli
drwxr-xr-x  3 bob      bob      4096 2012-05-09 14:11 bob
    
por Oli 09.05.2012 / 15:43
fonte

3 respostas

110

Todo esse sofrimento é causado por vários problemas de segurança, conforme descritos aqui . Basicamente, o diretório chroot deve ser de propriedade de root e não pode ser qualquer acesso de gravação em grupo. Adorável. Então, você basicamente precisa transformar seu chroot em uma cela de retenção e dentro de que você pode ter seu conteúdo editável.

sudo chown root /home/bob
sudo chmod go-w /home/bob
sudo mkdir /home/bob/writable
sudo chown bob:sftponly /home/bob/writable
sudo chmod ug+rwX /home/bob/writable

E bam, você pode fazer login e escrever em /writable .

    
por Oli 09.05.2012 / 16:21
fonte
50

Para chroot um diretório SFTP, você deve

  1. Crie um usuário e force a raiz a ser proprietário dele

    cd /home
    mkdir john
    useradd -d /home/john -M -N -g users john
    sudo chown root:root /home/john
    sudo chmod 755 /home/john
    
  2. Altere a localização do subsistema em / etc / ssh / sshd_config:

    #Subsystem sftp /usr/lib/openssh/sftp-server
    Subsystem sftp internal-sftp
    

    e crie uma seção de usuário no final do arquivo (o ssh pode morrer reaparecendo se colocado após a linha do Subsistema):

    Match User john
        ChrootDirectory /home/john
        ForceCommand internal-sftp
        AllowTCPForwarding no
        X11Forwarding no
    
por josircg 25.10.2012 / 19:54
fonte
4

Passei o dia inteiro tentando obter um compartilhamento de rede no meu framboesa. Eu queria bloquear o usuário para que ele não conseguisse navegar pelo sistema de arquivos inteiro, sem acesso ao login ssh e eu queria ter acesso de gravação ao compartilhamento de rede.

E aqui está como eu consegui trabalhar:

Primeiro, criei um usuário:

sudo useradd netdrive

Em seguida, editou /etc/passwd e certificou-se de ter /bin/false para o usuário, então a linha era:

netdrive:x:1001:1004:Net Drive User,,,:/home/netdrive:/bin/false

Eu editei /etc/ssh/sshd_config para incluir:

Match User netdrive
  ChrootDirectory /home/netdrive
  ForceCommand internal-sftp
  AllowTcpForwarding no
  X11Forwarding no

Proprietário e permissões do diretório inicial alterado:

sudo chown root:root /home/netdrive/
sudo chmod 755 /home/netdrive/

Ok, depois de tudo isso, consegui me conectar usando sshfs , mas no modo somente leitura. O que eu precisava fazer para conseguir uma pasta gravável:

sudo mkdir -p /home/netdrive/home/netdrive/
sudo chown netdrive:netdrive /home/netdrive/home/netdrive/
sudo chmod 755 /home/netdrive/home/netdrive/

Foi isso, funcionou sem mais mudanças. Note que tenho apenas permissões graváveis para o usuário , não para o grupo como muitas outras soluções online. Consegui criar / excluir / editar / renomear arquivos / pastas sem problemas.

Ao acessar usando sshfs com o usuário netdrive por causa da configuração chroot, eu veria apenas as coisas armazenadas dentro do diretório /home/netdrive/ do servidor, perfeito. A estrutura de diretórios /home/netdrive/home/netdrive/ repetida é o que fez com que funcionasse para ter uma solução limpa chroot ssh gravável .

Agora vou explicar abaixo os problemas que tive:

Você provavelmente não deve executar os seguintes parágrafos :

Depois de olhar para as soluções acima (e muitas outras na rede que até usaram ACL (listas de controle de acesso)) eu ainda não consegui fazê-lo funcionar porque o que fiz em seguida foi:

O seguinte NÃO funcionou para mim:

sudo mkdir /home/netdrive/writable/
sudo chown netdrive:netdrive /home/netdrive/writable/
sudo chmod 755 /home/netdrive/writable/

Como o usuário netdrive ainda não conseguiu gravar nesse diretório /home/netdrive/writable/ apesar de possuir a pasta e ter as permissões. Então eu fiz:     sudo chmod 775 / home / netdrive / gravável / E agora eu poderia criar um diretório e excluí-lo, mas não consegui editá-lo porque ele estava sendo criado sem permissões de grupo graváveis. Aqui, pelo que vi na net, as pessoas usam acl para consertá-lo. Mas eu não estava feliz com isso, já que tive que instalar o acl , depois configurar os pontos de montagem, etc. Também não tenho ideia de por que eu precisaria da permissão group para gravar em uma pasta de propriedade do mesmo usuário.

Parece que, por algum motivo, criar /home/netdrive/home/netdrive e dar posse à última pasta netdrive foi capaz de fazer tudo funcionar sem mexer nas permissões grupo .

    
por mihai.ile 18.07.2015 / 19:58
fonte

Tags