4.11. Kommandozeilenschnittstelle der Domänenverwaltung (Univention Directory Manager)#

Der Univention Directory Manager ist die Kommandozeilenschnittstelle-Alternative zur webbasierten Schnittstelle der UMC-Module für die Domänenverwaltung. Es dient als mächtiges Werkzeug für die Automatisierung von administrativen Vorgängen in Skripten und zur Integration in andere Programme.

Univention Directory Manager wird als Benutzer root auf dem Primary Directory Node mit dem Befehl univention-directory-manager (Kurzform udm) aufgerufen.

UMC-Module und Univention Directory Manager verwenden dieselben Domänen-Verwaltungsmodule, d.h. alle Funktionen der Webschnittstelle stehen auch im Kommandozeilen-Interface zur Verfügung.

4.11.1. Aufrufparameter der Kommandozeilenschnittstelle#

Eine komplette Liste der verfügbaren Module wird angezeigt, wenn udm mit dem Parameter modules aufgerufen wird:

$ univention-directory-manager modules
Available Modules are:
  computers/computer
  computers/domaincontroller_backup
  computers/domaincontroller_master
  computers/domaincontroller_slave
  [...]

Für jedes Modul existieren bis zu fünf Operationen:

list

führt alle existierenden Objekte dieses Typs auf.

create

legt ein neues Objekt an.

modify

oder bearbeitet existierende Objekte.

remove

löscht ein Objekt.

move

zum Verschieben an eine andere Position im LDAP-Verzeichnis.

Die mögliche Optionen eines UDM-Moduls und den darauf anwendbaren Operationen können durch Angabe des Operationsnamens ausgegeben werden, z.B.,

$ univention-directory-manager users/user move
[...]
general options:
  --binddn                         bind DN
  --bindpwd                        bind password
  --bindpwdfile                    file containing bind password
[...]
create options:
  --position                       Set position in tree
  --set                            Set variable to value, e.g. foo=bar
[...]
modify options:
  --dn                             Edit object with DN
  --set                            Set variable to value, e.g. foo=bar
[...]
remove options:
  --dn                             Remove object with DN
  --superordinate                  Use superordinate module
[...]
list options:
  --filter                         Lookup filter
  --position                       Search underneath of position in tree
[...]
move options:
  --dn                             Move object with DN
  --position                       Move to position in tree
[...]

Nähere Informationen, Operationen und Optionen zu jedem Modul gibt der folgende Befehl aus:

$ univention-directory-manager [category/modulename]

Dabei werden auch die Attribute des Moduls angezeigt. Bei der Operation create werden mit * die Attribute markiert, die beim Anlegen eines neuen Objektes zwingend angegeben werden müssen.

Einigen Attributen können mehrere Werte zugewiesen werden (z.B. Mailadressen an Benutzerobjekten). Diese Mehrfachwert-Felder sind mit [] hinter dem Attributnamen markiert. Einige Attribute können nur gesetzt werden, wenn für das Objekt bestimmte Optionen gesetzt werden. Dies ist bei den einzelnen Attributen durch Angabe des Optionsnamens aufgeführt:

users/user variables:
  General:
    username (*)                             Username
[...]
  Contact:
    e-mail (person,[])                       E-Mail Address

Hier bezeichnet username (*), dass dieses Attribut beim Anlegen von Benutzerobjekten immer gesetzt werden muss. Wird für das Benutzerkonto die Option person gesetzt (dies ist standardmäßig der Fall), können eine oder mehrere E-Mail-Adressen zu den Kontaktinformationen hinzugefügt werden.

Eine Reihe von Standard-Parametern sind für jedes Modul definiert:

--dn#

Der Parameter wird verwendet, um bei Modifikationen oder beim Entfernen die LDAP-Position des Objektes anzugeben. Dabei muss die komplette DN angegeben werden, z.B,

$ univention-directory-manager users/user remove \
  --dn "uid=ldapadmin,cn=users,dc=company,dc=example"
--position#

Um anzugeben, an welcher LDAP-Position ein Objekt angelegt werden soll, wird der Parameter verwendet. Ohne den --position-Parameter wird das Objekt unterhalb der LDAP-Basis angelegt! Bei der Operation move wird mit diesem Parameter angegeben, an welche Stelle ein Objekt verschoben werden soll, z.B:

