VSFTPD com usuários em chroot - definitivo
Autor: Mushr00m | Publicado: 2010-04-13T12:08:00-07:00

Bem pessoal, aqui começo eu com uma dica simples. Configurar o servidor VSFTPD que é o padrão RH, e que vem no CentOS.


Depois de muita pesquisa e ajuda do Garme, conseguimos colocar o server de ftp no ar \o/


Requisitos: o obejtivo era criar um servidor ftp semelhante ao de host sharing, onde cada usuario tem acesso apenas a pasta do seu site.


segue aqui como foi que funcionou.


em /etc/vsftpd/vsftpd.conf

temos esse arquivo de configuração


# nao aceita conexao de usuario anonimo
anonymous_enable=no 

# usuarios cadastrados localmente podem usar o ftp
local_enable=YES 

# eles podem escrever nos diretorios
write_enable=YES

# permissao padrao
local_umask=022


dirmessage_enable=YES
xferlog_enable=YES 

connect_from_port_20=YES 
xferlog_std_format=YES

# --- aqui vem o pulo do gato ---
#Diz que os usuarios locais vao logar em chroot
chroot_local_user=yes 

# uma lista com usuarios em chroot
# os usuarios nessa lista NAO vao estar em chroot
chroot_list_enable=YES 

# a lista com os usuarios que nao vao participar do chroot
chroot_list_file=/etc/vsftpd/chroot_list

#usa o arquivo /etc/passwd
passwd_chroot_enable=YES 

#escutando em IPV4 
listen=YES 


OBS: isso é o básico para que funcione, você pode achar mais documentação no site do Centos.


ok. temos o arquivo configurado =)



# service vsftpd restart


agora iremos criar um usuario pro ftp.


# adduser ftpuser

# passwd ftpuser

New UNIX password:

Retype new UNIX password:


pronto, temos o usuario criado.


edite o arquivo /etc/passwd


procure a linha referente ao usuario que vc acabou de adicionar.

Nnormalmente, ela estará no final do arquivo.


ftpuser:x:502:502::/home/ftpuser:/bin/bash



Edite a linha , trocando o home  do usuário pra onde você quer que ele tenha acesso. e somente naquele diretório.


Ex.: você quer que o usuário tenha acesso apenas ao diretório /var/www/meusite

entao vamos fazer o seguinte


Antes:   ftpuser:x:502:502::/home/ftpuser:/bin/bash

Depois: ftpuser:x:502:502::/var/www/meusite:/bin/bash


se o diretório desejado ja exsitir, tudo bem, se nao tiver, vamos criar...


# mkdir /var/www/meusite


vamos dar as permissoes ao novo usuário


chwon -R ftpuser:ftpuser /var/www/meusite


prontinho.



Bem. Com isso, ele ainda nao vai conectar, dependendo as configuraçoes de segurança do Selinux.


para ver se o ftp está habilitado para que os usuários loguem em seus diretorios home , rode o seguinte comando como root:


# getsebool -a | grep ftp


a saida será semelhante a essa :


allow_ftpd_anon_write --&gt; off

allow_ftpd_full_access --&gt; off

allow_ftpd_use_cifs --&gt; off

allow_ftpd_use_nfs --&gt; off

allow_tftp_anon_write --&gt; off

ftp_home_dir --&gt; off

ftpd_connect_db --&gt; off

ftpd_disable_trans --&gt; off

ftpd_is_daemon --&gt; on

httpd_enable_ftp_server --&gt; off

tftpd_disable_trans --&gt; off


veja que o ftp_home_dir está off, ou seja, o usuario nao pode logar no seu home =)


pra ativar, é simples. Rode o comando como root:


        <!--   @page { margin: 2cm }   P { margin-bottom: 0.21cm }    
--&gt;  
# setsebool -P ftp_home_dir on



Pronto, está ativado. Vamos verificar ?




# getsebool -a | grep ftp

allow_ftpd_anon_write --&gt; off
allow_ftpd_full_access --&gt; off
allow_ftpd_use_cifs --&gt; off
allow_ftpd_use_nfs --&gt; off
allow_tftp_anon_write --&gt; off
ftp_home_dir --&gt; on
ftpd_connect_db --&gt; off
ftpd_disable_trans --&gt; off
ftpd_is_daemon --&gt; on
httpd_enable_ftp_server --&gt; off
tftpd_disable_trans --&gt; off



Pronto ! Com isso o seu servidor FTP irá funcionar :D