SFTP Server com SSH, Chroot e Rsyslog

Este artigo visa abordar de forma abrangente, a criação de um servidor SFTP, usando o serviço SSH e Chroot. Além disso, mostrarei também como criar os registros em log de cada operação nos diretórios dos usuários através do Rsyslog.

[ Hits: 8.758 ]

Por: Luiz Paulo Cardia em 22/09/2016


Criação dos usuários e diretórios do SFTP



Devido ao tamanho e para facilitar o entendimento, dividi este procedimento em diversas etapas.

Nesta etapa, trataremos dos passos de criação dos usuários SFTP e de seus respectivos diretórios.

Passo 1 - Criar logins dos clientes e fornecedores

Como os clientes e fornecedores precisam apenas de acesso à área de SFTP, criaremos os usuários sem o diretório de logon no sistema:

# adduser empresa1 -s /sbin/nologin
# passwd empresa1

# adduser empresa2 -s /sbin/nologin
# passwd empresa2

Passo 2 - Criar login de gestão dos arquivos do SFTP

Nesse cenário, será criado um usuário de sistema para ser usado por uma aplicação que fará o tratamento dos arquivos recebidos na pasta "in" dos clientes e fornecedores. Quando o tratamento terminar, a aplicação salvará os arquivos na pasta "out" dos mesmos.

# adduser sftpappuser -s /sbin/nologin
# passwd sftpappuser

Para que o usuário da aplicação possa acessar o diretório dos clientes/fornecedores, adicionaremos o usuário no grupo de cada empresa:

# usermod -G empresa1,empresa2 sftpappuser

Passo 3 - Criar os diretórios "Chroot" dos usuários

Por questões de segurança, recomendo organizar os diretórios "Chroot" dos usuários dentro de um diretório padrão e, de preferência, numa partição diferente:

# mkdir /sftp
# mkdir /sftp/empresa1
# mkdir /sftp/empresa1/in
# mkdir /sftp/empresa1/out

# mkdir -p /sftp/empresa2/{in,out}

Para permitir o acesso dos usuários aos seus diretórios "Chroot", devemos alterar as permissões da seguinte forma:

# chown -R empresa1:empresa1 /sftp/empresa1/*
# chown -R empresa2:empresa2 /sftp/empresa2/*

Habilitar o serviço SFTP e Chroot

Nesta etapa, vamos habilitar os serviços do SFTP e dos diretóros "Chroot".

Passo 4 - Editar arquivo de configuração do SSH

Para habilitarmos o serviço SFTP no servidor, precisamos apenas editar o arquivo de configuração do SSH:

# vim /etc/ssh/sshd_config

Vá até o final do arquivo e altere a seguinte linha:

De:

Subsystem   sftp   /user/libexec/openssh/sftp-server

Para:

Subsystem   sftp   internal-sftp -l VERBOSE

Após a alteração, acrescente as seguintes informações logo abaixo da linha anterior:

Match User sftpappuser
  ChrootDirectory /sftp
  X11Forwarding no
  AllowTcpForwarding no
  ForceCommand internal-sftp -l VERBOSE

Match User empresa1
  ChrootDirectory /sftp/empresa1
  X11Forwarding no
  AllowTcpForwarding no
  ForceCommand internal-sftp -l VERBOSE

Match User empresa2
  ChrootDirectory /sftp/empresa2
  X11Forwarding no
  AllowTcpForwarding no
  ForceCommand internal-sftp -l VERBOSE

Obs. 1: no lugar de "User", podermos colocar "Group". No modo User, somente o login especificado poderá ter acesso ao seu diretório "Chroot". No modo Group, qualquer usuário dentro do grupo especificado poderá acessar o diretório "Chroot" em questão.

Obs. 2: a opção "-l VERBOSE" será usada para o registro de log com o Rsyslog. Ela é requisito para quem quer registrar todas as operações SFTP em log.

Criação do arquivo de configuração para o Rsyslog

Como todas as operações dos usuários estarão "enjauladas" em suas próprias sessões, o registro em log ficará restrito apenas ao login no SFTP, com informações bem limitadas, localizado no arquivo /var/log/secure.

