Português do Brasil English
Devin no Facebook  Devin no Twitter  RSS do Site 
Servidores    

ProFTPd: Como utilizar um chroot e acessar diretórios disponíevis em vários lugares do sistema?


Comentários  4
Visualizações  
12,911

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.


Comentários  4
Visualizações  
12,911


TagsLeia também

Apaixonado por Linux e administração de sistemas. Viciado em Internet, servidores, e em passar conhecimento. Idealizador do Devin, tem como meta aprender e ensinar muito Linux, o que ele vem fazendo desde 1997 :-)


Leia também



Comentários

4 respostas para “ProFTPd: Como utilizar um chroot e acessar diretórios disponíevis em vários lugares do sistema?”

  1. Silvio disse:

    Parabéns.

    Muito boa está sua dica, é exatamente a solução que estava procurando.

    Obrigado.

  2. Tiago Cruz disse:

    Cara, muito bom!

    Meus parabéns, não sabia que rolava um DenyAll no danado :)

    Deve rolar um DenyGroup tb, hahahaha… valeus!

  3. Paulo disse:

    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.

  4. francisco disse:

    Parabéns.

    Ótima dica, caiu como uma luva para a resolução do meu problema.

    obrigado

Deixe uma resposta