Permissões de gravação de usuário SFTP com chroot

10

Eu tenho uma configuração com usuários apenas sftp:

Match Group sftponly
    ChrootDirectory %h
    ForceCommand internal-sftp
    AllowTcpForwarding no

Recebo a seguinte mensagem no meu secure.log:

fatal: bad ownership or modes for chroot directory

Com a palavra-chave match, existem alguns itens de segurança ... os diretórios precisam pertencer ao root e os diretórios precisam ser chmod 755 (drwxr-xr-x). Portanto, torna impossível para um usuário ter permissões de gravação nas pastas, se for gravável apenas na raiz do usuário e definido como ben não gravável para grupos devido à segurança do ssh.

Alguém sabe sobre um bom trabalho por aí?

Adionditsak
fonte
Os chrootusuários do ed possuem os seus ChrootDirectory? Eles podem acessá-lo?
John WH Smith

Respostas:

2

Eu tenho as mesmas configurações no nosso servidor. Usamos a mesma configuração do SSHD. Os diretórios pessoais dos usuários são de propriedade da raiz e, dentro deles, existem pastas documentse de public_htmlpropriedade dos respectivos usuários. Os usuários fazem login usando o SFTP e gravam nessas pastas (não diretamente em casa). Como o SSH não é permitido para eles, ele funciona perfeitamente. Você pode ajustar quais diretórios serão criados para novos usuários no / etc / skel / (pelo menos no openSUSE, não estou familiarizado com outras distribuições).

Outra possibilidade seria o ACL ( documentação do openSUSE ) - ele pode adicionar permissão de gravação para o respectivo usuário em seu diretório pessoal.

Tilia
fonte
1
Para mim, no Debian Jessie (8.10), definir uma ACL na casa do usuário não funciona. Quando o usuário tenta fazer o login com SFTP, que recebempacket_write_wait: Connection to 10.0.0.42 port 22: Broken pipe
de Drew Chapin
7

Encontramos recentemente uma solução alternativa que é assim:

/ etc / ssh / sshd_config:

...

Subsystem sftp internal-sftp

Match Group sftponly
    ChrootDirectory /home
    AllowTCPForwarding no
    X11Forwarding no
    ForceCommand internal-sftp

permissões de diretório:

root@server:~ # chown root:root /home
root@server:~ # chmod 111 /home
root@server:~ # chmod 700 /home/*

Agora, /homecumpre os requisitos ChrootDirectorye não pode ser listado por usuários restritos, mas os sftponlyusuários não poderão efetuar login se seus diretórios pessoais estiverem configurados como de costume ( /home/$LOGNAME): no ambiente chroot, seus diretórios pessoais não estão dentro, /homemas diretamente em raiz ( /).

solução alternativa 1

Defina as casas dos usuários restritos como elas aparecem em chroot:

root@server:~ # usermod -d /username username

caviar 1

Se algum dos usuários irrestritos ou algum script de administração usar a expansão de til do bash, como ~usernameele se expandirá para /usernameagora, o que não é o que isso significa.

Além disso, o administrador que cria sftponlyusuários deve se lembrar de usar a página inicial não padrão. Resolvível com um script. Que o administrador deve se lembrar de usar.

solução alternativa 2

Essa é uma alternativa à anterior que acabamos usando:

root@server:~ # ln -s . /home/home

Isso é criar um link simbólico dentro /homede seu próprio nome de diretório. Agora, em chroot, /home/usernameaponta para o mesmo diretório que sem chroot. Para usuário restrito conectado com sftp, ele aparecerá como /username. Este diretório é gravável para seu proprietário (usuário restrito). O usuário restrito não pode listar seus diretórios pai ou home de nenhum dos irmãos por nome.

A única coisa especial sobre um sftponlyusuário é sua participação no sftponlygrupo. Achamos mais fácil lidar com isso do que a solução alternativa 1.

ressalvas 2

  1. Você não pode ter o usuário chamado 'home' com um diretório inicial /home/home
  2. Você precisa ter cuidado com os scripts que atravessam a /homehierarquia e seguem os links simbólicos.
artm
fonte
Olá artm ou quaisquer outros leitores, eu sei que este é um post antigo, mas você poderia me ajudar a entender a solução 2, por favor? Eu tenho um usuário (ftpuser) que precisa ser preso no diretório inicial (/ home / ftpuser /), isso eu posso conseguir, mas / home / ftpuser precisa ter 755, é claro. Eu preciso que o ftpuser seja capaz de criar arquivos e pastas em seu diretório pessoal. que link simbólico preciso criar e que valor meu ChrootDirectory deve ter?
Blatant
4

Você precisa criar uma estrutura dentro do diretório inicial do usuário, como dirs in e out. Esses diretórios devem pertencer ao usuário e lá ele poderá colocar e obter arquivos.

YoMismo
fonte
0

Você deve criar a seguinte estrutura de diretórios:

/ home / usuário

/ home / user / home / user <- o diretório real ao qual o usuário terá acesso

Opcionalmente:

/home/user/.ssh/authorized_keys <- se você deseja se autenticar com uma chave pública

Fernando Ulisses dos Santos
fonte
0

Em referência à seção 'permissões de diretório' na resposta de @artm (que acabei de testar) .. Encontrei:

root@server:~ # chmod 111 /home <- Does not work

Não permite que a conexão sftp funcione no ubuntu com apenas permissões de execução em tudo, ou seja, 111.

Eu achei aquilo:

root@server:~ # chmod 555 /home

Funciona com a conexão ao sftp com as permissões de leitura e execução, isto é, 555. Não tenho certeza se o debian vs outros tipos são diferentes, mas é isso que funciona no meu ubuntu.

willm
fonte
0

Ao criar um usuário, você deve definir a propriedade usando chowncada dir para cada usuário.

Por exemplo:

sudo chown usertest:groupsftp /home/rootsftp/usertest
Miguel Dueñas
fonte