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 nos três macines 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, 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. Acho que estou perdendo alguma coisa na configuração do idmapd ou talvez em outro lugar. Se você tiver alguma ideia ou dúvida, não hesite.
Tags nfs ldap kerberos single-sign-on linux