Simples sistema de backup com acesso remoto

Simples, reúne todas as informações que você delega importantes, exige que você altere todo o programa para atender suas necessidades, mas de quebra você pode ter acesso as essas informações pela web através de um sistema seguro de acesso remoto e sem nenhum esforço, pois o script realiza o backup automaticamente para o servidor de backup.

[ Hits: 52.755 ]

Por: William França em 01/02/2007


Sistema PHP - segurança da informação



Vamos criar um sistema de login e senha em php no qual não precisa de banco de dados e vamos criar uma outra página php que será a interface do sistema que terá apenas um botão feito em CSS no qual você clicará e entrará num ambiente que te pedirá uma outra autenticação para que você possa chegar no diretório e realizar o download do arquivo tar.gz.

Lembrando que tudo isso pode ser feito em um servidor web separado ou no próprio servidor de backup, sendo que ele precisará do php e apache configurados. Estou usando aqui na empresa um servidor Debian com o Apache2 e o php4 configurados.

Página index.php - interface de login e senha

<?php

  include("config.php");


if (!empty($_POST['nome']) && !empty($_POST['senha'])) {

// verificacao dos dados enviados

        if ($_POST['nome']=="$user" && $_POST['senha']=="$senha")
        {
                session_start();
                $_SESSION['jlff']="beta";
                header("Location: admin.php");
                exit;
    }
        elseif ($_POST['nome']=="$user2" && $_POST['senha']=="$senha2")
        {
                session_start();
                $_SESSION['jlff']="beta";
                header("Location: admin.php");
                exit;
    }

        else {
        echo "<script>alert('Sem Permissão de Acesso')</script><script>window.location='index.php';</script>";
        exit;
        }
} else {
?>

<html>
<head>
<title><?php echo"$titulo"; ?></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<form method="post" action="index.php">
  <table width="500" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#ffffff" background="Background_Gree$
    <tr>
      <td width="156"><div align="right"><font size="3" face="Verdana, Arial"><br>
          <img border="0" src="" width="0" height="0"><br>
          </font> </div></td><?php echo "<B>$titulo</B>"; ?>
          <td width="348"><br><br><br><div align="center"><font face="Tahoma"><b><font size="1" color="ffffff">Usuário</font$
          </font>
          <input name="nome" type="text" class="campos" id="mUsuario" size="30"><font size="2">
          <br>
          </font><font size="1">
          <b> <font color="ffffff">Senha</b></font><font size="2" color="ffffff"><br>
          </font>
          <input name="senha" type="password" class="campos" id="mSenha" size="30"><br>
                <br>
          <input name="Submit" type="submit" class="botao" value="Entrar"></font></div></td>
    </tr>
    <tr>
      <td height="19"><div align="center"><br>
        </div></td>
      <td height="19">
                <div align="center">
          <font face="Tahoma" color="ffffff"  size="2">powered by: <b>
<a href="mailto:uaua03@ead.ftc.br">Departamento de Tecnologia</a></b></font></div>
</td>
    </tr>
  </table>
              <?php

} // end if

?>

</form>
</body>
</html>

Após isso criaremos o arquivo config.php.

<?php

//Configuracoes ADMIN

$user = "secretaria";
$user2 = "william";
$senha = "melecagrudenta12548";
$senha2 = "nirvanathebestchmod777";
//configuracoes paginas

$titulo = "INTRANET-UP:UAUÁ - SISTEMAS INTERNOS";

?>

Após isso vamos criar o arquivo admin.php, que será a interface que nos conectará ao diretório de backup.

<?php
  include("login.inc");
?>
<HTML>
<HEAD>
<TITLE>BACKUP</TITLE>
</title>

<style type="text/css">
#menuhor {
width: 12em;
padding: 0;
margin: 0;
border:none;
font: 12px Arial, sans-serif;
}
#menuhor li {
list-style: none;
margin: 0;
display: inline;
}
#menuhor li a {
height:1px; /* IE5.0 bug */
display: block;
padding: 5px 5px 5px 0.5em;
border: 1px solid #ffffff;
border-left: 10px solid #ffffff;
border-right: 10px solid silver;
background: gray;
text-decoration: none;

}
#menuhor li a:link {
color: #000000;
}
#menuhor li a:visited {
color: #fff;
}
#menuhor li a:hover {
background: #ccc;
color: #009988;
border-color: #009988;
}
</style>


