Mudanças entre as edições de "Projeto Integrador - 2011.1 - Teletec"
(55 revisões intermediárias por 4 usuários não estão sendo mostradas) | |||
Linha 13: | Linha 13: | ||
---- | ---- | ||
+ | |||
+ | == '''SOBRE A EMPRESA TELETEC - PROVEDORA DE ACESSO Á INTERNET:''' == | ||
+ | |||
+ | Empresa especializada no ramo das Telecomunicações Oferece os seguintes serviços: | ||
+ | |||
+ | # Conta de Usuário para cada cliente; | ||
+ | # Conta de E-mail para cada cliente; | ||
+ | # Uma página Web Padrão; | ||
+ | # Instalação do Modem ADSL e do Cabeamento Estrurado; | ||
+ | # Acesso Wirelles; | ||
+ | # Suporte 24Horas. | ||
+ | |||
+ | Contamos com 6 Técnicos em Telecomunicações especialistas no setor de redes para todo o suporte necessário. | ||
+ | Contate um de nossos especialistas através do e-mail teletecifsc.googlegroups.com e faça já seu orçamento. | ||
== Etapas Iniciais de Configurações da Rede == | == Etapas Iniciais de Configurações da Rede == | ||
Linha 20: | Linha 34: | ||
# Definido Sistema de Arquivo, Dividido em 3 Partições: ''1 Partição Primátia, 1 Partição Secundária e uma Partição para Swap;'' | # Definido Sistema de Arquivo, Dividido em 3 Partições: ''1 Partição Primátia, 1 Partição Secundária e uma Partição para Swap;'' | ||
# Definido nome do Domínio: teletec.sj.ifsc.edu.br; | # Definido nome do Domínio: teletec.sj.ifsc.edu.br; | ||
− | # Criado um Usuário: | + | # Criado um Usuário: Tecnico; |
# Acesso via SSH ao Servidor Teletec. | # Acesso via SSH ao Servidor Teletec. | ||
Linha 27: | Linha 41: | ||
== Gerencia de Redes: Apache, Postfix e DNS == | == Gerencia de Redes: Apache, Postfix e DNS == | ||
− | '''Configurações:''' | + | '''Configurações do servidor DNS:''' |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
- Edição do Arquivo para IP Estático: '''/etc/network/interfaces''' | - Edição do Arquivo para IP Estático: '''/etc/network/interfaces''' | ||
Linha 59: | Linha 58: | ||
- Edição do Arquivo do servidor DNS '''/etc/bind/named.conf''' | - Edição do Arquivo do servidor DNS '''/etc/bind/named.conf''' | ||
+ | |||
+ | Indica todos os arquivos que irão fazer a configuração do DNS, incluindo os 3 principais defaults: ''named.conf.options, named.conf.local e o named.conf.default-zones''. | ||
// This is the primary configuration file for the BIND DNS server named. | // This is the primary configuration file for the BIND DNS server named. | ||
Linha 70: | Linha 71: | ||
include "/etc/bind/named.conf.local"; | include "/etc/bind/named.conf.local"; | ||
include "/etc/bind/named.conf.default-zones"; | include "/etc/bind/named.conf.default-zones"; | ||
− | include "/etc/bind/ | + | include "/etc/bind/robson.conf"; |
− | include "/etc/bind/ | + | |
− | + | - Edição do Arquivo de servidor DNS: named.conf.local '''/etc/bind/named.conf.local''' | |
+ | |||
+ | É um arquivo padrão do BIND onde foi configurado o o nosso dominino TELETEC. | ||
+ | |||
+ | // | ||
+ | // Do any local configuration here | ||
+ | // | ||
+ | |||
+ | // Consider adding the 1918 zones here, if they are not used in your | ||
+ | // organization | ||
+ | //include "/etc/bind/zones.rfc1918"8; | ||
+ | zone "teletec.sj.ifsc.edu.br." IN { | ||
+ | type master; | ||
+ | file "/etc/bind/teletec.zone"; | ||
+ | allow-update { none; }; | ||
+ | }; | ||
+ | |||
+ | - Edição do Arquivo de DNS Reverso: '''/etc/bind/37.135.200.in-addr.arpa''' | ||
+ | |||
+ | O DNS Reverso resolve um endereço IP para um nome de servidor – por exemplo, ele poderia resolver 200.176.3.142 para exemplo.hipotetico.com.br. | ||
+ | |||
+ | $TTL 86400 | ||
+ | @ IN SOA www.teletec.sj.ifsc.edu.br. root ( | ||
+ | 2011061500 ; | ||
+ | 1d ; | ||
+ | 1h ; | ||
+ | 1w ; | ||
+ | 1d ; | ||
+ | ) | ||
+ | IN NS www.teletec.sj.ifsc.edu.br. | ||
+ | 100 IN PTR www.teletec.sj.ifsc.edu.br. | ||
+ | |||
+ | - Edição do Arquivo para criar um subdomínio:'''/etc/bind/teletec.zone''' | ||
+ | |||
+ | Arquivo que traz todas as configurações de cada subdomínio. | ||
+ | |||
+ | $TTL 86400 | ||
+ | @ IN SOA teletec.teletec.sj.ifsc.edu.br root ( | ||
+ | 2011062901; | ||
+ | 3H; | ||
+ | 15M; | ||
+ | 1W; | ||
+ | 1D ); | ||
+ | IN NS teletec.teletec.sj.ifsc.edu.br. | ||
+ | IN MX 0 mail.teletec.sj.ifsc.edu.br. | ||
+ | localhost IN A 127.0.0.1 | ||
+ | $ORIGIN teletec.sj.ifsc.edu.br. | ||
+ | teletec A 200.135.37.100 | ||
+ | www A 200.135.37.100 | ||
+ | mail A 200.135.37.100 | ||
+ | |||
+ | - '''Configuração do servidor Apache''' | ||
+ | |||
+ | No servidor Apache foi feito a instalação com o comando: | ||
+ | |||
+ | apt-get install apache2 | ||
+ | |||
+ | - Configuração do arquivo '''/etc/apache2/sites-enabled/teletec-default''' | ||
+ | |||
+ | <VirtualHost *:80> | ||
+ | ServerAdmin webmaster@localhost | ||
+ | ServerName www.teletec.sj.ifsc.edu.br | ||
+ | DocumentRoot /var/www/teletec | ||
+ | <Directory /> | ||
+ | Options FollowSymLinks | ||
+ | AllowOverride None | ||
+ | </Directory> | ||
+ | <Directory /var/www/teletec> | ||
+ | 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> | ||
+ | |||
+ | Na criação de um novo cliente vai ser criado um novo arquivo semelhante a esse com duas alterações nas linhas: '''ServerName www.teletec.sj.ifsc.edu.br''' onde vai ser acrescentado na frente do domínio o subdomínio do cliente exemplo: '''ServerName www.subdominio.teletec.sj.ifsc.edu.br''' e na linha '''DocumentRoot /var/www/teletec''' onde vai ser substituido '''teletec''' pelo nome do domínio do cliente por exemplo: '''DocumentRoot /var/www/cliente''' | ||
+ | |||
+ | |||
+ | - '''Configuração do servidor POSTFIX''' | ||
+ | |||
+ | - Primeiro foi feito a instalação com o comando: | ||
+ | |||
+ | apt-get install postfix | ||
+ | |||
+ | Em seguida o programa de instalação vai fazer algumas perguntas sobre a localização dos arquivos e alguns parâmetros | ||
+ | |||
+ | - Configuração do arquivo '''/etc/postfix/main.cf''': | ||
+ | |||
+ | |||
+ | # See /usr/share/postfix/main.cf.dist for a commented, more complete version | ||
+ | |||
+ | |||
+ | # Debian specific: Specifying a file name will cause the first | ||
+ | # line of that file to be used as the name. The Debian default | ||
+ | # is /etc/mailname. | ||
+ | #myorigin = /etc/mailname | ||
+ | |||
+ | smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu) | ||
+ | biff = no | ||
+ | |||
+ | # appending .domain is the MUA's job. | ||
+ | append_dot_mydomain = no | ||
+ | |||
+ | # Uncomment the next line to generate "delayed mail" warnings | ||
+ | #delay_warning_time = 4h | ||
+ | |||
+ | readme_directory = no | ||
+ | |||
+ | # TLS parameters | ||
+ | smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem | ||
+ | smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key | ||
+ | smtpd_use_tls=yes | ||
+ | smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache | ||
+ | smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache | ||
+ | |||
+ | # See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for | ||
+ | # information on enabling SSL in the smtp client. | ||
+ | |||
+ | myhostname = mail.teletec.sj.ifsc.edu.br | ||
+ | virtual_alias_maps = hash:/etc/postfix/virtual | ||
+ | alias_database = hash:/etc/aliases | ||
+ | myorigin = $myhostname | ||
+ | mydestination = $myhostname, /etc/postfix/mydomains | ||
+ | relayhost = | ||
+ | mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 | ||
+ | mailbox_size_limit = 0 | ||
+ | recipient_delimiter = + | ||
+ | inet_interfaces = all | ||
+ | mydomain = teletec.sj.ifsc.edu.br | ||
+ | mynetworks_style = subnet | ||
+ | virtual_alias_domains = hash:/etc/postfix/mydomains | ||
+ | |||
+ | |||
+ | |||
+ | - Foi criado o arquivo '''/etc/postfix/virtual''' | ||
+ | |||
+ | Toda vez que for criado uma nova conta de e-mail vai ser acresentado duas linhas novas nesse arquivo como as que estão em negrito no arquivo abaixo so que onde tem a palavra padrao vai ser substituida pele nome do cliente | ||
+ | |||
+ | teletec.sj.ifsc.edu.br Principal | ||
+ | tecnico@teletec.sj.ifsc.edu.br tecnico | ||
+ | |||
+ | robson.teletec.sj.ifsc.edu.br Subdominio1 | ||
+ | robson@robson.teletec.sj.ifsc.edu.br robson | ||
+ | |||
+ | '''padrao.teletec.sj.ifsc.edu.br padrao''' | ||
+ | '''user@padrao.teletec.sj.ifsc.edu.br user''' | ||
+ | |||
+ | |||
+ | - Editar o arquivo mydomains '''/etc/postfix/mydomains''' | ||
+ | |||
+ | Nesse arquivo tem como primeira linha o dominio e na seguinte o subdominio e toda vez que for criado uma conta nova vai ser acresentado uma linha nova com o nome do subdominio do cliente. | ||
+ | |||
+ | teletec.sj.ifsc.edu.br OK | ||
+ | robson.teletec.sj.ifsc.edu.br OK | ||
+ | |||
+ | - Executar os comandos para releitura e reinicialização do Postfix: | ||
+ | |||
+ | postmap /etc/postfix/virtual | ||
+ | postmap /etc/postfix/mydomains | ||
+ | service postfix restart | ||
== Instalação de Equipamento de Redes (Modem, Switch e Roteadores) == | == Instalação de Equipamento de Redes (Modem, Switch e Roteadores) == | ||
− | |||
− | |||
− | |||
− | '''Configurações:''' | + | '''Configurações:''' |
Instalação: | Instalação: | ||
Linha 139: | Linha 322: | ||
#Para salvar as configurações: | #Para salvar as configurações: | ||
wr; | wr; | ||
+ | |||
+ | '''Radius''' | ||
+ | |||
+ | Para ter acesso a rede aDSL ou pela rede sem fio será usado Radius para que os usuários sejam autenticados. O RADIUS é um sistema utilizado para prover uma autenticação centralizada em redes dial-up, VPN's (Virtual Private Network) e redes sem fio. Ele tem um modelo cliente-servidor, onde o cliente é o Network Access Server (NAS). Esse servidor é responsável por obter a informação sobre o cliente e repassá-la para o servidor RADIUS, além de interpretar a resposta, dando ou não acesso ao cliente. O servidor RADIUS é responsável por receber pedidos de conexão, autenticar o usuário e repassar ao NAS as informações necessárias para esse dar acesso ao usuário na rede. | ||
+ | |||
+ | '''Arquivos configurados:''' | ||
+ | |||
+ | Configurar login e senha para o cliente Radius ( /etc/freeradius | ||
+ | /users ): | ||
+ | |||
+ | “Usúario” Cleartext-Password := "senha" | ||
+ | “Usúario” User-Password := "senha" | ||
+ | |||
+ | Teste antes se seu servidor Radius está autenticando usuáriosfaça o seguinte comando no AC PPPoE (que fica em Ac-server): | ||
+ | |||
+ | radtest seu_usuario sua_senha IP_do_seu_servidor_Radius 1 segredo_do_seu_servidor_Radius | ||
+ | |||
+ | Configurando o Servidor PPPoe (/etc/ppp/pppoe-servers-options): | ||
+ | |||
+ | require-chap | ||
+ | auth | ||
+ | lcp-echo-interval 10 | ||
+ | lcp-echo-failure 2 | ||
+ | ms-dns IP do seu servidor DNS | ||
+ | netmask 255.255.255.0 | ||
+ | noipdefault | ||
+ | debug | ||
+ | kdebug 4 | ||
+ | plugin radius.so | ||
+ | plugin radattr.so | ||
+ | radius-config-file /etc/radiusclient/teletec.conf | ||
+ | mru 1492 | ||
+ | mtu 1492 | ||
+ | |||
+ | Configuração do Cliente Radius ( etc/radiusclient/teletec.conf ): | ||
+ | |||
+ | auth_order radius | ||
+ | login_tries 4 | ||
+ | login_timeout 60 | ||
+ | nologin /etc/nologin | ||
+ | issue /etc/radiusclient/issue | ||
+ | authserver 200.135.37.100 | ||
+ | acctserver 200.135.37.100 | ||
+ | servers /etc/radiusclient/servers | ||
+ | dictionary /etc/radiusclient/dictionary | ||
+ | login_radius /usr/sbin/login.radius | ||
+ | seqfile /var/run/radius.seq | ||
+ | mapfile /etc/radiusclient/port-id-map | ||
+ | default_realm | ||
+ | radius_timeout 10 | ||
+ | radius_retries 3 | ||
+ | login_local /bin/login | ||
+ | |||
+ | Configurando o IP do Servidor Radius ( /etc/radiusclient/servers ): | ||
+ | |||
+ | 200.135.37.100 testing123 | ||
+ | |||
+ | Integrando Radius ao Banco de Dados | ||
+ | |||
+ | Primeiro procedimento, instale o pacote. | ||
+ | |||
+ | apt-get install freeradius-mysql | ||
+ | Edite o arquivo de configuração do freeradius, e descomente a seguinte linha | ||
+ | ( /etc/freeradius/radiusd.conf ): | ||
+ | |||
+ | $INCLUDE sql.conf | ||
+ | |||
+ | Para entrar no MySQL execute o comando: | ||
+ | |||
+ | mysql -u root -p | ||
+ | |||
+ | Crie uma base de dados somente para o Radius e dê ao usuário Radius a devida permissão para acesso a esta base. No shell do MySQL, execute os comandos: | ||
+ | |||
+ | CREATE DATABASE radius; | ||
+ | GRANT ALL ON radius.* TO freerad@localhost IDENTIFIED BY "senha_do_usuário_freeradius"; | ||
+ | exit; | ||
+ | |||
+ | Inserindo informações na base de dados: | ||
+ | |||
+ | mysql -u “usuário” -p “senha do usuário radius” “database” < /etc/freeradius/sql/mysql/schema.sql | ||
+ | mysql -u “usuário” -p “senha do usuário radius” “database” < /etc/freeradius/sql/mysql/nas.sql | ||
+ | |||
+ | Editar o arquivo /etc/freeradius/sql.conf, colocando a senha do usuário Radius: | ||
+ | |||
+ | passwrod = "senha do usuário radius" | ||
+ | |||
+ | E descomente a linha do mesmo arquivo ( /etc/freeradius/sql.conf ) : | ||
+ | |||
+ | readclients = yes | ||
+ | |||
+ | Reinicie o FreeRadius: | ||
+ | |||
+ | service freeradius restart | ||
+ | |||
+ | [[Arquivo:diagrama-teletec.jpg|850px]] | ||
+ | |||
+ | == Cabeamento Estruturado == | ||
+ | |||
+ | Atividades Concluídas: | ||
+ | |||
+ | - o A central telefônica ao DSLAM | ||
+ | - o O DSLAM ao armário de telecom da equipe, através de uma linha telefone + DSL | ||
+ | - o armário da equipe a uma área de trabalho. | ||
+ | - O cabeamento permitiu a conexão do modem DSL no armário de telecom. | ||
+ | - As tomadas da área de trabalho para conexão com Telefone e o Modem ADSL. | ||
+ | |||
+ | == Programação para Redes de Computadores == | ||
+ | '''# Programação PHP e HTML''' | ||
+ | '''Os Arquivos PHP (pagina Web) Encontram-se dentro da pasta: ''/var/www/teletec''''' | ||
+ | |||
+ | [[Imagem:Paginas-php-teletec.jpg|850px]] | ||
+ | |||
+ | - Edição do Arquivo '''Verificação.php''': | ||
+ | |||
+ | Esta pagina PHP verifica se o login e a senha do administrador esta correto. | ||
+ | Se estiver correto vai para a pagina "principal.php" se não volta para "login.php". | ||
+ | |||
+ | <? | ||
+ | session_start(); | ||
+ | $login = $_POST['login']; | ||
+ | $senha = $_POST['senha']; | ||
+ | if ( ( $login == "LOGIN-DO-ADMIN" ) && ( $senha == "SENHA-DO-ADMIN" ) ){ | ||
+ | $_SESSION['autorizado'] = $login; | ||
+ | Header ("Location: principal.php"); | ||
+ | }else{ | ||
+ | Header ("Location: login.php"); | ||
+ | } | ||
+ | ?> | ||
+ | |||
+ | - Edição do Arquivo '''sair.php''': | ||
+ | |||
+ | Esta pagina PHP faz o administrador "deslogar" ("logoff") e depois volta para pagina "login.php" | ||
+ | |||
+ | <? | ||
+ | session_start(); | ||
+ | session_destroy(); | ||
+ | Header ("Location: login.php"); | ||
+ | ?> | ||
+ | |||
+ | - Edição do arquivo '''principal.php''': | ||
+ | |||
+ | Esta é a principal pagina PHP do site, nela verificamos os clientes criados e armazenados no banco de dados, redirecionamos para pagina que modifica os dominios (alterar.php), redirecionamos para pagina que remover os dominios (excluir.php)e tambem redirecionamos para a pagina que adiciona os dominios (adicionar.php). | ||
+ | Quando é redirecionado para pagina de modificação e remoção tambem é enviado uma variavel com o dominio do cliente para saber qual usuario deve ser modificado ou alterado. | ||
+ | <.? | ||
+ | .session_start(); | ||
+ | .if (!isset($_SESSION['autorizado'])){ | ||
+ | .header ("Location: login.php"); | ||
+ | .}else{ | ||
+ | .?> | ||
+ | <.html> | ||
+ | <.head> | ||
+ | <.meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> | ||
+ | <.title>Administrcao de Dominios</title> | ||
+ | <./head> | ||
+ | <.body> | ||
+ | <.p><a href="sair.php">Sair</a></p> | ||
+ | <.p></p> | ||
+ | <.p style="text-align:center;margin-left:auto;margin-right:auto;">Cliente Dominio Acao </p> | ||
+ | |||
+ | <.? | ||
+ | $conexao = mysql_connect("localhost","www-data","SENHA-DO-ADMIN"); | ||
+ | $base_ok = mysql_select_db("teletec",$conexao); | ||
+ | $consulta = "SELECT * from clientes"; | ||
+ | $resultado = mysql_query($consulta,$conexao); | ||
+ | while($linha = mysql_fetch_array($resultado)){ | ||
+ | $cliente = $linha['cliente']; | ||
+ | $dominio = $linha['dominio']; | ||
+ | .?> | ||
+ | <.form> | ||
+ | <.p style="text-align:center;margin-left:auto;margin-right:auto;"> | ||
+ | <.a name="cliente" id="cliente" href="alterar.php?id=<? echo $linha['dominio'];?>"> <?echo $.linha['cliente'];?></a> | ||
+ | <.? echo $linha['dominio'];?> <a href="excluir.php?id=<? echo $linha['dominio'];?>"> Excluir</a></p> | ||
+ | <./form> | ||
+ | <.? | ||
+ | .} | ||
+ | .mysql_free_result($resultado); | ||
+ | .mysql_close($conexao); | ||
+ | .} | ||
+ | .?> | ||
+ | <.p style="text-align:right;margin-left:auto;margin-right:0;"> | ||
+ | <.a href="adicionar.php"><span style="color:#ff0000">Adicionar novo dominio</span></a></p> | ||
+ | <./body> | ||
+ | <./html> | ||
+ | |||
+ | - Edição do Arquivo '''mod-dominio.php''': | ||
+ | |||
+ | Esta pagina PHP recebe três variaveis com o dominio antigo do clinete, o novo dominio e o novo nome do cliente, estas variaveis são repassadas para o script "mod-dominio.sh" e este é executado modificando o dominio e o nome do cliente, depois de executar o script as informações do banco de dados tambem são modificadas e o serviço APACHE2 é reiniciado. | ||
+ | Após todo este processamento a pagina é redirecionada para 'principal.php". | ||
+ | |||
+ | <.? | ||
+ | session_start(); | ||
+ | if (!isset($_SESSION['autorizado'])){ | ||
+ | header ("Location: login.php"); | ||
+ | }else{ | ||
+ | $cliente = $_POST['cliente']; | ||
+ | $dominio = $_POST['dominio']; | ||
+ | $antigo = $_POST['antigo'];; | ||
+ | if (empty($dominio)) { | ||
+ | $dominio = "invalido"; | ||
+ | } | ||
+ | |||
+ | if (preg_match('/^[a-z0-9]+/', $dominio)){ | ||
+ | }else{ | ||
+ | $dominio = "invalido"; | ||
+ | } | ||
+ | |||
+ | $arquivo = '/etc/bind/named.conf'; | ||
+ | $linhas = array(); | ||
+ | exec("cat $arquivo",$linhas); | ||
+ | for ($i = 0 ; $i < sizeof($linhas); $i++){ | ||
+ | if ($linhas[$i] == "include \"/etc/bind/$dominio.conf\";"){ | ||
+ | $dominio = "invalido"; | ||
+ | } | ||
+ | } | ||
+ | if ($dominio == "invalido"){ | ||
+ | header ("Location: alterar.php"); | ||
+ | }else{ | ||
+ | |||
+ | $script = "sudo /etc/teletec/mod-dominio.sh $antigo '$cliente' $dominio"; | ||
+ | exec("$script"); | ||
+ | exec("/etc/init.d/apache2 restart"); | ||
+ | |||
+ | $conexao = mysql_connect("localhost","www-data","SENHA-DO-ADMIN"); | ||
+ | $base_ok = mysql_select_db("teletec",$conexao); | ||
+ | $deletar = "DELETE FROM clientes WHERE dominio='$antigo.teletec.sj.ifsc.edu.br'"; | ||
+ | mysql_query($deletar,$conexao); | ||
+ | mysql_close($conexao); | ||
+ | |||
+ | $conexao = mysql_connect("localhost","www-data","SENHA-DO-ADMIN"); | ||
+ | $base_ok = mysql_select_db("teletec",$conexao); | ||
+ | $inserir = "INSERT INTO clientes (cliente,dominio) VALUES ('$cliente','$dominio.teletec.sj.ifsc.edu.br')"; | ||
+ | mysql_query($inserir,$conexao); | ||
+ | mysql_close($conexao); | ||
+ | header ("Location: http://www.teletec.sj.ifsc.edu.br/principal.php"); | ||
+ | |||
+ | } | ||
+ | .} | ||
+ | ?.> | ||
+ | |||
+ | - Edição do Arquivo '''login.php''': | ||
+ | |||
+ | Esta pagina PHP recolhe o login e a senha fornecidas pelo administrador atraves de um formulario e manda para a pagina PHP de processamento que verifica se esta correto. | ||
+ | .<? | ||
+ | .session_start(); | ||
+ | .if (isset($_SESSION['autorizado'])){ | ||
+ | .Header ("Location: principal.php"); | ||
+ | .}else{ | ||
+ | .?> | ||
+ | <.html> | ||
+ | <.head> | ||
+ | <.meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> | ||
+ | <.title>Hospedagem Web</title> | ||
+ | <./head> | ||
+ | |||
+ | <.body> | ||
+ | <.p></p> | ||
+ | <.p>Sistemas de Hospedagem de Sitios Web</p> | ||
+ | <.p></p> | ||
+ | <.form name="formTeste" action="verificacao.php" method="post"> | ||
+ | <.p>Usuário:<br> | ||
+ | <.input type="text" name="login"> | ||
+ | <.p>Senha:<br> | ||
+ | <.input type="password" name="senha"> | ||
+ | <.input type="submit" name="b_enviar" value="Entrar"> | ||
+ | <./form> | ||
+ | <.p></p> | ||
+ | <.? | ||
+ | } | ||
+ | .?> | ||
+ | <./body> | ||
+ | <./html> | ||
+ | |||
+ | - Edição do Arquivo '''Index.php''': | ||
+ | |||
+ | Esta pagina apenas redireciona para "login.php" | ||
+ | <.? | ||
+ | Header ("Location: login.php"); | ||
+ | .?> | ||
+ | |||
+ | - Edição do Arquivo '''excluir.php''': | ||
+ | |||
+ | Esta pagina PHP faz uma verificação, se o administrador realmente querer excluir o dominio é mandado o dominio do clinete em uma variavel para a pagina PHP de processamento "del-dominio.php" e a pagina é redirecionada para la, mais se o usuario não quiser escluir é mandado novamente para p pagina "principal.php". | ||
+ | |||
+ | <.? | ||
+ | session_start(); | ||
+ | if (!isset($_SESSION['autorizado'])){ | ||
+ | header ("Location: login.php"); | ||
+ | }else{ | ||
+ | $id=$_GET['id']; | ||
+ | $parte1 = explode(".", $id); | ||
+ | $antigo = $parte1[0]; | ||
+ | ?.> | ||
+ | <.html> | ||
+ | <head> | ||
+ | <.meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> | ||
+ | <.title>Excluir o cliente</title> | ||
+ | <./head> | ||
+ | <.body> | ||
+ | <.p>Voce realmente deseja excluir o cliente?</p> | ||
+ | |||
+ | <.p><a href="del-dominio.php?id=<?echo $antigo;?>">Sim</a> <a | ||
+ | .href="principal.php">Nao</a></p> | ||
+ | <.p></p> | ||
+ | <? | ||
+ | } | ||
+ | .?> | ||
+ | <./body> | ||
+ | <./html> | ||
+ | |||
+ | - Edição do Arquivo '''del-dominio.php''': | ||
+ | |||
+ | Esta pagina PHP é uma pagina de processamento que recebe em uma variavel o nome do dominio que sera removido e transfere esta variavel para o script em bash "del-dominio.sh" ja executa o script, depois este dominio é removido do banco de dados e o serviço APACHE2 é reiniciado. | ||
+ | Após todo o processamento a pagina é redirecionada para "principal.php". | ||
+ | |||
+ | <.? | ||
+ | session_start(); | ||
+ | if (!isset($_SESSION['autorizado'])){ | ||
+ | header ("Location: login.php"); | ||
+ | }else{ | ||
+ | $dominio = $_GET['id']; | ||
+ | $script = "/etc/teletec/del-dominio.sh $dominio"; | ||
+ | exec("$script"); | ||
+ | exec("sudo /etc/init.d/apache2 restart"); | ||
+ | $conexao = mysql_connect("localhost","www-data","SENHA-DO-ADMIN"); | ||
+ | $base_ok = mysql_select_db("teletec",$conexao); | ||
+ | $deletar = "DELETE FROM clientes WHERE dominio='$dominio.teletec.sj.ifsc.edu.br'"; | ||
+ | mysql_query($deletar,$conexao); | ||
+ | mysql_close($conexao); | ||
+ | header ("Location: http://www.teletec.sj.ifsc.edu.br/principal.php"); | ||
+ | } | ||
+ | ?.> | ||
+ | |||
+ | - Edição do '''Arquivo alterar.php''': | ||
+ | |||
+ | Nesta pagina PHP o administrador informa o novo nome do cliente e o novo dominio, estas informações são gravadas em uma variavel que será mandada para a pagina PHP que vai fazer todo o trabalho de processamento (mod-dominio.php). | ||
+ | |||
+ | <.? | ||
+ | session_start(); | ||
+ | if (!isset($_SESSION['autorizado'])){ | ||
+ | header ("Location: login.php"); | ||
+ | }else{ | ||
+ | $id=$_GET['id']; | ||
+ | $parte1 = explode(".", $id); | ||
+ | $antigo = $parte1[0]; | ||
+ | ?.> | ||
+ | <.html> | ||
+ | <.head> | ||
+ | <.meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> | ||
+ | <.title>Alterar Dominio</title> | ||
+ | </.head> | ||
+ | <.body> | ||
+ | <.p><.a href="principal.php">Voltar </a></p> | ||
+ | <.form name="formTeste" action="mod-dominio.php" method="post"> | ||
+ | <.p>Novo nome do cliente: <br> | ||
+ | <.input type="text" name="cliente"> | ||
+ | <.p>Novo dominio: <br> | ||
+ | <.input type="text" name="dominio"> | ||
+ | <.input type="hidden" name="antigo" value="<?echo $antigo;?>"> | ||
+ | <.input type="submit" name="b_enviar" value="Alterar"> | ||
+ | <./form> | ||
+ | <.? | ||
+ | } | ||
+ | ?.> | ||
+ | <./body> | ||
+ | <./html> | ||
+ | |||
+ | - Edição do Arquivo '''adicionar.php''': | ||
+ | |||
+ | Esta pagina PHP recolhe duas variaveis atraves do formulrios, em uma esta o nome do clinete e na outra o dominio escolhido, estas variaveis são repassadas para a pagina de processamento que vai adicionar este novo subdominio (add-dominio.php).Depois ela é redirecionada para a pagina de processamento "add-dominio.php". | ||
+ | |||
+ | <.? | ||
+ | session_start(); | ||
+ | if (!isset($_SESSION['autorizado'])){ | ||
+ | header ("Location: login.php"); | ||
+ | .}else{ | ||
+ | .?> | ||
+ | <.html> | ||
+ | <.head> | ||
+ | <.meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> | ||
+ | <.title>Adicionar Cliente</title> | ||
+ | <./head> | ||
+ | <.body> | ||
+ | <.p><.a href="principal.php">Voltar </a></p> | ||
+ | <.form name="formTeste" action="add-dominio.php" method="post"> | ||
+ | <.p>Nome do cliente: <br> | ||
+ | <.input type="text" name="cliente"> | ||
+ | <.p>Dominio: <br> | ||
+ | <.input type="text" name="dominio"> | ||
+ | <.input type="submit" name="b_enviar" value="Criar"> | ||
+ | <./form> | ||
+ | <.? | ||
+ | .} | ||
+ | .?> | ||
+ | <./body> | ||
+ | <./html> | ||
+ | |||
+ | - Edição do Arquivo '''add-dominio.php''': | ||
+ | |||
+ | Esta pagina PHP é uma pagina de processamento que recebe duas variaveis, na primeira esta o nome do dominio que sera removido e na segunda está o dominio do cliente, estas variaveis são transferidas para o script em bash "add-dominio.sh" que é executado, depois este dominio é adicionado no banco de dados e o serviço APACHE2 é reiniciado. | ||
+ | Após todo o processamento a pagina é redirecionada para "principal.php". | ||
+ | |||
+ | <.? | ||
+ | session_start(); | ||
+ | if (!isset($_SESSION['autorizado'])){ | ||
+ | header ("Location: login.php"); | ||
+ | }else{ | ||
+ | $cliente = $_POST['cliente']; | ||
+ | $dominio = $_POST['dominio']; | ||
+ | |||
+ | if (empty($dominio)) { | ||
+ | $dominio = "invalido"; | ||
+ | } | ||
+ | |||
+ | if (preg_match('/^[a-z0-9]+/', $dominio)){ | ||
+ | }else{ | ||
+ | $dominio = "invalido"; | ||
+ | } | ||
+ | |||
+ | $arquivo = '/etc/bind/named.conf'; | ||
+ | $linhas = array(); | ||
+ | exec("cat $arquivo",$linhas); | ||
+ | for ($i = 0 ; $i < sizeof($linhas); $i++){ | ||
+ | if ($linhas[$i] == "include \"/etc/bind/$dominio.conf\";"){ | ||
+ | $dominio = "invalido"; | ||
+ | } | ||
+ | } | ||
+ | if ($dominio == "invalido"){ | ||
+ | header ("Location: adicionar.php"); | ||
+ | }else{ | ||
+ | $script = "sudo /etc/teletec/add-dominio.sh '$cliente' $dominio"; | ||
+ | exec("$script"); | ||
+ | exec("/etc/init.d/apache2 restart"); | ||
+ | $conexao = mysql_connect("localhost","www-data","SENHA-DO-ADMIN"); | ||
+ | $base_ok = mysql_select_db("teletec",$conexao); | ||
+ | $inserir = "INSERT INTO clientes (cliente,dominio) VALUES ('$cliente','$dominio.teletec.sj.ifsc.edu.br')"; | ||
+ | mysql_query($inserir,$conexao); | ||
+ | mysql_close($conexao); | ||
+ | header ("Location: http://www.teletec.sj.ifsc.edu.br/principal.php"); | ||
+ | } | ||
+ | } | ||
+ | ?.> | ||
+ | |||
+ | '''# Programação BASH''' | ||
+ | '''Os Arquivos .sh (scripts que adicionam, removem ou alteram os usuários no servidor) Encontram-se dentro da pasta: ''/etc/teletec''''' | ||
+ | |||
+ | - Edição do Arquivo '''mod-dominio.sh''': | ||
+ | Script em bash que altera o dominio do cliente (Subdominio, E-mail e Pagina WEB): | ||
+ | |||
+ | O script de modificação na verdade exclui o dominio criado e cria um novo, os scripts de remover e adicionar estão juntos neste script. | ||
+ | |||
+ | #!/bin/bash | ||
+ | #Leonardo | ||
+ | #echo -n "Dominio: " | ||
+ | #read antigo | ||
+ | #IFS=$'\n' | ||
+ | #for linha in `cat /etc/bind/named.conf`; do | ||
+ | # if [ $linha = 'include "/etc/bind/'$antigo'.conf";' ];then | ||
+ | # valido=sim | ||
+ | # break | ||
+ | # else | ||
+ | # valido=nao | ||
+ | # fi | ||
+ | #done | ||
+ | #if [ $valido = nao ];then | ||
+ | # echo -e " * Você entrou com um dominio inválido!\t\t\t \e[31m [ ERRO ] \e[m" | ||
+ | # echo -e " * O dominio não existe ou esta em branco.\n" | ||
+ | # exit | ||
+ | #fi | ||
+ | #echo -n "Novo nome para o cliente: " | ||
+ | #read nome | ||
+ | #echo -n "Novo dominio: " | ||
+ | #read dominio | ||
+ | #echo=${dominio:=nulo} | ||
+ | #IFS=$'\n' | ||
+ | #for linha in `cat /etc/bind/named.conf`; do | ||
+ | # if [ $linha = 'include "/etc/bind/'$dominio'.conf";' ];then | ||
+ | # dominio=existe | ||
+ | # break | ||
+ | # fi | ||
+ | #done | ||
+ | #if [ $dominio != nulo ] && [ $dominio != existe ];then | ||
+ | antigo=$1 | ||
+ | nome=$2 | ||
+ | dominio=$3 | ||
+ | sudo sed -i '/\/etc\/bind\/'$antigo'\.conf/Id' /etc/bind/named.conf | ||
+ | sudo rm /etc/bind/$antigo.conf | ||
+ | sudo rm /etc/bind/$antigo.zone | ||
+ | sudo rm /etc/apache2/sites-enabled/$antigo-default | ||
+ | sudo rm -r /var/www/$antigo | ||
+ | sudo sed -i '/'$antigo'\.teletec\.sj\.ifsc\.edu\.br Subdominio-'$antigo'/Id' /etc/postfix/virtual | ||
+ | sudo sed -i '/'$antigo'@teletec\.sj\.ifsc\.edu\.br '$antigo'/Id' /etc/postfix/virtual | ||
+ | sudo sed -i '/'$antigo'\.teletec\.sj\.ifsc\.edu\.br OK/Id' /etc/postfix/mydomains | ||
+ | sudo userdel -r $antigo | ||
+ | |||
+ | sudo echo 'include "/etc/bind/'$dominio'.conf";' >> /etc/bind/named.conf | ||
+ | numero=`date | cut -d ":" -f 3 | cut -d " " -f 1` | ||
+ | novoserial=$((1000000000+$numero)) | ||
+ | sudo sed s/padrao/$dominio/g /etc/bind/padrao.conf > /etc/bind/$dominio.conf | ||
+ | sudo sed s/padrao/$dominio/g /etc/bind/padrao.zone | sed s/2011061504/$novoserial/g > /etc/bind/$dominio.zone | ||
+ | sudo /etc/init.d/bind9 restart | ||
+ | sudo sed s/padrao/$dominio/g /etc/apache2/sites-available/padrao-default > /etc/apache2/sites-enabled/$dominio-default | ||
+ | mkdir /var/www/$dominio | ||
+ | sed s/dominio/$dominio/g /var/www/padrao/index.html | sed s/nome/"$nome"/g > /var/www/$dominio/index.html | ||
+ | sudo echo ' ' >> /etc/postfix/virtual | ||
+ | sudo echo ''$dominio'.teletec.sj.ifsc.edu.br Subdominio-'$dominio'' >> /etc/postfix/virtual | ||
+ | sudo echo ''$dominio'@teletec.sj.ifsc.edu.br '$dominio'' >> /etc/postfix/virtual | ||
+ | sudo echo ''$dominio'.teletec.sj.ifsc.edu.br OK' >> /etc/postfix/mydomains | ||
+ | sudo postmap /etc/postfix/virtual | ||
+ | sudo postmap /etc/postfix/mydomains | ||
+ | sudo /etc/init.d/postfix restart | ||
+ | # echo -e " * Dominio modificado com sucesso!\t\t\t\t[ OK ]\n" | ||
+ | # else | ||
+ | # echo -e " * Você entrou com um dominio inválido!\t\t\t \e[31m [ ERRO ] \e[m" | ||
+ | # echo -e " * O dominio ja existe ou esta em branco.\n" | ||
+ | #fi | ||
+ | |||
+ | - Edição do Arquivo '''del-dominio.sh''': | ||
+ | Script em bash que remove o cliente (Subdominio, E-mail e Pagina WEB): | ||
+ | |||
+ | Exclui todos os arquivos de configuração criados para este cliente e retira as linhas de configuração adicionadas em arquivos como o "named.conf", "virtual" e "mydomains", por ultimo os serviçoes DNS e POSTFIX são reiniciados ( o APACHE2 é reiniciado na pagina PHP).Também é removido o usuario criado no servidor. | ||
+ | |||
+ | #!/bin/bash | ||
+ | #Leonardo | ||
+ | #echo -n "Dominio: " | ||
+ | #read dominio | ||
+ | #IFS=$'\n' | ||
+ | #for linha in `cat /etc/bind/named.conf`; do | ||
+ | # if [ $linha = 'include "/etc/bind/'$dominio'.conf";' ];then | ||
+ | dominio=$1 | ||
+ | sudo sed -i '/\/etc\/bind\/'$dominio'\.conf/Id' /etc/bind/named.conf | ||
+ | sudo rm /etc/bind/$dominio.conf | ||
+ | sudo rm /etc/bind/$dominio.zone | ||
+ | sudo /etc/init.d/bind9 restart | ||
+ | sudo rm /etc/apache2/sites-enabled/$dominio-default | ||
+ | sudo rm -r /var/www/$dominio | ||
+ | sudo userdel -r $dominio | ||
+ | sudo sed -i '/'$dominio'\.teletec\.sj\.ifsc\.edu\.br Subdominio-'$dominio'/Id' /etc/postfix/virtual | ||
+ | sudo sed -i '/'$dominio'@teletec\.sj\.ifsc\.edu\.br '$dominio'/Id' /etc/postfix/virtual | ||
+ | sudo sed -i '/'$dominio'\.teletec\.sj\.ifsc\.edu\.br OK/Id' /etc/postfix/mydomains | ||
+ | sudo postmap /etc/postfix/virtual | ||
+ | sudo postmap /etc/postfix/mydomains | ||
+ | sudo /etc/init.d/postfix restart | ||
+ | # echo -e " * Dominio removido com sucesso!\t\t\t\t[ OK ]\n" | ||
+ | # exit | ||
+ | # fi | ||
+ | #done | ||
+ | # echo -e " * Você entrou com um dominio inválido!\t\t\t \e[31m [ ERRO ] \e[m" | ||
+ | # echo -e " * O dominio não existe ou esta em branco.\n" | ||
+ | |||
+ | - Edição do Arquivo '''add-dominio.sh''': | ||
+ | Script em bash que adiciona o cliente (Subdominio, E-mail e Pagina WEB): | ||
+ | |||
+ | Sub-dominio: O script pega como base arquivos padrões ja criados e configurados ( padrao.conf e padrao.zone ), altera todas as palavras "padrao" destes arvivos pelo dominio escolhido pelo usuario e salva como "dominio-escolhido".zone e "dominio-escolhido".conf. Alem disso ele tambem inclui o caminho do arquivo de configuração ".conf" no "named.conf". | ||
+ | |||
+ | Pagina-Web: Assim como no sub-dominio, o script troca as palavras "padrao" que estão em um arquivo padrao de configuração ( padrao-default) pelo dominio escolhido pelo cliente, criando um novo arquivo de configuração com nome "dominio-escolhido"-default. Tambem cria uma pagina web html padrao. | ||
+ | |||
+ | E-mail: O script adiciona as linhas de configuração do e-mail do cliente nos arquivos "virtual" e "mydomains". Também é criado um usuario no servidor com login e senha igual ao dominio escolhido. | ||
+ | |||
+ | Após fazer as confgurações o script reinicia o DNS e o POSTFIX. (o APACHE2 é reiniciado na pagina PHP). | ||
+ | |||
+ | #!/bin/bash | ||
+ | # Leonardo | ||
+ | #echo -n "Nome do cliente: " | ||
+ | #read nome | ||
+ | #echo -n "Dominio: " | ||
+ | #read dominio | ||
+ | #echo=${dominio:=nulo} | ||
+ | #IFS=$'\n' | ||
+ | #for linha in `cat /etc/bind/named.conf`; do | ||
+ | # if [ $linha = 'include "/etc/bind/'$dominio'.conf";' ];then | ||
+ | # dominio=existe | ||
+ | # break | ||
+ | # fi | ||
+ | #done | ||
+ | # | ||
+ | #if [ $dominio != nulo ] && [ $dominio != existe ];then | ||
+ | nome=$1 | ||
+ | dominio=$2 | ||
+ | sudo echo 'include "/etc/bind/'$dominio'.conf";' >> /etc/bind/named.conf | ||
+ | numero=`date | cut -d ":" -f 3 | cut -d " " -f 1` | ||
+ | novoserial=$((1000000000+$numero)) | ||
+ | sudo sed s/padrao/$dominio/g /etc/bind/padrao.conf > /etc/bind/$dominio.conf | ||
+ | sudo sed s/padrao/$dominio/g /etc/bind/padrao.zone | sed s/2011061504/$novoserial/g > /etc/bind/$dominio.zone | ||
+ | sudo /etc/init.d/bind9 restart | ||
+ | sudo sed s/padrao/$dominio/g /etc/apache2/sites-available/padrao-default > /etc/apache2/sites-enabled/$dominio-default | ||
+ | sudo mkdir /var/www/$dominio | ||
+ | sudo sed s/dominio/$dominio/g /var/www/padrao/index.html | sed s/nome/"$nome"/g > /var/www/$dominio/index.html | ||
+ | sudo useradd -md /home/$dominio $dominio | ||
+ | sudo usermod -p $(openssl passwd -1 $dominio) $dominio | ||
+ | sudo echo ' ' >> /etc/postfix/virtual | ||
+ | sudo echo ''$dominio'.teletec.sj.ifsc.edu.br Subdominio-'$dominio'' >> /etc/postfix/virtual | ||
+ | sudo echo ''$dominio'@teletec.sj.ifsc.edu.br '$dominio'' >> /etc/postfix/virtual | ||
+ | sudo echo ''$dominio'.teletec.sj.ifsc.edu.br OK' >> /etc/postfix/mydomains | ||
+ | sudo postmap /etc/postfix/virtual | ||
+ | sudo postmap /etc/postfix/mydomains | ||
+ | sudo /etc/init.d/postfix restart | ||
+ | # echo -e " * Dominio criado com sucesso!\t\t\t\t[ OK ]\n" | ||
+ | # else | ||
+ | # echo -e " * Você entrou com um dominio inválido!\t\t\t \e[31m [ ERRO ] \e[m" | ||
+ | # echo -e " * O dominio ja existe ou esta em branco.\n" | ||
+ | #fi | ||
+ | |||
+ | '''# Banco de dados''' | ||
+ | |||
+ | Para o administrador conseguir os dados de "nome" e de "dominio" do cliente foi criado uma tabela no banco de dados, estas informações ficam visíveis na pagina "principal.php" e são usadas para remover ou modificar um cliente. | ||
+ | |||
+ | [[Arquivo:tabela-teletec.jpg]] | ||
+ | |||
+ | root@teletec: mysql -u root -p | ||
+ | mysql> create database teletec; | ||
+ | mysql> GRANT ALL PRIVILEGES on teletec.* to 'www-data'@'%' identified by 'SENHA-DO-ADMIN'; | ||
+ | mysql> quit | ||
+ | root@teletec: mysql teletec -u www-data -p | ||
+ | mysql> CREATE TABLE clientes (cliente VARCHAR(40), dominio VARCHAR(50)); | ||
+ | mysql> quit | ||
+ | |||
+ | '''# Permissionamento''' | ||
+ | |||
+ | Um usuário como o "www-data" não tem permissão para usar comandos como "service bind9 restart" ou para criar um arquivo de um diretorio de serviços como o "/etc/bind". Para os scripts em BASH e PHP funcionarem corretamente foi preciso dar permissão para o usuario "www-data" usar alguns comandos como "root", isto foi feito com a edição do arquivo "/etc/sudoers" | ||
+ | |||
+ | - Edição do Arquivo '''/etc/sudoers''': Arquivo onde são especificados os usuários que poderão usar o sudo: | ||
+ | |||
+ | # | ||
+ | # 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 | ||
+ | |||
+ | # 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 | ||
+ | www-data ALL=NOPASSWD:/usr/sbin/service, /sbin/restart, /usr/sbin/apache2, /usr/sbin/postfix, | ||
+ | /etc/init.d/bind9, /bin/sed, /bin/echo, /bin/mkdir, /usr/sbin/postmap, /usr/bin/touch, /etc/teletec | ||
+ | /add-dominio.sh, /etc/init.d/apache2, /etc/init.d/postfix, /bin/rm, /etc/teletec/mod-dominio.sh, | ||
+ | /etc/teletec/del-dominio.sh, /usr/sbin/useradd, /usr/sbin/usermod, /usr/sbin/userdel |
Edição atual tal como às 15h27min de 12 de julho de 2011
* Equipe 2 : TELETEC
INTEGRANTES TELETEC
* Daniel Estefano; estefano.daniel@gmail.com * Denis Teixeira; denisteixeira3@gmail.com * Leonardo Oliveira P.; leonardo-op@live.com * Odair de Moraes; odairdmoraes@hotmail.com * Robson de Carvalho; rob_carvalho12@hotmail.com * Vagner Cordeiro. cordeirotelecom@gmail.com
SOBRE A EMPRESA TELETEC - PROVEDORA DE ACESSO Á INTERNET:
Empresa especializada no ramo das Telecomunicações Oferece os seguintes serviços: # Conta de Usuário para cada cliente; # Conta de E-mail para cada cliente; # Uma página Web Padrão; # Instalação do Modem ADSL e do Cabeamento Estrurado; # Acesso Wirelles; # Suporte 24Horas.
Contamos com 6 Técnicos em Telecomunicações especialistas no setor de redes para todo o suporte necessário. Contate um de nossos especialistas através do e-mail teletecifsc.googlegroups.com e faça já seu orçamento.
Etapas Iniciais de Configurações da Rede
# Instalação do Sistema Operacional:Ubuntu-Server; # Definido Sistema de Arquivo, Dividido em 3 Partições: 1 Partição Primátia, 1 Partição Secundária e uma Partição para Swap; # Definido nome do Domínio: teletec.sj.ifsc.edu.br; # Criado um Usuário: Tecnico; # Acesso via SSH ao Servidor Teletec.
Gerencia de Redes: Apache, Postfix e DNS
Configurações do servidor DNS:
- Edição do Arquivo para IP Estático: /etc/network/interfaces
# 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.100 netmask 255.255.255.192 gateway 200.135.37.126
- Edição do Arquivo do servidor DNS /etc/bind/named.conf
Indica todos os arquivos que irão fazer a configuração do DNS, incluindo os 3 principais defaults: named.conf.options, named.conf.local e o named.conf.default-zones.
// This is the primary configuration file for the BIND DNS server named. // // Please read /usr/share/doc/bind9/README.Debian.gz for information on the // structure of BIND configuration files in Debian, *BEFORE* you customize // this configuration file. // // If you are just adding zones, please do that in /etc/bind/named.conf.local include "/etc/bind/named.conf.options"; include "/etc/bind/named.conf.local"; include "/etc/bind/named.conf.default-zones"; include "/etc/bind/robson.conf";
- Edição do Arquivo de servidor DNS: named.conf.local /etc/bind/named.conf.local
É um arquivo padrão do BIND onde foi configurado o o nosso dominino TELETEC.
// // Do any local configuration here // // Consider adding the 1918 zones here, if they are not used in your // organization //include "/etc/bind/zones.rfc1918"8; zone "teletec.sj.ifsc.edu.br." IN { type master; file "/etc/bind/teletec.zone"; allow-update { none; }; };
- Edição do Arquivo de DNS Reverso: /etc/bind/37.135.200.in-addr.arpa
O DNS Reverso resolve um endereço IP para um nome de servidor – por exemplo, ele poderia resolver 200.176.3.142 para exemplo.hipotetico.com.br.
$TTL 86400 @ IN SOA www.teletec.sj.ifsc.edu.br. root ( 2011061500 ; 1d ; 1h ; 1w ; 1d ; ) IN NS www.teletec.sj.ifsc.edu.br. 100 IN PTR www.teletec.sj.ifsc.edu.br.
- Edição do Arquivo para criar um subdomínio:/etc/bind/teletec.zone
Arquivo que traz todas as configurações de cada subdomínio.
$TTL 86400 @ IN SOA teletec.teletec.sj.ifsc.edu.br root ( 2011062901; 3H; 15M; 1W; 1D ); IN NS teletec.teletec.sj.ifsc.edu.br. IN MX 0 mail.teletec.sj.ifsc.edu.br. localhost IN A 127.0.0.1 $ORIGIN teletec.sj.ifsc.edu.br. teletec A 200.135.37.100 www A 200.135.37.100 mail A 200.135.37.100
- Configuração do servidor Apache
No servidor Apache foi feito a instalação com o comando:
apt-get install apache2
- Configuração do arquivo /etc/apache2/sites-enabled/teletec-default
<VirtualHost *:80> ServerAdmin webmaster@localhost ServerName www.teletec.sj.ifsc.edu.br DocumentRoot /var/www/teletec <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/teletec> 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>
Na criação de um novo cliente vai ser criado um novo arquivo semelhante a esse com duas alterações nas linhas: ServerName www.teletec.sj.ifsc.edu.br onde vai ser acrescentado na frente do domínio o subdomínio do cliente exemplo: ServerName www.subdominio.teletec.sj.ifsc.edu.br e na linha DocumentRoot /var/www/teletec onde vai ser substituido teletec pelo nome do domínio do cliente por exemplo: DocumentRoot /var/www/cliente
- Configuração do servidor POSTFIX
- Primeiro foi feito a instalação com o comando:
apt-get install postfix
Em seguida o programa de instalação vai fazer algumas perguntas sobre a localização dos arquivos e alguns parâmetros
- Configuração do arquivo /etc/postfix/main.cf:
# See /usr/share/postfix/main.cf.dist for a commented, more complete version # Debian specific: Specifying a file name will cause the first # line of that file to be used as the name. The Debian default # is /etc/mailname. #myorigin = /etc/mailname smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu) biff = no # appending .domain is the MUA's job. append_dot_mydomain = no # Uncomment the next line to generate "delayed mail" warnings #delay_warning_time = 4h readme_directory = no # TLS parameters smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key smtpd_use_tls=yes smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache # See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for # information on enabling SSL in the smtp client. myhostname = mail.teletec.sj.ifsc.edu.br virtual_alias_maps = hash:/etc/postfix/virtual alias_database = hash:/etc/aliases myorigin = $myhostname mydestination = $myhostname, /etc/postfix/mydomains relayhost = mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 mailbox_size_limit = 0 recipient_delimiter = + inet_interfaces = all mydomain = teletec.sj.ifsc.edu.br mynetworks_style = subnet virtual_alias_domains = hash:/etc/postfix/mydomains
- Foi criado o arquivo /etc/postfix/virtual
Toda vez que for criado uma nova conta de e-mail vai ser acresentado duas linhas novas nesse arquivo como as que estão em negrito no arquivo abaixo so que onde tem a palavra padrao vai ser substituida pele nome do cliente
teletec.sj.ifsc.edu.br Principal tecnico@teletec.sj.ifsc.edu.br tecnico robson.teletec.sj.ifsc.edu.br Subdominio1 robson@robson.teletec.sj.ifsc.edu.br robson padrao.teletec.sj.ifsc.edu.br padrao user@padrao.teletec.sj.ifsc.edu.br user
- Editar o arquivo mydomains /etc/postfix/mydomains
Nesse arquivo tem como primeira linha o dominio e na seguinte o subdominio e toda vez que for criado uma conta nova vai ser acresentado uma linha nova com o nome do subdominio do cliente.
teletec.sj.ifsc.edu.br OK robson.teletec.sj.ifsc.edu.br OK
- Executar os comandos para releitura e reinicialização do Postfix:
postmap /etc/postfix/virtual postmap /etc/postfix/mydomains service postfix restart
Instalação de Equipamento de Redes (Modem, Switch e Roteadores)
Configurações:
Instalação:
minicom -s
Configuração do Roteador Cisco 1700:
- Configuração dos Dois Roteadores Utilizando a ferramenta "Minicon" (Se fosse Windows seria Hyperterminal)
- Configuração dos dispositivos: Serial e Ethernet
- Configuração como Protocolo PPP
- "Configuração da porta serial":
┌─────────────[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 └────────────────────────────────────────┘
- "Alteração da Porta Serial"
┌──────────────────────────────────────────────────────────┐ │ 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? └──────────────────────────────────────────────────────────┘
- "Salvar configuração com dfl"
- Configurando a Interface Serial do Roteador:
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;
Radius
Para ter acesso a rede aDSL ou pela rede sem fio será usado Radius para que os usuários sejam autenticados. O RADIUS é um sistema utilizado para prover uma autenticação centralizada em redes dial-up, VPN's (Virtual Private Network) e redes sem fio. Ele tem um modelo cliente-servidor, onde o cliente é o Network Access Server (NAS). Esse servidor é responsável por obter a informação sobre o cliente e repassá-la para o servidor RADIUS, além de interpretar a resposta, dando ou não acesso ao cliente. O servidor RADIUS é responsável por receber pedidos de conexão, autenticar o usuário e repassar ao NAS as informações necessárias para esse dar acesso ao usuário na rede.
Arquivos configurados:
Configurar login e senha para o cliente Radius ( /etc/freeradius /users ):
“Usúario” Cleartext-Password := "senha" “Usúario” User-Password := "senha"
Teste antes se seu servidor Radius está autenticando usuáriosfaça o seguinte comando no AC PPPoE (que fica em Ac-server):
radtest seu_usuario sua_senha IP_do_seu_servidor_Radius 1 segredo_do_seu_servidor_Radius
Configurando o Servidor PPPoe (/etc/ppp/pppoe-servers-options):
require-chap auth lcp-echo-interval 10 lcp-echo-failure 2 ms-dns IP do seu servidor DNS netmask 255.255.255.0 noipdefault debug kdebug 4 plugin radius.so plugin radattr.so radius-config-file /etc/radiusclient/teletec.conf mru 1492 mtu 1492
Configuração do Cliente Radius ( etc/radiusclient/teletec.conf ):
auth_order radius login_tries 4 login_timeout 60 nologin /etc/nologin issue /etc/radiusclient/issue authserver 200.135.37.100 acctserver 200.135.37.100 servers /etc/radiusclient/servers dictionary /etc/radiusclient/dictionary login_radius /usr/sbin/login.radius seqfile /var/run/radius.seq mapfile /etc/radiusclient/port-id-map default_realm radius_timeout 10 radius_retries 3 login_local /bin/login
Configurando o IP do Servidor Radius ( /etc/radiusclient/servers ):
200.135.37.100 testing123
Integrando Radius ao Banco de Dados
Primeiro procedimento, instale o pacote.
apt-get install freeradius-mysql
Edite o arquivo de configuração do freeradius, e descomente a seguinte linha ( /etc/freeradius/radiusd.conf ):
$INCLUDE sql.conf
Para entrar no MySQL execute o comando:
mysql -u root -p
Crie uma base de dados somente para o Radius e dê ao usuário Radius a devida permissão para acesso a esta base. No shell do MySQL, execute os comandos:
CREATE DATABASE radius; GRANT ALL ON radius.* TO freerad@localhost IDENTIFIED BY "senha_do_usuário_freeradius"; exit;
Inserindo informações na base de dados:
mysql -u “usuário” -p “senha do usuário radius” “database” < /etc/freeradius/sql/mysql/schema.sql mysql -u “usuário” -p “senha do usuário radius” “database” < /etc/freeradius/sql/mysql/nas.sql
Editar o arquivo /etc/freeradius/sql.conf, colocando a senha do usuário Radius:
passwrod = "senha do usuário radius"
E descomente a linha do mesmo arquivo ( /etc/freeradius/sql.conf ) :
readclients = yes
Reinicie o FreeRadius:
service freeradius restart
Cabeamento Estruturado
Atividades Concluídas:
- o A central telefônica ao DSLAM - o O DSLAM ao armário de telecom da equipe, através de uma linha telefone + DSL - o armário da equipe a uma área de trabalho. - O cabeamento permitiu a conexão do modem DSL no armário de telecom. - As tomadas da área de trabalho para conexão com Telefone e o Modem ADSL.
Programação para Redes de Computadores
# Programação PHP e HTML
Os Arquivos PHP (pagina Web) Encontram-se dentro da pasta: /var/www/teletec
- Edição do Arquivo Verificação.php:
Esta pagina PHP verifica se o login e a senha do administrador esta correto. Se estiver correto vai para a pagina "principal.php" se não volta para "login.php".
<? session_start(); $login = $_POST['login']; $senha = $_POST['senha']; if ( ( $login == "LOGIN-DO-ADMIN" ) && ( $senha == "SENHA-DO-ADMIN" ) ){ $_SESSION['autorizado'] = $login; Header ("Location: principal.php"); }else{ Header ("Location: login.php"); } ?>
- Edição do Arquivo sair.php:
Esta pagina PHP faz o administrador "deslogar" ("logoff") e depois volta para pagina "login.php"
<? session_start(); session_destroy(); Header ("Location: login.php"); ?>
- Edição do arquivo principal.php:
Esta é a principal pagina PHP do site, nela verificamos os clientes criados e armazenados no banco de dados, redirecionamos para pagina que modifica os dominios (alterar.php), redirecionamos para pagina que remover os dominios (excluir.php)e tambem redirecionamos para a pagina que adiciona os dominios (adicionar.php). Quando é redirecionado para pagina de modificação e remoção tambem é enviado uma variavel com o dominio do cliente para saber qual usuario deve ser modificado ou alterado.
<.? .session_start(); .if (!isset($_SESSION['autorizado'])){ .header ("Location: login.php"); .}else{ .?> <.html> <.head> <.meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> <.title>Administrcao de Dominios</title> <./head> <.body>
<.p><a href="sair.php">Sair</a>
<.p>
<.p style="text-align:center;margin-left:auto;margin-right:auto;">Cliente Dominio Acao
<.? $conexao = mysql_connect("localhost","www-data","SENHA-DO-ADMIN"); $base_ok = mysql_select_db("teletec",$conexao); $consulta = "SELECT * from clientes"; $resultado = mysql_query($consulta,$conexao); while($linha = mysql_fetch_array($resultado)){ $cliente = $linha['cliente']; $dominio = $linha['dominio']; .?> <.form> <.p style="text-align:center;margin-left:auto;margin-right:auto;"> <.a name="cliente" id="cliente" href="alterar.php?id=<? echo $linha['dominio'];?>"> <?echo $.linha['cliente'];?></a>
<.? echo $linha['dominio'];?> <a href="excluir.php?id=<? echo $linha['dominio'];?>"> Excluir</a>
<./form> <.? .} .mysql_free_result($resultado); .mysql_close($conexao); .} .?> <.p style="text-align:right;margin-left:auto;margin-right:0;">
<.a href="adicionar.php">Adicionar novo dominio</a>
<./body> <./html>
- Edição do Arquivo mod-dominio.php:
Esta pagina PHP recebe três variaveis com o dominio antigo do clinete, o novo dominio e o novo nome do cliente, estas variaveis são repassadas para o script "mod-dominio.sh" e este é executado modificando o dominio e o nome do cliente, depois de executar o script as informações do banco de dados tambem são modificadas e o serviço APACHE2 é reiniciado. Após todo este processamento a pagina é redirecionada para 'principal.php".
<.? session_start(); if (!isset($_SESSION['autorizado'])){ header ("Location: login.php"); }else{ $cliente = $_POST['cliente']; $dominio = $_POST['dominio']; $antigo = $_POST['antigo'];; if (empty($dominio)) { $dominio = "invalido"; } if (preg_match('/^[a-z0-9]+/', $dominio)){ }else{ $dominio = "invalido"; } $arquivo = '/etc/bind/named.conf'; $linhas = array(); exec("cat $arquivo",$linhas); for ($i = 0 ; $i < sizeof($linhas); $i++){ if ($linhas[$i] == "include \"/etc/bind/$dominio.conf\";"){ $dominio = "invalido"; } } if ($dominio == "invalido"){ header ("Location: alterar.php"); }else{ $script = "sudo /etc/teletec/mod-dominio.sh $antigo '$cliente' $dominio"; exec("$script"); exec("/etc/init.d/apache2 restart"); $conexao = mysql_connect("localhost","www-data","SENHA-DO-ADMIN"); $base_ok = mysql_select_db("teletec",$conexao); $deletar = "DELETE FROM clientes WHERE dominio='$antigo.teletec.sj.ifsc.edu.br'"; mysql_query($deletar,$conexao); mysql_close($conexao); $conexao = mysql_connect("localhost","www-data","SENHA-DO-ADMIN"); $base_ok = mysql_select_db("teletec",$conexao); $inserir = "INSERT INTO clientes (cliente,dominio) VALUES ('$cliente','$dominio.teletec.sj.ifsc.edu.br')"; mysql_query($inserir,$conexao); mysql_close($conexao); header ("Location: http://www.teletec.sj.ifsc.edu.br/principal.php"); } .} ?.>
- Edição do Arquivo login.php:
Esta pagina PHP recolhe o login e a senha fornecidas pelo administrador atraves de um formulario e manda para a pagina PHP de processamento que verifica se esta correto.
.<? .session_start(); .if (isset($_SESSION['autorizado'])){ .Header ("Location: principal.php"); .}else{ .?> <.html> <.head> <.meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> <.title>Hospedagem Web</title> <./head> <.body>
<.p>
<.p>Sistemas de Hospedagem de Sitios Web
<.p>
<.form name="formTeste" action="verificacao.php" method="post"> <.p>Usuário:
<.input type="text" name="login"> <.p>Senha:
<.input type="password" name="senha"> <.input type="submit" name="b_enviar" value="Entrar"> <./form>
<.p>
<.? } .?> <./body> <./html>
- Edição do Arquivo Index.php:
Esta pagina apenas redireciona para "login.php"
<.? Header ("Location: login.php"); .?>
- Edição do Arquivo excluir.php:
Esta pagina PHP faz uma verificação, se o administrador realmente querer excluir o dominio é mandado o dominio do clinete em uma variavel para a pagina PHP de processamento "del-dominio.php" e a pagina é redirecionada para la, mais se o usuario não quiser escluir é mandado novamente para p pagina "principal.php".
<.? session_start(); if (!isset($_SESSION['autorizado'])){ header ("Location: login.php"); }else{ $id=$_GET['id']; $parte1 = explode(".", $id); $antigo = $parte1[0]; ?.> <.html> <head> <.meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> <.title>Excluir o cliente</title> <./head> <.body>
<.p>Voce realmente deseja excluir o cliente?
<.p><a href="del-dominio.php?id=<?echo $antigo;?>">Sim</a> <a
.href="principal.php">Nao</a>
<.p>
<? } .?> <./body> <./html>
- Edição do Arquivo del-dominio.php:
Esta pagina PHP é uma pagina de processamento que recebe em uma variavel o nome do dominio que sera removido e transfere esta variavel para o script em bash "del-dominio.sh" ja executa o script, depois este dominio é removido do banco de dados e o serviço APACHE2 é reiniciado. Após todo o processamento a pagina é redirecionada para "principal.php".
<.? session_start(); if (!isset($_SESSION['autorizado'])){ header ("Location: login.php"); }else{ $dominio = $_GET['id']; $script = "/etc/teletec/del-dominio.sh $dominio"; exec("$script"); exec("sudo /etc/init.d/apache2 restart"); $conexao = mysql_connect("localhost","www-data","SENHA-DO-ADMIN"); $base_ok = mysql_select_db("teletec",$conexao); $deletar = "DELETE FROM clientes WHERE dominio='$dominio.teletec.sj.ifsc.edu.br'"; mysql_query($deletar,$conexao); mysql_close($conexao); header ("Location: http://www.teletec.sj.ifsc.edu.br/principal.php"); } ?.>
- Edição do Arquivo alterar.php:
Nesta pagina PHP o administrador informa o novo nome do cliente e o novo dominio, estas informações são gravadas em uma variavel que será mandada para a pagina PHP que vai fazer todo o trabalho de processamento (mod-dominio.php).
<.? session_start(); if (!isset($_SESSION['autorizado'])){ header ("Location: login.php"); }else{ $id=$_GET['id']; $parte1 = explode(".", $id); $antigo = $parte1[0]; ?.> <.html> <.head> <.meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> <.title>Alterar Dominio</title> </.head> <.body>
<.p><.a href="principal.php">Voltar </a>
<.form name="formTeste" action="mod-dominio.php" method="post"> <.p>Novo nome do cliente:
<.input type="text" name="cliente"> <.p>Novo dominio:
<.input type="text" name="dominio"> <.input type="hidden" name="antigo" value="<?echo $antigo;?>"> <.input type="submit" name="b_enviar" value="Alterar"> <./form> <.? } ?.> <./body> <./html>
- Edição do Arquivo adicionar.php:
Esta pagina PHP recolhe duas variaveis atraves do formulrios, em uma esta o nome do clinete e na outra o dominio escolhido, estas variaveis são repassadas para a pagina de processamento que vai adicionar este novo subdominio (add-dominio.php).Depois ela é redirecionada para a pagina de processamento "add-dominio.php".
<.? session_start(); if (!isset($_SESSION['autorizado'])){ header ("Location: login.php"); .}else{ .?> <.html> <.head> <.meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> <.title>Adicionar Cliente</title> <./head> <.body>
<.p><.a href="principal.php">Voltar </a>
<.form name="formTeste" action="add-dominio.php" method="post"> <.p>Nome do cliente:
<.input type="text" name="cliente"> <.p>Dominio:
<.input type="text" name="dominio"> <.input type="submit" name="b_enviar" value="Criar"> <./form> <.? .} .?> <./body> <./html>
- Edição do Arquivo add-dominio.php:
Esta pagina PHP é uma pagina de processamento que recebe duas variaveis, na primeira esta o nome do dominio que sera removido e na segunda está o dominio do cliente, estas variaveis são transferidas para o script em bash "add-dominio.sh" que é executado, depois este dominio é adicionado no banco de dados e o serviço APACHE2 é reiniciado. Após todo o processamento a pagina é redirecionada para "principal.php".
<.? session_start(); if (!isset($_SESSION['autorizado'])){ header ("Location: login.php"); }else{ $cliente = $_POST['cliente']; $dominio = $_POST['dominio']; if (empty($dominio)) { $dominio = "invalido"; } if (preg_match('/^[a-z0-9]+/', $dominio)){ }else{ $dominio = "invalido"; } $arquivo = '/etc/bind/named.conf'; $linhas = array(); exec("cat $arquivo",$linhas); for ($i = 0 ; $i < sizeof($linhas); $i++){ if ($linhas[$i] == "include \"/etc/bind/$dominio.conf\";"){ $dominio = "invalido"; } } if ($dominio == "invalido"){ header ("Location: adicionar.php"); }else{ $script = "sudo /etc/teletec/add-dominio.sh '$cliente' $dominio"; exec("$script"); exec("/etc/init.d/apache2 restart"); $conexao = mysql_connect("localhost","www-data","SENHA-DO-ADMIN"); $base_ok = mysql_select_db("teletec",$conexao); $inserir = "INSERT INTO clientes (cliente,dominio) VALUES ('$cliente','$dominio.teletec.sj.ifsc.edu.br')"; mysql_query($inserir,$conexao); mysql_close($conexao); header ("Location: http://www.teletec.sj.ifsc.edu.br/principal.php"); } } ?.>
# Programação BASH
Os Arquivos .sh (scripts que adicionam, removem ou alteram os usuários no servidor) Encontram-se dentro da pasta: /etc/teletec
- Edição do Arquivo mod-dominio.sh: Script em bash que altera o dominio do cliente (Subdominio, E-mail e Pagina WEB):
O script de modificação na verdade exclui o dominio criado e cria um novo, os scripts de remover e adicionar estão juntos neste script.
#!/bin/bash #Leonardo #echo -n "Dominio: " #read antigo #IFS=$'\n' #for linha in `cat /etc/bind/named.conf`; do # if [ $linha = 'include "/etc/bind/'$antigo'.conf";' ];then # valido=sim # break # else # valido=nao # fi #done #if [ $valido = nao ];then # echo -e " * Você entrou com um dominio inválido!\t\t\t \e[31m [ ERRO ] \e[m" # echo -e " * O dominio não existe ou esta em branco.\n" # exit #fi #echo -n "Novo nome para o cliente: " #read nome #echo -n "Novo dominio: " #read dominio #echo=${dominio:=nulo} #IFS=$'\n' #for linha in `cat /etc/bind/named.conf`; do # if [ $linha = 'include "/etc/bind/'$dominio'.conf";' ];then # dominio=existe # break # fi #done #if [ $dominio != nulo ] && [ $dominio != existe ];then antigo=$1 nome=$2 dominio=$3 sudo sed -i '/\/etc\/bind\/'$antigo'\.conf/Id' /etc/bind/named.conf sudo rm /etc/bind/$antigo.conf sudo rm /etc/bind/$antigo.zone sudo rm /etc/apache2/sites-enabled/$antigo-default sudo rm -r /var/www/$antigo sudo sed -i '/'$antigo'\.teletec\.sj\.ifsc\.edu\.br Subdominio-'$antigo'/Id' /etc/postfix/virtual sudo sed -i '/'$antigo'@teletec\.sj\.ifsc\.edu\.br '$antigo'/Id' /etc/postfix/virtual sudo sed -i '/'$antigo'\.teletec\.sj\.ifsc\.edu\.br OK/Id' /etc/postfix/mydomains sudo userdel -r $antigo sudo echo 'include "/etc/bind/'$dominio'.conf";' >> /etc/bind/named.conf numero=`date | cut -d ":" -f 3 | cut -d " " -f 1` novoserial=$((1000000000+$numero)) sudo sed s/padrao/$dominio/g /etc/bind/padrao.conf > /etc/bind/$dominio.conf sudo sed s/padrao/$dominio/g /etc/bind/padrao.zone | sed s/2011061504/$novoserial/g > /etc/bind/$dominio.zone sudo /etc/init.d/bind9 restart sudo sed s/padrao/$dominio/g /etc/apache2/sites-available/padrao-default > /etc/apache2/sites-enabled/$dominio-default mkdir /var/www/$dominio sed s/dominio/$dominio/g /var/www/padrao/index.html | sed s/nome/"$nome"/g > /var/www/$dominio/index.html sudo echo ' ' >> /etc/postfix/virtual sudo echo $dominio'.teletec.sj.ifsc.edu.br Subdominio-'$dominio >> /etc/postfix/virtual sudo echo $dominio'@teletec.sj.ifsc.edu.br '$dominio >> /etc/postfix/virtual sudo echo $dominio'.teletec.sj.ifsc.edu.br OK' >> /etc/postfix/mydomains sudo postmap /etc/postfix/virtual sudo postmap /etc/postfix/mydomains sudo /etc/init.d/postfix restart # echo -e " * Dominio modificado com sucesso!\t\t\t\t[ OK ]\n" # else # echo -e " * Você entrou com um dominio inválido!\t\t\t \e[31m [ ERRO ] \e[m" # echo -e " * O dominio ja existe ou esta em branco.\n" #fi
- Edição do Arquivo del-dominio.sh: Script em bash que remove o cliente (Subdominio, E-mail e Pagina WEB):
Exclui todos os arquivos de configuração criados para este cliente e retira as linhas de configuração adicionadas em arquivos como o "named.conf", "virtual" e "mydomains", por ultimo os serviçoes DNS e POSTFIX são reiniciados ( o APACHE2 é reiniciado na pagina PHP).Também é removido o usuario criado no servidor.
#!/bin/bash #Leonardo #echo -n "Dominio: " #read dominio #IFS=$'\n' #for linha in `cat /etc/bind/named.conf`; do # if [ $linha = 'include "/etc/bind/'$dominio'.conf";' ];then dominio=$1 sudo sed -i '/\/etc\/bind\/'$dominio'\.conf/Id' /etc/bind/named.conf sudo rm /etc/bind/$dominio.conf sudo rm /etc/bind/$dominio.zone sudo /etc/init.d/bind9 restart sudo rm /etc/apache2/sites-enabled/$dominio-default sudo rm -r /var/www/$dominio sudo userdel -r $dominio sudo sed -i '/'$dominio'\.teletec\.sj\.ifsc\.edu\.br Subdominio-'$dominio'/Id' /etc/postfix/virtual sudo sed -i '/'$dominio'@teletec\.sj\.ifsc\.edu\.br '$dominio'/Id' /etc/postfix/virtual sudo sed -i '/'$dominio'\.teletec\.sj\.ifsc\.edu\.br OK/Id' /etc/postfix/mydomains sudo postmap /etc/postfix/virtual sudo postmap /etc/postfix/mydomains sudo /etc/init.d/postfix restart # echo -e " * Dominio removido com sucesso!\t\t\t\t[ OK ]\n" # exit # fi #done # echo -e " * Você entrou com um dominio inválido!\t\t\t \e[31m [ ERRO ] \e[m" # echo -e " * O dominio não existe ou esta em branco.\n"
- Edição do Arquivo add-dominio.sh: Script em bash que adiciona o cliente (Subdominio, E-mail e Pagina WEB):
Sub-dominio: O script pega como base arquivos padrões ja criados e configurados ( padrao.conf e padrao.zone ), altera todas as palavras "padrao" destes arvivos pelo dominio escolhido pelo usuario e salva como "dominio-escolhido".zone e "dominio-escolhido".conf. Alem disso ele tambem inclui o caminho do arquivo de configuração ".conf" no "named.conf".
Pagina-Web: Assim como no sub-dominio, o script troca as palavras "padrao" que estão em um arquivo padrao de configuração ( padrao-default) pelo dominio escolhido pelo cliente, criando um novo arquivo de configuração com nome "dominio-escolhido"-default. Tambem cria uma pagina web html padrao.
E-mail: O script adiciona as linhas de configuração do e-mail do cliente nos arquivos "virtual" e "mydomains". Também é criado um usuario no servidor com login e senha igual ao dominio escolhido.
Após fazer as confgurações o script reinicia o DNS e o POSTFIX. (o APACHE2 é reiniciado na pagina PHP).
#!/bin/bash # Leonardo #echo -n "Nome do cliente: " #read nome #echo -n "Dominio: " #read dominio #echo=${dominio:=nulo} #IFS=$'\n' #for linha in `cat /etc/bind/named.conf`; do # if [ $linha = 'include "/etc/bind/'$dominio'.conf";' ];then # dominio=existe # break # fi #done # #if [ $dominio != nulo ] && [ $dominio != existe ];then nome=$1 dominio=$2 sudo echo 'include "/etc/bind/'$dominio'.conf";' >> /etc/bind/named.conf numero=`date | cut -d ":" -f 3 | cut -d " " -f 1` novoserial=$((1000000000+$numero)) sudo sed s/padrao/$dominio/g /etc/bind/padrao.conf > /etc/bind/$dominio.conf sudo sed s/padrao/$dominio/g /etc/bind/padrao.zone | sed s/2011061504/$novoserial/g > /etc/bind/$dominio.zone sudo /etc/init.d/bind9 restart sudo sed s/padrao/$dominio/g /etc/apache2/sites-available/padrao-default > /etc/apache2/sites-enabled/$dominio-default sudo mkdir /var/www/$dominio sudo sed s/dominio/$dominio/g /var/www/padrao/index.html | sed s/nome/"$nome"/g > /var/www/$dominio/index.html sudo useradd -md /home/$dominio $dominio sudo usermod -p $(openssl passwd -1 $dominio) $dominio sudo echo ' ' >> /etc/postfix/virtual sudo echo $dominio'.teletec.sj.ifsc.edu.br Subdominio-'$dominio >> /etc/postfix/virtual sudo echo $dominio'@teletec.sj.ifsc.edu.br '$dominio >> /etc/postfix/virtual sudo echo $dominio'.teletec.sj.ifsc.edu.br OK' >> /etc/postfix/mydomains sudo postmap /etc/postfix/virtual sudo postmap /etc/postfix/mydomains sudo /etc/init.d/postfix restart # echo -e " * Dominio criado com sucesso!\t\t\t\t[ OK ]\n" # else # echo -e " * Você entrou com um dominio inválido!\t\t\t \e[31m [ ERRO ] \e[m" # echo -e " * O dominio ja existe ou esta em branco.\n" #fi
# Banco de dados
Para o administrador conseguir os dados de "nome" e de "dominio" do cliente foi criado uma tabela no banco de dados, estas informações ficam visíveis na pagina "principal.php" e são usadas para remover ou modificar um cliente.
root@teletec: mysql -u root -p mysql> create database teletec; mysql> GRANT ALL PRIVILEGES on teletec.* to 'www-data'@'%' identified by 'SENHA-DO-ADMIN'; mysql> quit root@teletec: mysql teletec -u www-data -p mysql> CREATE TABLE clientes (cliente VARCHAR(40), dominio VARCHAR(50)); mysql> quit
# Permissionamento
Um usuário como o "www-data" não tem permissão para usar comandos como "service bind9 restart" ou para criar um arquivo de um diretorio de serviços como o "/etc/bind". Para os scripts em BASH e PHP funcionarem corretamente foi preciso dar permissão para o usuario "www-data" usar alguns comandos como "root", isto foi feito com a edição do arquivo "/etc/sudoers"
- Edição do Arquivo /etc/sudoers: Arquivo onde são especificados os usuários que poderão usar o sudo:
# # 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 # 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 www-data ALL=NOPASSWD:/usr/sbin/service, /sbin/restart, /usr/sbin/apache2, /usr/sbin/postfix, /etc/init.d/bind9, /bin/sed, /bin/echo, /bin/mkdir, /usr/sbin/postmap, /usr/bin/touch, /etc/teletec /add-dominio.sh, /etc/init.d/apache2, /etc/init.d/postfix, /bin/rm, /etc/teletec/mod-dominio.sh, /etc/teletec/del-dominio.sh, /usr/sbin/useradd, /usr/sbin/usermod, /usr/sbin/userdel