Monthly Archives: Novembre 2018

Iniziare con SELinux

Iniziare con SELinux

SELinux è un Mandatory Access Control (MAC), sviluppato dalla NSA. SELinux è stato sviluppato come sostituto del Discretionary Access Control (DAC) fornito con la maggior parte delle distribuzioni Linux.

La differenza tra i controlli di accesso discrezionali e i controlli di accesso obbligatori è il mezzo con cui gli utenti e le applicazioni ottengono l’accesso alle macchine. Tradizionalmente, il comando sudo dà a un utente la possibilità di aumentare le autorizzazioni a livello di root. L’accesso root su un sistema DAC consente alla persona o al programma con autorizzazione di accesso root di eseguire cio che si vuole su una macchina.

Idealmente, la persona con accesso root dovrebbe essere ritenuta affidabile. Ma se la sicurezza è stata compromessa, anche il sistema di conseguenza è compromesso. SELinux e MAC risolvono questo problema sia confinando i processi privilegiati sia automatizzando la creazione delle policy di sicurezza.

Il valore predefinito di SELinux è negare tutto ciò che non è esplicitamente consentito. SELinux ha modalità globali, permissive e enforcing. La modalità permissive consente al sistema di funzionare come un sistema di controllo degli accessi discrezionali, mentre registra ogni violazione su SELinux. La modalità enforcing invece impone una rigida negazione dell’accesso a tutto ciò che non è esplicitamente consentito. Per consentire esplicitamente determinati comportamenti su una macchina, tu, come amministratore di sistema, devi scrivere dei regole che lo possano consentire.

Nota: Non è consigliabile disabilitare SELinux. Ma se desideri disabilitare SELinux puoi leggere guesta breve guida.

Aggiornare il tuo sistema:

yum update -y

Installare SELinux

Su CentOS 7 la maggior parte dei pacchetti SELinux sono installati di default. Guardare per vedere quali pacchetti sono installati:

rpm -aq | grep selinux

Se hai a che fare con un server CentOS 7 appena installato, il tuo output dovrebbe essere:

[root @ centos ~] # rpm -aq | grep selinux
libselinux-utils-2.5-6.el7.x86_64
libselinux-2.5-6.el7.x86_64
libselinux-python-2.5-6.el7.x86_64
selinux-policy-3.13.1-102.el7_3.16.noarch
selinux-policy-targeted-3.13.1-102.el7_3.16.noarch

Installare i seguenti pacchetti e le loro dipendenze associate:

yum -y install policycoreutils policycoreutils-python selinux-policy selinux-policy-targeted libselinux-utils setools setools-console

Facoltativamente, installa setroubleshoot-server e mctrans. Il server di risoluzione dei problemi (setroubleshoot-server) consente, tra le altre cose, di mandare le notifiche di violazione per e-mail.Il demone mctrans traduce l’output di SELinux in testo leggibile.

SELinux Modes

SELinux ha due modalità: Enforcing e Permissive:

Enforcing: in Enforcing mode, vengono applicate policy severe sul sistema. Le cose che non sono permesse, non potranno funzionare in nessuna circostanza.
Permissive: in modalità Permissive, il tuo sistema non è protettoma registra invece qualsiasi violazione in un file.

È possibile verificare in quale modalità si trova il sistema eseguendo il comando getenforce:

[root@centos ~ ]# getenforce
Enforcing

È inoltre possibile recuperare ulteriori informazioni utilizzando sestatus:

[root@centos ~]# sestatus
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: permissive
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 28

Devi impostare SELinux su permissive, in modo che tu possa creare policy sul tuo sistema. Dopo aver cambiato la modalità, devi riavviare il sistema.

[root@centos ~]# setenforce 0
[root@centos ~]# getenforce
Permissive
[root@centos ~]# reboot

Ora che SELinux è impostato su Permissive, puoi visualizzare il registro delle violazioni della privacy utilizzando:

grep "selinux" /var/log/messages