</HEAD>
<BODY LANG="en-US" BGCOLOR="#666666" DIR="LTR">
.
<CENTER>
<TABLE WIDTH=764 BORDER=0 CELLPADDING=0 CELLSPACING=0 STYLE="page-break-before: always">
<COL WIDTH=2>
<COL WIDTH=749>
<COL WIDTH=2>

<TR>
<TH COLSPAN=3 WIDTH=760 VALIGN=TOP BGCOLOR="#ffffff"></TH>
</TR>
<TR>
<TD WIDTH=2 HEIGHT=114 VALIGN=TOP BGCOLOR="#ffffff">
<P><BR>

</P>

</TD>

<TH WIDTH=749 BGCOLOR="#009966">
<P ALIGN=CENTER><FONT COLOR="#ffffff"><FONT SIZE=6 STYLE="font-size: 26pt"><FONT SIZE=7 STYLE="font-size: 32pt">SISTEMAS INTERNOS
</FONT> – <I><FONT SIZE=6 STYLE="font-size: 22pt"></FONT></I></FONT></FONT></P>
<P ALIGN=CENTER><FONT COLOR="#ffffff"><FONT SIZE=3><FONT SIZE=1 STYLE="font-size: 8pt">©2005-2007</FONT>
Departamento de Tecnologia - UP: Uauá</FONT></FONT></P>
</TH>
<TD WIDTH=2 VALIGN=TOP BGCOLOR="#ffffff"></TD>

</TR>
<TABLE WIDTH=764 BORDER=0 CELLPADDING=0 CELLSPACING=0 STYLE="page-break-before: always">
                <COL WIDTH=2>
                <COL WIDTH=749>
                <COL WIDTH=2>
                <TR>
                        <TH COLSPAN=3 ALIGN=LEFT WIDTH=760 VALIGN=TOP BGCOLOR="#ffffff">
                <P ALIGN=LEFT>

<left>
<ul id="menuhor">
<li>
<a href="http://10.1.49.195/arquivos/ftc-backup/server1" title="Backup"
<b>1- BACK-UP-server 01</b></a>
</li>
<li>
<a href="http://10.1.49.195/arquivos/ftc-backup/server2" title="Backup"
<b>1- BACK-UP-servet 02</b></a>
</li>
<li>
<a href="http://10.1.49.195/arquivos/ftc-backup/server3" title="Backup"
<b>1- BACK-UP-servet 03</b></a>
</li>
<li>
<a href="logout.php"
<b>0- Sair</b></a>
</li>
</left><br>
</left>
<HR>
<h3> ADMINISTRAÇÃO DO SISTEMA

</TH>
</TR>
/P>
                        </TH>
                </TR>
                <TR>
                        <TD WIDTH=2 VALIGN=TOP BGCOLOR="#ffffff"></TD>
                        <TH WIDTH=749 BGCOLOR="#ffffff">
                                <P CLASS="style10" ALIGN=CENTER><BR>
                                </P>
                        </TH>
                        <TD WIDTH=2 VALIGN=TOP BGCOLOR="#ffffff"></TD>
                </TR>
                <TR>
                        <TD WIDTH=2 VALIGN=TOP BGCOLOR="#ffffff"></TD>
                        <TH WIDTH=749 BGCOLOR="#009966">
                                <P ALIGN=RIGHT><FONT COLOR="#ffffff"><FONT SIZE=3>Sistema
                                desenvolvido por: William França  </FONT></FONT></P>
                        </TH>
                        <TD WIDTH=2 VALIGN=TOP BGCOLOR="#ffffff"></TD>
                </TR>
                <TR>
                        <TH COLSPAN=3 WIDTH=760 HEIGHT=5 VALIGN=TOP BGCOLOR="#ffffff"></TH>
                </TR>
        </TABLE>
</CENTER>
<P><BR><BR>
</P>
</BODY>
</HTML>

Após isso faça o arquivo logout.php:

<?php
session_start();
session_destroy();
header("Location: index.php");

?>

E finalmente o arquivo login.inc:

<?
session_start();

if (empty($_SESSION['deptec']) || $_SESSION['deptec']!="beta")
{
        header("Location: index.php");
        exit;
}

?>
Página anterior     Próxima página

Páginas do artigo
   1. Lógica operacional
   2. Preparando um ambiente seguro
   3. Script 1 - varrendo o sistema em busca de informações
   4. Script 2 - manutenção do sistema
   5. Script 3 - servidor de backup
   6. Sistema PHP - segurança da informação
   7. Considerações finais
Outros artigos deste autor

Relatório de sistema via browser (shell script + CGI)

Leitura recomendada

Extracttext - como extrair texto de uma área selecionada da tela

