Triple Eye Industrieel Ingenieur Informatica Algemeen Intranet Vierde jaar Windows Labo's reeks 8

reeks 8: Wijzigen van gegevens in Active Directory

In reeks 6 hebben we de principes al toegelicht om gegevens te wijzigen in Active Directory. We gaan in deze reeks een aantal oefeningen maken hierop. Oefeningen met een rode nummering kunnen in het iii.hogent.be domein enkel uitgevoerd worden tijdens de labosessies van 15 en 16 december.

1.
In oefening 30 van reeks 6 wordt het abstracte schema gebruikt om het type te achterhalen van een willekeurig Ldap-attribuut en dan ook de waarde van het LDAP-attribuut uit te schrijven voor om het even welk Object. Schrijf nu een functie valueattribuut(Ldapdisplayname,object) die voor een willekeurig object en een willekeurig LDAP-attribuut (met opgegeven Ldapdisplayname) de (eventuele multivalued) inhoud teruggeeft. In PerlScript kan je ervoor zorgen dat er steeds een referentie naar een array wordt teruggegeven. Hou rekening met het volgende:
  • Geconstrueerde attributen worden niet automatisch in de Property Cache geplaatst.
  • Indien het attribuut niet bestaat of niet is ingesteld voor het object geef je als return-waarde de array met als enige inhoud <niet-ingesteld>.
  • Indien het attribuut wel is ingesteld, moet voor alle syntaxen iets zinvol worden getoond: hetzij de inhoud, hetzij een zinvol kenmerk.
  • Indien de syntax van het LDAP_attribuut OctetString of LargeInteger is, moet je zelf een juiste omzetting naar string uitvoeren (zie vorige reeksen). Voor de syntax ObjectSecurityDescriptor geef je als return-waarde het ADSI-attribuut Owner uit de Interface IADsSecurityDescriptor (zie AD Manual).

voorbeeld

2.
Schrijf een script dat alle gebruikers in de studenten container, waarvan het description attribuut beantwoordt aan een criterium (dat als eerste parameter meegegeven wordt), lid maakt van een (reeds bestaande) gebruikersgroep, waarvan de naam als tweede parameter vermeld wordt. De specifieke parameters, waarmee je het script moet oproepen, worden in het labo vermeld.
Let op! Je mag in deze oefening geen gebruik maken van ADSI-methodes van een group. Het is de bedoeling dat je het juiste LDAP-attribuut aanpast.
Controleer met dsquery dat het lidmaatschap effectief aangepast wordt.

antwoord

Users en groepen

3.
Om een nieuw object te maken van een bepaalde klasse (bijvoorbeeld user of group) moet je weten welke de attributen zijn die je verplicht moet ingeven voor dit soort klasse. Gebruik het abstracte schema om deze informatie te bekomen. Bovendien moeten een aantal van deze verplichte attributen een unieke waarde hebben in de container waarin ze zitten en soms ook uniek zijn in het ganse domein.
Schrijf een script waarbij je als enig argument de ldapdisplayname van een klasse opgeeft (bijvoorbeeld group, organizationalUnit, ...). Toon alle verplichte attributen voor deze klasse. Selecteer vervolgens uit deze lijst één attribuut en geef voor alle objecten in de domeingegevens van de opgegeven klasse de inhoud van dit attribuut. Gebruik uiteraard een LDAP-query om eenvoudig alle objecten van de opgegeven klasse te bekomen.

antwoord

4.
Je hebt enkel schrijfrechten in de container OU=Labo,DC=iii,DC=hogent,DC=be. Zorg ervoor dat je steeds op dezelfde domeincontroller het domein raadpleegt om wijzigingen te kunnen controleren. Je kan de domeincontroller opvragen met onderstaand script:
my $Root =bind_object("RootDSE");
my $domein_controller=$Root->Get("dnsHostName");
$domein_controller=~s/\..*//;

print "Gebruik in deze sessie steeds $domein_controller om gegevens van het domein te raadplegen !!";
Schrijf een script dat in deze container één persoonlijke organizational unit toevoegt, waarvan de naam (neem hiervoor uw volledige eigen naam) als enige parameter wordt meegegeven. Gebruik de IADsContainer interface om een object te creëren.
Bekijk eerst de verplichte attributen van een organizational unit (gebruik vorige oefening). Enkel de property ou wordt niet automatisch ingevuld. De waarde die je invult voor deze property maakt deel uit van de canonicalName van het object. De canonicalName van elk object moet uniek zijn in een container. Controleer dit en vraag een andere naam indien nodig. Controleer dat alle verplichte attributen inderdaad ingevuld werden.

antwoord

5.
De volgende stap is een nieuwe user maken. Het verplichte attribuut samAccountName moet uniek zijn voor alle objecten in het domein (die dit attribuut hebben). Schrijf een script dat een lijst geeft van alle gebruikte waarden voor samAccountName, en geef een overzicht van de objectcategorie van de klassen die een object met dit attribuut bezitten. Deze informatie kan je gebruiken in de volgende oefeningen.

antwoord

6.
Nu kunnen we in onze persoonlijke container een nieuwe user toevoegen. De meeste verplichte attributen van een user worden automatisch ingevuld, behalve de cn (die uniek moet zijn in de container) en de samAccountName (die uniek moet zijn in het domein, bovendien bestaat de samAccountName uit maximaal 20 tekens).
Schrijf een script dat aan jouw organizational unit een user toevoegt, met als naam en samAccountName "user_loginName".
Controleer daarna dat alle andere verplichte attributen inderdaad ingevuld zijn (met een default waarde). Je kan dit script slechts 1 keer uitvoeren, geef een gepaste foutmelding bij een volgende aanroep.

antwoord