L’output sarà molto simile a questo:

[root@centos ~]# grep "selinux" /var/log/messages
Jun 26 12:27:16 li482-93 yum[4572]: Updated: selinux-policy-3.13.1-102.el7_3.16.noarch
Jun 26 12:27:38 li482-93 yum[4572]: Updated: selinux-policy-targeted-3.13.1-102.el7_3.16.noarch
Jun 26 16:38:15 li482-93 systemd: Removed slice system-selinux\x2dpolicy\x2dmigrate\x2dlocal\x2dchanges.slice.
Jun 26 16:38:15 li482-93 systemd: Stopping system-selinux\x2dpolicy\x2dmigrate\x2dlocal\x2dchanges.slice.
Jun 26 16:54:46 li482-93 systemd: Removed slice system-selinux\x2dpolicy\x2dmigrate\x2dlocal\x2dchanges.slice.
Jun 26 16:54:46 li482-93 systemd: Stopping system-selinux\x2dpolicy\x2dmigrate\x2dlocal\x2dchanges.slice.
Jun 26 16:55:45 li482-93 kernel: EVM: security.selinux
Jun 26 17:33:43 li482-93 kernel: EVM: security.selinux
Jun 26 17:36:21 li482-93 kernel: EVM: security.selinux

Il file che contiene gli stati di sicurezza del sistema si trova in /etc/selinux/config, puoi modificare quel file per cambiare lo stato del sistema.

vi /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=permissive
# SELINUXTYPE= can take one of three two values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted

Le righe senza commento possono essere modificate in qualsiasi stato. Dopo aver modificato lo stato devi riavviare la macchina affinché le modifiche abbiano effetto.

SELinux Context

Prima di passare allo stato di applicazione forzata(enforcing), devi comprendere cosa sono i context (contesti)

[root@centos ~]# useradd user
[root@centos ~]# su user
[user@centos ~]$ cd ~/ && mkdir test
[user@centos ~]$ ls -Z
drwxrwxr-x. user user unconfined_u:object_r:user_home_t:s0 test

L’output di ls -Z può sembrare familiare, ma il flag di contesto -Z stampa il contesto di sicurezza SELinux di qualsiasi file.

SELinux segna ogni singolo oggetto su una macchina con un contesto (context). Ciò significa che ogni file, daemon e processo ha un context. Il contectx è suddiviso in tre parti: utente, ruolo e tipo. In SELinux, una politica controlla quali utenti possono ottenere quali ruoli. Ogni ruolo specifico pone un vincolo sul tipo di file che l’utente può inserire. Quando un utente accede a un sistema, viene assegnato un ruolo, che può essere visto nell’esempio ls -Z di cui sopra: l’output unconfined_u è un ruolo utente.

SELinux Boolean

Un SELinux Boolean è una variabile che può essere attivata e disattivata senza dover ricaricare o ricompilare un criterio. È possibile visualizzare l’elenco delle variabili booleane utilizzando il comando getsebool -a. È una lunga lista, quindi puoi filtrarla attraverso grep per restringere i risultati:

[root@centos ~]# getsebool -a | grep xdm
xdm_bind_vnc_tcp_port --> off
xdm_exec_bootloader --> off
xdm_sysadm_login --> off
xdm_write_home --> off

È possibile modificare il valore di qualsiasi variabile utilizzando il comando setsebool. Se imposti il ​​flag -P, l’impostazione persisterà con i riavvii. Se si desidera consentire a un servizio come openVPN di essere eseguito nel proprio sistema senza essere tracciato, è necessario modificare la variabile booleana dei criteri:

[root@centos ~]# getsebool -a | grep "vpn"
openvpn_can_network_connect --> on
openvpn_enable_homedirs --> on
openvpn_run_unconfined --> off

[root@centos ~]# setsebool -P openvpn_run_unconfined ON

[root@centos ~]# getsebool -a | grep "vpn"
openvpn_can_network_connect --> on
openvpn_enable_homedirs --> on
openvpn_run_unconfined --> on

