Kerberos to protokół służący do identyfikacji (autentykacji) stworzony w MIT w roku 1988. Klienci łączą się do serwera KDC (Kerberos Distribution Center – Centrum Dystrybucji Kluczy) używając pewnego rodzaju loginu nazywanego principal i otrzymują ticket (bilet). Tak długo jak ticket jest ważny klient ma dostęp do chronionych przez kerberos usług i nie potrzebuje identyfikacji przy każdym dostępie do zasobu. Klient i serwer KDC muszą być w tym samym realm (jest to zazwyczaj nazwa domeny pisana dużymi literami).
Wymagania wstępne.
Przed uruchomieniem Kerberosa wymagane jest ustawienie synchronizacji czasu przez NTP. Jeżeli DNS nie jest skonfigurowany w pliku /etc/hosts muszą być stosowne wpisy zastępujące DNS, np:
| 
					 1 2 3  | 
						192.168.1.1 kdc.example.com     kdc 192.168.1.2 server.example.com  server 192.168.1.3 client.example.com  client  | 
					
Po adresie IP zawsze musi być wpisana nazwa hosta w wersji pełnej tj. wraz z ddomeną (FQDN), a poźniej dopiero może być nazwa skrócona. W przeciwnym wypadku autentykacja Kerberos nie będzie działać.
Instalacja i konfiguracja serwera.
Instalacja pakietów Kerberos:
| 
					 1  | 
						# yum install -y krb5-server krb5-workstation pam_krb5  | 
					
Edycja pliku /var/kerberos/krb5kdc/kdc.conf i zastąpienie EXAMPLE.COM swoim własnym realm.
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14  | 
						# vim /var/kerberos/krb5kdc/kdc.conf [kdcdefaults] kdc_ports = 88 kdc_tcp_ports = 88 [realms] EXAMPLE.COM = { #master_key_type = aes256-cts acl_file = /var/kerberos/krb5kdc/kadm5.acl dict_file = /usr/share/dict/words admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal }  | 
					
Opcjonalnie można odkomentować linię master_key_type = aes256-cts i dodać wpis w bloku [realms]: default_principal_flags = +preauth. Usunie to kompatybilność z Kerberos 4 ale zwiększy bezpieczeństwo.
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13  | 
						[kdcdefaults] kdc_ports = 88 kdc_tcp_ports = 88 [realms] EXAMPLE.LOCAL = { master_key_type = aes256-cts default_principal_flags = +preauth acl_file = /var/kerberos/krb5kdc/kadm5.acl dict_file = /usr/share/dict/words admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal }  | 
					
Teraz edycja pliku /etc/krb5.conf. Odkomentować należy wszystkie linie, EXAMPLE.COM zastępujemy swoim realmem, example.com swoją domeną  (np. EXAMPLE.COM = NAZWA.PL, example.com = nazwa.pl), kerberos.example.com zastępujemy swoim własnym serwerem KDC (np. kdc.example.com):
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28  | 
						# vim krb5.conf Configuration snippets may be placed in this directory as well includedir /etc/krb5.conf.d/ [logging] default = FILE:/var/log/krb5libs.log kdc = FILE:/var/log/krb5kdc.log admin_server = FILE:/var/log/kadmind.log [libdefaults] dns_lookup_realm = false ticket_lifetime = 24h renew_lifetime = 7d forwardable = true rdns = false default_realm = EXAMPLE.COM default_ccache_name = KEYRING:persistent:%{uid} [realms] EXAMPLE.COM = { kdc = kdc.example.com admin_server = kdc.example.com } [domain_realm] .example.com = EXAMPLE.COM example.com = EXAMPLE.COM  | 
					
Edytujemy plik /var/kerberos/krb5kdc/kadm5.acl i zastępujemy EXAMPLE.COM swoim realm.
| 
					 1 2  | 
						# vim /var/kerberos/krb5kdc/kadm5.acl */admin@EXAMPLE.COM *  | 
					
Tworzymy bazę Kerberos (zstępujemy EXAMPLE.COM swoim realm):
| 
					 1 2 3 4 5 6 7 8  | 
						# kdb5_util create -s -r EXAMPLE.COM Loading random data Initializing database '/var/kerberos/krb5kdc/principal' for realm 'EXAMPLE.COM', master key name 'K/M@EXAMPLE.COM' You will be prompted for the database Master Password. It is important that you NOT FORGET this password. Enter KDC database master key: example Re-enter KDC database master key to verify: example  | 
					
Generowanie bazy trwa nawet kilka minut. Może być potrzeba napisania pewnej ilości znaków na klawiaturze aby zwiększyć entropie potrzebną do generowania danych.
Uruchomienie, autostart usługi Kerberos:
| 
					 1 2  | 
						# systemctl start krb5kdc kadmin # systemctl enable krb5kdc kadmin  | 
					
