Estou tentando configurar o logon único (SSO) com Kerberos e LDAP, mas tenho um problema com o NFSv4 com Kerberos para autenticação e serviço de criptografia (krb5p).
Meu ambiente:
As três máquinas estão executando o Ubuntu 18.04.
Meu / etc / hosts é o mesmo nas três máquinas, veja abaixo.
O SSO está funcionando bem com o serviço SSH com GSSAPI, tenho o bom ticket Kerberos no meu cliente. Agora estou tentando configurar o serviço NFSv4. Primeiro eu configurei os arquivos compartilhados (nfs-kernel-server e nfs-common)
Quando estou logando com o usuário LDAP na máquina cliente (com sssd) e montei o diretório compartilhado, tudo parece ok.
sudo mount -vvv -t nfs4 -o proto=tcp,port=2049,sec=krb5p host2.stagenfs.fr:/ /mnt
Note que eu tive que adicionar direito ao usuário LDAP em / etc / sudoers para montar o diretório NFS com a conta de usuário LDAP:
/ etc / sudoers
<LDAP user> ALL=(ALL:ALL) NOPASSWD: /bin/mount,/bin/umount,/sbin/mount.nfs,/sbin/mount.nfs4
Mas o Kerberos me dá um ticket que pertence ao root (com 600 permissões). Portanto, não consigo entrar no diretório / mnt quando estou logado com a conta do cliente LDAP. Então eu achei que apenas usuário root pode acessar o / mnt. No cliente (diretório de ponto de montagem) e no servidor, os diretórios compartilhados do NFS têm 777 permissões.
O ticket do usuário LDAP está no diretório especificado no arquivo sssd.conf, mas o ticket para o serviço NFS está no diretório / tmp /.
Eu tentei um chown <LDAP user>:<LDAP user group> /tmp/krb5ccmachine_STAGENFS
e meu usuário LDAP conseguiu acessar o / mnt
Acho que pode vir do serviço idmapd, mas não entendo como configurar o /etc/idmapd.conf
para fazer as coisas ok. Eu tentei algumas configurações que encontrei na web, mas nenhuma funcionou.
Aqui meus arquivos conf:
/ etc / hosts (o mesmo em todas as máquinas)
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 (o mesmo em todas as máquinas)
# /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 (mesmo no cliente e no servidor NFS)
[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/[email protected] = alice
#nfs/[email protected] = alice
#nfs/[email protected] = alice
[email protected] = 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 (máquina cliente)
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 (máquina servidor NFS)
# 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 (mesmo no cliente e no servidor NFS)
[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 (com configuração mínima) (no servidor NFS)
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 "[email protected]"
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 "[email protected]"
saída de linhas de comandos no cliente (host1) Alice é um usuário LDAP autenticado com o Kerberos.
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: [email protected]
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: [email protected]
Valid starting Expires Service principal
02/08/2018 10:57:40 02/08/2018 20:57:40 krbtgt/[email protected]
renew until 03/08/2018 10:57:40
02/08/2018 10:57:56 02/08/2018 20:57:40 ldap/[email protected]
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/[email protected]
Valid starting Expires Service principal
02/08/2018 10:01:07 02/08/2018 20:01:07 krbtgt/[email protected]
renew until 03/08/2018 10:01:07
02/08/2018 10:01:07 02/08/2018 20:01:07 nfs/[email protected]
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/[email protected]
2 ldap/[email protected]
2 host/[email protected]
2 host/[email protected]
2 host/[email protected]
2 host/[email protected]
2 host/[email protected]
2 host/[email protected]
2 nfs/[email protected]
2 nfs/[email protected]
Como você pode ver, eu tentei vários métodos para idmapd.conf, mas não consegui fazer isso funcionar. Eu encontrei alguns sites como este link , mas isso não ajudou. Eu acho que estou faltando alguma coisa na configuração do idmapd ou talvez em outro lugar. Se você tiver alguma ideia ou dúvida, não hesite.