Projeto Integrador - 2011.1 - JallesNet
Equipe JallesNet
- Clailton Francisco
- Dimas Duarte
- Everton Cardoso
- Felipe Machado
- Gabriel Silveira
- Jalles Vides
1º Dia - 13/06/2011
- Atividades Realizadas:
- Instalação do Ubuntu Server
- Estabelecimento de um IP temporário
- Instalação e configuração do OpenSSH Server
- Criação de Shell Script para manter um log atualizado no server
- !/bin/bash
IFS=";"
PS3="Entre com uma opção: "
menu="Nova Entrada;Sair"
select opcao in $menu; do
echo "Você escolheu: $opcao"
case $REPLY in
1)
echo "Qual o seu nome?"
read nome
echo "Digite a nova entrada:"
read entrada
data=`date`
echo "$data - $nome -> $entrada" >> /home/grupo5/controle/arquivoDeLog.txt
;;
2)
break
;;
*)
echo "Opção desconhecida."
;;
esac
done
unset IFS
</syntaxhighlight>
2º Dia - 14/06/2011
- Apenas recebemos instruções sobre a parte de Cabeamento Estruturado do Prof. Saul.
3º Dia - 15/06/2011
- A equipe foi dividida em 2. Uma parte seguiu com o Prof. Sobral para a configuração dos Modems e a outra com o Prof. Odilson para continuar a parte de Gerenciamento de Redes.
Equipe de Gerenciamento
- Edição do arquivo /etc/network/interfaces: Configuração das interfaces de rede:
- This file describes the network interfaces available on your system
- and how to activate them. For more information, see interfaces(5).
- The loopback network interface
auto lo
iface lo inet loopback
- The primary network interface
auto eth0
iface eth0 inet static
address 200.135.37.103
netmask 255.255.255.192
gateway 200.135.37.126
auto eth1
iface eth1 inet static
address 172.18.0.103
netmask 255.255.255.0
</syntaxhighlight>
- Servidor DNS colocado no ar, arquivo /etc/bind/named.conf.local:
//
// Do any local configuration here
//
// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";
zone "jallesnet.sj.ifsc.edu.br" IN {
type master;
file "/etc/bind/jallesnet.zone";
};
//DNS reverso
zone "37.135.200.in-addr.arpa" {
type master;
file "/etc/bind/db37.135.200.in-addr.arpa";
};
</syntaxhighlight>
- Edição do arquivo /etc/bind/jallesnet.zone:
$TTL 86400
@ IN SOA g5.jallesnet.sj.ifsc.edu.br. root (
2011061500 ; serial
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum
IN NS g5.jallesnet.sj.ifsc.edu.br.
IN MX 0 g5.jallesnet.sj.ifsc.edu.br.
localhost IN A 127.0.0.1
$ORIGIN jallesnet.sj.ifsc.edu.br.
g5 A 200.135.37.103
www A 200.135.37.103
</syntaxhighlight>
- Edição do arquivo /etc/bind/db37.135.200.in-addr.arpa:
$TTL 86400
@ IN SOA g5.jallesnet.sj.ifsc.edu.br. root (
2011061500 ; serial
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum
IN NS g5.jallesnet.sj.ifsc.edu.br.
IN MX 0 g5.jallesnet.sj.ifsc.edu.br.
103 PTR jallesnet.sj.ifsc.edu.br.
</syntaxhighlight>
- Por fim, alteramos o arquivo /etc/resolv.conf:
domain sj.ifsc.edu.br
search sj.ifsc.edu.br
nameserver 200.135.37.103
nameserver 200.135.37.65
</syntaxhighlight>
- Foi criada a pasta /etc/bind/clientes para serem adicionados os arquivos de zonas provenientes dos clientes da rede.
- Instalação e configuração do servidor Apache.
Equipe de Instalação de Equipamentos
- Configuração do roteador Cisco 1700:
- Foi utilizado a ferramenta "Minicom" (sudo apt-get install minicom) para ter acesso pela interface serial ao roteador Cisco 1700.
- Após a instalação do Minicom deve-se executá-lo da seguinte forma:
minicom -s (onde o parâmetro -s significa setup).
- O seguinte menu aparecerá:
┌─────────────[configuração]──────────────┐
│ Nomes de arquivos e rotas
│ Protocolos de transferência de arquivos
│ Configuração da porta serial
│ Modem e discagem
│ Tela e teclado
│ Salvar configuração como dfl
│ Salvar configuração como
│ Sair
│ Sair do Minicom
└────────────────────────────────────────┘
</syntaxhighlight>
- Navegue com o cursor até a opção "Configuração da porta serial", acessando-a com a tecla "Enter"
- Aparecerá a seguinte tela:
┌──────────────────────────────────────────────────────────┐
│ A – Dispositivo Serial : /dev/tty1
│ B – Localização do Arquivo de Travamento : /var/lock
│ C – Programa de Entrada :
│ D – Programa de Saída :
│ E – Bps/Paridade/Bits : 38400 8N1
│ F – Controle de Fluxo por Hardware : Sim
│ G – Controle de Fluxo por Software : Não
│
│ Alterar qual configuração?
└──────────────────────────────────────────────────────────┘
</syntaxhighlight>
- Altere os seguintes parâmetros:
- Dispositivo Serial : /dev/ttSy0
- Bps/Paridade/Bits : 9600 8N1
- Controle de Fluxo por Hardware : Não
- Seu menu ficará da seguinte forma:
┌───────────────────────────────────────────────────────┐
│ A – Dispositivo Serial : /dev/ttSy0
│ B – Localização do Arquivo de Travamento : /var/lock
│ C – Programa de Entrada :
│ D – Programa de Saída :
│ E – Bps/Paridade/Bits : 9600 8N1
│ F – Controle de Fluxo por Hardware : Não
│ G – Controle de Fluxo por Software : Não
│
│ Alterar qual configuração?
└───────────────────────────────────────────────────────┘
</syntaxhighlight>
- Após feitas essas configurações volte ao menu principal com a tecla "Enter":
┌────[configuração]──────────────────────┐
│ Nomes de arquivos e rotas
│ Protocolos de transferência de arquivos
│ Configuração da porta serial
│ Modem e discagem
│ Tela e teclado
│ Salvar configuração como dfl
│ Salvar configuração como..
│ Sair
│ Sair do Minicom
└───────────────────────────────────────┘
</syntaxhighlight>
- Salve as suas configurações na opção "Salvar configuração com dfl", e saia do Minicom na opção "Sair".
- Caso o roteador esteja corretamente conectado, será aberta a interface de configuração do roteador, assim execute os comandos a seguir:
enable;
configure terminal;
- Para configurar a interface serial:
interface serial 0;
ip address 10.0.0.1/30;
encapsulation ppp;
exit;
- Para configurar a interface ethernet:
interface fastethernet 0;
ip address 172.18.0.1/24;
exit;
exit;
- Para salvar as configurações:
wr;
</syntaxhighlight>
4º Dia - 16/06/2011
- Instalação e configuração do MySQL-Server:
> create database users;
> GRANT ALL PRIVILEGES on users.* to 'XXX'@'%' identified by 'YYY';
> use users;
> CREATE TABLE usuarios (codigo INT AUTO_INCREMENT, nome VARCHAR(40), dominio VARCHAR (60),
PRIMARY KEY (codigo));
</syntaxhighlight>
- Criação de algumas das páginas .php:
- index.php (página principal)
- dominios.php (página que contém as informações sobre os usuários e os seus respectivos domínios)
- logout.php (página utilizada para fechar a Sessão e encaminhar o usuário de volta ao index.php)
- autenticar.php (página utilizada para verificar se a senha digitada no index.php é correta)
Páginas PHP
- /var/www/index.php
<HTML>
<META http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<HEAD>
<TITLE> JallesNet </TITLE>
</HEAD>
<BODY BGCOLOR='#000000' LINK='#00FFFF' VLINK='#F08080'>
<?
session_start();
?>
Sistema de Hospedagem de Sites
<FORM NAME="formTeste" ACTION="autenticar.php" METHOD="post">
Usuário:
<INPUT TYPE="text" NAME="usuario">
Senha:
<INPUT TYPE="password" NAME="senha">
<INPUT TYPE="submit" NAME="b_enviar" value="Enviar">
</FORM>
</HTML>
</syntaxhighlight>
- /var/www/dominios.php
<HTML>
<HEAD>
<META http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<TITLE>Domínios</TITLE>
</HEAD>
<BODY BGCOLOR='#000000' LINK='#00FFFF' VLINK='#F08080'>
Usuários
<?
session_start();
if (isset($_SESSION['usuario'])){
?>
<?
include ("config.php");
$conexao = mysql_connect("localhost",$usuario,$senha);
$base_ok = mysql_select_db("users",$conexao);
$consulta = "SELECT * FROM usuarios;";
$resultado = mysql_query($consulta,$conexao);
while($linha = mysql_fetch_array($resultado)){
echo "
";
echo "<a href='alterar.php?codigo=" . $linha['codigo'] . "'> Usuário: " . $linha['nome'] . "</a>
";
echo "Domínio: " . $linha['dominio'] . ".jallesnet.sj.ifsc.edu.br" . "
";
echo "<a href='excluir.php?codigo=" . $linha['codigo'] . "'> Excluir Usuário </a>
";
echo "
";
}
mysql_free_result($resultado);
mysql_close($conexao);
?>
<a href="cadastrar.php">Adicionar novo domínio</a>
<a href="logout.php">Sair</a>
<?
}else{
header("Location: index.php");
}
?>
</BODY>
</HTML>
</syntaxhighlight>
- /var/www/logout.php
<?
session_start();
session_unset();
session_destroy();
header("Location: index.php");
?>
</syntaxhighlight>
- /var/www/autenticar.php
<?
session_start();
include ('config.php');
$nome = $_POST['usuario'];
$password = $_POST['senha'];
if (($nome == $usuario) && ($password == $senha)) {
$_SESSION['usuario']=$nome;
echo "<script>window.location='dominios.php';</script>";
}else{
echo "<script>window.location='index.php';</script>";
}
?>
</syntaxhighlight>
5º Dia - 17/06/2011
Programação e Gerenciamento
- Instalação e configuração do Postfix e edição do arquivo /etc/postfix/main.cf:
myhostname = g5.jallesnet.sj.ifsc.edu.br
mydomain = jallesnet.sj.ifsc.edu.br
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = $mydomain
mydestination = $myhostname, $mydomain, /home/grupo5/controle/dominios
mynetworks_style = subnet
mynetworks = 127.0.0.0/8, 172.18.0.0/24
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
</syntaxhighlight>
- Criação de Shell Script para integração dos serviços de DNS, Web e Mail com a página PHP. O script é responsável por:
- Criação do arquivo .zone
- Criação do arquivo .conf
- Alteração do arquivo named.conf
- Criação de pasta no /var/www
- Criação do arquivo .host
- Criação de link simbólico e página default dos virtual hosts
- Criação de domínio no postfix
- Reiniciar postfix e dns, e reler as configurações do apache
- integrar.sh
- !/bin/bash
dominio=$1
- Criando o arquivo de zona para o novo domínio
sed "s/g5/$dominio/g" /home/grupo5/controle/default.zone > /etc/bind/clientes/$dominio.zone
- Criando o arquivo de conf para o novo domínio
sed "s/g5/$dominio/g" /home/grupo5/controle/default.conf > /etc/bind/clientes/$dominio.conf
- Incluindo o novo .conf ao arquivo named.conf
echo 'include "/etc/bind/clientes/'$dominio'.conf";' >> /etc/bind/named.conf
- Adicionando página html básica para uma pasta exclusiva do novo domínio
mkdir /var/www/$dominio
cp /home/grupo5/controle/index.html /var/www/$dominio/index.html
- Criando o arquivo default do novo virtual host
sed "s/g5/$dominio/g" /home/grupo5/controle/default.apache > /etc/apache2/sites-available/$dominio.host
- Extraindo o valor da última página criada (ex.: 002-default; ultimo=002)
ultimo=`ls /etc/apache2/sites-enabled | cut -d- -f1 | sort -n | tail -1 | sed -r s/"0*"//`
- Incrementando o valor em 1
ultimo=$((ultimo + 1))
- Retornando ele ao valor de 3 dígitos
prefixo=`printf "%03d" $ultimo`
- Criando um link simbólico da página na pasta "sites-enabled"
ln -s /etc/apache2/sites-available/$dominio.host /etc/apache2/sites-enabled/$prefixo-$dominio
- Adicionando o novo domínio no arquivo de dominios (Postfix)
echo "$dominio.jallesnet.sj.ifsc.edu.br OK" >> /home/grupo5/controle/dominios
- Criando novo usuário pro Postfix
echo "$dominio:$dominio::usuarios::/dev/null:/usr/sbin/nologin" > /home/grupo5/controle/contas
sudo newusers /home/grupo5/controle/contas
rm /home/grupo5/controle/contas
- Adicionando esse usuario ao arquivo de Alias_Map
sed "s/g5/$dominio/g" /home/grupo5/controle/default.mail >> /home/grupo5/controle/virtuals
- Reiniciando todos os serviços
sudo service bind9 restart
sudo postmap /home/grupo5/controle/dominios
sudo postmap /home/grupo5/controle/virtuals
sudo service postfix restart
sudo service apache2 graceful
</syntaxhighlight>
- Criação dos arquivos que serão utilizados como base na inclusão de novos usuário/domínios.
Arquivos Default
- /home/grupo5/controle/default.conf
//
// Arquivo de zona do usuÃrio g5
//
//include "/etc/bind/zones.rfc1918";
zone "g5.jallesnet.sj.ifsc.edu.br" IN {
type master;
file "/etc/bind/clientes/g5.zone";
};
</syntaxhighlight>
- /home/grupo5/controle/default.zone
$TTL 86400
@ IN SOA g5.jallesnet.sj.ifsc.edu.br. root (
2011061500 ; serial
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum
IN NS g5.jallesnet.sj.ifsc.edu.br.
IN MX 0 g5.jallesnet.sj.ifsc.edu.br.
localhost IN A 127.0.0.1
$ORIGIN jallesnet.sj.ifsc.edu.br.
g5 A 200.135.37.103
</syntaxhighlight>
- /home/grupo5/controle/default.apache
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName g5.jallesnet.sj.ifsc.edu.br
DocumentRoot /var/www/g5
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/g5>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
</VirtualHost>
</syntaxhighlight>
- /home/grupo5/controle/default.mail
g5.jallesnet.sj.ifsc.edu.br g5
g5@g5.jallesnet.sj.ifsc.edu.br g5
- -------------------------------------------
</syntaxhighlight>
Instalação de Equipamentos
- A equipe trabalhou em conjunto com as outras equipes e o professor Sobral na configuração do AC e a instalação do roteador CISCO
- Configuração da interface serial no roteador CISCO 2500:
- OBS.: Para o acesso à interface de configuração do roteador CISCO 2500, deve-se adotar a mesma configuração do Minicom já descrita na aula do dia 15/06.
enable;
configure terminal;
- Para configurar a interface serial:
interface serial 0;
encapsulation ppp;
ip address 10.0.0.2 255.255.255.0;
exit;
exit;
- Para salvar as configurações na memória:
wr mem;
</syntaxhighlight>
- Configuração pppd no AC-Server
- Criar o arquivo /etc/ppp/pppoe-server-options:
require-chap
noauth
login
lcp-echo-interval10
lcp-echo-failure2
ms-dns 200.135.37.65
nestmask 255.255.255.0
noipdefault
debug
kdebug 4
</syntaxhighlight>
- Criar o arquivo /etc/ppp/faixa-ip:
192.168.2.1-254
</syntaxhighlight>
- Executar o comando:
pppoe-server -C IER -L 192.168.2.1 -p /etc/ppp/faixa-ip -I eth0
</syntaxhighlight>
2ª Semana - 20/06/2011 a 24/06/2011
- Graças a Semana de Telecomunicações e o feriado, a equipe não pôde se encontrar pessoalmente para a continuação do projeto.
- Porém, cada um dos membros efetuou pesquisas sobre a parte de segurança da rede, DSLAM e Radius (as principais dúvidas que surgiram durante a elaboração do projeto) de forma independente para que as dúvidas fossem sanadas e o projeto pudesse continuar.
- As páginas PHP (cadastro, alteração e remoção do BD) continuaram a ser programadas durante esse período.
11º Dia - 27/06/2011
- Alguns documentos foram revisados e alterados devido a incompatibilidade com versão do Ubuntu;
- O grupo ainda encontra dificuldades com a conexão php/server/sql;
- Criação de páginas PHP (alterar.php, alterado.php, cadastrar.php, cadastrado.php, config.php).
Páginas PHP
- /var/www/alterar.php
<HTML>
<HEAD>
<META http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<TITLE>Alterar</TITLE>
</HEAD>
<BODY BGCOLOR='#000000' LINK='#00FFFF' VLINK='#F08080'>
Alterar Usuário
<?
session_start();
if (isset($_SESSION['usuario'])){
?>
<?
include ("config.php");
$codigo = $_GET['codigo'];
$conexao = mysql_connect("localhost",$usuario,$senha);
$base_ok = mysql_select_db("users",$conexao);
$select = "SELECT * FROM usuarios WHERE codigo = $codigo;";
$resultado = mysql_query($select,$conexao);
$linha = mysql_fetch_array($resultado);
$nomeBD = $linha['nome'];
$dominioBD = $linha['dominio'];
mysql_close($conexao);
?>
<FORM NAME="formTeste" ACTION="alterado.php" METHOD="post">
<INPUT TYPE="hidden" NAME="codigo" VALUE="<? echo $codigo ?>">
<INPUT TYPE="hidden" NAME="antdominio" VALUE="<? echo $dominioBD ?>">
Nome:
<INPUT TYPE="text" NAME="nome" VALUE="<? echo $nomeBD ?>">
Domínio:
<INPUT TYPE="text" NAME="novodominio" VALUE="<? echo $dominioBD ?>">
<INPUT TYPE="submit" NAME="b_enviar" value="Alterar">
</FORM>
<a href="dominios.php">Voltar</a>
<?
}else{
header("Location: index.php");
}
?>
</BODY>
</HTML>
</syntaxhighlight>
- /var/www/alterado.php
<?
session_start();
if (isset($_SESSION['usuario'])){
?>
<?
include ("config.php");
if (isset($_POST['nome'])){
$codigo = $_POST['codigo'];
$antdominio = $_POST['antdominio'];
$nome = $_POST['nome'];
$novodominio = $_POST['novodominio'];
$novodominio = str_replace(' ', , $novodominio);
$novodominio = strtolower($novodominio);
$conexao = mysql_connect("localhost",$usuario,$senha);
$base_ok = mysql_select_db("users",$conexao);
$consulta = "SELECT count(*) FROM usuarios WHERE dominio = '$dominio';";
$resultado = mysql_query($consulta,$conexao);
$coluna = mysql_fetch_array($resultado);
if ($coluna['contar'] == 0){
$alterar = "UPDATE usuarios set nome='$nome',dominio='$novodominio' WHERE codigo=$codigo;";
mysql_query($alterar,$conexao);
exec("/home/grupo5/controle/alterar.sh $novodominio $antdominio");
$base_ok = mysql_select_db("radius",$conexao);
$alterarradius = "UPDATE radcheck set username='$novodominio',value='$novodominio' WHERE username='$antdominio';";
mysql_query($alterarradius,$conexao);
}else{
mysql_close($conexao);
echo "<script>window.location='erro.php';</script>";
}
mysql_close($conexao);
}
echo "<script>window.location='dominios.php';</script>";
?>
<?
}else{
header("Location: index.php");
}
?>
</syntaxhighlight>
- /var/www/cadastrar.php
<HTML>
<HEAD>
<META http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<TITLE>Inserir</TITLE>
</HEAD>
<BODY BGCOLOR='#000000' LINK='#00FFFF' VLINK='#F08080'>
Inserir Novo Usuário
<?
session_start();
if (isset($_SESSION['usuario'])){
?>
<FORM NAME="formTeste" ACTION="cadastrado.php" METHOD="post">
Nome:
<INPUT TYPE="text" NAME="nome">
Domínio:
<INPUT TYPE="text" NAME="dominio">
<INPUT TYPE="submit" NAME="b_enviar" value="Cadastrar">
</FORM>
<a href="dominios.php">Voltar</a>
<?
}else{
header("Location: index.php");
}
?>
</BODY>
</HTML>
</syntaxhighlight>
- /var/www/cadastrado.php
<?
session_start();
if (isset($_SESSION['usuario'])){
?>
<?
include ("config.php");
if (isset($_POST['nome'])){
$nome = $_POST['nome'];
$dominio = $_POST['dominio'];
$dominio = str_replace(' ', , $dominio);
$dominio = strtolower($dominio);
$conexao = mysql_connect("localhost",$usuario,$senha);
$base_ok = mysql_select_db("users",$conexao);
$consulta = "SELECT count(*) as 'contar' FROM usuarios WHERE dominio = '$dominio';";
$resultado = mysql_query($consulta,$conexao);
$coluna = mysql_fetch_array($resultado);
if ($coluna['contar'] == 0){
$inserir = "INSERT INTO usuarios(nome,dominio) VALUES ('$nome','$dominio');";
mysql_query($inserir,$conexao);
exec("/home/grupo5/controle/integrar.sh $dominio");
$inserirradius = "INSERT INTO radcheck (username,attribute,value) VALUES ('$dominio','password','$dominio');";
$base_ok = mysql_select_db("radius",$conexao);
mysql_query($inserirradius,$conexao);
}else{
mysql_close($conexao);
echo "<script>window.location='erro.php';</script>";
}
mysql_close($conexao);
}
echo "<script>window.location='dominios.php';</script>";
?>
<?
}else{
header("Location: index.php");
}
?>
</syntaxhighlight>
- /var/www/config.php (O arquivo config.php possui uma parte "censurada", pois contém as senhas do nosso server)
<?
$usuario="XXX";
$senha="YYY";
?>
</syntaxhighlight>
12º Dia - 28/06/2011
- Últimas alterações feitas no Shell Script "integrar.sh". Testes realizados com a inserção de novos usuários via PHP;
- As dificuldades encontradas no dia anterior foram todas resolvidas.
13º Dia - 29/06/2011
Gerenciamento e Programação
- Percebeu-se uma falha na parte de Postfix. A necessidade de criação de usuários e de definir melhor como vai funcionar essa parte do server;
- Término da criação das páginas PHP (alterar.php, alterado.php, cadastrar.php, cadastrado.php, excluir.php, excluido.php);
Páginas PHP
- /var/www/excluir.php
<HTML>
<HEAD>
<META http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<TITLE>Excluir</TITLE>
</HEAD>
<BODY BGCOLOR='#000000' LINK='#00FFFF' VLINK='#F08080'>
Excluir Usuário
<?
session_start();
if (isset($_SESSION['usuario'])){
?>
<?
include ("config.php");
$codigo = $_GET['codigo'];
$conexao = mysql_connect("localhost",$usuario,$senha);
$base_ok = mysql_select_db("users",$conexao);
$select = "SELECT * FROM usuarios WHERE codigo = $codigo;";
$resultado = mysql_query($select,$conexao);
$linha = mysql_fetch_array($resultado);
echo " Você tem certeza que quer excluir esse usuário?";
echo "
";
echo "Usuário: " . $linha['nome'] . "
";
echo "Domínio: " . $linha['dominio'] . ".jallesnet.sj.ifsc.edu.br" . "
";
echo "
";
echo "<a href='excluido.php?codigo=" . $linha['codigo'] . "&dominio=" . $linha['dominio'] . "'> Sim </a>";
echo " ___________________ ";
echo "<a href='dominios.php?codigo=" . $linha['codigo'] . "'> Não </a>
";
mysql_close($conexao);
?>
<?
}else{
header("Location: index.php");
}
?>
</BODY>
</HTML>
</syntaxhighlight>
- /var/www/excluido.php
<?
session_start();
if (isset($_SESSION['usuario'])){
?>
<?
include ("config.php");
$codigo = $_GET['codigo'];
$dominio = $_GET['dominio'];
$conexao = mysql_connect("localhost",$usuario,$senha);
$base_ok = mysql_select_db("users",$conexao);
$delete = "DELETE FROM usuarios WHERE codigo = $codigo;";
mysql_query($delete,$conexao);
$base_ok = mysql_select_db("radius",$conexao);
$deleteradius = "DELETE FROM radcheck WHERE username = '$dominio';";
echo $deleteradius;
mysql_query($deleteradius,$conexao);
exec("/home/grupo5/controle/excluir.sh $dominio");
mysql_close($conexao);
echo "<script>window.location='dominios.php';</script>";
?>
<?
}else{
header("Location: index.php");
}
?>
</syntaxhighlight>
Bash Script
- Criação do Shell Script "alterar.sh". O script é responsável por:
- Alteração do arquivo .zone
- Alteração do arquivo .conf
- Alteração do arquivo named.conf
- Alteração do nome da pasta no /var/www
- Alteração do arquivo .host
- Alteração de link simbólico e página default dos virtual hosts
- Alteração de domínio no postfix
- Reiniciar PostFix e DNS, e reler as configurações do Apache
- Criação do Shell Script "excluir.sh". O script é responsável por:
- Remoção de todos os arquivos, contas e pastas criadas pelo script "integrar.sh"
- alterar.sh
- !/bin/bash
novodominio=$1
antdominio=$2
antlinha='\/'$antdominio'.conf";'
novalinha='include "/etc/bind/clientes/'$novodominio'.conf";'
- Deletando arquivos do domínio antigo
rm /etc/bind/clientes/$antdominio.zone
rm /etc/bind/clientes/$antdominio.conf
rm /etc/apache2/sites-available/$antdominio.host
rm /etc/apache2/sites-enabled/*-$antdominio
- Removendo linhas dos arquivos named.conf e dominios (Postfix)
sed -i '/'$antlinha'/Id' /etc/bind/named.conf
sed -i '/'$antdominio'.jallesnet.sj.ifsc.edu.br/Id' /home/grupo5/controle/dominios
sed -i '/'$antdominio'.jallesnet.sj.ifsc.edu.br/Id' /home/grupo5/controle/virtuals
- Excluindo usuário do sistema
sudo userdel $antdominio
- Criando o arquivo de zona para o novo domínio
sed "s/g5/$novodominio/g" /home/grupo5/controle/default.zone > /etc/bind/clientes/$novodominio.zone
- Criando o arquivo de conf para o novo domínio
sed "s/g5/$novodominio/g" /home/grupo5/controle/default.conf > /etc/bind/clientes/$novodominio.conf
- Incluindo o novo .conf ao arquivo named.conf
echo $novalinha >> /etc/bind/named.conf
- Alterando o nome da pasta onde està inserida a página html básica do novo domínio
mv /var/www/$antdominio /var/www/$novodominio
- Criando o arquivo default do novo virtual host
sed "s/g5/$novodominio/g" /home/grupo5/controle/default.apache > /etc/apache2/sites-available/$novodominio.host
- Extraindo o valor da última página criada (ex.: 002-default; ultimo=002)
ultimo=`ls /etc/apache2/sites-enabled | cut -d- -f1 | sort -n | tail -1 | sed -r s/"0*"//`
- Incrementando o valor em 1
ultimo=$((ultimo + 1))
- Retornando ele ao valor de 3 dígitos
prefixo=`printf "%03d" $ultimo`
- Criando um link simbólico da página na pasta "sites-enabled"
ln -s /etc/apache2/sites-available/$novodominio.host /etc/apache2/sites-enabled/$prefixo-$novodominio
- Adicionado o novo domínio no arquivo de dominios (Postfix)
echo "$novodominio.jallesnet.sj.ifsc.edu.br OK" >> /home/grupo5/controle/dominios
- Criando novo usuário pro Postfix
echo "$novodominio:$novodominio::usuarios::/dev/null:/usr/sbin/nologin" > /home/grupo5/controle/contas
sudo newusers /home/grupo5/controle/contas
rm /home/grupo5/controle/contas
- Adicionando esse usuario ao arquivo de Alias_Map
sed "s/g5/$novodominio/g" /home/grupo5/controle/default.mail >> /home/grupo5/controle/virtuals
- Reiniciando todos os serviços
sudo service bind9 restart
sudo postmap /home/grupo5/controle/dominios
sudo postmap /home/grupo5/controle/virtuals
sudo service postfix restart
sudo service apache2 graceful
</syntaxhighlight>
- excluir.sh
- !/bin/bash
dominio=$1
linha='\/'$dominio'.conf'
- Deletando arquivos do domínio
rm /etc/bind/clientes/$dominio.zone
rm /etc/bind/clientes/$dominio.conf
rm /etc/apache2/sites-available/$dominio.host
rm /etc/apache2/sites-enabled/*-$dominio
- Removendo linhas dos arquivos named.conf e domínios (Postfix)
sed -i '/'$linha'/Id' /etc/bind/named.conf
sed -i '/'$dominio'.jallesnet.sj.ifsc.edu.br/Id' /home/grupo5/controle/dominios
sed -i '/'$dominio'.jallesnet.sj.ifsc.edu.br/Id' /home/grupo5/controle/virtuals
- Removendo usuário do sistema
sudo userdel $dominio
- Removendo pasta do /var/www
rm -r /var/www/$dominio
- Reiniciando todos os serviços
sudo service bind9 restart
sudo postmap /home/grupo5/controle/dominios
sudo postmap /home/grupo5/controle/virtuals
sudo service postfix restart
sudo service apache2 graceful
</syntaxhighlight>
Instalação de Equipamentos
- Configuração do Roteador Cisco 2500:
- Configurado como rota default a interface serial 0
ip route 0.0.0.0 0.0.0.0 s0
</syntaxhighlight>
- Foi estabelecida também uma rota no Roteador Cisco 1700 para o gateway do laboratório de redes (192.168.1.1):
ip route 0.0.0.0 0.0.0.0 192.168.1.1 255.255.255.0
</syntaxhighlight>
- Foi necessário o estabelecimento dessas rotas para que fosse possível efetuar um teste de provimento de acesso a internet ao usuário. No caso, esse usuário foi o notebook do professor Sobral.
- Algumas outras configurações também tiveram de ser feitas no servidor AC. Uma delas foi a configuração do arquivo chap-secrets (/etc/ppp/chap-secrets).
- O arquivo foi configurado com o seguinte conteúdo:
aluno * "aluno
</syntaxhighlight>
- Essa configuração serviu para que o roteador do usuário se autenticasse com o servidor AC usando um login (aluno) e uma senha ("aluno) (mais tarde, isso deverá ser efetuado pelo servidor RADIUS de cada equipe).
- Editado o arquivo /etc/ppp/faixa-ip com o seguinte conteúdo:
192.168.2.2/254
</syntaxhighlight>
- Este arquivo determina qual será a faixa de IPs atribuída aos roteadores que estabelecerem links ponto a ponto com o servidor AC
15º Dia - 01/07/2011
- Instalação do servidor Radius
apt-get install freeradius freeradius-mysql</syntaxhighlight>
- No arquivo /etc/freeradius/radiusd.conf, descomentamos a linha:
$INCLUDE sql.conf
</syntaxhighlight>
- Criação de tabelas para o FreeRadius:
mysql–u root–p radius < schema.sql</syntaxhighlight>
- Dando permissão ao usuário admin para mexer nas tabelas do Radius:
> GRANT ALL PRIVILEGES on radius.* to 'XXX'@'%' identified by 'YYY';
</syntaxhighlight>
17º Dia - 04/07/2011
- Instalação de Cabeamento Estruturado:
- Instalação de Conectores;
- Instalação de Path Panel;
- Instalação de Tomadas;
- Passar o cabeamento;
- Identificação de portas nos Path Panels.
- Identificação de Problemas nas permissões do usuário www-data
18º Dia - 05/07/2011
- Integração do Radius com as páginas PHP e os Scripts.
- Alteração do arquivo /etc/sudoers, para permitir que o usuário www-data consiga executar os Scripts.
[sudo] password for grupo5:
- This file MUST be edited with the 'visudo' command as root.
- Please consider adding local content in /etc/sudoers.d/ instead of
- directly modifying this file.
- See the man page for details on how to write a sudoers file.
Defaults env_reset
- Host alias specification
- User alias specification
- Cmnd alias specification
- User privilege specification
root ALL=(ALL:ALL) ALL
%php ALL=NOPASSWD: /usr/sbin/newusers
%php ALL=NOPASSWD: /usr/sbin/userdel
%php ALL=NOPASSWD: /usr/sbin/postmap
%php ALL=NOPASSWD: /usr/sbin/service
- Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
- Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
- includedir /etc/sudoers.d
</syntaxhighlight>
- Alteração final, e testes, nos Scripts para garantir que as alterações funcionaram.
19º Dia - 06/07/2011
- Alteração do arquivo /etc/postfix/main.cf
</syntaxhighlight>
- Ajustes no arquivo excluido.php, para garantir que o usuário seja deletado do Radius quando a conta for excluída.
- Instalação e configuração do DenyHosts
</syntaxhighlight>
- Criação de regras de firewall via iptables
</syntaxhighlight>
20º Dia - 07/07/2011
- Instalado aplicativo de monitoramento Webmin.
- Configurado idioma do aplicativo para PT-br.
21º Dia - 08/07/2011
- Realizados testes nas funcionalidades de cadastro e exclusão de usuário.
- DNS - ok.
- APACHE - ok.
- POSTFIX - ok.
- MYSQL - ok.
- Configurado script de backup das principais pastas do sistema.
backup.sh
</syntaxhighlight>
- Configuração de Crontab (/etc/crontab)para execução automática do Script de Backup
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
11 19 * * * root /home/grupo5/controle/backup.sh
</syntaxhighlight>