$ univention-directory-manager computers/ipmanagedclient move \
  --dn "cn=desk01,cn=management,cn=computers,dc=company,dc=com" \
  --position "cn=finance,cn=computers,dc=company,dc=example"
--set#

Der Parameter gibt an, dass dem darauf folgenden Attribut der angegebene Wert zugewiesen wird. Der Parameter muss je Attribut-Wert-Paar verwendet werden, z.B:

$ univention-directory-manager users/user create \
  --position "cn=users,dc=compaby,dc=example" \
  --set username="jsmith" \
  --set firstname="John" \
  --set lastname="Smith" \
  --set password="12345678"
--option#

Der Parameter definiert die LDAP-Objektklassen eines Objekts. Wird bei einem Benutzerobjekt beispielsweise nur pki als Option übergeben, so kann für diesen Benutzer keine mailPrimaryAddress angegeben werden, da dieses Attribut Teil der Option mail ist.

--superordinate#

--superordinate wird zur Angabe von abhängigen, übergeordneten Modulen verwendet. Ein DHCP-Objekt beispielsweise benötigt ein DHCP-Service-Objekt, unter dem es angelegt werden kann. Dieses wird mit der Option --superordinate übergeben.

--policy-reference#

Mit dem Parameter --policy-reference lässt sich Objekten Richtlinien zuweisen (und analog mit --policy-dereference entfernen). Wird eine Richtlinie an ein Objekt geknüpft, so werden die Einstellungen aus der Richtlinie für das Objekt angewendet, z.B:

$ univention-directory-manager [category | modulename] [Operation] \
  --policy-reference "cn=sales,cn=pwhistory," \
"cn=users,cn=policies,dc=company,dc=example"
--ignore-exists#

Der Parameter --ignore_exists überspringt bereits vorhandene Objekte. Sollte ein Objekt nicht angelegt werden können, da es bereits existiert, wird trotzdem der Fehlercode 0 (kein Fehler) zurückgegeben.

--append#

Mit --append und --remove wird einem Mehrfachwert-Feld ein Wert hinzugefügt/entfernt, z.B:

$ univention-directory-manager groups/group modify \
  --dn "cn=staff,cn=groups,dc=company,dc=example" \
  --append users="uid=smith,cn=users,dc=company,dc=example" \
  --remove users="uid=miller,cn=users,dc=company,dc=example"
--remove#

Siehe --append.

4.11.2. Beispielaufrufe für die Kommandozeilenschnittstelle#

Die folgenden Beispielaufrufe des Kommandozeilen-Frontend von Univention Directory Manager können als Vorlagen für eigene Skripte verwendet werden.

4.11.2.1. Benutzer#

Anlegen eines Benutzers im Standard-Benutzer-Container:

$ univention-directory-manager users/user create \
  --position "cn=users,dc=example,dc=com" \
  --set username="user01" \
  --set firstname="Random" \
  --set lastname="User" \
  --set organisation="Example company LLC" \
  --set mailPrimaryAddress="mail@example.com" \
  --set password="secretpassword"

Nachträgliches Hinzufügen der postalischen Adresse zum gerade angelegten Benutzer:

$ univention-directory-manager users/user modify \
  --dn "uid=user01,cn=users,dc=example,dc=com" \
  --set street="Exemplary Road 42" \
  --set postcode="28239" \
  --set city="Bremen"

Mit diesem Befehl werden alle Benutzer angezeigt, deren Benutzername mit user beginnt:

$ univention-directory-manager users/user list \
  --filter uid='user*'

Die Suche nach Objekten mit --filter kann auch auf eine Position im LDAP-Verzeichnis eingeschränkt werden, in diesem Fall auf alle Benutzer im Container cn=bremen,cn=users,dc=example,dc=com:

$ univention-directory-manager users/user list \
  --filter uid="user*" \
  --position "cn=bremen,cn=users,dc=example,dc=com"

Dieser Aufruf entfernt einen Benutzer user04:

