Skip to main content

Progetto Eagleprojects v1.0

Richiesta:

Configurare Windows Server 2022 come DC e come Fileserver. Aggiungere la gestione NFSv4. I client devono potersi collegare usando le credenziali DC e la struttura dei file condivisi tramite NFS deve mantenere i permessi di accesso. Come client è richiesto Ubuntu 22.04LTS e come sistema di sicurezza Kerberos con RPCSEC_GSS. SAMBA e la Join a dominio della macchina non vengono utilizzate per questo progetto.

RPCSEC_GSS fornisce un meccanismo generico per utilizzare più meccanismi di sicurezza con ONCRPC (sul quale si basano le richieste NFS). Server per NFS supporta due "flavors" di Kerberos su NFS utilizzando RPCSEC_GSS: krb5 e krb5i. krb5 fornisce l'autenticazione Kerberos a livello di richiesta RPC, mentre krb5i (Kerberos v5 con integrità) protegge anche il payload NFS da manomissioni.

Scenario infrastrutturale:

  • Dominio Windows impostato come nfsdomain.local che esegue Active Directory su un DC FQDN server.nfsdomain.local (o dc.nfsdomain.local in caso di altro server).
  • Server Windows che esegue Server per NFS: server.nfsdomain.local.
  • Client Ubuntu: ubuntuclient.
  • Utente UNIX su ubuntuclient: user1 con UID 500.
  • Gruppo UNIX su ubuntuclient: nfsgroup con GID 500.
  • Utente Windows: nfsdomain\user1.
  • Gruppo Windows: nfsdomain\nfsgroup.

Prerequisiti

  1. Risoluzione DNS: Assicurarsi che la risoluzione dei nomi DNS funzioni correttamente tra il DC, il server NFS Windows e il client Ubuntu.

  2. Impostazione degli utenti e dei gruppi: Creare gli utenti e i gruppi menzionati e assicurarsi che nfsdomain\user1 sia membro del gruppo nfsdomain\nfsgroup. Impostare gli UUID e GUID nelle impostazioni avanzate. Impostare una password per user1.


Configurazione del client Ubuntu per ottenere ticket Kerberos dal dominio nfsdomain.local

Installazione dei pacchetti necessari

Sul client ubuntuclient, installare i pacchetti necessari:

apt update
apt install krb5-user nfs-common

Durante l'installazione di krb5-user, vi verrà chiesto di inserire il default Kerberos version 5 realm. Inserire NFSDOMAIN.LOCAL.

Configurazione di Kerberos

Modificare il file /etc/krb5.conf:

sudo vi /etc/krb5.conf

Aggiornare il file come segue:

[libdefaults]
    default_realm = NFSDOMAIN.LOCAL
    dns_lookup_realm = false
    dns_lookup_kdc = false
    rdns = false
    ticket_lifetime = 24h
    forwardable = yes
    default_tgs_enctypes = aes256-cts-hmac-sha1-96
    default_tkt_enctypes = aes256-cts-hmac-sha1-96
    permitted_enctypes = aes256-cts-hmac-sha1-96

[realms]
    NFSDOMAIN.LOCAL = {
        kdc = server.nfsdomain.local
        admin_server = server.nfsdomain.local
    }

[domain_realm]
    .nfsdomain.local = NFSDOMAIN.LOCAL
    nfsdomain.local = NFSDOMAIN.LOCAL

Test dell'ottenimento del ticket Kerberos

Eseguire:

kinit user1

Inserire la password quando richiesto. Poi, verificare il ticket:

klist

Dovreste vedere un ticket valido per user1. Per distruggere il ticket:

kdestroy

Configurazione di Active Directory su Windows Server 2022

Creazione degli account utenti e gruppi

  1. Aprire Active Directory Users and Computers sul server server.nfsdomain.local.
  2. Creare gli utenti:
    • user1
    • user2
    • ubuntuclienthost
    • ubuntuclientroot
    • ubuntuclientnfs
  3. Creati gli utenti ubuntuclienthost, ubuntuclientroot e ubuntuclientnfs riaprire la configurazione ed impostare l'accesso utente UPN rispettivamente come host/ubuntuclient.nfsdomain.local@NFSDOMAIN.LOCAL, root/ubuntuclient.nfsdomain.local@NFSDOMAIN.LOCAL e nfs/ubuntuclient.nfsdomain.local@NFSDOMAIN.LOCAL
  4. Creare il gruppo:
    • nfsgroup
  5. Aggiungere user1 al gruppo nfsgroup.
  6. Assegna una password a user1

Creazione utenti su Ubuntu:

useradd -m ubuntuclienthost
useradd -m ubuntuclientroot
useradd -m ubuntuclientnfs
groupadd nfsgroup
useradd -m -G nfsgroup user1
useradd -m -G nfsgroup user2

Imposta la password per gli account (account unix)

passwd user1
passwd user2

Prendi nota dell'UID degli utenti e del GUID del gruppo:

id user1
id user2
getent group nfsgroup

Imposta UID (uidNumber) su Criterio > Editor attributie per ogni utente e GUID (gidNumber) Estensioni > Editor attributi.

Aprire il prompt dei comandi su Windows come amministratore ed eseguire:

setspn -A nfs/server server
setspn -A nfs/server.nfsdomain.local server

setspn -A host/ubuntuclient ubuntuclienthost
setspn -A host/ubuntuclient.nfsdomain.local ubuntuclienthost

setspn -A root/ubuntuclient ubuntuclientroot
setspn -A root/ubuntuclient.nfsdomain.local ubuntuclientroot

setspn -A nfs/ubuntuclient ubuntuclientnfs
setspn -A nfs/ubuntuclient.nfsdomain.local ubuntuclientnfs

Creazione dei keytab con ktpass

Assicurarsi che l'utilità ktpass sia disponibile (fa parte degli strumenti di supporto). Questi file servono per consentire una autenticazione trasparente. Eseguire i seguenti comandi per generare i file keytab:

ktpass /princ host/ubuntuclient.nfsdomain.local@NFSDOMAIN.LOCAL /mapuser ubuntuclienthost@nfsdomain.local /crypto AES256-SHA1 /ptype KRB5_NT_PRINCIPAL /pass <password> /out ubuntuclienthost.keytab

ktpass /princ root/ubuntuclient.nfsdomain.local@NFSDOMAIN.LOCAL /mapuser ubuntuclientroot@nfsdomain.local /crypto AES256-SHA1 /ptype KRB5_NT_PRINCIPAL /pass <password> /out ubuntuclientroot.keytab

ktpass /princ nfs/ubuntuclient.nfsdomain.local@NFSDOMAIN.LOCAL /mapuser ubuntuclientnfs@nfsdomain.local /crypto AES256-SHA1 /ptype KRB5_NT_PRINCIPAL /pass <password> /out ubuntuclientnfs.keytab

Nota: Sostituire <password> con le password impostate per ciascun account (Power75mac).

Trasferimento dei keytab al client Ubuntu

Copiare i file .keytab generati su ubuntuclient (ad esempio utilizzando SCP o una condivisione di rete sicura). Sarebbe opportuno anche installare SSH anche su windows.


Configurazione del client Ubuntu con i keytab

Installazione di krb5-user (se non già fatto)

apt install krb5-user

Unione dei keytab

Su ubuntuclient, unire i keytab in /etc/krb5.keytab:

  1. Spostare i file .keytab nella directory locale (ad esempio /tmp).
  2. Eseguire:
scp administrator@server.nfsdomain.local:C:/nfs_share/keytab/ubuntuclienthost.keytab /tmp/ubuntuclienthost.keytab
scp administrator@server.nfsdomain.local:C:/nfs_share/keytab/ubuntuclientnfs.keytab /tmp/ubuntuclientnfs.keytab
scp administrator@server.nfsdomain.local:C:/nfs_share/keytab/ubuntuclientroot.keytab /tmp/ubuntuclientroot.keytab
ktutil

All'interno dell'interfaccia ktutil, eseguire i comandi:

rkt /tmp/ubuntuclienthost.keytab
rkt /tmp/ubuntuclientroot.keytab
rkt /tmp/ubuntuclientnfs.keytab
wkt /etc/krb5.keytab
q

Verifica dei keytab

Eseguire:

klist -k /etc/krb5.keytab

Dovresti vedere le voci per i principali appena aggiunti.

Keytab name: FILE:/etc/krb5.keytab
KVNO Timestamp           Principal
---- ------------------- -------------------------------------------------
   1 04/27/2024 10:00:00 host/ubuntuclient.nfsdomain.local@NFSDOMAIN.LOCAL
   1 04/27/2024 10:00:00 root/ubuntuclient.nfsdomain.local@NFSDOMAIN.LOCAL
   1 04/27/2024 10:00:00 nfs/ubuntuclient.nfsdomain.local@NFSDOMAIN.LOCAL

Assicurati che il file keytab abbia i permessi corretti per proteggere le informazioni sensibili.

sudo chmod 600 /etc/krb5.keytab
sudo chown root:root /etc/krb5.keytab

Test dell'ottenimento dei ticket senza password

Esegui:

kinit -k host/ubuntuclient.nfsdomain.local
kinit -k root/ubuntuclient.nfsdomain.local
kinit -k nfs/ubuntuclient.nfsdomain.local

Verificare che ciascun comando ottenga un ticket senza richiedere una password.


Configurazione di NFS su Ubuntu

Installazione dei pacchetti necessari

Assicurarsi che nfs-common sia installato (già fatto in precedenza):

apt install nfs-common

Configurazione di idmapd

Modificare /etc/idmapd.conf:

vi /etc/idmapd.conf

Aggiornare il file come segue:

[General]

Verbosity = 0
# set your own domain here, if it differs from FQDN minus hostname
# Domain = localdomain
Pipefs-Directory = /run/rpc_pipefs
# Domain = nfsdomain.local

[Mapping]
Nobody-User = nobody
Nobody-Group = nogroup

[Translation]
GSS-Methods = static

[Static]
user1@NFSDOMAIN.LOCAL = user1
group1@NFSDOMAIN.LOCAL = nfsgroup
user2@NFSDOMAIN.LOCAL = user2

Riavvio dei servizi NFS

Eseguire:

# systemctl restart nfs-idmapd
systemctl restart rpc-gssd

Configurazione del Server per NFS su Windows Server 2022

Installazione del ruolo Server per NFS

  1. Aprire Server Manager.
  2. Selezionare Aggiungi ruoli e funzionalità.
  3. Selezionare Servizi file e archiviazione > Server per NFS.
  4. Completare l'installazione.

Configurazione delle mapping UID/GID

Utilizzare Active Directory Lookup per la mapping UID/GID.

  1. Aprire Services for Network File System.
  2. Configurare il mapping degli utenti per utilizzare Active Directory.

Creazione della condivisione NFS

  1. Creare una cartella (ad esempio C:\nfs_share).
  2. Fare clic con il tasto destro sulla cartella e selezionare Proprietà.
  3. Selezionare la scheda Condivisione NFS.
  4. Fare clic su Gestisci condivisione NFS.
  5. Aggiungere la condivisione con le impostazioni desiderate, assicurandosi di abilitare Kerberos v5 e Kerberos v5 i per la sicurezza.

Impostazione delle autorizzazioni

Assicurarsi che l'utente nfsdomain\user1 abbia le autorizzazioni necessarie sulla cartella condivisa.


Montaggio della condivisione NFS su Ubuntu

Montaggio manuale

Eseguire:

mkdir /mnt/share
mount -t nfs -o sec=krb5i,vers=4 server.nfsdomain.local:/nfs_share /mnt/share

Nota: Utilizziamo sec=krb5i per abilitare l'integrità. Se si desidera solo l'autenticazione, utilizzare sec=krb5.

Montaggio automatico tramite fstab

Aggiungere la seguente riga a /etc/fstab:

server.nfsdomain.local:/nfs_share /mnt/share nfs defaults,sec=krb5i,vers=4 0 0

Test e verifica

  1. Accedere come user1 su ubuntuclient.
  2. Eseguire:
kinit user1
  1. Accedere alla condivisione montata:
cd /mnt/share
ls -l
  1. Creare un file di prova:
touch testfile.txt
  1. Verificare che il file sia stato creato e che le autorizzazioni siano corrette.