Implementação de servidor ftp com Proftp em AIX
Introdução
Esta documentação foi escrita a partir de uma implementação de um servidor ftp com o Proftp. O Proftp foi escolhido pela flexibilidade e diversidade de configuração que ele permite. O Proftp foi instalado numa máquina RISC IBM com o sistema operacional AIX.
Os problemas que ocorreram durante a implementação desta solução estão documentados na sessão ? Resolução de Problemas? , que pode ser útil caso eles voltem a ocorrer.
Também estão documentados um exemplo do arquivo de configuração (proftpd.conf) e a man page do proftp.
Há no decorrer da documentação links para páginas contendo informações mais completas.
Informações sobre o Proftp podem ser encontradas em: http://www.proftpd.org
Instalando o servidor proftp
Instalando o proftp
Instalar o binário do proftp para AIX:
- Fazer o download em: http://freeware.bull.net/download/aix43/proftpd-1.2.1.0.exe
- Criar um diretório e copiar o arquivo proftpd-1.2.1.0.exe para este diretório.
- Executar o arquivo::
# ./proftpd-1.2.1.0.exe
Ele vai gerar os seguintes arquivos::
[root@máquina_i] proftp_binario> ls -la
total 3416
drwxr-xr-x 2 root system 512 Jan 11 13:51 .
drwxr-xr-x 7 root system 512 Jan 11 13:28 ..
-rw-r--r-- 1 root system 502 Dec 27 16:47 .toc
-rw-r--r-- 1 root system 1280000 Aug 02 04:51 proftpd-1.2.1.0.bff
-rw-r--r-- 1 root system 2481 Aug 02 04:52 proftpd-1.2.1.0.bff.asc
-rwxr-x--x 1 root system 442862 Dec 27 16:47 proftpd-1.2.1.0.exe
-rw-r--r-- 1 root system 3720 Dec 27 16:51 status_instalacao.txt
[root@máquina_i] proftp_binario>
- Instalar através do smitty:
# smitty install_latest
Configurando o proftp
A configuração do proftpd é feita através de parâmetros no arquivo proftpd.conf. Ver no final desta dica um modelo do arquivo de configuração.
Localização: /etc/proftpd/proftpd.conf
Alguns parâmetros importantes
O proftp permite uma série de configurações. Diversos parâmetros podem ser configurados no arquivo proftpd.conf.
Todas as flags de configuração estão documentadas em:
http://www.proftpd.org/docs/directives/linked/by-name.html
Exemplos:
Segue abaixo exemplos de alguns parâmetros do arquivo proftpd.conf:
Para que o HOME do usuário seja o diretório raíz:
Pode se desejar que o usuário ao se logar por ftp, não tenha acesso a nenhum diretório da máquina que não seja o seu diretório HOME.. Para isso acrescentamos a seguinte linha no arquivo de configuração::
DefaultRoot
Doc: http://www.proftpd.org/docs/directives/linked/config_ref_DefaultRoot.html
Para o proftp autenticar no NIS:
Se no seu ambiente a autenticação de usuário for feita através do NIS, é preciso colocar a seguinte linha de configuração, para que o Proftp autentique os usuários::
PersistentPasswd off
Doc: http://www.proftpd.org/docs/directives/linked/config_ref_PersistentPasswd.html
Para o proftp aceitar conexões apenas dos usuários pertencentes a um determinado grupo::
<Limit LOGIN>
DenyAll
AllowGroup Nome do Grupo
</Limit>
Doc: http://www.proftpd.org/docs/directives/linked/config_ref_DenyAll.html
http://www.proftpd.org/docs/directives/linked/config_ref_All
Para restringir e liberar acessos a diretórios
Negando acesso a todos os diretórios a partir da raiz (/):
<Directory/*>
<Limit READ WRITE DIRS>
DenyAll
</Limit>
</Directory>
Liberando acesso ao diretório /tmp somente aos grupos grupo1, grupo2, grupo3:
<Directory /tmp>
<Limit READ WRITE DIRS>
AllowGroup grupo1
AllowGroup grupo2
AllowGroup grupo3
</Limit>
</Directory>
Doc: http://www.proftpd.org/docs/configuration.html#Directory
Gerando Logs
Para segurança e maior controle da ação dos usuários que se utilizam do serviço de ftp, é desejável gerar logs. O proftp pode gerar diversos tipos de log. É possível determinarmos quais ações queremos logar e os tipos de log que o proftp irá gerar também é definido no arquivo /etc/proftpd/proftpd.conf.
Alguns tipos de logs possíveis de configurar: (/etc/proftpd/proftpd.conf):
SystemLog /usr/local/var/proftpd/proftpsys.log
TransferLog /usr/local/var/proftpd/proftptransf.log
ExtendedLog /usr/local/var/proftpd/proftp.log
Doc:http://www.proftpd.org/docs/directives/linked/config_ref_SystemLog.html http://www.proftpd.org/docs/directives/linked/config_ref_TransferLog.html http://www.proftpd.org/docs/directives/linked/config_ref_ExtendedLog.html
A seguir estão listados exemplos dos logs gerados, de um login feito pelo usuário teste, que se logou as 12:49 e fechou a sessão de ftp as 12:50.
SystemLog
O SystemLog gera logs de login e logout do usuário.
/usr/local/var/proftpd/proftpsys.log:
Jan 14 12:49:46 máquina_i proftpd[164830] máquina_i (10.1.1.56[10.1.1.56]): USER teste: Login successful.Jan 14 12:50:48 máquina_i proftpd[164830] máquina_i (10.1.1.56[10.1.1.56]): FTP session closed.
TransferLog
O TransferLog gera os logs apenas das transferências de arquivos realizadas pelo usuário.
/usr/local/var/proftpd/proftptransf.log:
Mon Jan 14 12:50:42 2002 0 10.1.1.56 1270 /home/unix/teste/proftpd.conf b _ o r teste ftp 0 * c
ExtendedLog
O ExtendedLog, sem especificação, loga todas as ações do usuário. É possível filtrar e logar apenas as ações desejadas, especificando a classe de comando (ver detalhes na documentação). A interpretação desse Log também está na documentação citada acima.
/usr/local/var/proftpd/proftp.log:
10.1.1.56 UNKNOWN root [14/Jan/2002:12:49:43 -0300] "USER teste" 331 -
10.1.1.56 UNKNOWN teste [14/Jan/2002:12:49:46 -0300] "PASS (hidden)" 230
10.1.1.56 UNKNOWN teste [14/Jan/2002:12:49:46 -0300] "SYST " 215 -
10.1.1.56 UNKNOWN teste [14/Jan/2002:12:49:52 -0300] "PORT 10,1,1,56,6,32" 200 -
10.1.1.56 UNKNOWN teste [14/Jan/2002:12:49:52 -0300] "LIST " 226 928
10.1.1.56 UNKNOWN teste [14/Jan/2002:12:49:54 -0300] "PWD " 257 -
10.1.1.56 UNKNOWN teste [14/Jan/2002:12:50:11 -0300] "CWD diversos" 250
10.1.1.56 UNKNOWN teste [14/Jan/2002:12:50:13 -0300] "PORT 10,1,1,56,6,33" 200 -
10.1.1.56 UNKNOWN teste [14/Jan/2002:12:50:13 -0300] "LIST " 226 815
10.1.1.56 UNKNOWN teste [14/Jan/2002:12:50:16 -0300] "CWD .." 250
10.1.1.56 UNKNOWN teste [14/Jan/2002:12:50:17 -0300] "PORT 10,1,1,56,6,34" 200 -
10.1.1.56 UNKNOWN teste [14/Jan/2002:12:50:17 -0300] "LIST " 226 928
10.1.1.56 UNKNOWN teste [14/Jan/2002:12:50:23 -0300] "CWD santos" 250
10.1.1.56 UNKNOWN teste [14/Jan/2002:12:50:24 -0300] "PORT 10,1,1,56,6,35" 200 -
10.1.1.56 UNKNOWN teste [14/Jan/2002:12:50:24 -0300] "LIST " 226 133
10.1.1.56 UNKNOWN teste [14/Jan/2002:12:50:42 -0300] "TYPE I" 200 -
10.1.1.56 UNKNOWN teste [14/Jan/2002:12:50:42 -0300] "PORT 10,1,1,56,6,36" 200 -
10.1.1.56 UNKNOWN teste [14/Jan/2002:12:50:42 -0300] "RETR proftpd.conf" 226 1270
10.1.1.56 UNKNOWN teste [14/Jan/2002:12:50:45 -0300] "TYPE A" 200 -
10.1.1.56 UNKNOWN teste [14/Jan/2002:12:50:45 -0300] "PORT 10,1,1,56,6,37" 200 -
10.1.1.56 UNKNOWN teste [14/Jan/2002:12:50:45 -0300] "LIST " 226 133
LIST (comando ls)
CWD (comando cd)
RETR (comando get)
Executando o proftp
Linha de comando
Para executar o proftpd através de linha de comando é preciso que o parâmentro ServerType esteja configurado como standalone no proftpd.conf::
ServerType standalone
Estando como standalone basta na linha de comando::
# usr/local/bin/proftpd -p enable
OBS:
Para a autenticação no NIS, é preciso iniciar o proftpd com a opção -p enable para que a configuração PersistentPasswd off seja interpretada. Para mais detalhes veja Man page em anexo.
inetd.conf
Antes de colocar o proftpd para ser executado pelo inetd é preciso alterar o parâmetro ServerType no proftpd.conf de standalone para inetd.
No /etc/proftpd/proftpd.conf:
Antes::: ServerType standalone Depois::: ServerType inetd
No /etc/inetd.conf:
Substituir a linha::
ftp stream tcp6 nowait root /usr/sbin/ftpd ftpd
Pela linha de inicialização do proftp::
ftp stream tcp nowait root /usr/local/bin/proftpd proftpd -p enable
Localização Principais arquivos
- binário:
/usr/local/bin/proftpd - arquivo de configuração:
/etc/proftpd/proftd.conf - arquivos de log:
/usr/local/var/proftpd/ proftp.log proftpsys.log proftptransf.log
Resolução de problemas
**Problemas na autenticação do usuário**
Apresenta o seguinte erro no log::
Jan 11 15:32:00 máquina_i proftpd[27532]: Fatal: User: Unknown user 'teste'.
Jan 11 15:32:06 máquina_i proftpd[187240] máquina_i (10.1.5.53[10.1.5.53]): FTP session opened.
Jan 11 15:32:12 máquina_i proftpd[187240] máquina_i (10.1.5.53[10.1.5.53]): USER teste (Login failed): Invalid shell.
Jan 11 15:37:06 máquina_i proftpd[187240] máquina_i (10.1.5.53[10.1.5.53]): FTP login timed out, disconnected.
Notar que o log aponta para Invalid shell do usuário teste.
Solução:
verificar no arquivo /etc/shells se a shell do usuário está cadastrada.
No AIX o /bin é um link simbólico para /usr/bin, ainda assim, é preciso cadastrar no shells, /usr/bin/ksh.
**Erro de serviço indisponível**
Verificar se o parâmetro ServerType está configurado corretamente:
standalone -> iniciar via linha de comando
inetd -> iniciar via inetd.conf
**Erro na execução de comandos**:
[carla@kenobi procedimentos_a_documentar]$ ftp máquina
Connected to máquina.lalala.br.
220 ProFTPD 1.2.1 Server (ProFTPD TEST Installation) [máquina_i]
Name (máquina:teste): teste 331 Password required for teste.
Password:
230 User teste logged in.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
500 Illegal PORT command.
ftp: bind: Address already in use
ftp> pwd
257 "/" is current directory.
ftp> ls
500 Illegal PORT command.
ftp> ls -l
500 Illegal PORT command.
ftp> get smit.log
local: smit.log remote: smit.log
500 Illegal PORT command.
ftp> bye
221 Goodbye.
Esse erro estava sendo ocasionado por ter colocado tcp6 ao invés de tcp no inetd.conf.
O problema foi resolvido substituindo tcp6 por tcp.
Pesquisando o erro na internet foi encontrada a seguinte URL, um email da lista de discussão do proftpd.org, que abordava esse erro:
http://www.proftpd.org/proftpd-devel-archive/00-10/msg00174.html
Arquivo proftpd.conf
Este é um exemplo de um arquivo de configuração do proftp.:
#This ProFTPD configuration is intended for unprivileged TESTING ONLY.
#See Step 4 in INSTALL.
ServerName "ProFTPD"
ServerType inetd
DefaultServer on
#Caso se desejasse fazer com que cada usuario ficasse restrito
#ao seu $HOME no uso do ftp
#DefaultRoot ~
SystemLog /usr/local/var/proftpd/proftpsys.log
TransferLog /usr/local/var/proftpd/proftptransf.log
ExtendedLog /usr/local/var/proftpd/proftp.log
# Use a non-privileged port, rather than the standard ftp port (21).
# The ftpd-data port will be one less.
Port 21
User root
Group system
#Disable some checks.
#Para que o proftp autentique no NIS
PersistentPasswd off
# Umask 022 is a good standard umask to prevent new dirs and files
# from being group and world writable.
Umask 022
# To prevent DoS attacks, set the maximum number of child processes to 5.
MaxInstances 20
# Normally, we want files to be overwriteable.
<Directory /*>
AllowOverwrite on
</Directory>
# Restricoes de acesso a diretorios
# Negado acesso a todos os diretorios a partir da raiz (/)
<Directory /*>
<Limit READ WRITE DIRS>
DenyAll
</Limit>
</Directory>
# Liberado acesso de alguns diretorios para alguns grupos, de acordo com
# a necessidade de cada um
<Directory ~>
<Limit READ WRITE DIRS>
AllowGroup dba
AllowGroup unix
AllowGroup user_ftp
</Limit>
</Directory>
<Directory /tmp>
<Limit READ WRITE DIRS>
AllowGroup dba
AllowGroup unix
AllowGroup operacao
</Limit>
</Directory>
<Directory /extdba>
<Limit READ WRITE DIRS>
AllowGroup dba
AllowGroup unix
</Limit>
</Directory>
<Directory /dbms>
<Limit READ WRITE DIRS>
AllowGroup dba
AllowGroup unix
</Limit>
</Directory>
<Directory /trabalho>
<Limit READ WRITE DIRS>
AllowGroup unix
AllowGroup dba
AllowGroup operacao
</Limit>
</Directory>
# Limitacao de login ftp. Liberado apenas para alguns grupos do ambiente.
<Limit LOGIN>
DenyAll
AllowGroup user_ftp
AllowGroup operacao
AllowGroup unix
AllowGroup dba
</Limit>
Man Page - proftp
(/usr/local/man/man8/proftpd.8):
proftpd 8 "July 2000"
Process with
groff -man -Tascii proftpd.1
NAME
proftpd \- Professional configurable, secure file transfer protocol server
SYNOPSIS
proftpd
-hlntv
-d " debuglevel"
-c " config\-file"
-p " 0|1"
DESCRIPTION
proftpd
is the Professional File Transfer Protocol (FTP) server daemon. The server
may be invoked by the Internet "super-server" inetd(8) each time a
connection to the FTP service is made, or alternatively it can be run as a
stand-alone daemon.
When proftpd is run in standalone mode and it receives a SIGHUP then it will reread its config file. When run in standalone mode without the -n option, the main proftpd daemon writes its process ID to /var/run/proftpd.pid to make it easy to know which process to SIGHUP.
OPTIONS
-h,--help
Display a short usage description, including all available options.
-n,--nodaemon
Runs the proftpd process in standalone mode (must be configured as such in the configuration file), but does not background the process or disassociate it from the controlling tty. Additionally, all output (log or debug messages) are sent to stdout, rather than the syslog mechanism. Most often used with the \fB-d option\fP for debugging.
-v,--version
Displays the version number of ProFTPD to stdout.
-d,--debug " debuglevel"
Sets proftpd's internal debug level (normally 0). The debugleve should be an integer value from 0 to 5, with higher numbers producing more debug output. Normally, debug messages are sent to syslog using the DEBUG facility, however if the -n option is used, all such output is sent to stdout.
-c,--config " config\-file"
Specifies an alternate \fIconfig\-file\fP to be parsed at startup, rather than the default (typically found in \fB/etc/proftpd.conf\fP).
-t,--configtest
Read the configuration file, report any syntax errors, and exit. -p,--persistent " 0|1" Disables (0) or enables (1) the default persistent password support, which is determined at configure time for each platform. This option only affects the default support, it can still be overridden at run-time with the PersistentPasswd directive.
-l,--list
Lists all modules compiled into proftpd.
/usr/sbin/proftpd
/usr/bin/ftpwho
/usr/bin/ftpcount
/usr/sbin/ftpshut
/var/log/xferlog
/var/run/proftpd-[pid]
/var/run/proftpd.pid
/var/run/proftpd-inetd
AUTHORS
ProFTPD was originally written by Floody. It is currently written and maintained by MacGyver (aka Habeeb J. Dihu) <macgyver@tos.net> http://www.macgyver.org.
SEE ALSO
inetd(8), ftp(1), ftpwho(1), ftpcount(1), ftpshut(8)
Full documentation on ProFTPD, including configuration and FAQs is available at
http://www.proftpd.net.
Report bugs at http://bugs.proftpd.net
For help/support, try the ProFTPD mailing list at proftpd@proftpd.net (see http://www.proftpd.net/lists.html for more information).
Esse tutorial lhe foi útil? Economizou tempo ou dinheiro? Que tal colaborar com o Cybershark? Qualquer dólar ajuda :) MUITO OBRIGADO!
A partir do fonte
O artigo é bom, muito bem escrito e explica com detalhes a configuração do proftpd.
Mas vocês sabem onde posso achar os procedimentos de instalação do ProFTPD no AIX?
Obrigado
Qualidade
Achei o conteudo muito bom e objetivo.