Pular para o conteúdo

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.
Luiz Paulo Cardia luiz_cardia
Hits: 10.668 Categoria: Linux Subcategoria: Internet
  • Indicar
  • Impressora
  • Denunciar
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Parte 2: 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
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

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.

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.
   1. Introdução
   2. Criação dos usuários e diretórios do SFTP
   3. Restart do serviços e testes
Nenhum artigo encontrado.

Navegando em modo texto com imagens

Resolvendo problema de conexão a internet ADSL (Velox)

Apache Kafka

Newsbeuter Feed Reader - Instalação e configuração

Utilizando endereços personalizados no seu servidor web: passo-a-passo

#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

Entre na sua conta para comentar.