O SFTP é um protocolo de transferência de arquivos usando SSH para assegurar comandos e dados que estão sendo transferidos entre o cliente e o servidor.
No FTP comum, os dados que estão sendo transferidos não são criptografados, ficando expostos e comprometendo a segurança das informações.
Neste cenário montaremos um servidor CentOS para rodar um SFTP com ChRoot e ainda gerar logs das conexões. Vamos lá:
Visualizando a versão do nosso CentOS
cat /etc/redhat-release
CentOS release 6.2 (Final)
Instalando o OpenSSH
rpm -qa | grep openssh
openssh-server-5.3p1-70.el6_2.2.x86_64
openssh-5.3p1-70.el6_2.2.x86_64
openssh-clients-5.3p1-70.el6_2.2.x86_64
rpm -qa | grep rsyslog
rsyslog-4.6.2-12.el6.x86_64
### SFTP + CHROOT ####
Arquivo –> /etc/ssh/sshd_config
Descomente a linha e coloque “no” para login de root
PermitRootLogin no
****************************************
Inserir o conteúdo abaixo no arquivo /etc/ssh/sshd_config
Subsystem sftp internal-sftp
Match Group sftp
ChrootDirectory /home/chroot/%u
ForceCommand internal-sftp
AllowTcpForwarding no
****************************************
Reiniciando o SSH
service sshd restart
Criando o diretório Chroot
mkdir /home/chroot
ll /home/
drwxr-xr-x 5 root root 4096 Jul 12 14:53 chroot
groupadd sftp
##### CRIAR AS CONTAS ######
useradd -g sftp -d /home/chroot/usuario1 -s /sbin/nologin usuario1
Definir senha – passwd usuario1
Terá que ser trocado para root.root os usuários
ll /home/chroot/
drwx—— 4 usuario1 sftp 4096 Jul 12 14:52 usuario1
chown root.root /home/chroot/usuario1
ll /home/chroot/
drwx—— 4 root root 4096 Jul 12 14:52 usuario1
chmod 755 /home/chroot/usuario1
ll /home/chroot/
drwxr-xr-x 4 root root 4096 Jul 12 14:52 usuario1
Dentro do /home/chroot/ do usuário criar diretório para os arquivos:
mkdir -m 700 /home/chroot/usuario1/usuario1_remessa
mkdir -m 700 /home/chroot/usuario1/usuario1_retorno
chown usuario1.sftp /home/chroot/usuario1/usuario1_remessa
chown usuario1.sftp /home/chroot/usuario1/usuario1_retorno
Testar PUT e GET para o diretório criado
sftp usuario1@servidor
usuario1@servidor password:
Connected to servidor.
servidor> ls -l
drwxr-xr-x 2 0 0 4096 Jul 15 06:17 dev
drwx—— 2 580 576 4096 Jul 13 12:39 usuario1_remessa
drwx—— 2 580 576 4096 Jul 13 19:23 usuario1_retorno
servidor> cd usuario1_remessa
servidor> put erro.log
Uploading erro.log to /usuario1_remessa/erro.log
erro.log 100% 1630 1.6KB/s 00:00
servidor> get erro.log
Fetching /usuario1/erro.log to erro.log
/usuario1_remessa/erro.log 100% 1630 1.6KB/s 00:00
##### LOG SFTP #######
Senhores, fiz algumas modificações para gerar log do serviço sftp.
Linhas modificadas no /etc/ssh/sshd_config
LogLevel INFO
ForceCommand internal-sftp -f AUTHPRIV -l INFO
Criar dentro do usuário o /dev para o socket.
mkdir /home/chroot/usuario1/dev
Coloquei no /etc/rsyslog.conf
$InputUnixListenSocketHostname internal-sftp
$AddUnixListenSocket /home/chroot/usuario1/dev/log
Sempre que criarmos um usuário novo devemos colocar também no /etc/rsyslog.conf . Como exemplo acima.
service rsyslog restart
Dentro do home usuário ele cria:
ll /home/chroot/usuario1/dev/
srw-rw-rw- 1 root root 0 Jul 12 13:27 log
netstat -a | grep chroot
unix 2 [ ] DGRAM 21404038 /home/chroot/usuario1/dev/log
Saída do log no /var/log/secure
tail -f /var/log/secure | grep internal-sftp –> serviço sftp
Jul 12 13:44:35 internal-sftp sshd[10297]: open “/usuario1_retorno/erro.log” flags WRITE,CREATE,TRUNCATE mode 0666
Jul 12 13:44:35 internal-sftp sshd[10297]: close “/usuario1_retorno/erro.log” bytes read 0 written 1630
Jul 12 13:44:35 internal-sftp sshd[10297]: set “/usuario1_retorno/erro.log” mode 0644
Jul 12 13:44:35 internal-sftp sshd[10297]: set “/usuario1_retorno/erro.log” modtime 20120710-19:27:03
Jul 12 13:44:36 internal-sftp sshd[10297]: opendir “/usuario1_retorno“
Jul 12 13:44:36 internal-sftp sshd[10297]: closedir “/usuario1_retorno“
ll /home/chroot/usuario1/
drwxr-xr-x 2 root root 4096 Jul 12 14:09 dev
drwx—— 2 usuario1 sftp 4096 Jul 12 16:51 usuario1_remessa
drwx—— 2 usuario1 sftp 4096 Jul 12 14:40 usuario1_retorno
E outra maneira de simplificar o PATH do usuário chrootado é criar usuario_diretorio. Como exemplo acima em negrito. Para quem tem o mesmo servidor rodando o serviço de FTP é importante a dica a baixo.
Quando criar uma conta sftp colocar no arquivo /etc/vsftpd/user_list o usuário para que não faça uso de ftp
rpm -qa | grep vsftp d
vsftpd-2.2.2-6.el6_2.1.x86_64
Enviado por Antônio Amaral
|
|
Quer continuar por dentro das novidades do Blog Seja Livre? Siga o nosso perfil no TWITTER, curta a nossa página no FACEBOOK ou adicione o Blog Seja Livre nos seus círculos do GOOGLE+. Se você usa ORKUT, nós também estamos lá, inclusive no IDENTI.CA e Linkedin.



