$ univention-directory-manager users/user remove \
  --dn "uid=user04,cn=users,dc=example,dc=com"

Eine Firma hat zwei Standorte mit eigens dafür angelegten Containern. Mit dem folgenden Befehl wird ein Benutzer aus dem Container für den Standort „Hamburg“ in den Container für den Standort „Bremen“ verschoben:

$ univention-directory-manager users/user move \
  --dn "uid=user03,cn=hamburg,cn=users,dc=example,dc=com" \
  --position "cn=bremen,cn=users,dc=example,dc=com"

4.11.2.2. Gruppen#

Anlegen einer Gruppe Example Users und Hinzufügen des Benutzers user01 in diese Gruppe:

$ univention-directory-manager groups/group create \
  --position "cn=groups,dc=example,dc=com" \
  --set name="Example Users" \
  --set users="uid=user01,cn=users,dc=example,dc=com"

Nachträgliches Hinzufügen des Benutzers user02 zur gerade angelegten Gruppe:

$ univention-directory-manager groups/group modify \
  --dn "cn=Example Users,cn=groups,dc=example,dc=com" \
  --append users="uid=user02,cn=users,dc=example,dc=com"

Vorsicht

Ein --set des Attributs users überschreibt im Gegensatz zu --append die Liste der Gruppenmitglieder.

Nachträgliches Entfernen des Benutzers user01 aus der Gruppe:

$ univention-directory-manager groups/group modify \
  --dn "cn=Example Users,cn=groups,dc=example,dc=com" \
  --remove users="uid=user01,cn=users,dc=example,dc=com"

4.11.2.3. Container / Richtlinien#

Dieser Aufruf legt unterhalb des Standard-Containers cn=computers einen Container cn=Bremen für die Rechnerobjekte am Firmenstandort „Bremen“ an. Durch die zusätzliche Option computerPath wird dieser Container auch direkt als Standardcontainer für Rechnerobjekte registriert (siehe Strukturierung der Domäne durch angepasste LDAP-Strukturen):

$ univention-directory-manager container/cn create \
  --position "cn=computers,dc=example,dc=com" \
  --set name="bremen" \
  --set computerPath=1

Dieser Befehl legt eine Speicherplatzbegrenzungsrichtlinie mit dem Namen Default quota mit Soft- und Hard-Limit an:

$ univention-directory-manager policies/share_userquota create \
  --position "cn=policies,dc=example,dc=com" \
  --set name="Default quota" \
  --set softLimitSpace=5GB \
  --set hardLimitSpace=10GB

Diese Richtlinie wird nun an den Benutzer-Container cn=users gebunden:

$ univention-directory-manager container/cn modify \
  --dn "cn=users,dc=example,dc=com" \
  --policy-reference "cn=Default quota,cn=policies,dc=example,dc=com"

Anlegen einer Univention Configuration Registry-Richtlinie, mit der die Vorhaltezeit der Logdateien auf ein Jahr eingestellt wird. Als Trennzeichen zwischen Name und Wert der Variable wird ein Leerzeichen verwendet:

$ univention-directory-manager policies/registry create \
  --position "cn=config-registry,cn=policies,dc=example,dc=com" \
  --set name="default UCR settings" \
  --set registry="logrotate/rotate/count 52"

Mit diesem Befehl wird an die angelegte Richtlinie ein weiterer Wert angehängt:

$ univention-directory-manager policies/registry modify \
  --dn "cn=default UCR settings,cn=config-registry,cn=policies,dc=example,dc=com" \
  --append registry='"logrotate/compress" "no"'

4.11.2.4. Rechner#

In folgendem Beispiel wird ein Windows-Client angelegt. Tritt dieser Client später der Samba-Domäne bei (siehe Windows-Domänenbeitritt), wird dieses Rechnerkonto dann automatisch verwendet:

$ univention-directory-manager computers/windows create \
  --position "cn=computers,dc=example,dc=com" \
  --set name=WinClient01 \
  --set mac=aa:bb:cc:aa:bb:cc \
  --set ip=192.0.2.10

4.11.2.5. Freigaben#

