Autor: GorristeR
Data: 12 de maio de 2002
Primeira revisão: 18 de maio de 2002
Ao tentar seguir este COMO, deverás ter já em teu UNIX funcionado o Apache, crio que já há suficiente informação na rede para que o hagáis sem maior dificuldade. Aqui mostrarei como criar contas de usuário "seguras" com um uso limitado de espaço de disco e que só possam aceder ao sistema por FTP. O servo FTP que utilizarei é o proftpd, ainda que só indicarei umas opções pontuais que não terão dificuldade de passar-se a qualquer outro.
O que aqui mostro é possível que seja politicamente incorreto ou que tenha outras formas mais fáceis de realizá-lo. Minha intenção é montar um servo web para os amiguetes ( Si, esses que usam Windbugs ;-) ) e de passo aprender enquanto o faço. Qualquer crítica seja constructiva ou destrutiva, será bem recebida e se alguém sabe fazer isto de uma forma mais segura ou fácil pois que mo comunique com um emilio.
Este COMO está dividido nos seguintes apartados:
Antes de nada o principal é a ORGANIZAÇÃO. É importante ver onde vamos pôr a estes usuário em home /. Eu pessoalmente prefiro dividir os usuário "normais" osea, com seu shell, aos que só terão acesso por FTP para atualizar sua Web. Estes últimos os solo pôr em home //web, de tal maneira que os usuário visente e juan, ficariam assim: /home/web/visente e /home/web/juan. Também podeis usar uns UID dentro de uns rangos determinados mas como já digo, é questão de ORGANIZAÇÃO e um tema PESSOAL.
NOTA: Se a algum lhe gosta mais pôr /home/www invés de /home/web, tem de saber que se tem Apache já existe um usuário www com UID GID 80. Não é que tenha nenhum erro, mas logicamente não é uma maneira "limpa" de fazê-lo seria como pôr o HOME de um user dentro de outro.
Criai aos usuários como fazeis normalmente mas em seu shell pondes /sbin/nologin desta forma não poderá aceder nunca ao shell ;-). Para evitar futuras mensagens de erro de diversas aplicações com isto, adicionar dita shell fantasma em etc //shells. Devereis criar um grupo chamado preferencial web. Por último é aconsejable eliminar todos os ficheros .* que tivesse no home, já que estes são criados pelas shells e os usuários do grupo web não vão usar nunca.
Se não tivesses quotas de disco seria necessário ativá-las, para isso tendes que realizar os seguintes passos:
/dev/ad0s2a home //web ufs rw,userquota 1 1.
Uma vez feito isto teremos que reiniciar.
NOTA: Também se podem usar cotas de grupo adicionando groupquota no fstab, se estás interessado deverias ler-te o HANDBOOK
Agora vamos pôr-lhe limitações de espaço a juan e a visente. Pode-se pôr também limitação de número de ficheros mas não o veremos aqui. Para editar a quota de juan teclearemos o seguinte:
# edquota -ou juan
Se nos abrirá um fichero com nosso editor definido mais ou menos com estas linhas:
Quotas for user juan:
/home/web: blocks in use: 0, limits (soft = 0, hard = 0)
inodes in use: 1, limits (soft = 0, hard = 0)
.
.
.
Se não sabemos cuandos Kbs é um bloco poderemos vê-lo por exemplo com o comando df. Em meu caso é equivalente a 1 Kb. Há duas classes de limites o hard e o soft, o primeiro não pode nunca sobrepasarse, enquanto o segundo pode sobrepasarse por um tempo limitado (por defeito uma semana). Mas aqui vamos tratá-los por igual para não o complicar. Pondo um espaço de 10 Megas a juan tendo em conta que cada bloco ocupa 1 Kb, ficaria assim:
Quotas for user juan:
/home/web: blocks in use: 0, limits (soft = 10240, hard = 10240)
inodes in use: 1, limits (soft = 0, hard = 0)
.
.
.
Com quota -v juan comprovaremos que todo está correto.
NOTA: Seria aconsejable ter /home/web numa partición separada, ou como mínimo, não o ter em já / que se o sistema usa algum fichero temporal do usuário em tmp /, este formaria parte da cota de disco.
Como estes usuários não queremos que tenham acesso ao shell nem também não possam urgar nosso diretório raiz e descendentes, adicionaremos a seguinte linea em usr //local/etc/proftpd.conf dentro da seção "Global".
DefaultRoot web
Com isto lhe indicámos ao proftpd que os usuários que estejam no grupo web, terão o diretório raiz em sua home e não poderão subir de nível ;-). Se não pondes nenhum grupo NINGUÉM terá acesso por em cima de seu home.
Se dispondes de IP fixa, seria interessante que vos diérais de alta num redireccionador. Desta forma a gente não teria que lembrar vossa IP. Recomendo-vos não-ip.com, que permite vários subdominios do tipo loquesea.não-ip.com e loquesea.não-ip.org entre outros. Uma vez dados de alta, só tereis que vos baixar o fonte de um programa em C e compilá-lo ou através de sua web pondo a IP diretamente num formulário.
Agora, seguiremos com nosso amigo Juan, queremos que se possa aceder a sua página mediante loquesa.não-ip.org/lapeichdejuan.
# cd /usr/local/www # ln -s /home/web/juan lapeichdejuanker
Com cada usuário teremos que fazer o mesmo, como véis, não tem que coincidir o nome de usuário de vossa máquina com o subdominio que terá sua web. Aliás, pôr-lhe outro nome é melhor para o tema de segurança já que não se conhecerá realmente o nome real do usuário. Para comprovar que todo funciona com o Internet Exp.. er com vosso navegador favorito comprovais: http://loquesea.não-ip.org/lapeichdejuanker.
Podeis criar um area privada para cada usuário, muito útil se nossos "clientes" querem deixar coisas pessoais para que só os que eles queiram possam aceder.
Primeiro é necessário ativar esta particularidade no Apache e reiniciá-lo depois. Editámos /usr/local/etc/apache/httpd.conf
#Esta rota mudará se usamos outro "DocumentRoot", mas é a que
#vem por defeito
<Directory "/usr/local/www/data">
.
.
AllowOverride AuthConfig
.
.
</Directory>
Reiniciámos com apachectl restart. Há que criar um diretório dentro do HOME do usuário e realizar aí umas operações, vejamos um exemplo com nosso amigo Juan:
# cd /home/web/juan # mkdir privado # cd privado # htdigest -c .htdigest juan juan
Uma vez introduzido um password, este se guardará no fichero .htdigest com a clave cifrada em MD5. É possível introduzir mais de um usuário, para isso executámos o comando sem o parâmetro "-c". Vamos adicionar à namorada de Juan que também quer aceder a esse diretório: htdigest .htdigest juan susana.
Uma vez tenhamos o usuário ou usuários introduzidos podemos vê-los fazendo um cat .htdigest.
Para acabar, é necessário criar o fichero .htaccess e escrever nele o seguinte:
AuthUserFile /home/web/juan/privado/.htpasswd AuthDigestFile /home/web/juan/privado/.htdigest #Não usaremos autentificación de grupos AuthGroupFile /dev/null AuthName juan AuthType Digest <Limit GET POST> #Aqui há que pôr os usuários que tenhamos adicionado com htdigest require user juan susana <Limit>
Fazendo provas com o servo e o PHP, dei-me conta do seguinte; uma instrução em PHP do tipo echo `cat /etc/passwd` (com as comillas investidas), tinha uma bonita web de minha fichero passwd :Ou. Pus-me a indagar sobre o tema e descobri que há que editar o fichero php.ini e mudar a linea safe_mode off a on . Parece-me algo importante já que na instalação por defeito de PHP que realiza FreeBSD a mim mo tinha ativado. Desta forma não se executará nenhum comando da shell.
Não consegui fazer um sistema de cotas individual para cada user por FTP , o problema das cotas de disco é que o servo FTP não as tem em conta e o usuário não pode saber quanto espaço tem disponível até que lhe saia o erro de disco cheio :(. Igual se pode fazer, mas eu não encontrei informação sobre isto.
Seria interessante que algum "Scripter" se currara um script que fizesse todos estes passos de maneira automática. Se alguém se decide a fazê-lo, rogo-lhe que mo mande.
Agradeço a ajuda de AfterNet que me hechó um cabo com o proftpd e sobretudo com a ADSL ;-). Também a Koji por seu "pequeno" conselho sobre criar um grupo web.