Ora, è possibile utilizzare OpenVPN senza restrizioni o in modalità permissiva sul sistema, anche se è attivamente in modalità di imposizione. Imposta il tuo sistema per far rispettare e lascia che SELinux protegga il tuo sistema.

[root@centos ~]# setenforce 1
[root@centos ~]# getenforce
Enforcing

SELinux è molto complicato ma può giocare un ruolo fondamentale nell’amministrazione e nella sicurezza del proprio sistema, specialmente una volta che è stato padroneggiato.

RHEL7:creare un report sull’utilizzo del sistema (processore, memoria, disco e rete).

Nota: questo è un obiettivo d’esame RHCE 7.

Creazione Report

Installa il pacchetto sysstat se non è già il caso:

# yum install -y sysstat

Attiva il servizio sysstat all’avvio (se non è già il caso):

# systemctl enable sysstat

Produrre un report per un dato giorno (qui l’11) (-u per l’utilizzo della CPU, -r per l’utilizzo della memoria, -dp per l’attività del disco, -n DEV per l’attività di rete):

# sadf -d /var/log/sa/sa11 -- -u -r -dp -n DEV

Risorse addizionali

L’analisi delle prestazioni inizia con il comando top che mostra l’attività corrente (CPU, memoria) su un server.
glances, disponibili tramite il repository EPEL, è un comando meno conosciuto ma che visualizza ancora più informazioni rispetto a top (utilizzo della rete, I/O del disco, utilizzo del filesystem).

RHEL7: configurare un sistema come target o initiator iSCSI

Nota: questo è un obiettivo d’esame RHCE 7.

Presentazione

Nel mondo iSCSI, hai due tipi di agenti:

una destinazione (target) iSCSI fornisce lo spazio (qui chiamato server),
un iniziatore (initiator) iSCSI chi utilizza questo spazio disponibile (qui chiamato client).

Come hai già intuito, useremo due macchine virtuali, chiamate rispettivamente server e client. Se necessario, il server e le macchine virtuali client possono essere una e una sola macchina.

Configurazione target iSCSI

La maggior parte della configurazione di destinazione viene eseguita in modo interattivo tramite il comando targetcli. Questo comando utilizza un albero di directory per accedere ai diversi oggetti. Per creare una iSCSI target, è necessario seguire diversi passaggi sulla macchina virtuale del server.

Installa i seguenti pacchetti:

# yum install -y targetcli

Attivare il server target all’avvio:

# systemctl enable target

Nota: questo è obbligatorio, altrimenti la configurazione non verrà letta dopo un riavvio!

Esegui il comando targetcli:

# targetcli
Warning: Could not load preferences file /root/.targetcli/prefs.bin.
targetcli shell version 2.1.fb34
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'.
/>

Hai due opzioni:

È possibile creare un file backstore denominato shareddata di 100 MB nella directory /opt (non esitare a utilizzare il tab completion):

/> backstores/fileio/ create shareddata /opt/shareddata.img 100M
Created fileio shareddata with size 104857600

Nota: se non si specifica write_back = false alla fine del comando precedente, si assume write_back = true. L’opzione write_back impostata su true abilita la cache del file system locale. Ciò migliora le prestazioni ma aumenta il rischio di perdita di dati. Negli ambienti di produzione, si consiglia di utilizzare write_back = false.

