Habilitando
acesso remoto a seu servidor com segurança
Mas como fazer para manter o usuário somente em seu diretório, não permitindo que ele possa sair vasculhando arquivos do sistema? Vamos imaginar o seguinte cenário: Manézinho administra o contéudo do site zyx.com.br, e além de acesso via FTP, necessita de acesso ao shell do sistema operacional, para que possa trabalhar mais facilmente com os scripts do site. Inicialmente
vamos configurar o acesso FTP, que é bem mais simples :) Vou demonstrar como "prender" o usuário a seu diretório utilizando ambossoftwares. 1)
ProFTPD (http://www.proftpd.org/) a)
Baixamos o código fonte do site Agora
vamos alterar o arquivo /usr/local/proftpd/etc/proftpd.conf DefaultRoot ~ !ftpnormal Agora salve o arquivo e reinicie o serviço. Essa linha irá fazer com que todos os usuários que *não* pertencem ao grupo "ftpnormal", só possam acessar os arquivos dentro do seu diretório HOME. Os usuários que estão no grupo "ftpnormal" ainda poderão acessar todo o filesystem. Caso você queira que todos os usuários fiquem presos em seus diretórios HOME sem exceção, apenas remova o "!ftpnormal". É claro que se você já tiver o ProFTPD instalado em seu servidor, não há necessidade de reinstalá-lo, apenas procure o arquivo de configuração (que com certeza estará em outro diretório), modifique-o e reinicie o serviço.
O WU-FTPD é um servidor FTP muito usado no mundo Unix. Pra prender o usuário em seu diretório HOME, o procedimento é o seguinte: a)
Baixamos o código fonte do site (testei com a versão
2.6.2); Deve-se agora configurar o wu-ftpd para que seja chamado pelo inetd ou xinetd, dependendo de sua configuração. Essa operação deixarei para o leitor efetuar. Para que o chroot funciona perfeitamente, precisamos criar os diretórios "bin, lib, etc" dentro do HOME do usuário, e para lá copiar pelo menos os arquivos "/bin/ls" (e suas bibliotecas correspondentes). Deve-se também criar os arquivos "/etc/passwd" e "/etc/group" com as entradas para o usuário em questão e o usuário "root". Agora editemos o arquivo "/etc/ftpaccess" e adicionamos a linha: guestgroup chumbrega A linha acima indica que todos os usuários pertencentes ao grupo "chumbrega" ficarão presos aos seus respectivos diretorios HOME. Agora é só alterar o arquivo "/etc/group", adicionar um novo grupo chamado "chumbrega" e acrescentar os usuaríos desejados nele. Simples, não?
Se o seu usuário precisa de acesso com shell (via telnet, ssh, etc), é preciso inicialmente levantar quais as necessidades do usuário em termos de software e etc. Dinâmico versus Estático O usuário mané precisa ter acesso via ssh a seus scripts, para que possa fazer manutenção diretamente no servidor. Vamos assumir que os arquivos que o usuário tem permissão de escrita estejam localizados no diretório: /data/users/mane Inicialmente
vamos alterar alguns campos do usuário mane no arquivo /etc/passwd, Note que mudamos o campo home e o campo shell. Configuramos o $HOME do usuário para ser o local onde estão os arquivos que ele possui permissão de escrita. O campo shell alteramos para um programa que vamos criar logo abaixo. Agora
dentro do /data/users/mane, precisamos criar a estrutura de diretórios
e arquivos a qual o usuário poderá acessar e utilizar. Vamos criar a estrutura de diretórios: cd
/data/users/mane Precisamos copiar os programas que os usuários poderá executar. Para facilitar este tutorial, vou seguir o caminho de deixar os programas dinâmicamente linkados com as bibliotecas, mesmo que isso consuma mais espaço em disco (você pode optar por dinâmico ou estático, a escolha é sua). Copiando o "ls" por exemplo: ldd
/bin/ls cp
/bin/ls bin E agora copiamos o "vi" ldd
/usr/bin/vi cp
/usr/bin/vi usr/bin As libs libc.so.6 e ld-linux.so.2 já existem, pois são dependências do "ls", que já copiamos para o bin. Você vai ter que fazer isso com cada programa que o usuário tiver acesso: mkdir, rm, cat, more, less, e assim vai... Não esqueça de copiar também o bash, e de criar um link dele pro sh: ln -s bash sh Isso é importante, ou seu usuário não conseguirá se logar. Uma outra coisa importante, é copiar a biblioteca "/lib/libnss_compat.so.2", pois sem ela, não irão aparecer os nomes dos usuários nas permissões dos arquivos, e sim os uid e gid. Procure por essa lib na sua distribuição, ela pode possuír um nome ligeiramente diferente. Dentro do etc só precisamos de dois arquivos: passwd e group, com o seguinte conteúdo: passwd: mane:x:1011:100:,,,:/:/usr/local/bin/presilha group: root:x:0:root O programa "presilha.c" É um programa simples, feito em linguagem "C", a listagem segue abaixo: //------------- Corte aqui --------------// #include
int main(void) { int
u_uid; u_uid
= getuid(); chroot(pwd->pw_dir); } //------------- Corte aqui -------------// Esse
programa nada mais faz do que pegar o UID e HOME do usuário Para compilá-lo: gcc presilha.c -o presilha É importante setar o bit de setuid, pois somente root pode executar a função "chroot": chmod 4555 presilha Agora o copiamos para /usr/local/bin: cp presilha /usr/local/bin Agora faça um teste se logando no servidor com o usuário mane. |