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: 9.825 ]

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

Como configurar uma rádio virtual no Linux (Fedora Core 4)

Como configurar um túnel com Vtun

Configurando wireless no Ubuntu 7.04 e compartilhando a conexão

Acessando servidor Linux remotamente utilizando WinSCP e Putty no Windows

Mozilla Firefox com plugins para Flash e JAVA

  
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