7.
Overloop nu alle users in je eigen container en wijzig de inhoud van het LDAP-attribuut mail door een nieuwe waarde in te lezen. Indien een lege string wordt ingegeven moet alle inhoud van dit LDAP-attribuut gewist worden.

antwoord

8.
Los vorige oefening op met behulp van de Property Cache Interfaces.

voorbeeld

9.
De volgende stap is een groep aanmaken, waarbij je ook het groupType moet opgeven. Het LdapAttribuut groupType is een geheel getal, dat specifieke informatie opslaat in een bitpatroon. In de AD Library vind je meer informatie hierover in de tak Active Directory Domain Services / Using Active Directory Domain Services / Managing Groups
Gebruik een LDAP query om voor alle groepen de hexadecimale waarde van groupType te tonen. Merk op dat alle groepen in het iii.hogent.be domein security groepen zijn.

antwoord

10.
Met de Type Library ActiveDs kan je de constanten voor de 4 bitflags in je script plaatsen. Je kan ze ook hard-coderen, in de ADSI Library vind je namelijk in de tak ADSI Enumerations de beschrijving van ADS_GROUP_TYPE_ENUM :
   ADS_GROUP_TYPE_GLOBAL_GROUP=2
   ADS_GROUP_TYPE_DOMAIN_LOCAL_GROUP=4
   ADS_GROUP_TYPE_UNIVERSAL_GROUP=8
   ADS_GROUP_TYPE_SECURITY_ENABLED=&H80000000
Er zijn zes soorten groepen mogelijk in het domein, met telkens bepaalde bits al dan niet ingesteld, die de scoop en het type van de groep aanduiden. In de AD Library vind je dit overzicht in de tak Active Directory Domain Services / Using Active Directory Domain Services / Managing Groups / Creating Groups in a Domain.

Geef in je script een overzicht van deze zes soorten groepen, kies hier een bepaalde scoop/type combinatie uit en toon alle groepen in het domein die deze combinatie vertonen. Gebruik een LDAP query om alle groepen te bepalen en geef ook direct het juiste bitpatroon op in de filter van de query.

voorbeeld

11.
Schrijf een script dat aan jouw organizational unit een groep toevoegt, met als naam groep. De canonicalName moet uniek zijn in de container, zoniet moet een andere groepsnaam gevraagd worden.
Enkel de property samAccountName wordt niet automatisch ingevuld. De samAccountName moet uniek zijn in het domein. Je geeft als waarde voor deze samAccountName de naam van de groep, aangevuld met 01,02,...
Controleer daarna dat alle andere verplichte attributen inderdaad ingevuld zijn (met een default waarde)

antwoord

12.
Toon het aantal leden (members) van alle groepen (gebruik een LDAP-query om alle groepen op te sporen). Lees de naam in van één groep en geef een overzicht van de leden van deze groep.

antwoord

13.
Geef de SamAccountName van alle users in het domein (gebruik LDAP-query). Kies hieruit één user (inlezen) en geef voor deze user alle groepen waartoe de user behoort.

antwoord

14.
Geef de samAccountName van een user als enige parameter op.
Indien de user nog niet bestaat moet gevraagd worden of een nieuwe user moet aangemaakt worden (in jouw container).

Programmeer de volgende mogelijkheden interactief:
1. Andere user kiezen op basis van samAccountName
2. Telefoonnummer toevoegen (bekijk de eigenschappen van dit attribuut)
3. Overzicht van de groepen van deze user tonen
4. Groep verwijderen Let op dat je enkel wijzigingen aanbrengt voor users die je zelf gemaakt hebt
5. Groep toevoegen (met een overzicht van alle mogelijke groepen)
6. User verwijderen Let op dat je enkel users verwijdert die je zelf gemaakt hebt

Controleer dat het ladpAttribuut samAccountName geïndexeerd is en gebruik een LDAP-query om de user op te zoeken.

antwoord

15.
Schrijf een script dat organizational unit (zie oefening 4) volledig leegmaakt. De organizational unit zelf wordt niet verwijderd, enkel zijn inhoud. Als enige argument wordt de naam van de organizational unit opgegeven. Je mag ervan uitgaan dat deze zich bevindt in de container labo. Gebruik een recursieve functie om eventuele onderliggende containers te verwijderen.
Let op ! verwijder enkel effectief na bevestiging waarbij het adspath van elk object getoond wordt

antwoord

16.
Schrijf een script dat automatisch de users en groepen aanmaakt, beschreven in het tekstbestand stdinwe.out. Hierin staan studenten gegevens.
Bovendien moet je twee parameters meegeven die de eerste en de laatste regel bepalen die effectief verwerkt moeten worden. Zorg ervoor dat je niet dezelfde regels verwerkt als een klasgenoot, zodat de samAccountName uniek is !
Voor elke student moet een login gemaakt worden waarbij de samAccountName en de cn beiden bepaald worden door het tweede veld in het studentenbestand. Ook de volledige naam moet ingesteld worden.
Bovendien moeten de volgende groepen aangemaakt (indien ze nog niet bestaan) worden:
  • Voor elke provincie (eerste cijfer van de postcode is 9,8,...) die effectief voorkomt : domein local security groep
    1 -> Brabant, 2 -> Antwerpen, 3 -> Limburg, 4 -> Luik, 5 -> Namen, 6 -> Luxemburg, 7 -> Henegouwen , 8 -> WVlaanderen, 9 -> OVlaanderen.

  • Voor elke richting (vb IIBOUW): een global security groep
Alle nieuw gemaakte objecten plaats je in jouw organizational unit.

antwoord


M. Denert
J. Moreau 9/12/2009

Welkom | Hogeschool Gent | INWE | Studentenserver | Docentenserver | Intranet