cal2svg - brincando com shell script e arquivos vetoriais SVG

Aprendendo a melhorar os seus scripts

ShellBot - Crie Bots para Telegram em Shell Script

Monitorando servidores pelo celular

  
Comentários
[1] Comentário enviado por aprendiz_ce em 01/02/2007 - 18:08h

Show de bola!

Parabéns pelo seu artigo.

[2] Comentário enviado por thigux em 05/02/2007 - 10:24h

Mtu bom porem ao inves de
<form method="post" action="index.php">

nao seria

<form method="post" action="admin.php">???

[3] Comentário enviado por williamcrazy em 05/02/2007 - 10:54h

Correto thiagux cometi um peuqeno engano no arquibo login.inc a seção está setada como deptec ao envés de jlff e o location tá setando o index.php ao envés do admin.php então logo a baixo disponibilizarei a correção:

<?
session_start();

if (empty($_SESSION['jlff']) || $_SESSION['jlff']!="beta")
{
header("Location: admin.php");
exit;
}

?>

[4] Comentário enviado por thigux em 06/02/2007 - 08:43h

pode ser problema de algo aqui mas fiquei na duvida entao ta ai abaixo e vlw pela ajuda como disse adaptei pra outra coisa aqui e ta funcionando se quer saber alem do sisteminha de backup ja montei uma pequena intranet.

se quiser ver ou me ajudar ou mesmo apenas amizade de Linux thiagom128@hotmail.com

Só mais uma coisa eu testei aqui e independente da senha ele abria a tela pois adaptei seu codigo a outra coisa aqui e so mudei o admin.php no meu caso e tipo será q ta certinho esse index.php com o config.php tem alguma correção ou no seu ele autentica a senha ??

[5] Comentário enviado por williamcrazy em 06/02/2007 - 15:52h

Veja bem quando eu montei este script ele funcionou perfeitamente, você pode prestar atenção em algum detalhe que pode ter algo fora dos eixos, pois quando o fiz foi pensando que talvez a pessoa não tivesse disponivel um banco de dados, entretanto como você disse que tem agora uma intranet você pode usar a tecnologia mysql hehehe!!!
Aqui todos os funcionáriso tem seu login e senha cadastrados num banco de dados, vou te mostrar um exemplo não é o mesmo que eu uso mais é bem mais simples e bastante eficaz:

conexao.php

<?
//abre uma conexao com o mysql
$conexao = mysql_connect("HOST do SERVER", "USUARIO", "SENHA") or die (' Impossível conecta ao mysql, veja: ' . mysql_error());
mysql_select_db("BANCO DE DADOS QUE TEM A TABELA USUARIOS") or die (' O banco de dados não existe ');
?>

---------------------------------------------------

ogin.html

<form action="login.php" method="post" name="users" id="users">
<p>Logn dos usuários:</p>
<p align="center">
<input name="textfield" type="text" value="usuario">
<br>
<br>
<input name="textfield2" type="password" value="senha">
<br>
<br>
<input type="submit" name="Submit" value="Login">
</p>
</form>

----------------------------------------------------------------------------


ogin.php

<?
//conecta ao mysql
include "conexao.php";
//pega usuário e senha
$usuario = $_POST["usuario"];
$senha = $_POST["senha"];
//verifica se está tudo correto
$resultado = mysql_query("SELECT * FROM usuarios WHERE usuario = '$usuario' AND senha = '$senha' ");
//verifica se encontrou registros
if(mysql_num_rows($resultado)==0)
{
echo "<center><font face = verdana size = 2>ERRO! usuário ou senha inválidos!<br><br><a href = \"index.php\">Voltar</a></font></center>";
}
else
{
//usuário e senha corretos
$_SESSION['user'] = $usuario;
$_SESSION['pass'] = $senha;
//redireciona para admin
header("Location: admin.php");
}
?>

-------------------------------------------------------------------------

verifica.php

<?
//primeiro verifica se os cookies existem
if(isset($_SESSION["user"]))
{
}
else
{
header("Location: index.php");
}
if(isset($_SESSION["pass"]))
{
}
else
{
header("Location: index.php");
}
//verifica se eles não estão vazios
if(empty($_SESSION["user"]) or empty($_SESSION["pass"]))
{
header("Location: index.php");
}
else
{
}
//verifica se eles são corretos
$nome_usuario = $_SESSION["user"];
$pass_usuario = $_SESSION["pass"];
$resultado = mysql_query("SELECT * FROM usuarios WHERE usuario = '$nome_usuario' AND senha = '$pass_usuario' ");
//verifica se houve ocorrencia
if(mysql_num_rows($resultado)==0)
{
header("Location: index.php");
}
else
{
}
?>


