terça-feira, 13 de abril de 2010

VSFTPD com usuários em chroot - definitivo

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 --> off
allow_ftpd_full_access --> off
allow_ftpd_use_cifs --> off
allow_ftpd_use_nfs --> off
allow_tftp_anon_write --> off
ftp_home_dir --> off
ftpd_connect_db --> off
ftpd_disable_trans --> off
ftpd_is_daemon --> on
httpd_enable_ftp_server --> off
tftpd_disable_trans --> 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:


-->
# setsebool -P ftp_home_dir on

Pronto, está ativado. Vamos verificar ?

# getsebool -a | grep ftp

allow_ftpd_anon_write --> off
allow_ftpd_full_access --> off
allow_ftpd_use_cifs --> off
allow_ftpd_use_nfs --> off
allow_tftp_anon_write --> off
ftp_home_dir --> on
ftpd_connect_db --> off
ftpd_disable_trans --> off
ftpd_is_daemon --> on
httpd_enable_ftp_server --> off
tftpd_disable_trans --> off

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