ProFTPd: Como utilizar um chroot e acessar diretórios disponíevis em vários lugares do sistema?
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.
Gostou?
Imprimir esta página
Leia também:
- ProFTPd: Por que quando dou upload em algum arquivo, a hora não fica igual à hora do sistema do servidor FTP?
- Tomcat: Como desabilitar a listagem de diretórios quando não há um index?
- Seção FAQ vira Dicas
- Apache: Eu tenho muitos domínios virtuais, como posso fazer para gerar logs separados de cada um?
- Comandos de Informações do Sistema






19 de mai de 2009 em 7:07 am
Parabéns.
Muito boa está sua dica, é exatamente a solução que estava procurando.
Obrigado.
07 de jul de 2009 em 9:17 pm
Cara, muito bom!
Meus parabéns, não sabia que rolava um DenyAll no danado :)
Deve rolar um DenyGroup tb, hahahaha… valeus!
25 de ago de 2010 em 2:10 pm
Essa dica é útil para quem tem meia dúzia de usuários e olha lá…. E pra quem tem 100 usuários? Como fica? Não dá pra ficar criando configuração específica pra cada usuário. Enfim, a dica é boa mas serve para poucos casos.