|
|||||||
| Wiki | Classificados | Galeria | Reviews | Jogos | Comunidades | RSS Feeds | FAQ | Termos de Uso | Sobre |
| Cadastre-se | Fotos | Blogs | Lista de Membros | Calendário | Pesquisar | Mensagens de Hoje | Marcar Fóruns Como Lidos |
FerramentasPublicidade |
From UnderLinux WikiProFTPD com autenticação via MySQL [editar] IntroduçãoEstou supondo que você já possui o MySQL instalado no seu computador, por isso não abordarei a instalação do mesmo neste tutorial. [editar] Pacotes utilizados
[editar] Hora de colocar a mão na massa[editar] DesinstalandoA primeira coisa que você deve fazer é verificar se o ProFTPD foi instalado na tua máquina através de um pacote pré-compilado. Se sim, você terá que o desinstalar. Aí você se pergunta: "Pra que desinstalar e instalar de novo? No mínimo esse cara quer me fazer de besta x/". Não é bem assim. O problema é que precisamos instalar o ProFTPD através do source para podermos habilitar o suporte ao MySQL, afinal, o objetivo é esse certo? No Slackware eu fiz isso: # ls /var/log/packages/ | grep proftpd proftpd-1.2.9-i486-3 daí: # removepkg /var/log/packages/proftpd-1.2.9-i486-3* OBS:Você terá que adaptar os comandos de acordo com sua distribuição ou usar o gerenciador de pacotes de sua distro.
(Slackware) Agora que desinstalamos o pacote pré-compilado, é hora de baixar o source. A página oficial do ProFTPD é: "http://www.proftpd.org" E o link para a versão mais atual (no momento em que fiz o tutorial) é: "ftp://ftp.proftpd.org/distrib/source/proftpd-1.2.10.tar.bz2" use: # wget ftp://ftp.proftpd.org/distrib/source/proftpd-1.2.10.tar.bz2 ou seu navegador preferido. Terminado o download, temos que descompactar o arquivo: # tar xvjf proftpd-1.2.10.tar.bz2 -C /usr/local/src/ (isso descompactará o arquivo na pasta /usr/local/src/) # cd /usr/local/src/proftpd-1.2.10/
[editar] Preparando o arquivo para a compilaçãoAntes temos que encontrar as pastas "include" e "lib" relacionadas ao MySQL. # find / -name mysql | grep lib /usr/lib/mysql # find / -name mysql | grep include /usr/include/mysql Obs.: Pode variar de acordo com sua distribuição. [editar] InstalandoCom esses resultados eu posso compilar: # ./configure --with-modules=mod_sql:mod_sql_mysql --with-libraries=/usr/lib/mysql --with-includes=/usr/include/mysql Se tudo estiver OK: # make Espere terminar (o tempo vai variar de acordo com seu computador) e faça: # make install OBS: Não esqueça de substituir as pastas no --with-libraries e --with-includes pelas pastas encontradas no seu sistema ao usar os comandos: # find / -name mysql | grep include # find / -name mysql | grep lib [editar] Configurando[editar] MySQLAgora que já temos o ProFTPD instalado com os módulos corretos, precisamos criar uma database e uma tabela onde serão guardados os dados dos usuários do FTP. [editar] Chamando o MySQLPrimeiro chame o MySQL: # mysqld_safe & ( No Slackware ) [editar] Agora crie uma database# mysqladmin create ftp -u root -p [editar] Logando-se ao MySQL# mysql -u root -p [editar] Criando as tabelasAgora vamos criar as tabelas. Primeiramente temos que pensar no que precisaremos para cadastrar um usuário. Acho que nome, login, senha, UID, GID, shell e diretório são suficientes. É bom colocar um campo mostrando se o usuário é ativo ou não, pois assim você poderá desativar determinados usuários temporariamente apenas modificando o conteúdo desse campo. Uma vez logado e supondo que o nome da database criada seja "ftp", digite: mysql> use ftp Database changed Criando a tabela: mysql> CREATE TABLE ftpusers ( -> nome varchar(255) NOT NULL DEFAULT ''''fulano'''', -> login varchar(20) NOT NULL UNIQUE, -> senha varchar(20) NOT NULL, -> uid int(10) UNIQUE AUTO_INCREMENT, -> gid int(10), -> ativo char(1) NOT NULL DEFAULT ''''s'''', -> dir varchar(255) NOT NULL, -> shell varchar(255) NOT NULL, -> email varchar(255)); Query OK, 0 rows affected (0.00 sec)
[editar] Criando usuário para acesso ao MySqlCom a tabela criada, precisamos criar um usuário para que o ProFTPD possa acessar a database "ftp", que foi a que criamos e dar a ele todos os privilégios de acesso a essa database: mysql> GRANT ALL PRIVILEGES ON ftp.* to usuario@localhost IDENTIFIED BY ''''ftpsenha''''; Query OK, 0 rows affected (0.03 sec) Assim o usuário "usuario", que tem como senha "ftpsenha", terá todos os privilégios sobre a database "ftp". Entenderam? É só trocar "usuario" e "ftpsenha" pelo nome e senha que deseja. [editar] Atualizando as permiçõesEm seguida mandamos o MySQL atualizar as permissões: mysql> flush privileges; Query OK, 0 rows affected (0.03 sec) [editar] usuário para usarmos como teste
mysql> INSERT INTO ftpusers VALUES (''''nome de teste'''', ''''teste'''', ''''casa'''', 8099, 8099, ''''s'''', ''''/home/teste'''', ''''/bin/bash'''', '''' teste@mail.com'''');
O comando acima mandou inserir na tabela "ftpusers" os valores: 'nome de teste', 'userteste', 'senhateste', 9000, 8099, 's', '/home/teste', '/bin/bash', ' teste@mail.com'. [editar] Verificando os usuários cadastradosmysql> SELECT * FROM ftpusers; Caso queira em ordem alfabética (usando "login" como referência): mysql> SELECT * FROM ftpusers ORDER BY login; [editar] Saindo do MySQLmysql> quit Bye [editar] ProFTPDCom a tabela criada no MySQL e um usuário teste cadastrado, está na hora de configurar o ProFTPD. Primeiramente localize o arquivo de configuração do ProFTPD (proftpd.conf): # find / -name proftpd.conf No meu caso obtive isto: "/usr/local/etc/proftpd.conf" Daí é só usar seu editor preferido: # pico /usr/local/etc/proftpd.conf Tudo o que você precisa fazer para ter o ProFTPD funcionando em cima do MySQL é adicionar as seguintes linhas ao arquivo: SQLAuthTypes Plaintext Crypt SQLAuthenticate users SQLConnectInfo ftp@localhost usuario ftpsenha SQLUserInfo ftpusers login senha uid gid dir shell SQLUserWhereClause "ativo=''''s''''" SQLHomedirOnDemand on Explicando ...
[editar] Modo de usarSQLConnectInfo nome_da_databse@localhost usuario_da_database senha_do_usuario
SQLUserInfo nome_da_tabela login senha uid gid dir shell
[editar] IniciandoAgora que adicionamos as linhas ao proftpd.conf, tudo o que precisamos é inicializar o servidor FTP: # proftpd [editar] TestandoAgora já temos o ProFTPD configurado e rodando. Hora de testá-lo: $ ftp localhost Connected to localhost. 220 ProFTPD 1.2.10 Server (Angelina Jolie Me Deseja) [127.0.0.1] Name (localhost:n0z3y): userteste 331 Password required for userteste. Password: ****** 230 User userteste logged in. Remote system type is UNIX. Using binary mode to transfer files. Caso esteja tudo OK, meus parabéns, você acaba de montar um servidor de FTP com autenticação via MySQL, caso contrário refaça os passos e me avise caso encontre algum erro. Em seguida mostrarei algumas coisas legais e configurações adicionais do ProFTPD, não sendo obrigatórias para o funcionamento do servidor.
[editar] Entendendo o arquivo proftpd.confAgora vamos entender um pouco como funciona o arquivo de configuração do ProFTPD. Se você visualizar seu arquivo novamente, verá que ele está mais ou menos parecido com isso: ServerName "ProFTPD Default Installation" ServerType standalone DefaultServer on Port 21 Umask 022 MaxInstances 30 User nobody Group nogroup <Directory /*> AllowOverwrite on </Directory> <Anonymous ~ftp> config </Anonymous> SQLAuthTypes Plaintext Crypt SQLAuthenticate users SQLConnectInfo ftp@localhost usuario ftpsenha SQLUserInfo ftpusers login senha uid gid dir shell SQLUserWhereClause "ativo=''''s''''" SQLHomedirOnDemand on [editar] Explicando as opções
ServerName "Servidor Ftp de teste"
</pre> A parte do MySQL já foi explicada anteriormente. Isto foi só uma visão geral sobre algumas coisas básicas do "proftpd.conf". Na verdade estas e outras opções estão explicadas com mais detalhes no próprio proftpd.conf.
[editar] Criando Virtual HostsA diretriz é usada pra criar configurações diferentes para determinados hosts e/ou IPs. Pode ser usado também para oferecer conexões a diferentes portas na mesma máquina. A maneira de se criar um VirtualHost é a seguinte: <VirtualHost endereço_e/ou_ip> configuração </VirtualHost> [editar] Exemplos de VirtualHost<VirtualHost www.angelina_me_quer.org> ServerName "Estou sonhando" ServerAdmin an@ge.li.na Port 21 MaxClients 05 DefaultServer on TransferLog /var/log/proftpd/angelinameker.log DefaultRoot /home/ftp/angelina AllowOverwrite yes </VirtualHost> <VirtualHost ftp.domínio.com.br> ServerName "Servidor ftp" Port 8021 DefaultRoot ~ DefaultServer on AllowOverwrite yes ServerAdmin email@do.admin Umask 022 TransferLog /var/log/proftpd/serverftp.log </VirtualHost>
Existem funções, por exemplo, que servem para personalizar as mensagens mostradas durante uma seção no ProFTPD. [editar] Mensagem personalizada[editar] Quando LogaPara mostrar uma mensagem quando um usuário se logar você usa: AccessGrantMsg "mensagem" Exemplo: AccessGrantMsg "Seja bem vindo %u"
[editar] Ao falharPara mostrar uma mensagem quando um usuário falhar ao tentar se logar use: AccessDenyMsg "mensagem" Exemplo: AccessDenyMsg "Acesso negado à %u ! Vá com Deus filho ..." [editar] Antes do loginPara mostrar uma mensagem antes do login você usa: DisplayConnect diretório/arquivo.msg Exemplo: DisplayConnect /usr/local/proftpd/connect.msg [editar] Setando mensagem de login e logoutDisplayLogin login.msg DisplayQuit logout.msg OBS: Os arquivos login.msg e logout.msg devem estar abaixo do diretório principal do usuário. [editar] Funções de tempoExistem funções que usam o tempo que o usuário está conectado para executar determinadas ações. [editar] Derrubando usuários por tempo ociosoPara desconectar um usuário se ele ficar ocioso durante um certo tempo: TimeoutIdle Tempo_em_segundos Exemplo: TimeoutIdle 180 Desconecta o usuário se ele ficar ocioso por 3 minutos. [editar] Demora para logonPara desconectar alguém que não se logou com sucesso durante um determinado tempo: TimeoutLogin tempo_em_segundos Exemplo: TimeoutLogin 60 [editar] Desconectar por tempo sem upload/DownloadPara desconectar um usuário caso ele fique um determinado tempo sem transferir nada: TimeoutNoTransfer tempo_em_segundos Exemplo: </pre> TimeoutNoTransfer 120 </pre> Desconecta o usuário depois de 2 minutos sem transferência. [editar] Tempo máximo de cada cessãoPara desconectar alguém depois de um determinado tempo: TimeoutSession tempo_em_segundos Exemplo: TimeoutSession 600 Desconecta qualquer usuário logado por 10 minutos. [editar] função TransferRate=Uma função bastante útil é a "TransferRate". Com ela você pode limitar a taxa de transferência do servidor. Para usá-la: TransferRate RETR taxa_em_kbps:byteslivres Exemplo: TransferRate RETR 8:10 Limita a taxa de transferência para 8kbps.
[editar] função DefaultRootOutra bastante utilizada é a DefaultRoot. DefaultRoot diretório Exemplo: DefaultRoot /home/tal Com ela você pode limitar os usuários a um determinado usuário. Caso use: DefaultRoot ~ você estará limitando o usuário ao seu próprio home (recomendável).
[editar] Exemplo de proftpd.confServerName "Angelina Jolie Me Deseja" ServerType standalone DefaultServer on Port 8021 #Umask 022 MaxInstances 20 User nobody Group nogroup DefaultRoot ~ AccessGrantMsg "Uepaa!! Seja Bem Vindo %u" AccessDenyMsg "ADEUS!" DisplayConnect /usr/local/message.msg TimeoutLogin 60 TimeoutNoTransfer 120 TimeoutIdle 180 # Normally, we want files to be overwriteable. AllowOverwrite on # Bar use of SITE CHMOD by default <Limit SITE_CHMOD> DenyAll </Limit> SQLAuthTypes Plaintext Crypt SQLAuthenticate users SQLConnectInfo ftp@localhost usuario ftpsenha SQLUserInfo ftpusers login senha uid gid dir shell SQLUserWhereClause "ativo=''''s''''" SQLHomedirOnDemand on
[editar] ConclusãoConcluindo ... Como dito anteriormente, isto foi apenas uma configuração básica do ProFTPD. Aconselho dar uma olhada na página oficial do mesmo para configurações adicionais. Espero ter ajudado.
[editar] AutorHugo Dória (xnozey@gmail.com) |