Utworzenie użytkownika user01 na testy. Na klientach serwera kerberos (server.example.com i desktop.example.com wg opisów z linku na samym dole artykułu) user01 musi mieć to samo uid.
| 
					 1  | 
						# useradd -u 3001 user01  | 
					
Uruchomienie narzędzia administracji Kerberosem:
| 
					 1 2  | 
						# kadmin.local Authenticating as principal root/admin@EXAMPLE.COM with password.  | 
					
Dodanie administatora:
| 
					 1 2 3 4 5 6  | 
						kadmin.local: addprinc root/admin Authenticating as principal root/admin@EXAMPLE.COM with password. WARNING: no policy specified for root/admin@EXAMPLE.COM; defaulting to no policy Enter password for principal "root/admin@EXAMPLE.COM": kerberos Re-enter password for principal "root/admin@EXAMPLE.COM": kerberos Principal "root/admin@EXAMPLE.COM" created.  | 
					
Dodanie użytkownika user01:
| 
					 1 2 3 4  | 
						kadmin.local: addprinc user01 Enter password for principal "user01@EXAMPLE.COM": user01 Re-enter password for principal "user01@EXAMPLE.COM": user01 Principal "user01@EXAMPLE.COM" created.  | 
					
Dodanie hosta:
| 
					 1 2 3 4  | 
						kadmin.local: addprinc -randkey host/kdc.example.com Authenticating as principal root/admin@EXAMPLE.COM with password. WARNING: no policy specified for host/kdc.example.com@EXAMPLE.COM; defaulting to no policy Principal "host/kdc.example.com@EXAMPLE.COM" created.  | 
					
Utworzenie lokalnej kopii bazy w pliku /etc/krb5.keytab:
| 
					 1 2 3 4 5 6 7 8 9 10  | 
						kadmin.local: ktadd host/kdc.example.com Authenticating as principal root/admin@EXAMPLE.COM with password. Entry for principal host/kdc.example.com with kvno 2, encryption type aes256-cts-hmac-sha1-96 added to keytab WRFILE:/etc/krb5.keytab. Entry for principal host/kdc.example.com with kvno 2, encryption type aes128-cts-hmac-sha1-96 added to keytab WRFILE:/etc/krb5.keytab. Entry for principal host/kdc.example.com with kvno 2, encryption type des3-cbc-sha1 added to keytab WRFILE:/etc/krb5.keytab. Entry for principal host/kdc.example.com with kvno 2, encryption type arcfour-hmac added to keytab WRFILE:/etc/krb5.keytab. Entry for principal host/kdc.example.com with kvno 2, encryption type camellia256-cts-cmac added to keytab WRFILE:/etc/krb5.keytab. Entry for principal host/kdc.example.com with kvno 2, encryption type camellia128-cts-cmac added to keytab WRFILE:/etc/krb5.keytab. Entry for principal host/kdc.example.com with kvno 2, encryption type des-hmac-sha1 added to keytab WRFILE:/etc/krb5.keytab. Entry for principal host/kdc.example.com with kvno 2, encryption type des-cbc-md5 added to keytab WRFILE:/etc/krb5.keytab.  | 
					
Wyjście z administracji Kerberosem:
| 
					 1  | 
						kadmin.local: quit  | 
					
Edycja pliku /etc/ssh/ssh_config  i dodanie/odkomentowanie linii:
| 
					 1 2  | 
						GSSAPIAuthentication yes GSSAPIDelegateCredentials yes  | 
					
Przeładowanie demona ssh:
| 
					 1  | 
						# systemctl reload sshd  | 
					
Konfiguracja komponentu PAM z linii komend:
| 
					 1  | 
						# authconfig --enablekrb5 --update  | 
					
Odblokowanie na firewallu portu dla usługi Kerberos (udp/tcp 88) oraz portu tcp 749 dla kadmin.
| 
					 1 2 3  | 
						# firewall-cmd --permanent --add-service=kerberos # firewall-cmd --permanent --add-port=749/tcp # firewall-cmd --reload  | 
					
Test konfiguracji:
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13  | 
						# su - user01 $ kinit Password for user01@EXAMPLE.COM: user01 $ klist Ticket cache: KEYRING:persistent:1000:1000 Default principal: user01@EXAMPLE.COM Valid starting Expires Service principal 07/22/2014 16:48:35 07/23/2014 16:48:11 krbtgt/EXAMPLE.COM@EXAMPLE.COM renew until 07/22/2014 16:48:11 $ klist -l  | 
					
Teraz powinna być możliwość wyjścia z konsoli ssh i ponownego zalogowania bez podawania hasła:
| 
					 1  | 
						$ ssh kdc.example.com  | 
					
Aby usunąć ticket używamy komendy:
| 
					 1  | 
						# kdestroy  | 
					
Konfiguracja serwera usługi NFS i klienta NFS korzystających z Kerberosa opisana jest w artykule o Network File System:
http://miroslaw.borodziuk.eu/index.php/2017/07/25/network-file-system/


