AD Verwaltung

Willkommen

 

auf der Projektseite

der ActiveDirectoy Darstellung

auf einer Webseite!

active directory
 
Tim Walk, Sven Kaiser

Idee

Arbeitsauftrag

                                              

 

AD-Einträge auf einer Webseite wie in der ActiveDirectoy anzeigen

AD-Einträge bearbeiten können

OU's erstellen

Gruppen erstellen

User erstellen

Voraussetzungen

 

Es müssen folgenden Bedingungen erfüllt sein:

Windows Server mit funktionsfähiger ActiveDirectoy + DNS

Apache Server um die eigenen Webseiten mit PHP testen zu können

 

Optional:

Unsere Ordnerstruktur

Windows Server einrichten

 

Als erstes wird ein funktionierender Windows Server benötigt (bei uns war es der Server: Windows 2012 r2). Also eine funktionierende ActiveDirectoy + DNS ist zwingend, wie Sie den Server nach den Voraussetzungen einrichten können wird Ihnen in den folgenden 2 Videos erläutert.

Teil 1 des Videos

Teil 2 des Videos

Apache Server einrichten

Der zweite wichtige Schritt zur Vorbereitung ist es einen Apache Server einzurichten, damit man seine Webseiten testen kann. Auch hierfür haben wir Ihnen ein Video herausgesucht das ihnen zeigt wie Sie Ihren Apache Server installieren.

Video zur Apache Server installation

Ordner einrichten

 

In den Ordner /var/www/html/ müssen die Webseiten standardmäsig abgelegt werden.

Wir haben uns für die Struktur jedoch einige Ordner in diesem Verzeichnis angelegt.

Wir haben dort folgende Ordner angelegt:

1. tmp    -> Dort werden alle Dateien abgelegt die duch unseres Skripte erzeugt werden

2. skripte    -> Dort werden alle Bash Scripte abgelegt

3. projekt    -> Dort werden alle PHP und CSS Seiten abgelegt

Skripte

 

Wir haben folgende Skripte in Bash erstellt:

 

ein Skript um die ActiveDirectoy zu exportieren

ein Skript um User anzulegen

ein Skript um Container anzulegen

ein Skript um Benutzer anzulegen

ActiveDirectoy exportieren

Dieses Skript hat die Aufgabe die ganze ActiveDirectoy zu exportieren d. h. alle DN's der ActiveDirectoy in textdateien zu schreiben. Desweiteren werden die DN's aus der Ausgabe der ActiveDirectoy herausgefiltert damit nur noch die DN's alleine in den entsprechenden Dateien stehen.

 

#!/bin/bash

#Das Skript findet die DN der ActiveDirectory heraus

arrayOU=
arrayContainer=
arrayUser=
arrayGroup=
arrayComputer=
counter=1
ersteZeichenOU=
ersteZeichenContainer=
ersteZeichenUser=
ersteZeichenGroup=
ersteZeichenComputer=

#Entfernt und erstellt die passenden Dateien für die DNs

rm /var/www/html/DNOU.txt
rm /var/www/html/DNContainer.txt
rm /var/www/html/DNUser.txt
rm /var/www/html/DNGroup.txt
rm /var/www/html/DNComputer.txt
rm /var/www/html/ActiveDirectoryOU.txt
rm /var/www/html/ActiveDirectoryContainter.txt
rm /var/www/html/ActiveDirectoryUser.txt
rm /var/www/html/ActiveDirectoryComputer.txt
rm /var/www/html/ActiveDirectoryGroup.txt

touch /var/www/html/DNOU.txt
touch /var/www/html/DNContainer.txt
touch /var/www/html/DNUser.txt
touch /var/www/html/DNGroup.txt
touch /var/www/html/DNComputer.txt
touch /var/www/html/ActiveDirectoryOU.txt
touch /var/www/html/ActiveDirectoryContainter.txt
touch /var/www/html/ActiveDirectoryUser.txt
touch /var/www/html/ActiveDirectoryComputer.txt
touch /var/www/html/ActiveDirectoryGroup.txt

