Abra um terminal como root e logue-se no seu servidor MySQL com os seguintes comandos:
mysql -u root -p
Será requisitado uma senha, que é a senha do seu servidor MySQL. Ser tudo der certo você estará logado no console do MYSQL, que é mais ou menos assim:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 521
Server version: 5.0.51a-24+lenny1 (Debian)
Type "help" or "\h" for help. Type "\c" to clear the buffer.
mysql>
Bom, se sua tela está assim parabéns, seu servidor MySQL está rodando e pronto para brincar conosco!
Para visualizar as bases criadas digite:
mysql>
show databases;
Para selecioná-las, digite:
mysql>
use nome_da_base;
Em nosso caso vamos criar uma base de dados com o nome de "Squid". Digite o seguinte comando:
mysql>
create database Squid;
e dê um enter. A saída será esta:
Query OK, 1 row affected (0.01 sec).
Em seguida selecione a base que acabamos de criar para podermos trabalhar nela:
mysql>
use Squid;
e dê um enter.
Criando as tabelas
Agora vamos criar a tabela que conterá as informações de nome, senha e status do nossos usuários do Squid. Se você analisar, nós podemos ter 3 situações de usuário no nosso servidor proxy: usuário existe, usuário não existe, usuário desabilitado. Quando usamos a autenticação ncsa_auth, para desabilitar um usuário adicionamos o caractere "#" para comentar a linha e ignorá-la, como estamos utilizando uma base dados, utilizaremos um número (0 ou 1) para determinar o status do usuário: 0 = desabilitado e 1 = habilitado.
Para criar a tabela, siga os procedimentos:
mysql>
CREATE TABLE usuarios (
nome varchar(100) NOT NULL,
senha varchar(15) NOT NULL,
status tinyint(1) NOT NULL default "1",
PRIMARY KEY (NOME)
);
Se tudo ocorrer de maneira correta você terá a mensagem "Query OK...".
Para melhor entendimento, vamos às explicações: criamos uma tabela chamada usuários que contém três campos: nome, senha e status. O campo nome não pode ser em branco e você tem 100 caracteres para digitar, o campo senha também não pode ser em branco e você tem 15 caracteres livres e o campo status você tem a opção de colocar 0 ou 1 e por padrão a flag é zero.
Agora vamos inserir dois usuários para podermos efetuar os testes, ainda com sua base de dados selecionada, digite os seguintes comandos:
mysql>
INSERT INTO usuarios VALUES ('vol1', encrypt('senha1'), 1);
mysql>
INSERT INTO usuarios VALUES ('vol2', encrypt('senha2'), 0);
Observe que o usuário vol1 está habilitado, diferentemente do usuário vol2.
O parâmetro encrypt antes da senha significa que a sua senha estará devidamente criptografada, porém, isso não pede que suas senhas trafeguem na rede em texto plano base64.
Pronto! Nosso banco de dados está devidamente criado e configurado, agora iremos configurar o Squid para autenticar em nossa base de dados.
Criando o script
Dentro da pasta /usr/lib/squid você terá alguns arquivos executáveis, que nada mais são do que scripts dos métodos de autenticação existentes para seu Squid.
Procure algum script com o nome de
mysqlt_auth. Se não tiver, crie-o. Se tiver, mova-o para um arquivo de backup. Partindo do pressuposto que você está criando o arquivo, edite e deixe-o com as seguintes linhas:
#!/usr/bin/php
<?
$link = mysqli_connect("localhost", "usuario_do_banco", "senha_do_banco");
if (!$link) {
printf("Erro ao Conectar com o Banco de Dados: %s\n", mysqli_connect_error());
die();
}
$selectdb = mysqli_select_db($link, "Squid");
if (!$selectdb) {
printf("Erro ao Abrir o Banco de Dados: %s\n", mysqli_error($link));
die();
}
while ( fscanf(STDIN, "%s %s", $nome, $senha) ) {
$select = "SELECT nome, senha FROM usuarios WHERE nome = '".$nome."' AND status = 1";
$Query = mysqli_query($link, $select);
$nrRegistros = mysqli_num_rows($Query);
$erro = true;
while ( $Registro = mysqli_fetch_array($Query) ) {
$erro = false;
if ( crypt($senha, $Registro[senha]) == $Registro[senha] ) printf("OK\n");
else printf("ERR\n");
}
if ($erro) printf("ERR\n");
}
?>
Certifique-se que todas as informações como nome, senha, nome do banco, senha e host correspondam as informações do seu servidor. A estrutura do script acima é bem objetiva: se os dados de localhost, senha e nome do banco estiverem corretos, você estará conectado a sua base. A seguir, ele selecionará a sua base, que colocamos com o nome de Squid. Por padrão ele lê o nome de usuário e senha digitados. A seguir, faz leitura de usuários que contenham seu status como "1" (habilitado).
Caso ocorra algum erro, o mesmo é retornado. Se encontrado algum usuário, continua a operação. Compara a encriptação da senha digitada com a senha digitada pelo usuário. Se houver algum erro de digitação de usuário/senha, aparece o erro e volta ao início.
Para finalizar, execute o comando como root:
# chmod +x mysqlt_auth
para tornar o arquivo um executável, no qual será iniciado posteriormente pelo processo do Squid.