Proxmox Domain Integration: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(22 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
=Download=
sudo -i
cd /var/lib/libvirt/images
wget http://host200:8000/win2022-ldap.qcow2
=Maschine im VMM erstellen=
*Vorhandenes Festplatten-Abbild importieren
*Image auswählen
*Bestriebssystem auf Microsoft Windows Server 2022
*Speicher: 8192
*CPUs: 4
*Name: win2k22
*Konfiguration bearbeiten vor der Installation
*Platte entfernen
*Nochmal hinzufügen diesmal aber Bustype: Virtio
*NIC: auch auf Virtio stellen, Bridge: vmbr0 
*Booten
*User: Administrator
*Pass: 123Start$


=Einbinden in die Domain=
=Einbinden in die Domain=
{{#drawio:proxmox-domain.png}}
{{#drawio:proxmox-domain.png|300px}}


=Auf allen PMXen=
=Auf allen PMXen=
*SUDO
*Root werden
  sudo
  sudo -i
*LDAP utils installieren
*LDAP utils installieren
  apt install ldap-utils
  apt install ldap-utils
*Stammzertifikat einbauen
*Stammzertifikat einbauen
  cd /usr/local/share/ca-certificates/
  cd /usr/local/share/ca-certificates/
  wget https://web.samogo.de/dc.lab.int/lab.int-ca.crt
  wget https://web.samogo.de/certs/win2022-ca.sec-labs.de.crt
  update-ca-certificates
  update-ca-certificates
*DC als Nameserver eintragen
*Zertifikat pruefen (muss "Verify return code: 0 (ok)" liefern)
echo "nameserver 10.0.10.100" > /etc/resolv.conf
  openssl s_client -connect win2022.sec-labs.de:636 </dev/null 2>/dev/null | grep "Verify return"
oder statisch:
  echo "10.0.10.100 win2k22.lab.int win2k22" >> /etc/hosts
*LDAPS-Funktion testen
*LDAPS-Funktion testen
  ldapsearch -xLLL + -H ldaps://win2k22.lab.int -D ldap@lab -w 123Start$ -b dc=lab,dc=int
  ldapsearch -xLLL -H ldaps://win2022.sec-labs.de -D ldap@sec-labs.de -w '123Start$' -b OU=spielwiese,DC=sec-labs,DC=de "(objectClass=user)" sAMAccountName
Es sollten die Benutzer aus der OU spielwiese erscheinen.
*Ein Test-script für alles
wget https://xinux.de/downloads/script/ldap-test.sh
bash ldap-test.sh
 
=Anmerkung=
AGDLP ist ein Gruppen- und Berechtigungsmodell in Microsoft Active Directory. Dabei werden Benutzerkonten (Accounts) zunächst Globalen Gruppen (Global Groups) zugeordnet, diese wiederum in Domänenlokale Gruppen (Domain Local Groups) geschachtelt, die schließlich Berechtigungen (Permissions) auf Ressourcen erhalten. Dieses Modell erlaubt eine saubere Trennung von Benutzerverwaltung und Rechtevergabe - funktioniert aber in Proxmox nicht, da verschachtelte Gruppen dort nicht aufgelöst werden.
 
Deshalb werden die Rechte in Proxmox direkt an die '''globalen Gruppen''' (GG_...) vergeben, in denen die Benutzer unmittelbar Mitglied sind.


=Anbinden der AD über LDAP (LDAPS)=
=Anbinden der AD über LDAP (LDAPS)=
*Proxmox WebGUI öffnen
*Proxmox WebGUI öffnen
*Gehe zu: Datacenter → Permissions → Realms → Add: LDAP
*Gehe zu: Datacenter -> Permissions -> Realms -> Add: LDAP
==LDAP-Konfiguration – Reiter „General“==
 
==LDAP-Konfiguration - Reiter "General"==
{| class="wikitable"
{| class="wikitable"
! Feld !! Wert
! Feld !! Wert
Zeile 28: Zeile 54:
| Realm || spielwiese
| Realm || spielwiese
|-
|-
| Server || win2k22.lab.int
| Server || win2022.sec-labs.de
|-
|-
| Port || 636
| Port || 636
Zeile 34: Zeile 60:
| Mode || LDAPS
| Mode || LDAPS
|-
|-
| Base Domain Name || OU=spielwiese,DC=lab,DC=int
| Base Domain Name || OU=spielwiese,DC=sec-labs,DC=de
|-
|-
| User Attribute || sAMAccountName
| User Attribute || sAMAccountName
|-
|-
| Verify Certificate || (aktivieren, falls CA importiert wurde)
| Verify Certificate || aktivieren (CA wurde oben importiert)
|-
|-
| Require TFA || none
| Require TFA || none
Zeile 49: Zeile 75:
! Feld !! Wert
! Feld !! Wert
|-
|-
| Bind User || CN=ldap,OU=dienste,OU=spielwiese,DC=lab,DC=int
| Bind User || CN=ldap,OU=dienste,OU=spielwiese,DC=sec-labs,DC=de
|-
|-
| Bind Password || 123Start$
| Bind Password || 123Start$
Zeile 65: Zeile 91:
| Remove vanished || alles deaktiviert lassen
| Remove vanished || alles deaktiviert lassen
|}
|}
==Realm Sync – Felder zum Ausfüllen==
 
==Realm Sync - Felder zum Ausfüllen==
{| class="wikitable"
{| class="wikitable"
! Feld || Wert
! Feld !! Wert
|-
|-
| Scope || Users and Groups
| Scope || Users and Groups
Zeile 79: Zeile 106:
| Remove Properties || deaktiviert lassen
| Remove Properties || deaktiviert lassen
|}
|}
==Preview sollte so aussehen==
==Preview sollte so aussehen==
[[Datei:Pmx-ldap1.png]]
Datacenter -> Permissions -> Realms -> spielwiese -> Sync -> Preview
<pre>
(dry test run) starting sync for realm spielwiese
got data from server, updating users and groups
syncing users (remove-vanished opts: none)
updating user 'dagobert@spielwiese'
updating user 'dewey@spielwiese'
updating user 'donald@spielwiese'
updating user 'huey@spielwiese'
updating user 'ldap@spielwiese'
updating user 'louie@spielwiese'
syncing groups (remove-vanished opts: none)
updating group 'GG_Admins-spielwiese'
updating group 'GG_Benutzer-spielwiese'
updating group 'GG_Dienste-spielwiese'
updating group 'LG_Admins-spielwiese'
updating group 'LG_Benutzer-spielwiese'
updating group 'LG_Dienste-spielwiese'
 
NOTE: Dry test run, changes were NOT written to the configuration.
TASK OK
</pre>
 
Die Gruppen heißen in Proxmox danach <Gruppe>-<Realm>, also z.B. GG_Benutzer-spielwiese.
 
==Danach Syncen==
==Danach Syncen==
[[Datei:Pmx-ldap2.png]]
Datacenter -> Permissions -> Realms -> spielwiese -> Sync -> Sync
 
Die Ausgabe entspricht der Preview, endet aber mit:
<pre>
successfully updated users and groups configuration
TASK OK
</pre>
 
==Realm Sync Job nach Bedarf==
==Realm Sync Job nach Bedarf==
[[Datei:Pmx-ldap3.png]]
Datacenter -> Realm Sync Jobs -> Add
{| class="wikitable"
! Feld !! Wert
|-
| Realm || spielwiese
|-
| Schedule || z.B. 21:00
|-
| Enable Job || aktiviert
|-
| Scope || Users and Groups
|-
| Enable New || Yes
|-
| Remove Vanished: ACL / Entry / Properties || deaktiviert lassen
|}
 
==Benutzerberechtigung==
==Benutzerberechtigung==
*Gehe zu: Datacenter → Permissions → Add → Group Permission
Admins bekommen volle Verwaltungsrechte:
[[Datei:Pmx-ldap4.png]]
*Gehe zu: Datacenter -> Permissions -> Add -> Group Permission
=Rollen für LG_Benutzer: Gucken auf alles, Schalten einer VM=
{| class="wikitable"
! Feld !! Wert
|-
| Path || /
|-
| Group || GG_Admins-spielwiese
|-
| Role || PVEAdmin
|-
| Propagate || aktiviert
|}


==1. Rollen anlegen (einmalig auf einem Proxmox-Host)==
=Rollen für GG_Benutzer: Gucken auf alles, Schalten einer VM=
 
==1. Rolle anlegen (einmalig auf einem Proxmox-Host)==
Auf einem beliebigen Cluster-Knoten als root:
Auf einem beliebigen Cluster-Knoten als root:
pveum roleadd VMPowerOnly -privs "VM.PowerMgmt VM.Audit"


<pre>
Für das reine Anschauen wird die eingebaute Rolle '''PVEAuditor''' verwendet, dafür muss keine eigene Rolle angelegt werden.
pveum roleadd ReadOnly -privs "VM.Audit"
pveum roleadd VMPowerOnly -privs "VM.PowerMgmt VM.Audit"
</pre>


==2. Rechte auf alle VMs zum Anschauen geben==
==2. Rechte auf alle VMs zum Anschauen geben==
Alle Benutzer der Gruppe `LG_Benutzer` dürfen den Status aller VMs sehen:
Alle Benutzer der Gruppe '''GG_Benutzer''' dürfen den Status aller VMs sehen:
 
*WebGUI: Datacenter → Permissions → Add


*WebGUI: Datacenter -> Permissions -> Add -> Group Permission
<pre>
<pre>
User:   spielwiese\GG_Benutzer
Path:      /
Role:   ReadOnly
Group:     GG_Benutzer-spielwiese
Path:   /
Role:     PVEAuditor
Propagate: aktiviert
</pre>
</pre>


==3. Rechte zum Ein-/Ausschalten einer bestimmten VM geben==
==3. Rechte zum Ein-/Ausschalten einer bestimmten VM geben==
Zusätzliche Rechte nur für z. B. VM 101 (Start, Stop, Shutdown):
Zusätzliche Rechte nur für z.B. VM 101 (Start, Stop, Shutdown):
 
*WebGUI: Datacenter → Permissions → Add


*WebGUI: Datacenter -> Permissions -> Add -> Group Permission
<pre>
<pre>
User:   spielwiese\LG_Benutzer
Path:      /vms/101
Role:   VMPowerOnly
Group:     GG_Benutzer-spielwiese
Path:    /vms/101
Role:     VMPowerOnly
</pre>
</pre>


==Ergebnis==
==Ergebnis==
* `LG_Benutzer` sieht alle VMs im Webinterface
*Mitglieder von '''GG_Benutzer''' sehen alle VMs im Webinterface
* Nur bei VM 101 ist der Power-Button aktiv
*Nur bei VM 101 ist der Power-Button aktiv
* Kein Zugriff auf Konsole, Snapshot, Konfiguration oder andere Aktionen
*Kein Zugriff auf Konsole, Snapshot, Konfiguration oder andere Aktionen

Aktuelle Version vom 16. Oktober 2026, 06:31 Uhr

Download

sudo -i
cd /var/lib/libvirt/images
wget http://host200:8000/win2022-ldap.qcow2

Maschine im VMM erstellen

  • Vorhandenes Festplatten-Abbild importieren
  • Image auswählen
  • Bestriebssystem auf Microsoft Windows Server 2022
  • Speicher: 8192
  • CPUs: 4
  • Name: win2k22
  • Konfiguration bearbeiten vor der Installation
  • Platte entfernen
  • Nochmal hinzufügen diesmal aber Bustype: Virtio
  • NIC: auch auf Virtio stellen, Bridge: vmbr0
  • Booten
  • User: Administrator
  • Pass: 123Start$

Einbinden in die Domain

proxmox-domain.png

Auf allen PMXen

  • Root werden
sudo -i
  • LDAP utils installieren
apt install ldap-utils
  • Stammzertifikat einbauen
cd /usr/local/share/ca-certificates/
wget https://web.samogo.de/certs/win2022-ca.sec-labs.de.crt
update-ca-certificates
  • Zertifikat pruefen (muss "Verify return code: 0 (ok)" liefern)
openssl s_client -connect win2022.sec-labs.de:636 </dev/null 2>/dev/null | grep "Verify return"
  • LDAPS-Funktion testen
ldapsearch -xLLL -H ldaps://win2022.sec-labs.de -D ldap@sec-labs.de -w '123Start$' -b OU=spielwiese,DC=sec-labs,DC=de "(objectClass=user)" sAMAccountName

Es sollten die Benutzer aus der OU spielwiese erscheinen.

  • Ein Test-script für alles
wget https://xinux.de/downloads/script/ldap-test.sh
bash ldap-test.sh

Anmerkung

AGDLP ist ein Gruppen- und Berechtigungsmodell in Microsoft Active Directory. Dabei werden Benutzerkonten (Accounts) zunächst Globalen Gruppen (Global Groups) zugeordnet, diese wiederum in Domänenlokale Gruppen (Domain Local Groups) geschachtelt, die schließlich Berechtigungen (Permissions) auf Ressourcen erhalten. Dieses Modell erlaubt eine saubere Trennung von Benutzerverwaltung und Rechtevergabe - funktioniert aber in Proxmox nicht, da verschachtelte Gruppen dort nicht aufgelöst werden.

Deshalb werden die Rechte in Proxmox direkt an die globalen Gruppen (GG_...) vergeben, in denen die Benutzer unmittelbar Mitglied sind.

Anbinden der AD über LDAP (LDAPS)

  • Proxmox WebGUI öffnen
  • Gehe zu: Datacenter -> Permissions -> Realms -> Add: LDAP

LDAP-Konfiguration - Reiter "General"

Feld Wert
Realm spielwiese
Server win2022.sec-labs.de
Port 636
Mode LDAPS
Base Domain Name OU=spielwiese,DC=sec-labs,DC=de
User Attribute sAMAccountName
Verify Certificate aktivieren (CA wurde oben importiert)
Require TFA none
Check connection aktiviert lassen

LDAP-Realm-Konfiguration (Sync Options)

Feld Wert
Bind User CN=ldap,OU=dienste,OU=spielwiese,DC=sec-labs,DC=de
Bind Password 123Start$
Groupname attr. sAMAccountName
User classes user
Group classes group
Scope none
Enable new users Yes (Default)
Remove vanished alles deaktiviert lassen

Realm Sync - Felder zum Ausfüllen

Feld Wert
Scope Users and Groups
Enable new Yes
Remove ACL deaktiviert lassen
Remove Entry deaktiviert lassen
Remove Properties deaktiviert lassen

Preview sollte so aussehen

Datacenter -> Permissions -> Realms -> spielwiese -> Sync -> Preview

(dry test run) starting sync for realm spielwiese
got data from server, updating users and groups
syncing users (remove-vanished opts: none)
updating user 'dagobert@spielwiese'
updating user 'dewey@spielwiese'
updating user 'donald@spielwiese'
updating user 'huey@spielwiese'
updating user 'ldap@spielwiese'
updating user 'louie@spielwiese'
syncing groups (remove-vanished opts: none)
updating group 'GG_Admins-spielwiese'
updating group 'GG_Benutzer-spielwiese'
updating group 'GG_Dienste-spielwiese'
updating group 'LG_Admins-spielwiese'
updating group 'LG_Benutzer-spielwiese'
updating group 'LG_Dienste-spielwiese'

NOTE: Dry test run, changes were NOT written to the configuration.
TASK OK

Die Gruppen heißen in Proxmox danach <Gruppe>-<Realm>, also z.B. GG_Benutzer-spielwiese.

Danach Syncen

Datacenter -> Permissions -> Realms -> spielwiese -> Sync -> Sync

Die Ausgabe entspricht der Preview, endet aber mit:

successfully updated users and groups configuration
TASK OK

Realm Sync Job nach Bedarf

Datacenter -> Realm Sync Jobs -> Add

Feld Wert
Realm spielwiese
Schedule z.B. 21:00
Enable Job aktiviert
Scope Users and Groups
Enable New Yes
Remove Vanished: ACL / Entry / Properties deaktiviert lassen

Benutzerberechtigung

Admins bekommen volle Verwaltungsrechte:

  • Gehe zu: Datacenter -> Permissions -> Add -> Group Permission
Feld Wert
Path /
Group GG_Admins-spielwiese
Role PVEAdmin
Propagate aktiviert

Rollen für GG_Benutzer: Gucken auf alles, Schalten einer VM

1. Rolle anlegen (einmalig auf einem Proxmox-Host)

Auf einem beliebigen Cluster-Knoten als root:

pveum roleadd VMPowerOnly -privs "VM.PowerMgmt VM.Audit"

Für das reine Anschauen wird die eingebaute Rolle PVEAuditor verwendet, dafür muss keine eigene Rolle angelegt werden.

2. Rechte auf alle VMs zum Anschauen geben

Alle Benutzer der Gruppe GG_Benutzer dürfen den Status aller VMs sehen:

  • WebGUI: Datacenter -> Permissions -> Add -> Group Permission
Path:      /
Group:     GG_Benutzer-spielwiese
Role:      PVEAuditor
Propagate: aktiviert

3. Rechte zum Ein-/Ausschalten einer bestimmten VM geben

Zusätzliche Rechte nur für z.B. VM 101 (Start, Stop, Shutdown):

  • WebGUI: Datacenter -> Permissions -> Add -> Group Permission
Path:      /vms/101
Group:     GG_Benutzer-spielwiese
Role:      VMPowerOnly

Ergebnis

  • Mitglieder von GG_Benutzer sehen alle VMs im Webinterface
  • Nur bei VM 101 ist der Power-Button aktiv
  • Kein Zugriff auf Konsole, Snapshot, Konfiguration oder andere Aktionen