##########################################################################################################################################################################################################################################################
#                                                  Active Directory die Position von  OU's, User, Computer und Groups herausfinden                                                             #
##########################################################################################################################################################################################################################################################

ldapsearch -x -LLL -D "Administrator@kaiser.local" -w "robinhood031064!" -b "OU=Uebung,DC=KAISER,DC=LOCAL" -H "ldap://sven.kaiser.local:389" -b "DC=KAISER,DC=LOCAL" "(objectCategory=organizationalUnit)" | perl -p00e "s/\r?\n //g" > /var/www/html/ActiveDirectoryOU.txt
ldapsearch -x -LLL -D "Administrator@kaiser.local" -w "robinhood031064!" -b "OU=Uebung,DC=KAISER,DC=LOCAL" -H "ldap://sven.kaiser.local:389" -b "DC=KAISER,DC=LOCAL" "(objectCategory=container)" | perl -p00e "s/\r?\n //g" > /var/www/html/ActiveDirectoryContainer.txt
ldapsearch -x -LLL -D "Administrator@kaiser.local" -w "robinhood031064!" -b "OU=Uebung,DC=KAISER,DC=LOCAL" -H "ldap://sven.kaiser.local:389" -b "DC=KAISER,DC=LOCAL" "(&(objectCategory=person)(objectClass=user))" | perl -p00e "s/\r?\n //g" > /var/www/html/ActiveDirectoryUser.txt
ldapsearch -x -LLL -D "Administrator@kaiser.local" -w "robinhood031064!" -b "OU=Uebung,DC=KAISER,DC=LOCAL" -H "ldap://sven.kaiser.local:389" -b "DC=KAISER,DC=LOCAL" "(objectCategory=computer)" | perl -p00e "s/\r?\n //g" > /var/www/html/ActiveDirectoryComputer.txt
ldapsearch -x -LLL -D "Administrator@kaiser.local" -w "robinhood031064!" -b "OU=Uebung,DC=KAISER,DC=LOCAL" -H "ldap://sven.kaiser.local:389" -b "DC=KAISER,DC=LOCAL" "(objectCategory=group)" | perl -p00e "s/\r?\n //g" > /var/www/html/ActiveDirectoryGroup.txt

##########################################################################################################################################################################################################################################################
#                            OU's und Container herausfiltern und richtig abspeichern                                                                                                                                         #
##########################################################################################################################################################################################################################################################

while read line
do

ersteZeichenOU=$(echo ${line%% *})    #Alle Zeichen werden von rechts bis zum letzten doppel Punkt abgeschnitten

