Definir pasta de inicialização para SFTP ser diferente de / home / username está me lançando problemas de permissão

1

Acabei de instalar um servidor baseado em CentOS para servir como um servidor SFTP.

Preciso de todos os arquivos recebidos para a pasta / mnt / inbound /, por isso, desejo garantir que todos os usuários desse host que efetuam login via SFTP obtenham / mnt / inbound / como ponto de partida, e quero garantir que eles não podem ir a outro lugar.

Cheguei até a conseguir me conectar com um usuário de teste usando um cliente SFTP e garantir que o usuário fosse preso a sua respectiva pasta - mas o usuário não pode fazer upload de arquivos ...

Aqui está o que eu fiz até agora:

  1. Crie um grupo chamado sftponly para conter todos os usuários de entrada do cliente:

$ groupadd sftponly

  1. Modifique o / etc / ssh / sshd_config para usar o subsistema interno-sftp:

# Enable built-in implementation of SFTP Subsystem sftp internal-sftp

  1. Adicione o seguinte no final do sshd_conf:

Match Group sftponly # Force the connection to use the built-in SFTP support ForceCommand internal-sftp # Chroot the connection into the specified directory ChrootDirectory /mnt/inbound/%u # Disable network tunneling PermitTunnel no # Disable authentication agent forwarding AllowAgentForwarding no # Disable TCP connection forwarding AllowTcpForwarding no # Disable X11 remote desktop forwarding X11Forwarding no

  1. Adicionando um usuário para usar o sftp:

$ sudo useradd -g sftponly testuser

  1. deve criar a pasta do usuário em / mnt / inbound:

$ sudo mkdir /mnt/inbound/testuser

Agora posso usar o FileZilla (ou qualquer outro cliente) para fazer uma conexão SFTP com esse host, e posso ver que o usuário está preso à pasta / mnt / inbound / testuser. No entanto, o usuário não pode fazer upload de arquivos.

Eu tentei alterar os direitos da pasta / mnt / inbound / test para que o teste do usuário possa acessá-la, mas isso quebra a capacidade do usuário de se conectar via SFTP.

Não consigo alterar o proprietário da pasta para outro que não seja o root. Como posso garantir que o usuário possa ler e gravar em sua respectiva pasta?

Eu tenho visto várias tentativas de responder perguntas semelhantes na Internet (incluindo o StackExchange), mas parece que faltam um ponto ou dois - já que sempre acabo com uma configuração de SFTP quebrado quando tento seguir as instruções fornecidas em as respostas.

Atenciosamente, P.

    
por pmdci 04.07.2016 / 13:06

2 respostas

3

Certo, consegui obter alguns conselhos no canal de IRC #openssh e aqui está o que faltava na minha solução:

O diretório especificado no ChrootDirectory deve ser de propriedade de root. Como no arquivo sshd_config acima eu especifiquei a variável% u para que cada usuário tenha sua própria base de diretório raiz em seu nome de usuário (por exemplo, testuser seria / mnt / inbound / testuser /), então todos esses diretórios devem ser de propriedade root. Este é, na verdade, o padrão quando eu crio os diretórios fazendo sudo mkdir /mnt/inbound/<username> , pois o comando mkdir é elevar via sudo .

Então, o que eu precisava fazer era criar um subdiretório em /mnt/inbound/<username> e dar a permissão desse diretório para o usuário. No meu caso eu chamei este diretório uploads .

Então minha configuração foi ligeiramente alterada:

Match Group sftponly # Chroot the connection into the specified directory ChrootDirectory /mnt/inbound/%u # Force the connection to use the built-in SFTP support ForceCommand internal-sftp -d /uploads

A linha ForceCommand foi alterada para incluir -d /uploads , o que significa que o diretório padrão após o login do usuário é /uploads . Observe que é /uploads e não /mnt/inbound/%u/uploads porque leva em conta que /mnt/inbound/%u foi especificado como a nova raiz na linha anterior na configuração.

Se eu ChrootDirectory /mnt/inbound/ an especificar ForceCommand internal-sftp -d /%u , eu posso fazer com que a pasta /mnt/inbound/<username> seja de propriedade do usuário final, pois /mnt/inbound é agora o novo diretório raiz que deve pertencer à conta raiz. No entanto, os usuários poderão navegar até a pasta pai e ver os nomes dos diretórios de todas as outras contas. Eu decidi contra isso:)

    
por 04.07.2016 / 13:07
0

Você precisa chown / mnt / pasta de entrada para a conta root e criar pastas de outros usuários, assim como seus nomes na pasta de entrada, e dar a eles direitos totais a eles.

Você pode usar a opção chroot para que cada usuário tenha apenas sua própria pasta e não possa subir.

Mas você não pode ter uma pasta de upload comum usando essa solução.

    
por 12.07.2016 / 15:26

Tags