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.