Der folgende Befehl legt eine Freigabe Documentation auf dem Server fileserver.example.com an. Sofern /var/shares/documentation/ auf dem Server noch nicht existiert, wird es durch diesen Aufruf auch gleich angelegt:

$ univention-directory-manager shares/share create \
  --position "cn=shares,dc=example,dc=com" \
  --set name="Documentation" \
  --set host="fileserver.example.com" \
  --set path="/var/shares/documentation"

4.11.2.6. Drucker#

Anlegen einer Druckerfreigabe LaserPrinter01 auf dem Druckserver printserver.example.com. Die Eigenschaften des Druckers sind in der PPD-Datei spezifiziert, deren Name relativ zum Verzeichnis /usr/share/ppd/ angegeben wird. Der angebundene Drucker ist netzwerkfähig und wird über das IPP-Protokoll angebunden.

$ univention-directory-manager shares/printer create \
  --position "cn=printers,dc=example,dc=com" \
  --set name="LaserPrinter01"  \
  --set spoolHost="printserver.example.com" \
  --set uri="ipp:// 192.0.2.100" \
  --set model="foomatic-rip/HP-Color_LaserJet_9500-Postscript.ppd" \
  --set location="Head office" \
  --set producer="producer: cn=HP,cn=cups,cn=univention,dc=example,dc=com"

Bemerkung

Zwischen dem Druckprotokoll und dem URL Zielpfad im Parameter uri muss ein Leerzeichen stehen. Eine Liste der Druckprotokolle befindet sich in Konfiguration von Druckerfreigaben.

Drucker können zur einfacheren Verwaltung in einer Druckergruppe zusammengefasst werden. Weitere Informationen zu Druckergruppen finden sich in Konfiguration von Druckergruppen.

$ univention-directory-manager shares/printergroup create \
  --set name=LaserPrinters \
  --set spoolHost="printserver.example.com" \
  --append groupMember=LaserPrinter01 \
  --append groupMember=LaserPrinter02

4.11.2.7. DNS/DHCP#

Um eine IP-Vergabe über DHCP zu konfigurieren, muss ein DHCP-Rechner-Eintrag für die MAC-Adresse registriert werden. Weitere Informationen zu DHCP finden sich in IP-Vergabe über DHCP.

$ univention-directory-manager dhcp/host create \
  --superordinate "cn=example.com,cn=dhcp,dc=example,dc=com" \
  --set host="Client222" \
  --set fixedaddress="192.0.2.110" \
  --set hwaddress="ethernet 00:11:22:33:44:55"

Soll ein Rechnername über DNS auflösbar sein, kann mit den folgenden Befehlen eine Vorwärts- (host record) und Reverse-Auflösung (PTR record) konfiguriert werden.

$ univention-directory-manager dns/host_record create \
  --superordinate "zoneName=example.com,cn=dns,dc=example,dc=com" \
  --set name="Client222" \
  --set a="192.0.2.110"

$ univention-directory-manager dns/ptr_record create \
  --superordinate "zoneName=0.168.192.in-addr.arpa,cn=dns,dc=example,dc=com" \
  --set address="110" \
  --set ptr_record="Client222.example.com."

Weitere Informationen zu DNS finden sich in Verwaltung von DNS-Daten mit BIND.

4.11.2.8. Erweiterte Attribute#

Mit erweiterten Attributen lässt sich der Funktionsumfang von UMC-Modulen flexibel erweitern, siehe Erweiterung von UMC-Modulen mit erweiterten Attributen. Im folgenden Beispiel wird ein neues Attribut eingefügt, an dem pro Benutzer das KFZ-Kennzeichen des Dienstwagens gespeichert wird. Die Werte werden in einer extra für diesen Zweck vorgesehenen Objektklasse univentionFreeAttributes verwaltet:

$ univention-directory-manager settings/extended_attribute create \
  --position "cn=custom attributes,cn=univention,dc=example,dc=com" \
  --set name="CarLicense" \
  --set module="users/user" \
  --set ldapMapping="univentionFreeAttribute1" \
  --set objectClass="univentionFreeAttributes" \
  --set longDescription="License plate number of the company car" \
  --set tabName="Company car" \
  --set multivalue=0 \
  --set syntax="string" \
  --set shortDescription="Car license"