Para quem conhece o ProFTPd, sabe que pode-se configurar um chroot padrão para “trancar” o usuário dentro de um diretório. Este diertório pode ser o diretório HOME do usuário, ou pode ser um diretório especificado. O problema deste método é que ao ficar dentro de um chroot como por exemplo: /home/usuario, o usuário do FTP não poderá acessar nada além deste diretório e seu conteúdo. Pode ser que o usuário precise acessar outros diretórios, e foi aí que chegou a alternativa para o chroot.
O ProFTPd contém uma configuração bem flexível, parecida com a do Apache. Com a diretriz <Directory>, podemos restringir um certo usuário a acessar apenas os diretórios que queremos. Vou usar aqui um exemplo, que pode ser adaptado facilmente. Suponhamos que eu criei o usuário tobias e seu diretório home será /home/tobias. Dentro deste diretório, eu fiz os seguintes links simbólicos:
ln -s /var/www/html /home/tobias/apache-html ln -s /var/log/httpd /home/tobias/apache-logs ln -s /etc/httpd/conf /home/tobias/apache-conf
Como deu para perceber, tenho vários diretórios que estão localizados em locais totalmente diferentes uns dos outros, e não seria possível “prender” o usuário ao diretório /home/tobias. Criei estes links simbólicos, pois eles vão dar o caminho para que o usuário quando logar, poder entrar nestes diretórios.
Vá no arquivo proftpd.conf (geralmente localizado no diretório /etc) e certifique-se que não esteja usando a opção DefaultRoot, para não utilizar-se do chroot. Agora adicione uma linha assim:
include "/etc/proftpd/tobias.conf"
Nesta linha eu pedi para o ProFTPd adicionar configurações a partir deste outro arquivo. Você poderia colocar o conteúdo deste arquivo no próprio proftpd.conf, mas resolvi adotar este método pois deixa as configurações separadas por usuário, não deixando muito grande e bagunçado o arquivo principal. Agora crie o arquivo /etc/proftpd/tobias.conf e coloque o seguinte conteúdo:
<Directory /home/tobias> <Limit ALL> AllowUser tobias </Limit> </Directory> <Directory /var/www/html> <Limit ALL> AllowUser tobias </Limit> </Directory> <Directory /var/log/httpd> <Limit ALL> AllowUser tobias </Limit> </Directory> <Directory /etc/httpd/conf> <Limit ALL> AllowUser tobias </Limit> </Directory> <Directory /*> <Limit ALL> DenyAll </Limit> </Directory>
Estas linhas indicam que o usuário tobias, através do FTP, poderá apenas acessar os diretórios /home/tobias (que além de ser seu diretório HOME, contém os links para mandá-lo para outros diretórios no sistema), /var/www/html, /var/log/httpd e /etc/httpd/conf. Todos os outros diretórios serão negados ao usuário.
Deu para notar como funciona o método né? Não é tão difícil, é apenas uma idéia para contornar o problema de “segurança máxima” que o chroot oferece.