Criando um servidor SFTP no CentOS

ftp
Share
banner

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

PUBLICIDADE


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.