È possibile creare un backstore di blocchi che di solito offre le migliori prestazioni. È possibile utilizzare un dispositivo a blocchi come /dev/sdb o un logical volume precedentemente creato (# lvcreate -name lv_iscsi -size 100M vg):

/> backstores/block/ create block1 /dev/vg/lv_iscsi
Created block storage object block1 using /dev/vg/lv_iscsi.

Quindi, creare un IQN (nome qualificato Iscsi) denominato iqn.2014-08.com.example con un obiettivo denominato t1 e ottenere un TPG associato (Target Portal Group):

/> iscsi/ create iqn.2014-08.com.example:t1
Created target iqn.2014-08.com.example:t1.
Created TPG 1.
Global pref auto_add_default_portal=true
Created default portal listening on all IPs (0.0.0.0), port 3260.

Nota: l’IQN segue la convenzione della RFC 3270 (vedi http://en.wikipedia.org/wiki/ISCSI per ottenere maggiori dettagli).

Ora possiamo andare alla directory appena creata:

/> cd iscsi/iqn.2014-08.com.example:t1/tpg1
/iscsi/iqn.20...ample:t1/tpg1> ls
o- tpg1 ................................................. [no-gen-acls, no-auth]
  o- acls ............................................................ [ACLs: 0]
  o- luns ............................................................ [LUNs: 0]
  o- portals ...................................................... [Portals: 1]
    o- 0.0.0.0:3260 ....................................................... [OK]

Sotto tpg1, sono stati definiti tre oggetti:

acl (access control lists: limitare l’accesso alle risorse),
lun (logical unit number: definire le risorse esportate),
portals (definire i modi per raggiungere le risorse esportate, consistono in coppie di indirizzi IP e porte).

Se si utilizza una versione pre-RHEL 7.1 (questo passaggio viene ora eseguito automaticamente dal comando iscsi/create), è necessario creare un portals (una coppia di indirizzo IP e una porta attraverso cui il target può essere contattato dagli initiators):

/iscsi/iqn.20...ple:t1/tpg1> portals/ create
Using default IP port 3260
Binding to INADDR_ANY (0.0.0.0)
Created network portal 0.0.0.0:3260.

Qualunque sia la versione, crea un lun in base al tipo di backstore che hai scelto in precedenza:

Fileio backstore:

/iscsi/iqn.20...ample:t1/tpg1> luns/ create /backstores/fileio/shareddata
 Created LUN 0.

Block backstore:

/iscsi/iqn.20...ample:t1/tpg1> luns/ create /backstores/block/block1
 Created LUN 0.

Creare un acl con l’IQN precedentemente creato (qui iqn.2014-08.com.example) e un identificatore scelto (qui client), creando insieme il nome dell’iniziatore futuro:

/iscsi/iqn.20...ample:t1/tpg1> acls/ create iqn.2014-08.com.example:client
Created Node ACL for iqn.2014-08.com.example:client
Created mapped LUN 0

Facoltativamente, imposta un ID utente e una password:

/iscsi/iqn.20...ample:t1/tpg1> cd acls/iqn.2014-08.com.example:client/
/iscsi/iqn.20...xample:client> set auth userid=usr
Parameter userid is now 'usr'.
/iscsi/iqn.20...xample:client> set auth password=pwd
Parameter password is now 'pwd'.

Ora, per verificare la configurazione, digitare:

/iscsi/iqn.20...om.example:d1> cd ../..
/iscsi/iqn.20...ple:tgt1/tpg1> ls
o- tpg1 ................................................. [no-gen-acls, no-auth]
  o- acls ............................................................ [ACLs: 1]
  | o- iqn.2014-08.com.example:client ......................... [Mapped LUNs: 1]
  |   o- mapped_lun0 ............................. [lun0 fileio/shareddata (rw)]
  o- luns ............................................................ [LUNs: 1]
  | o- lun0 .......................... [fileio/shareddata (/opt/shareddata.img)]
  o- portals ...................................................... [Portals: 1]
    o- 0.0.0.0:3260 ....................................................... [OK]

Infine, puoi uscire dal comando targetcli:

/iscsi/iqn.20...ple:tgt1/tpg1> exit
Global pref auto_save_on_exit=true
Last 10 configs saved in /etc/target/backup.
Configuration saved to /etc/target/saveconfig.json

Nota: la configurazione viene automaticamente salvata nel file /etc/target/saveconfig.json.

Inoltre, può essere utile controllare le porte attualmente utilizzate:

# netstat -ant
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:3260            0.0.0.0:*               LISTEN
tcp        0      0 192.168.1.81:22         192.168.1.81:33584      ESTABLISHED
tcp6       0      0 :::22                   :::*                    LISTEN
tcp6       0      0 ::1:25                  :::*                    LISTEN

Infine, apri la porta TCP 3260 nella configurazione del firewall:

# firewall-cmd --permanent --add-port=3260/tcp
Success

Nota 1: con RHEL 7.2 (RHBZ # 1150656), esiste ora un file di configurazione firewalld per il servizio iscsi-target. Quindi puoi digitare: #firewall-cmd –permanent –add-service iscsi-target
Nota 2: nel nuovo file di configurazione /usr/lib/firewalld/services/iscsi-target.xml, sono specificate due linee per le porte: TCP 3260 e UDP 3260. Poiché tutto funzionava correttamente fino ad ora con l’argomento TCP 3260, Io suppongo di poter anche eseguire iSCSI su UDP ma non è l’opzione predefinita (non ho trovato alcun dettaglio nella RFC7143 su questo punto).

Ricarica la configurazione del firewall:

# firewall-cmd --reload
Success

iSCSI Initiator

Per creare un iSCSI initiator, è necessario seguire diversi passaggi sulla macchina virtuale del client.

Installa il seguente pacchetto:

# yum install -y iscsi-initiator-utils

Modificare /etc/iscsi/initiatorname.iscsi e sostituire il contenuto con il nome dell’iniziatore precedentemente configurato come acl sul lato di destinazione:

InitiatorName=iqn.2014-08.com.example:client

Se hai precedentemente impostato un ID utente e una password sul server, modifica il file /etc/iscsi/iscsid.conf e incolla le seguenti righe:

node.session.auth.authmethod = CHAP
node.session.auth.username = usr
node.session.auth.password = pwd

Avvia il servizio iscsi:

# systemctl start iscsi

Attenzione: questa azione è obbligatoria per poter smontare la risorsa remota al riavvio. Non confondere i servizi iscsid e iscsi!

Esegui il comando iscsiadm in modalità di ricerca con l’indirizzo IP del server (qui 192.168.1.81):

# iscsiadm --mode discovery --type sendtargets --portal 192.168.1.81
192.168.1.81:3260,1 iqn.2014-08.com.example:t1

Nota 1: se non si specifica alcuna porta, la porta predefinita è 3260.
Nota 2: Non usare una voce DNS come indirizzo del portal (qui 192.168.1.81), poichè sarebbe una cattiva idea e causa un sacco di problemi.

Esegui il comando iscsiadm in modalità nodo con l’indirizzo IP del server (qui 192.168.1.81):

# iscsiadm --mode node --targetname iqn.2014-08.com.example:t1 --portal 192.168.1.81 --login
Logging in to [iface: default, target: iqn.2014-08.com.example:t1, portal: 192.168.1.81,3260] (multiple)
Login to [iface: default, target: iqn.2014-08.com.example:t1, portal: 192.168.1.81,3260] successful.

Nota: come in precedenza, se non si specifica alcuna porta, la porta predefinita è 3260. L’uso della voce DNS come indirizzo del portal porta solo problemi quindi usa l’indirizzo ip.

Per verificare la configurazione, digitare:

# lsblk --scsi
NAME HCTL       TYPE VENDOR   MODEL             REV TRAN
sda  2:0:0:0    disk LIO-ORG  shareddata       4.0  iscsi

Per essere sicuro che la tua risorsa non sia in modalità di sola lettura (1 = modalità di sola lettura), digita:

# lsblk | egrep "NAME|sda"
NAME               MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda                  8:0    0  100M  0 disk

Ora puoi creare un file system:

# mkfs.ext4 /dev/sda
mke2fs 1.42.9 (28-Dec-2013)
/dev/sda is entire device, not just one partition!
Proceed anyway? (y,n) y
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=4096 blocks
25688 inodes, 102400 blocks
5120 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=33685504
13 block groups
8192 blocks per group, 8192 fragments per group
1976 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729

Allocating group tables: done
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done

Recupera l’UUID di questo disco:

# blkid | grep "/dev/sda"
/dev/sda: UUID="4a184c70-20ad-4d91-a0b1-c2cf0eb1986f" TYPE="ext4"

Aggiungi l’UUID del disco al file /etc/fstab:

# echo "UUID=..." >> /etc/fstab

Nota: fai molta attenzione a digitare >> e non >, altrimenti questo distruggerà tutta la tua configurazione!
Fai una copia del file /etc/fstab prima di fare questa operazione se non vuoi correre alcun rischio.

Modifica il file /etc/fstab e aggiungi il mount point (qui /mnt), il tipo di file system (qui ext4) e le opzioni di mount (_netdev):

UUID=... /mnt ext4 _netdev 0 0

Nota: l’opzione di montaggio _netdev è obbligatoria per posticipare l’operazione di montaggio dopo l’inizializzazione della rete. Se non lo fai, il processo di avvio dell’iniziatore verrà arrestato dopo un timeout in modalità di manutenzione (ulteriori informazioni sull’opzione _netdev qui).

Per verificare la configurazione, digitare:

# mount /mnt
# touch /mnt/testFile

Nota: è consigliabile eseguire il comando mount -a ogni volta che si modifica qualcosa nel file /etc/fstab per rilevare eventuali problemi di avvio prima che si verifichi.

Facoltativamente, puoi scaricare tutta la configurazione del programma di avvio (3 = max output, 0 = min output):

# iscsiadm -m session -P 3
iSCSI Transport Class version 2.0-870
version 6.2.0.873-28
Target: iqn.2014-08.com.example:t1 (non-flash)
	Current Portal: 192.168.1.81:3260,1
	Persistent Portal: 192.168.1.81:3260,1
		**********
		Interface:
		**********
		Iface Name: default
		Iface Transport: tcp
		Iface Initiatorname: iqn.2014-08.com.example:client
		Iface IPaddress: 192.168.1.10
		Iface HWaddress: 
		Iface Netdev: 
		SID: 1
		iSCSI Connection State: LOGGED IN
		iSCSI Session State: LOGGED_IN
		Internal iscsid Session State: NO CHANGE
		*********
		Timeouts:
		*********
		Recovery Timeout: 120
		Target Reset Timeout: 30
		LUN Reset Timeout: 30
		Abort Timeout: 15
		*****
		CHAP:
		*****
		username: usr
		password: ********
		username_in: 
		password_in: ********
		************************
		Negotiated iSCSI params:
		************************
		HeaderDigest: None
		DataDigest: None
		MaxRecvDataSegmentLength: 262144
		MaxXmitDataSegmentLength: 262144
		FirstBurstLength: 65536
		MaxBurstLength: 262144
		ImmediateData: Yes
		InitialR2T: Yes
		MaxOutstandingR2T: 1
		************************
		Attached SCSI devices:
		************************
		Host Number: 2	State: running
		scsi2 Channel 00 Id 0 Lun: 0
			Attached scsi disk sda		State: running

Fonte: pagina man targetcli e wiki iSCSI Linux.

Consigli utili

Prima di riavviare, configurare una console virtuale, questo può essere utile!

Se è necessario arrestare target e initiator, arrestare prima l’iniziatore. Se si spegne prima il target, l’iniziatore non sarà in grado di smontare la risorsa remota e sarà bloccato nel processo di spegnimento.

Durante l’esame, come ulteriore precauzione, smonta la risorsa remota prima di riavviare l’iniziatore, eviterai brutte sorprese.

RHEL7: configurare un sistema per l’autenticazione tramite Kerberos

Nota: questo è un obiettivo d’esame RHCE 7.

Prerequisiti

Prima di configurare un client Kerberos, devi configurare un KDC.
Inoltre, per far funzionare Kerberos, la sincronizzazione NTP e la risoluzione del nome host devono funzionare.
Se nessun DNS funziona, aggiungi le seguenti righe nel file /etc/hosts (sostituisci gli indirizzi IP specificati con i tuoi):

192.168.1.11 kbserver.example.com
192.168.1.12 kbclient.example.com

Configurazione del client

Installa i pacchetti client Kerberos:

# yum install -y krb5-workstation pam_krb5

Modifica il file /etc/krb5.conf, decommenta tutte le linee, sostituisci EXAMPLE.COM con il tuo dominio, esempio.com con il tuo nome di dominio e kerberos.example.com con il tuo nome del server KDC (qui kbserver.example .com).

In alternativa, si ottiene il file /etc/krb5.conf dal server KDC (qui kbserver.example.com):

# scp root@kbserver.example.com:/etc/krb5.conf /etc/krb5.conf

Crea un utente per il test:

# useradd user01

Aggiungi il nome del computer client (qui kbclient.example.com) ai principali:

# kadmin
Authenticating as principal root/admin@EXAMPLE.COM with password.
Password for root/admin@EXAMPLE.COM: kerberos
kadmin:  addprinc -randkey host/kbclient.example.com
WARNING: no policy specified for host/kbclient.example.com@EXAMPLE.COM; defaulting to no policy
Principal "host/kbclient.example.com@EXAMPLE.COM" created.

Crea una copia locale memorizzata per impostazione predefinita nel file /etc/krb5.keytab:

kadmin:  ktadd host/kbclient.example.com
Entry for principal host/kbclient.example.com with kvno 2, encryption type aes256-cts-hmac-sha1-96 added to keytab WRFILE:/etc/krb5.keytab.
Entry for principal host/kbclient.example.com with kvno 2, encryption type aes128-cts-hmac-sha1-96 added to keytab WRFILE:/etc/krb5.keytab.
Entry for principal host/kbclient.example.com with kvno 2, encryption type des3-cbc-sha1 added to keytab WRFILE:/etc/krb5.keytab.
Entry for principal host/kbclient.example.com with kvno 2, encryption type arcfour-hmac added to keytab WRFILE:/etc/krb5.keytab.
Entry for principal host/kbclient.example.com with kvno 2, encryption type camellia256-cts-cmac added to keytab WRFILE:/etc/krb5.keytab.
Entry for principal host/kbclient.example.com with kvno 2, encryption type camellia128-cts-cmac added to keytab WRFILE:/etc/krb5.keytab.
Entry for principal host/kbclient.example.com with kvno 2, encryption type des-hmac-sha1 added to keytab WRFILE:/etc/krb5.keytab.
Entry for principal host/kbclient.example.com with kvno 2, encryption type des-cbc-md5 added to keytab WRFILE:/etc/krb5.keytab.
kadmin:  quit

Modifica il file /etc/ssh/ssh_config e aggiungi o decommenta le seguenti righe:

GSSAPIAuthentication yes
GSSAPIDelegateCredentials yes

Ricarica la configurazione del servizio sshd:

# systemctl reload sshd

Configura il componente PAM sulla riga di comando:

# authconfig --enablekrb5 --update

Verifica la tua configurazione (qui kbserver.example.com è il nome del server KDC):

# 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 17:20:15 07/23/2014 17:19:54 krbtgt/EXAMPLE.COM@EXAMPLE.COM
 renew until 07/22/2014 17:19:54
$ ssh kbserver.example.com

Ora dovresti essere in grado di uscire e riconnettersi senza fornire alcuna password.
Inoltre, la prima volta che si accede a un client Kerberos, è necessario fornire un login/password (vedere kinit sopra). Quindi, si ottiene un ticket che consente di accedere a tutti gli altri client Kerberos nello stesso reame e non è necessario fornire una password finché il ticket è valido.
Nota: per eliminare un ticket, utilizzare il comando kdestroy.