Kerberos: Unterschied zwischen den Versionen
Chris (Diskussion | Beiträge) |
|||
| (23 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
= MIT-KRB HowTo = | = MIT-KRB HowTo = | ||
== KDC konfigurieren und KDC Datenbank erstellen == | |||
# /var/lib/krb5kdc/kdc.conf erstellen: | |||
<pre> | |||
[kdcdefaults] | |||
kdc_ports = 89 | |||
kdc_tcp_ports = 89 | |||
kadmind_port = 750 | |||
kpasswd_port = 466 | |||
[realms] | |||
INTERN.NEOREALM.DYNDNS.ORG = { | |||
database_name = /var/lib/krb5kdc/principal | |||
acl_file = /var/lib/krb5kdc/kadm5.acl | |||
key_stash_file = /var/lib/krb5kdc/.k5.INTERN.NEOREALM.DYNDNS.ORG | |||
kadmind_port = 750 | |||
kpasswd_port = 466 | |||
max_life = 10h 0m 0s | |||
max_renewable_life = 7d 0h 0m 0s | |||
#default_principal_flags = +preauth | |||
} | |||
[logging] | |||
kdc = CONSOLE | |||
kdc = SYSLOG:INFO:DAEMON | |||
kdc = FILE:/var/log/kdc.log | |||
admin_server = FILE:/var/log/kadmin.log | |||
</pre> | |||
# Datenbank erstellen: | |||
<pre> | |||
kdb5_util create -r <REALMNAME> -s | |||
</pre> | |||
# kadmin Prinzipal erstellen: | |||
<pre> | |||
kadmin.local | |||
addprinc admin/admin@INTERN.NEOREALM.DYNDNS.ORG | |||
</pre> | |||
<pre> | |||
*/admin@INTERN.DARKREALM.DYNDNS.ORG * | |||
</pre> | |||
== DNS einrichten == | |||
Folgende RR's in die Zone eintragen | Folgende RR's in die Zone eintragen | ||
| Zeile 20: | Zeile 67: | ||
</pre> | </pre> | ||
2. NFS mit sec=krb5p | == 2. NFS mit sec=krb5p == | ||
Mount : mount shodan:/home /home -o sec=krb5p | Mount : mount shodan:/home /home -o sec=krb5p | ||
| Zeile 28: | Zeile 73: | ||
Server: | Server: | ||
rpc.svcgssd braucht keytab /etc/krb5.keytab | rpc.svcgssd braucht keytab /etc/krb5.keytab | ||
rpc.svcgssd braucht explizit nfs/<fqdn> principal (erstmal egal welcher FQDN, aber der client kann nicht connecten wenn fqdn vom server nicht drinsteht) | |||
Also in die keytab: | |||
<pre> | |||
nfs/shodan.intern.darkrealm.dyndns.org | |||
</pre> | |||
Client: | Client: | ||
rpc.gssd | Client sucht laut man rpc.gssd folgende Einträge in der keytab: (scheinbar geht es hier nur um machine credentials, egal wie der principal heisst) | ||
<pre> | |||
<HOSTNAME>$@<REALM> | |||
root/<hostname>@<REALM> | |||
nfs/<hostname>@<REALM> | |||
host/<hostname>@<REALM> | |||
root/<anyname>@<REALM> | |||
nfs/<anyname>@<REALM> | |||
host/<anyname>@<REALM> | |||
</pre> | |||
Also in die keytab: | |||
<pre> | |||
host/rasmatazz.intern.darkrealm.dyndns.org | |||
</pre> | |||
KVNO's müssen auf jedem Rechner gleich sein ! | |||
Keytab | Keytab auf dem Server : | ||
<pre> | <pre> | ||
slot KVNO Principal | slot KVNO Principal | ||
---- ---- --------------------------------------------------------------------- | ---- ---- --------------------------------------------------------------------- | ||
| Zeile 42: | Zeile 109: | ||
</pre> | </pre> | ||
KVNO | Keytab auf dem Client : | ||
<pre> | |||
slot KVNO Principal | |||
---- ---- --------------------------------------------------------------------- | |||
1 2 host/rasmatazz.intern.darkrealm.dyndns.org@INTERN.DARKREALM.DYNDNS.ORG | |||
2 2 host/rasmatazz.intern.darkrealm.dyndns.org@INTERN.DARKREALM.DYNDNS.ORG | |||
</pre> | |||
== 3. SSH mit kerberos (-K) == | |||
In der Server-Keytab reicht : | |||
<pre> | |||
host/shodan.intern.darkrealm.dyndns.org@INTERN.DARKREALM.DYNDNS.ORG | |||
</pre> | |||
Aber in der /etc/krb5.conf auf dem Server muss stehen : | |||
<pre> | |||
<libdefaults> | |||
ignore_acceptor_hostname = true | |||
</pre> | |||
ansonsten meldet der SSH-Server daß kein keytab-entry für host/shodan@ vorhanden ist. | |||
== 4. samba mit kerberos == | |||
<pre> | |||
kinit chris@HERRMANN.AD | |||
sudo mount //shodan.intern.darkrealm.dyndns.org/temporary /mnt/tmp -o vers=3.02,sec=krb5i,cruid=chris,user=chris,cifsacl | |||
</pre> | |||
== Crossrealm AD <-> MIT-KRB5 == | |||
Funktioniert momentan nur mit einem Windows Server als Domain Controller! | |||
=== Auf dem MIT-KRB5 KDC === | |||
* Mit kadmin 2 Principals hinzufügen (bei beiden gleiches Passwort setzen): | |||
** addprinc krbtgt/INTERN.DARKREALM.DYNDNS.ORG@TESTDOMAIN.AD | |||
** krbtgt/TESTDOMAIN.AD@INTERN.DARKREALM.DYNDNS.ORG | |||
=== Auf dem Windows-Domaincontroller === | |||
* Active Directory-Domänen und -Vertrauensstellungen öffnen | |||
* Neue Vertrauensstellung | |||
* Name: INTERN.DARKREALM.DYNDNS.ORG | |||
* Vertrauenstyp: Bereichsvertrauensstellung | |||
* Nicht transitiv oder Transitiv, ist egal | |||
* Bidirektional | |||
* Vertrauensstellungskennwort eingeben (gleiches wie auf der MIT-KRB5 Seite) | |||
* Zuständigen KDC für INTERN.DARKREALM.DYNDNS.ORG festlegen: | |||
** ksetup /addkdc INTERN.DARKREALM.DYNDNS.ORG shodan.intern.darkrealm.dyndns.org | |||
* Rechnernamen zu dem Realm zuordnen: | |||
** ksetup /addhosttorealmmap shodan.intern.darkrealm.dyndns.org INTERN.DARKREALM.DYNDNS.ORG | |||
=== Tests === | |||
* Ticket aus dem INTERN.DARKREALM.DYNDNS.ORG-Realm heraus vom TESTDOMAIN.AD-Realm holen | |||
<pre> | |||
kinit chris@INTERN.DARKREALM.DYNDNS.ORG | |||
kvno HTTP/testdomain.ad@TESTDOMAIN.AD | |||
</pre> | |||
==== Fehler ==== | |||
Bekommt man einen Fehler "kvno: Generic error (see e-text) while getting credentials for HTTP/vm-winserver2025.testdomain.ad@TESTDOMAIN.AD" o.ä., dann entweder: | |||
* modprinc +no_auth_data_required krbtgt/TESTDOMAIN.AD@INTERN.DARKREALM.DYNDNS.ORG | |||
oder in /var/lib/krb5kdc/kdc.conf im [realms]-Abschnitt für den INTERN.DARKREALM.DYNDNS.ORG-Realms folgende Zeile einfügen: | |||
'''disable_pac = true''' | |||
Quelle: https://bugzilla.redhat.com/show_bug.cgi?id=2016312 | |||
=== Beispiel-LDIF eines Trusts === | |||
<pre> | |||
dn: CN=INTERN.DARKREALM.DYNDNS.ORG,CN=System,DC=testdomain,DC=ad | |||
objectClass: top | |||
objectClass: leaf | |||
objectClass: trustedDomain | |||
cn: INTERN.DARKREALM.DYNDNS.ORG | |||
distinguishedName: CN=INTERN.DARKREALM.DYNDNS.ORG,CN=System,DC=testdomain,DC=a | |||
d | |||
instanceType: 4 | |||
whenCreated: 20250926000103.0Z | |||
whenChanged: 20250926000103.0Z | |||
uSNCreated: 16453 | |||
uSNChanged: 16454 | |||
showInAdvancedViewOnly: TRUE | |||
name: INTERN.DARKREALM.DYNDNS.ORG | |||
objectGUID:: ojk5Xjs+Z0ieoCAx6wEjsA== | |||
trustDirection: 3 | |||
trustPartner: INTERN.DARKREALM.DYNDNS.ORG | |||
trustPosixOffset: 0 | |||
trustType: 3 | |||
trustAttributes: 0 | |||
flatName: INTERN.DARKREALM.DYNDNS.ORG | |||
objectCategory: CN=Trusted-Domain,CN=Schema,CN=Configuration,DC=testdomain,DC= | |||
ad | |||
isCriticalSystemObject: TRUE | |||
dSCorePropagationData: 16010101000000.0Z | |||
trustAuthIncoming: | |||
trustAuthOutgoing: | |||
</pre> | |||
<pre> | |||
dn: CN=INTERN.DARKREALM.DYNDNS.ORG$,CN=Users,DC=testdomain,DC=ad | |||
objectClass: top | |||
objectClass: person | |||
objectClass: organizationalPerson | |||
objectClass: user | |||
cn: INTERN.DARKREALM.DYNDNS.ORG$ | |||
distinguishedName: CN=INTERN.DARKREALM.DYNDNS.ORG$,CN=Users,DC=testdomain,DC=a | |||
d | |||
instanceType: 4 | |||
whenCreated: 20250926005246.0Z | |||
whenChanged: 20250926005247.0Z | |||
uSNCreated: 24597 | |||
uSNChanged: 24599 | |||
name: INTERN.DARKREALM.DYNDNS.ORG$ | |||
objectGUID:: HPPriJ7qRU+1bDWJWV9Yvw== | |||
userAccountControl: 2082 | |||
badPwdCount: 0 | |||
codePage: 0 | |||
countryCode: 0 | |||
badPasswordTime: 0 | |||
lastLogoff: 0 | |||
lastLogon: 0 | |||
pwdLastSet: 0 | |||
primaryGroupID: 529 | |||
objectSid:: AQUAAAAAAAUVAAAAjZWqvXpflmUzfrM8UgQAAA== | |||
accountExpires: 9223372036854775807 | |||
logonCount: 0 | |||
sAMAccountName: INTERN.DARKREALM.DYNDNS.ORG$ | |||
sAMAccountType: 805306370 | |||
objectCategory: CN=Person,CN=Schema,CN=Configuration,DC=testdomain,DC=ad | |||
isCriticalSystemObject: TRUE | |||
dSCorePropagationData: 16010101000000.0Z | |||
</pre> | |||
== Squid Crossrealm == | |||
Kein Plan wie und warum es funktioniert. Ist auch noch nicht wirklich crossrealm. | |||
In /etc/squid/squid.conf folgende Zeile einfügen: | |||
<pre> | |||
auth_param negotiate program /usr/libexec/squid/negotiate_kerberos_auth -k /etc/squid.smb.keytab -i | |||
</pre> | |||
<pre> | |||
msktutil -c -s HTTP/shodan.intern.darkrealm.dyndns.org -h shodan.intern.darkrealm.dyndns.org -k squid.smb.keytab --computer-name squid-http --upn HTTP/shodan.intern.darkrealm.dyndns.org --verbose --realm AD.INTERN.DARKREALM.DYNDNS.ORG --no-reverse-lookups --use-service-account | |||
</pre> | |||
Dann erstellte Keytab nach /etc/squid.smb.keytab kopieren und squid neustarten. | |||
Aktuelle Version vom 27. September 2025, 00:48 Uhr
MIT-KRB HowTo
KDC konfigurieren und KDC Datenbank erstellen
- /var/lib/krb5kdc/kdc.conf erstellen:
[kdcdefaults]
kdc_ports = 89
kdc_tcp_ports = 89
kadmind_port = 750
kpasswd_port = 466
[realms]
INTERN.NEOREALM.DYNDNS.ORG = {
database_name = /var/lib/krb5kdc/principal
acl_file = /var/lib/krb5kdc/kadm5.acl
key_stash_file = /var/lib/krb5kdc/.k5.INTERN.NEOREALM.DYNDNS.ORG
kadmind_port = 750
kpasswd_port = 466
max_life = 10h 0m 0s
max_renewable_life = 7d 0h 0m 0s
#default_principal_flags = +preauth
}
[logging]
kdc = CONSOLE
kdc = SYSLOG:INFO:DAEMON
kdc = FILE:/var/log/kdc.log
admin_server = FILE:/var/log/kadmin.log
- Datenbank erstellen:
kdb5_util create -r <REALMNAME> -s
- kadmin Prinzipal erstellen:
kadmin.local addprinc admin/admin@INTERN.NEOREALM.DYNDNS.ORG
*/admin@INTERN.DARKREALM.DYNDNS.ORG *
DNS einrichten
Folgende RR's in die Zone eintragen
_kerberos.intern.darkrealm.dyndns.org TXT "INTERN.DARKREALM.DYNDNS.ORG" _kerberos.intern.darkrealm.dyndns.org SRV 1 0 89 shodan.intern.darkrealm.dyndns.org. _kerberos-adm.intern.darkrealm.dyndns.org SRV 1 0 777 shodan.intern.darkrealm.dyndns.org. (wird noch? nicht ausgewertet) _kerberos.intern.darkrealm.dyndns.org SRV 1 0 89 shodan.intern.darkrealm.dyndns.org. _kpasswd.intern.darkrealm.dyndns.org SRV 1 0 464 shodan.intern.darkrealm.dyndns.org.
Das reicht um Rechner ohne /etc/krb5.conf auf den default realm hinzuweisen. Weil _kerberos-adm zurzeit noch nicht ausgewertet wird muss man folgendes in der /etc/krb5.conf eintragen:
[realms]
INTERN.DARKREALM.DYNDNS.ORG = {
admin_server = shodan.intern.darkrealm.dyndns.org:777
}
2. NFS mit sec=krb5p
Mount : mount shodan:/home /home -o sec=krb5p
Server: rpc.svcgssd braucht keytab /etc/krb5.keytab
rpc.svcgssd braucht explizit nfs/<fqdn> principal (erstmal egal welcher FQDN, aber der client kann nicht connecten wenn fqdn vom server nicht drinsteht)
Also in die keytab:
nfs/shodan.intern.darkrealm.dyndns.org
Client: Client sucht laut man rpc.gssd folgende Einträge in der keytab: (scheinbar geht es hier nur um machine credentials, egal wie der principal heisst)
<HOSTNAME>$@<REALM>
root/<hostname>@<REALM>
nfs/<hostname>@<REALM>
host/<hostname>@<REALM>
root/<anyname>@<REALM>
nfs/<anyname>@<REALM>
host/<anyname>@<REALM>
Also in die keytab:
host/rasmatazz.intern.darkrealm.dyndns.org
KVNO's müssen auf jedem Rechner gleich sein !
Keytab auf dem Server :
slot KVNO Principal ---- ---- --------------------------------------------------------------------- 1 2 nfs/shodan.intern.darkrealm.dyndns.org@INTERN.DARKREALM.DYNDNS.ORG 2 2 nfs/shodan.intern.darkrealm.dyndns.org@INTERN.DARKREALM.DYNDNS.ORG
Keytab auf dem Client :
slot KVNO Principal ---- ---- --------------------------------------------------------------------- 1 2 host/rasmatazz.intern.darkrealm.dyndns.org@INTERN.DARKREALM.DYNDNS.ORG 2 2 host/rasmatazz.intern.darkrealm.dyndns.org@INTERN.DARKREALM.DYNDNS.ORG
3. SSH mit kerberos (-K)
In der Server-Keytab reicht :
host/shodan.intern.darkrealm.dyndns.org@INTERN.DARKREALM.DYNDNS.ORG
Aber in der /etc/krb5.conf auf dem Server muss stehen :
<libdefaults> ignore_acceptor_hostname = true
ansonsten meldet der SSH-Server daß kein keytab-entry für host/shodan@ vorhanden ist.
4. samba mit kerberos
kinit chris@HERRMANN.AD sudo mount //shodan.intern.darkrealm.dyndns.org/temporary /mnt/tmp -o vers=3.02,sec=krb5i,cruid=chris,user=chris,cifsacl
Crossrealm AD <-> MIT-KRB5
Funktioniert momentan nur mit einem Windows Server als Domain Controller!
Auf dem MIT-KRB5 KDC
- Mit kadmin 2 Principals hinzufügen (bei beiden gleiches Passwort setzen):
- addprinc krbtgt/INTERN.DARKREALM.DYNDNS.ORG@TESTDOMAIN.AD
- krbtgt/TESTDOMAIN.AD@INTERN.DARKREALM.DYNDNS.ORG
Auf dem Windows-Domaincontroller
- Active Directory-Domänen und -Vertrauensstellungen öffnen
- Neue Vertrauensstellung
- Name: INTERN.DARKREALM.DYNDNS.ORG
- Vertrauenstyp: Bereichsvertrauensstellung
- Nicht transitiv oder Transitiv, ist egal
- Bidirektional
- Vertrauensstellungskennwort eingeben (gleiches wie auf der MIT-KRB5 Seite)
- Zuständigen KDC für INTERN.DARKREALM.DYNDNS.ORG festlegen:
- ksetup /addkdc INTERN.DARKREALM.DYNDNS.ORG shodan.intern.darkrealm.dyndns.org
- Rechnernamen zu dem Realm zuordnen:
- ksetup /addhosttorealmmap shodan.intern.darkrealm.dyndns.org INTERN.DARKREALM.DYNDNS.ORG
Tests
- Ticket aus dem INTERN.DARKREALM.DYNDNS.ORG-Realm heraus vom TESTDOMAIN.AD-Realm holen
kinit chris@INTERN.DARKREALM.DYNDNS.ORG kvno HTTP/testdomain.ad@TESTDOMAIN.AD
Fehler
Bekommt man einen Fehler "kvno: Generic error (see e-text) while getting credentials for HTTP/vm-winserver2025.testdomain.ad@TESTDOMAIN.AD" o.ä., dann entweder:
- modprinc +no_auth_data_required krbtgt/TESTDOMAIN.AD@INTERN.DARKREALM.DYNDNS.ORG
oder in /var/lib/krb5kdc/kdc.conf im [realms]-Abschnitt für den INTERN.DARKREALM.DYNDNS.ORG-Realms folgende Zeile einfügen:
disable_pac = true
Quelle: https://bugzilla.redhat.com/show_bug.cgi?id=2016312
Beispiel-LDIF eines Trusts
dn: CN=INTERN.DARKREALM.DYNDNS.ORG,CN=System,DC=testdomain,DC=ad objectClass: top objectClass: leaf objectClass: trustedDomain cn: INTERN.DARKREALM.DYNDNS.ORG distinguishedName: CN=INTERN.DARKREALM.DYNDNS.ORG,CN=System,DC=testdomain,DC=a d instanceType: 4 whenCreated: 20250926000103.0Z whenChanged: 20250926000103.0Z uSNCreated: 16453 uSNChanged: 16454 showInAdvancedViewOnly: TRUE name: INTERN.DARKREALM.DYNDNS.ORG objectGUID:: ojk5Xjs+Z0ieoCAx6wEjsA== trustDirection: 3 trustPartner: INTERN.DARKREALM.DYNDNS.ORG trustPosixOffset: 0 trustType: 3 trustAttributes: 0 flatName: INTERN.DARKREALM.DYNDNS.ORG objectCategory: CN=Trusted-Domain,CN=Schema,CN=Configuration,DC=testdomain,DC= ad isCriticalSystemObject: TRUE dSCorePropagationData: 16010101000000.0Z trustAuthIncoming: trustAuthOutgoing:
dn: CN=INTERN.DARKREALM.DYNDNS.ORG$,CN=Users,DC=testdomain,DC=ad objectClass: top objectClass: person objectClass: organizationalPerson objectClass: user cn: INTERN.DARKREALM.DYNDNS.ORG$ distinguishedName: CN=INTERN.DARKREALM.DYNDNS.ORG$,CN=Users,DC=testdomain,DC=a d instanceType: 4 whenCreated: 20250926005246.0Z whenChanged: 20250926005247.0Z uSNCreated: 24597 uSNChanged: 24599 name: INTERN.DARKREALM.DYNDNS.ORG$ objectGUID:: HPPriJ7qRU+1bDWJWV9Yvw== userAccountControl: 2082 badPwdCount: 0 codePage: 0 countryCode: 0 badPasswordTime: 0 lastLogoff: 0 lastLogon: 0 pwdLastSet: 0 primaryGroupID: 529 objectSid:: AQUAAAAAAAUVAAAAjZWqvXpflmUzfrM8UgQAAA== accountExpires: 9223372036854775807 logonCount: 0 sAMAccountName: INTERN.DARKREALM.DYNDNS.ORG$ sAMAccountType: 805306370 objectCategory: CN=Person,CN=Schema,CN=Configuration,DC=testdomain,DC=ad isCriticalSystemObject: TRUE dSCorePropagationData: 16010101000000.0Z
Squid Crossrealm
Kein Plan wie und warum es funktioniert. Ist auch noch nicht wirklich crossrealm.
In /etc/squid/squid.conf folgende Zeile einfügen:
auth_param negotiate program /usr/libexec/squid/negotiate_kerberos_auth -k /etc/squid.smb.keytab -i
msktutil -c -s HTTP/shodan.intern.darkrealm.dyndns.org -h shodan.intern.darkrealm.dyndns.org -k squid.smb.keytab --computer-name squid-http --upn HTTP/shodan.intern.darkrealm.dyndns.org --verbose --realm AD.INTERN.DARKREALM.DYNDNS.ORG --no-reverse-lookups --use-service-account
Dann erstellte Keytab nach /etc/squid.smb.keytab kopieren und squid neustarten.