if [[ "$ersteZeichenOU" == "dn:" ]]
then
    arrayOU[$counter]=${line#* }    #Alle Zeichen werden von links abgeschnitten
    echo ${arrayOU[counter]} >> /var/www/html/DNOU.txt     
    counter=`expr $counter + 1`
fi

if [[ "$ersteZeichenOU" == "dn::" ]]
then
    arrayOU[$counter]=${line#* }    #Alle Zeichen werden von links abgeschnitten
    echo ${arrayOU[counter]} | base64 --decode >> /var/www/html/DNOU.txt
    counter=`expr $counter + 1`
fi
 
done < /var/www/html/ActiveDirectoryOU.txt

##########################################################################################################################################################################################################################################################
##########################################################################################################################################################################################################################################################

counter=1

while read line
do

ersteZeichenContainer=$(echo ${line%% *})      #Alle Zeichen werden von rechts bis zum letzten doppel Punkt abgeschnitten

if [[ "$ersteZeichenContainer" == "dn:" ]]
then
        arrayContainer[$counter]=${line#* }      #Alle Zeichen werden von links abgeschnitten
        echo ${arrayContainer[counter]} >> /var/www/html/DNContainer.txt  
        counter=`expr $counter + 1`
fi

if [[ "$ersteZeichenContainer" == "dn::" ]]
then
    arrayContainer[$counter]=${line#* }    #Alle Zeichen werden von links abgeschnitten
    echo ${arrayContainer[counter]} | base64 --decode >> /var/www/html/DNContainer.txt
    counter=`expr $counter + 1`
fi

done < /var/www/html/ActiveDirectoryContainer.txt

############################################################################################################################################################################################################################################################
#                                                                     User herausfiltern und richtig abspeichern                                                                                                                                           #
############################################################################################################################################################################################################################################################

counter=1

while read line
do

ersteZeichenUser=$(echo ${line%% *})      #Alle Zeichen werden von rechts bis zum letzten doppel Punkt abgeschnitten

if [[ "$ersteZeichenUser" == "dn:" ]]
then
        arrayUser[$counter]=${line#* }      #Alle Zeichen werden von links abgeschnitten
        echo ${arrayUser[counter]} >> /var/www/html/DNUser.txt  
        counter=`expr $counter + 1`
fi

if [[ "$ersteZeichenUser" == "dn::" ]]
then
    arrayUser[$counter]=${line#* }     #Alle Zeichen werden von links abgeschnitten
        echo ${arrayUser[counter]} | base64 --decode >> /var/www/html/DNUser.txt
        counter=`expr $counter + 1`
fi

done < /var/www/html/ActiveDirectoryUser.txt

############################################################################################################################################################################################################################################################
#                                                                     Grupppen herausfiltern und richtig abspeichern                                                                                                                                       #
############################################################################################################################################################################################################################################################

counter=1

while read line
do

ersteZeichenGroup=$(echo ${line%% *})      #Alle Zeichen werden von rechts bis zum letzten doppel Punkt abgeschnitten

if [[ "$ersteZeichenGroup" == "dn:" ]]
then
        arrayGroup[$counter]=${line#* }      #Alle Zeichen werden von links abgeschnitten
        echo ${arrayGroup[counter]} >> /var/www/html/DNGroup.txt  
        counter=`expr $counter + 1`
fi

if [[ "$ersteZeichenGroup" == "dn::" ]]
then
    arrayGroup[$counter]=${line#* }     #Alle Zeichen werden von links abgeschnitten
        echo ${arrayGroup[counter]} | base64 --decode >> /var/www/html/DNGroup.txt
        counter=`expr $counter + 1`
fi

done < /var/www/html/ActiveDirectoryGroup.txt

############################################################################################################################################################################################################################################################
#                                                                    Computer herausfiltern und richtig abspeichern                                                                                                                                        #
############################################################################################################################################################################################################################################################

counter=1

while read line
do

ersteZeichenComputer=$(echo ${line%% *})      #Alle Zeichen werden von rechts bis zum letzten doppel Punkt abgeschnitten

if [[ "$ersteZeichenComputer" == "dn:" ]]
then
        arrayComputer[$counter]=${line#* }      #Alle Zeichen werden von links abgeschnitten
        echo ${arrayComputer[counter]} >> /var/www/html/DNComputer.txt  
        counter=`expr $counter + 1`
fi

if [[ "$ersteZeichenComputer" == "dn::" ]]
then
    arrayComputer[$counter]=${line#* }     #Alle Zeichen werden von links abgeschnitten
        echo ${arrayComputer[counter]} | base64 --decode >> /var/www/html/DNComputer.txt
        counter=`expr $counter + 1`
fi

done < /var/www/html/ActiveDirectoryComputer.txt

DNAnzahlComputer=$(cat /var/www/html/DNComputer.txt | wc -l)
DNAnzahlUser=$(cat /var/www/html/DNUser.txt | wc -l)
DNAnzahlOU=$(cat /var/www/html/DNOU.txt | wc -l)
DNAnzahlGroup=$(cat /var/www/html/DNGroup.txt | wc -l)
DNAnzahlContainer=$(cat /var/www/html/DNContainer.txt | wc -l)

DNAnzahlGesamt=`expr $DNAnzahlCounter + $DNAnzahlUser + $DNAnzahlOU + $DNAnzahlGroup + $DNAnzahlContainer`

echo $DNAnzahlGesamt > /var/www/html/DNAnzahlGesamt.txt

 

 

Container Anlegen

 <?php
    include('./eigeneFunktionen.php');

    if(isset($_POST["ContainerAnlegen"])) {    
        $handle = fopen ("/var/www/html/skripte/ContainerName.txt", "w");
        fwrite ($handle, $_POST["ContainerAnlegen"]);
        fclose ($handle);
                
        $Befehl2 = "../skripte/ContainerAnlegen";
        $Result = systemaufruf($Befehl2);        
        echo $Result;        
        
        echo"<script type=\"text/javascript\"> self.close(); </script>";
    }
?>

<!DOCTYPE html>

<html>
    <head>
        <title>Container anlegen</title>
        <meta name="generator" content="Bluefish 2.2.7" />
        <meta name="author" content="root" />
        <meta name="date" content="2017-04-26T12:15:42+0200" />
        <meta name="copyright" content="" />
        <meta name="keywords" content="" />
        <meta name="description" content="" />
        <meta name="ROBOTS" content="NOINDEX, NOFOLLOW" />
        <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
        <meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />
        <meta http-equiv="content-style-type" content="text/css" />
        <meta http-equiv="expires" content="0" />
        
    </head>

    <body>
    
        <form action="./ContainerAnlegen.php" method="post">
            <input type="text" name="ContainerAnlegen" placeholder="DN für den Container angeben" style="width:250px;">
            <button name="Erstellen" type="submit">Container erstellen</button>
        </form>
    
    </body>
</html>

 

User anlegen

 

<?php
    include('./eigeneFunktionen.php');

    if(isset($_POST["GesamterName"])) {   
        $handle = fopen ("/var/www/html/skripte/BenutzerName.txt", "w");
        fwrite ($handle, $_POST["GesamterName"]."\n");
        fwrite($handle, $_POST["Vorname"]."\n");
        fwrite($handle, $_POST["Nachname"]."\n");
        fwrite($handle, $_POST["Passwort"]."\n");
        fwrite($handle, $_POST["Straße"]."\n");
        fwrite($handle, $_POST["PLZ"]."\n");
        fwrite($handle, $_POST["Ort"]."\n");
        fclose ($handle);
               
        $Befehl2 = "../skripte/BenutzerAnlegen";
        $Result = systemaufruf($Befehl2);               
       
        echo"<script type=\"text/javascript\"> self.close(); </script>";
    }
?>

<!DOCTYPE html>

<html>
    <head>
        <title>Benutzer anlegen</title>
        <meta name="generator" content="Bluefish 2.2.7" />
        <meta name="author" content="root" />
        <meta name="date" content="2017-04-26T12:15:40+0200" />
        <meta name="copyright" content="" />
        <meta name="keywords" content="" />
        <meta name="description" content="" />
        <meta name="ROBOTS" content="NOINDEX, NOFOLLOW" />
        <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
        <meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />
        <meta http-equiv="content-style-type" content="text/css" />
        <meta http-equiv="expires" content="0" />
       
    </head>

    <body>
   
        <form action="./BenutzerAnlegen.php" method="post">
            <input type="text" name="GesamterName" placeholder="Gesamter Name" style="width:250px;"><br /><br />
            <input type="text" name="Vorname" placeholder="Vorname" style="width:250px;"><br /><br />
            <input type="text" name="Nachname" placeholder="Nachname" style="width:250px;"><br /><br />
            <input type="password" name="Passwort" placeholder="Passwort" style="width:250px;"><br /><br />
            <input type="text" name="Straße" placeholder="Straße" style="width:250px;"><br /><br />
            <input type="text" name="PLZ" placeholder="PLZ" style="width:250px;"><br /><br />
            <input type="text" name="Ort" placeholder="Ort" style="width:250px;"><br /><br />
            <button name="Erstellen" type="submit">Benutzer erstellen</button>           
        </form>
   
    </body>
</html>

PHP

Die aus der ActiveDirectoy exportierten DN's sollen mithilfe dieser PHP Webseite wie in der ActiveDirectory in einer Baumstruktur dargestellt werden.

 

Dazu sollen die DN's in eine zwei Dimensionalen Array gespeichert werden, aus dem die Daten in der Baumstruktur dargestellt werden.

 

<?php
include('./BSProjekt/eigeneFunktionen.php');

$Befehl2 = "./skripte/ActiveDirectoryExportieren";
$Result = systemaufruf($Befehl2);
?>

<!DOCTYPE html>

<html>
    <head>
        <title>ActiveDirectory</title>
        <meta name="generator" content="Bluefish 2.2.7" />
        <meta name="author" content="root" />
        <meta name="date" content="2017-04-26T12:15:46+0200" />
        <meta name="copyright" content="" />
        <meta name="keywords" content="" />
        <meta name="description" content="" />
        <meta name="ROBOTS" content="NOINDEX, NOFOLLOW" />
        <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
        <meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />
        <meta http-equiv="content-style-type" content="text/css" />
        <meta http-equiv="expires" content="0" />
       
        <link href="./BSProjekt/stylesheet.css" rel="stylesheet" />
    </head>

    <body>       
        <div id="Header">
            <input id="SeitenRefresh" type="button" value="SEITEN REFRESH" onClick="window.location.reload()" />               
            <p id="Namen">Tim Walk, Sven Kaiser</p>   
        </div>
       
        <div class="Zwischenraum">
           
            <ul>
                  <li><a class="active" href="./BSProjekt/BenutzerAnlegen.php" target="_blank">Benutzer</a></li>
                  <li><a href="./BSProjekt/GruppeAnlegen.php" target="_blank">Gruppe</a></li>
                  <li><a href="./BSProjekt/ContainerAnlegen.php" target="_blank">Container</a></li>
                  <li><a href="./BSProjekt/ObjektGruppeHinzufügen.php" target="_blank">Objekt Gruppe hinzufügen</a></li>
            </ul>           
           
        </div>
   
        <div id="ActiveDirectory">   
           
            <?php   
                $benutzer = array();               
               
                $alle = file("tmp/DNUser.txt");
                foreach ($alle as $nr => $Inhalt){
               
                    $felder = explode(",",$Inhalt);
                    $felder2 = array_reverse($felder);
                    $benutzer[] = $felder2;   
                }               
               
                $OrganisationsEinheiten = array();
               
                $alle = file("tmp/DNOU.txt");
                foreach ($alle as $nr => $Inhalt){
               
                    $felder = explode(",",$Inhalt);
                    $felder2 = array_reverse($felder);
                    $OrganisationsEinheiten[] = $felder2;               
                }
               
                $Computer = array();
               
                $alle = file("tmp/DNComputer.txt");
                foreach ($alle as $nr => $Inhalt){
               
                    $felder = explode(",",$Inhalt);
                    $felder2 = array_reverse($felder);
                    $Computer[] = $felder2;               
                }
               
                $Group = array();
               
                $alle = file("tmp/DNGroup.txt");
                foreach ($alle as $nr => $Inhalt){
               
                    $felder = explode(",",$Inhalt);
                    $felder2 = array_reverse($felder);
                    $Group[] = $felder2;               
                }
               
                $Container = array();

                $alle = file("tmp/DNContainer.txt");
               
                foreach ($alle as $nr => $Inhalt){
               
                    $felder = explode(",",$Inhalt);
                    $felder2 = array_reverse($felder);
                    $Container[] = $felder2;               
                }               
                                           
                echo "<pre>";
                print_r($Container);
                echo "</pre>";
                               
            ?>
           
        </div>       
               
        <div id="Footer">
       
        </div>
    </body>
</html>

Präsentation

 

 Unsere Praesentation

Download


 Download_gesamtes_Projekt

 

Quellen

 

JK-Schuster