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

12 comentários:

  1. Poderia me dar uma ajuda, fiz todo esse processo mais ainda não consigo conectar pelo filezilla.

    ResponderExcluir
    Respostas
    1. Olá Eduardo. Qual é o erro que o filezilla está reportando? você desativou o Selinux?

      Excluir
    2. E como anonimo consigo conectar.

      Excluir
  2. Este comentário foi removido pelo autor.

    ResponderExcluir
  3. Esta retornando essa msg:

    Estado: Conexão estabelecida, esperando mensagem de boas-vindas...
    Resposta: 220 (vsFTPd 2.2.2)
    Comando: USER uftp
    Resposta: 530 Permission denied.
    Erro: Não foi possível conectar ao servidor

    ResponderExcluir
    Respostas
    1. Eduardo, acho que esse erro é pq vc não deu a permissão do usuário lá no diretorio root dele.
      chown usuario:usuario /home/ -R
      veja também se o interpretador é o bash.

      posta aqui a sua configuração =}

      Excluir
    2. Este comentário foi removido pelo autor.

      Excluir
    3. Corrigindo:
      chown usuario:usuario /home/usuario -R

      Excluir
    4. Dei essa permissão que você falou, mais continuo sem conseguir acessar.

      Excluir
  4. allow_ftpd_anon_write --> on
    allow_ftpd_full_access --> off
    allow_ftpd_use_cifs --> off
    allow_ftpd_use_nfs --> off
    ftp_home_dir --> on
    ftpd_connect_db --> off
    httpd_enable_ftp_server --> off
    tftp_anon_write --> on

    ResponderExcluir
  5. Agora é o seguinte, consegui logar com autenticação. Queria saber como faço para as pastas ja existentes serem exibidas, ex:. No filezilla o caminho exibido é:

    /home/uftp
    e eu gostaria que fosse exibido o caminho:
    /var/www/html/

    como faço isso?

    ResponderExcluir
  6. Ou também mapear todas as pastas do servidor para que o usuário possa navegar nas pastas.

    ResponderExcluir