Para podermos registrar todas as operações dos usuários, precisamos criar um novo arquivo de configuração para o Rsyslog, baseado no registro por "socket" (referência: https://access.redhat.com/articles/1374633):

Passo 5 - Criar arquivo para registro de LOG

# vim /etc/rsyslog.d/sftp.conf

Para cada usuário novo, acrescente uma nova linha, conforme o exemplo abaixo:

input(type="imuxsock" HostName="sftpappuser" Socket="/sftp/dev/log" CreatePath="on")
if $fromhost == 'sftpappuser' then /var/log/sftp.log
& stop

input(type="imuxsock" HostName="empresa1" Socket="/sftp/empresa1dev/log" CreatePath="on")
if $fromhost == 'empresa1′ then /var/log/sftp.log
& stop

input(type="imuxsock" HostName="empresa2" Socket="/sftp/empresa2/dev/log" CreatePath="on")
if $fromhost == 'empresa2′ then /var/log/sftp.log
& stop

Com esse tipo de configuração, será criado o diretório /dev contendo o arquivo de socket chamado "log" em cada diretório "Chroot" de usuário. O arquivo "log" não vai registrar nenhum log, pois só servirá para auxiliar na operação do Rsyslog. Tanto o diretório quanto o arquivo terão permissão somente de root.

Em seguida, basta criar o arquivo para o registro dos logs, conforme declarado no arquivo "sftp.config":

# touch /var/log/sftp.log

Caso queira dividir os registros por usuário, bastaria alterar o destino /var/log/sftp.log para /var/log/.log.

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Criação dos usuários e diretórios do SFTP
   3. Restart do serviços e testes
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Balanceamento de carga e alta disponibilidade com Bonding Driver e Iproute2

Certificação Digital no Linux - Apache2

CBQ (Controlador de banda) no Conectiva 10

Enjaulando o Bind9 em um chroot

Roteamento no openVPN com redes iguais

  
Comentários
[1] Comentário enviado por MrBlackWolf em 22/09/2016 - 09:15h

Ótimo artigo. Muito bem explicado e útil.

[2] Comentário enviado por pedropaulotg em 29/09/2016 - 15:52h

Boa tarde, fiz o lab e estou com problema no rsyslog.

Sep 29 16:15:08 localhost rsyslogd: cannot create '/sftp/dev/log': Address already in use (Criei o "path" completo manualmente)
Sep 29 16:15:08 localhost rsyslogd: cannot create '/sftp/empresa1/dev/log': Permission denied (Criei até /dev)
Sep 29 16:15:08 localhost rsyslogd: cannot create '/sftp/empresa2/dev/log': Address already in use
Sep 29 16:15:08 localhost rsyslogd: imuxsock does not run because we could not aquire any socket
Sep 29 16:15:08 localhost rsyslogd-3000: activation of module imuxsock failed


[3] Comentário enviado por luiz_cardia em 30/09/2016 - 12:31h


[2] Comentário enviado por pedropaulotg em 29/09/2016 - 15:52h

Boa tarde, fiz o lab e estou com problema no rsyslog.

Sep 29 16:15:08 localhost rsyslogd: cannot create '/sftp/dev/log': Address already in use (Criei o "path" completo manualmente)
Sep 29 16:15:08 localhost rsyslogd: cannot create '/sftp/empresa1/dev/log': Permission denied (Criei até /dev)
Sep 29 16:15:08 localhost rsyslogd: cannot create '/sftp/empresa2/dev/log': Address already in use
Sep 29 16:15:08 localhost rsyslogd: imuxsock does not run because we could not aquire any socket
Sep 29 16:15:08 localhost rsyslogd-3000: activation of module imuxsock failed




Pedro,

Verifica se as permissões para os diretórios /dev/* estão como root:root.

Vou refazer o procedimento com o que está aqui no Viva o Linux, pois antes de aprovarem o artigo que eu fiz, eles modificaram todo o texto. Talvez tenham perdido alguma informação.

Na dúvida, pode comparar com o que está no meu blog (blog.lzinfo.com.br). Lá tem o texto original.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts