Berechtigung für freigegebenes NFSv4-Verzeichnis mit Authentifizierung mit SSO (openLdap + Kerberos) verweigert

753
Charles

Ich versuche, Single Sign On (SSO) mit Kerberos und LDAP einzurichten, aber ich habe ein Problem mit NFSv4 mit Kerberos für den Authentifizierungs- und Verschlüsselungsdienst (krb5p).

Meine Umgebung:

  • 1 Server (Named Server) mit LDAP und Kerberos (IP: 192.168.1.1)
  • 1 Server (Host2) mit Diensten wie SSH und NFSv4 (IP: 192.168.1.100)
  • 1 Client (Host1 genannt) (IP: 192.168.1.2)

Die drei Maschinen laufen mit Ubuntu 18.04.

mein / etc / hosts ist auf den drei Macines gleich (siehe unten).

SSO arbeitet gut mit dem SSH-Dienst mit GSSAPI zusammen, ich habe das gute Kerberos-Ticket auf meinem Client. Jetzt versuche ich, den NFSv4-Dienst einzurichten. Zuerst habe ich die freigegebenen Dateien konfiguriert (NFS-Kernel-Server und NFS-Common)

Wenn ich mich mit einem LDAP-Benutzer auf dem Client-Computer (mit sssd) anmelde und das freigegebene Verzeichnis einhänge, scheint alles in Ordnung zu sein.

sudo mount -vvv -t nfs4 -o proto=tcp,port=2049,sec=krb5p host2.stagenfs.fr:/ /mnt

Beachten Sie, dass ich dem LDAP-Benutzer in / etc / sudoers ein Recht hinzufügen musste, um das NFS-Verzeichnis mit dem LDAP-Benutzerkonto bereitzustellen:

/ etc / sudoers

<LDAP user> ALL=(ALL:ALL) NOPASSWD: /bin/mount,/bin/umount,/sbin/mount.nfs,/sbin/mount.nfs4 

Aber kerberos gibt mir ein Ticket, das root gehört (mit 600 Berechtigungen). Ich kann also nicht in das Verzeichnis / mnt wechseln, wenn ich mich mit dem LDAP-Clientkonto anmelde. Also habe ich festgestellt, dass nur root-Benutzer auf / mnt zugreifen können. Auf Client (Mountpoint-Verzeichnis) und Server haben freigegebene NFS-Verzeichnisse 777 Berechtigungen.

Das LDAP-Benutzerticket befindet sich in dem in der Datei sssd.conf angegebenen Verzeichnis, das Ticket für den NFS-Dienst befindet sich jedoch im Verzeichnis / tmp /.

Ich habe versucht ein chown <LDAP user>:<LDAP user group> /tmp/krb5ccmachine_STAGENFSund dann konnte mein LDAP-Benutzer auf / mnt zugreifen

Ich denke, das könnte vom idmapd-Dienst kommen, verstehe aber nicht, wie man es einrichten kann /etc/idmapd.conf, um die Dinge in Ordnung zu bringen. Ich habe ein paar Einstellungen aus dem Web ausprobiert, aber keine hat funktioniert.

Hier meine conf Dateien:

/ etc / hosts (auf allen Rechnern gleich)

127.0.0.1 localhost  # The following lines are desirable for IPv6 capable hosts ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters  192.168.1.1 server.stagenfs.fr server 192.168.1.1 stagenfs.fr  192.168.1.2 host1.stagenfs.fr host1  192.168.1.100 host2.stagenfs.fr host2 

/etc/nsswitch.conf (auf allen Rechnern gleich)

# /etc/nsswitch.conf # # Example configuration of GNU Name Service Switch functionality. # If you have the `glibc-doc-reference' and `info' packages installed, try: # `info libc "Name Service Switch"' for information about this file.  passwd: compat systemd sss group: compat systemd sss shadow: compat sss gshadow: files  hosts: files mdns4_minimal [NOTFOUND=return] dns myhostname networks: files  protocols: db files services: db files sss ethers: db files rpc: db files  netgroup: nis sss sudoers: files sss 

/etc/idmapd.conf (auf Client und NFS-Server identisch)

[General]  Verbosity = 5 Pipefs-Directory = /run/rpc_pipefs # set your own domain here, if it differs from FQDN minus hostname Domain = stagenfs.fr Local-Realms = STAGENFS.FR  [Mapping]  Nobody-User = nobody Nobody-Group = nogroup  [Translation] #Method = nsswitch Method = static GSS-Methods = static #Method = umich_ldap,nsswitch #GSS-Methods = umich_ldap #Method = sss  [Static] #nfs/host1.stagenfs.fr@STAGENFS.FR = alice #nfs/host1@STAGENFS.FR = alice #nfs/host2@STAGENFS.FR = alice alice@STAGENFS.FR = alice  #[UMICH_SCHEMA]  #LDAP_server = server.stagenfs.fr #LDAP_base = ou=tl #LDAP_use_ssl = true #LDAP_ca_cert = /etc/ssl/certs/cacert.pem #NFSV4_person_objectclass = posixaccount #NFSV4_name_attr = uid 

/ etc / default / nfs-common (Client-Rechner)

STATDOPTS=  # Do you want to start the gssd daemon? It is required for Kerberos mounts. NEED_GSSD="yes"  NEED_IDMAPD="yes" 

/ etc / default / nfs-kernel-server (NFS-Server-Computer)

# Number of servers to start up RPCNFSDCOUNT=8  # Runtime priority of server (see nice(1)) RPCNFSDPRIORITY=0  RPCMOUNTDOPTS="--manage-gids"  # Do you want to start the svcgssd daemon? It is only required for Kerberos # exports. Valid alternatives are "yes" and "no"; the default is "no". NEED_SVCGSSD="yes"  # Options for rpc.svcgssd. RPCSVCGSSDOPTS="" 

/etc/sssd/sssd.conf (auf Client und NFS-Server gleich)

[sssd] debug_level = 0xFFF0 config_file_version = 2 services = nss,pam domains = STAGENFS.FR  [nss] debug_level = 0xFFF0 filter_users = root filter_groups = root  [pam] debug_level = 10 offline_credentials_expiration = 1  [domain/STAGENFS.FR] debug_level = 0xFFF0 ldap_schema = rfc2307 ldap_search_base = ou=tl  id_provider = ldap auth_provider = krb5 chpass_provider = krb5 access_provider = ldap  ldap_sasl_mech = GSSAPI ldap_krb5_keytab = /etc/krb5.keytab  ldap_access_order = filter ldap_access_filter = &(objectClass=posixAccount) (uidNumber=*)  ldap_uri = ldaps://server.stagenfs.fr ldap_referrals = False ldap_id_use_start_tls = False cache_credentials = False account_cache_expiration = 1 enumerate = True ldap_default_bind_dn = cn=proxyuser,ou=private,ou=tl ldap_default_authtok_type = password ldap_default_authtok = ProxyUser123# ldap_tls_cacert = /etc/ssl/certs/cacert.pem  krb5_realm = STAGENFS.FR krb5_canonicalize = False krb5_server = server.stagenfs.fr krb5_kpasswd = server.stagenfs.fr krb5_ccachedir = /home/tl/%u 

/ var / log / syslog (mit minimaler Konfiguration) (auf NFS-Server)

Aug 2 10:05:57 host2 rpc.idmapd[470]: nfsdcb: authbuf=gss/krb5p authtype=user Aug 2 10:05:57 host2 rpc.idmapd[470]: nfs4_uid_to_name: calling nsswitch->uid_to_name Aug 2 10:05:57 host2 rpc.idmapd[470]: nfs4_uid_to_name: nsswitch->uid_to_name returned 0 Aug 2 10:05:57 host2 rpc.idmapd[470]: nfs4_uid_to_name: final return value is 0 Aug 2 10:05:57 host2 rpc.idmapd[470]: Server : (user) id "0" -> name "root@stagenfs.fr" Aug 2 10:05:57 host2 rpc.idmapd[470]: nfsdcb: authbuf=gss/krb5p authtype=group Aug 2 10:05:57 host2 rpc.idmapd[470]: nfs4_gid_to_name: calling nsswitch->gid_to_name Aug 2 10:05:57 host2 rpc.idmapd[470]: nfs4_gid_to_name: nsswitch->gid_to_name returned 0 Aug 2 10:05:57 host2 rpc.idmapd[470]: nfs4_gid_to_name: final return value is 0 Aug 2 10:05:57 host2 rpc.idmapd[470]: Server : (group) id "0" -> name "root@stagenfs.fr" 

Ausgabe von Befehlszeilen auf dem Client (host1) Alice ist ein mit Kerberos authentifizierter LDAP-Benutzer.

alice@host1:~$ sudo mount -vvv -t nfs4 -o proto=tcp,port=2049,sec=krb5p host2:/users /mnt mount.nfs4: timeout set for Thu Aug 2 10:07:58 2018 mount.nfs4: trying text-based options 'proto=tcp,port=2049,sec=krb5p,vers=4.2,addr=192.168.1.100,clientaddr=192.168.1.2'  alice@host1:~$ ldapwhoami  SASL/GSSAPI authentication started SASL username: alice@STAGENFS.FR SASL SSF: 56 SASL data security layer installed. dn:uid=alice,ou=people,ou=tl  alice@host1:~$ klist  Ticket cache: FILE:/home/tl/alice/krb5_25002 Default principal: alice@STAGENFS.FR  Valid starting Expires Service principal 02/08/2018 10:57:40 02/08/2018 20:57:40 krbtgt/STAGENFS.FR@STAGENFS.FR renew until 03/08/2018 10:57:40 02/08/2018 10:57:56 02/08/2018 20:57:40 ldap/server.stagenfs.fr@STAGENFS.FR renew until 03/08/2018 10:57:40  alice@host1:~$ klist -c /tmp/krb5ccmachine_STAGENFS.FR  klist: Credentials cache permissions incorrect (filename: /tmp/krb5ccmachine_STAGENFS.FR) alice@host1:~$   root@host1:~# klist -c /tmp/krb5ccmachine_STAGENFS.FR  Ticket cache: FILE:/tmp/krb5ccmachine_STAGENFS.FR Default principal: host/host1.stagenfs.fr@STAGENFS.FR  Valid starting Expires Service principal 02/08/2018 10:01:07 02/08/2018 20:01:07 krbtgt/STAGENFS.FR@STAGENFS.FR renew until 03/08/2018 10:01:07 02/08/2018 10:01:07 02/08/2018 20:01:07 nfs/host2.stagenfs.fr@STAGENFS.FR renew until 03/08/2018 10:01:07  root@host1:~# klist -k /etc/krb5.keytab  Keytab name: FILE:/etc/krb5.keytab KVNO Principal ---- -------------------------------------------------------------------------- 2 ldap/server.stagenfs.fr@STAGENFS.FR 2 ldap/server.stagenfs.fr@STAGENFS.FR 2 host/server.stagenfs.fr@STAGENFS.FR 2 host/server.stagenfs.fr@STAGENFS.FR 2 host/host1.stagenfs.fr@STAGENFS.FR 2 host/host1.stagenfs.fr@STAGENFS.FR 2 host/host2.stagenfs.fr@STAGENFS.FR 2 host/host2.stagenfs.fr@STAGENFS.FR 2 nfs/host2.stagenfs.fr@STAGENFS.FR 2 nfs/host2.stagenfs.fr@STAGENFS.FR 

Wie Sie sehen, habe ich verschiedene Methoden für idmapd.conf ausprobiert, aber ich habe es nicht geschafft, dies zu schaffen. Ich habe eine Website wie diesen Link gefunden, die aber nicht geholfen hat. Ich glaube, mir fehlt etwas in der Idmapd-Konfiguration oder vielleicht irgendwo anders. Wenn Sie irgendwelche Ideen oder Fragen haben, zögern Sie nicht.

0

0 Antworten auf die Frage