----------------------------------------------------------------------

adm.php

<?
include "verifica.php";
?>


e esse include "verifica.php"; voc~e pode colocar em toda página que necessitar de autenticação para manter a segurança.

O grande lance do Software livre é exatamente esse, temos a liberdade de alterar os sistemas para atender á nossa real necessidade enquanto a microsoft manipula e faz lavagem cerebral nos seus clientes nós temos o poder da adaptabilidade gerando cada vez mais produtos com depenho melhorado, segurança reforçada, usabilidade adequada, somos uma imensa comunidade global enquanto empresas que vendem seus produtos de codigo fechado são apenas meias duzia de programadores bem pagos para fazerem produtos mal feitos, é claro sempre há excessões mais o Software livre extamante para isso, para dar liberdade e quebrar todas as excessões, hehehehe :-)
Bom Trabalho espero ter ajudado.

[6] Comentário enviado por thigux em 06/02/2007 - 16:13h

Opa mtu bom....mas aqui to usando sem BD mesmo to vendo se implemento isso pois ficaria mais facil a manipulação aqui .se souber algo q nao precise de BD melhor..mas vou tentar implementar em casa isso pois na empresa ainda estou Ganhando o direito de colocar linux

[7] Comentário enviado por heberbd em 06/02/2007 - 22:59h

Cara tenho uma situação diferente, tenho que fazer backup apenas de alguns arquivos no diretorio e tenho vários diretorios desse mesmo jeito.
Ex:

/home/teste1/*.pas
/home/teste2/src/*.jar
/home/teste3/*.doc

e tbm queira colocar esses diretorios em um arquivo para ficar fácil para os usuários atualizarem a lista de backup.

Será que você tem uma solução para esse problema????

Valeu....

[8] Comentário enviado por williamcrazy em 10/02/2007 - 10:53h

Não sei se entendi direito, mais ´não é tão complicado assim, pelo o que eu entendi voc~e tem alguns usuarios e cad um tem o seu diretorio você que fazer backup apenas de alguns arquivos e cada usuario poderá acessar apenas o seu propio arquivo de backup, bom vai dá um pouco de trabalho mais vamos lá.
A lógica é simples e praticamente a mesma, você vai criar um script de busca neste escript você coloca o que você quer igual no teu exemplo:
/home/teste1/*.pas
/home/teste2/src/*.jar
/home/teste3/*.doc
Dai você faz um script de recepção no qual fará a compactção de cada usuario gerando um arquivo .tar.gz para cada usuario ai neste mesmo script você cria um diretorio para cada usuario no servidor de backup, coloca cada tar.gz dentro da seu respectivo diretorio, n o sistema em php você cria uma conta de usuario para cada usuario, faça com que o seu script php redirecione cada login para a sua respectiva conta se puder fazer isso através de um banco de dados, melhor ainda,
ai quando o usuario fulanodetal acessar a sua conta ele vai ter uma pagina na qual você disponibilizará que ele acesse os arquivos de backup dele.

filedownload='/home/ftc/public_html/users-backup/'
database1='/home/ftc/public_html/backup/1'
database2='/home/ftc/public_html/backup/2'
database3='/home/ftc/public_html/backup/3'

mkdir $filedownlod/usuario1
mkdir $filedownlod/usuario2
mkdir $filedownlod/usuario3


cp /home/teste1/*.pas $database1
cp /home/teste2/src/*.jar $database2
cp /home/teste3/*.doc $database3

nome1='backup_usuario1'
nome2='backup_usuario2'
nome3='backup_usuario3'

ext='tar.gz'
tar -cvzf $nome1.tar.gz $database1
tar -cvzf $nome2.tar.gz $database2
tar -cvzf $nome3.tar.gz $database3

mv $nome.$ext $filedownload/usuario1
mv $nome.$ext $filedownload/usuario2
mv $nome.$ext $filedownload/usuario3

Ta ai uma ideia básica é claro eu fiz com pressa então faça os ajustes e com as noções do restante do tutorial você consigará terminar o sistema
sem maiores problemas

Na seção script 3 foi escretia pensando nessa mesma situação eu tava conferindo e você pode notar que segue a mesmas linha de raciocinio que eu idealizei agora:

http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=6040&pagina=5

Então é isso, memantenha informado qualquer duvida será um prazer ajudar e Viva o linux!!!!



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts