2017-09-06 4 views
0

J'essaie de configurer mon système pour me permettre de me connecter (ssh) à un compte local sur un hôte (Ubuntu 16.04) avec authentification par clé publique, même si/quand Le serveur LDAP est en panne.Clé publique authentifiant l'utilisateur local lorsque le serveur LDAP est en panne

Il s'agit d'une image dans le cloud, donc l'utilisateur dont j'ai besoin localement est ubuntu. Cet utilisateur n'a pas de mot de passe (et je ne veux pas en définir un pour la sécurité). Seule la clé publique auth doit être autorisée sur cet utilisateur.

Cet utilisateur a UID 1001 et tous mes utilisateurs LDAP ont des numéros UID> = 2000.

J'ai essayé des choses toute la journée (comme pam_succeed_if.so et pam_localuser).

Maintenant, getent passed ubuntu fonctionne correctement et renvoie la ligne de mot de passe locale. Mais ssh refuse comme ceci:

Sep 6 17:27:43 ip-10-99-0-241 sshd[24895]: nss_ldap: could not connect to any LDAP server as (null) - Can't contact LDAP server 
Sep 6 17:27:43 ip-10-99-0-241 sshd[24895]: nss_ldap: failed to bind to LDAP server ldaps://ldap.domain.tld: Can't contact LDAP server 
Sep 6 17:27:43 ip-10-99-0-241 sshd[24895]: nss_ldap: reconnecting to LDAP server... 

Et puis finalement il échoue avec Authentication failed..

  • /etc/nsswitch.conf

    passwd:   compat [success=return] ldap 
    group:   compat [success=return] ldap 
    shadow:   compat [success=return] ldap 
    
  • /etc/pam.d/common-account

    account [success=2 new_authtok_reqd=done default=ignore]  pam_unix.so 
    # NOTE: These two won't work - fatal: Access denied for user <ldap user> by PAM account configuration [preauth] 
    #account sufficient      pam_localuser.so 
    #account sufficient      pam_succeed_if.so uid [le sign] 500 quiet 
    account [success=1 default=bad success=ok user_unknown=ignore] pam_ldap.so 
    account requisite      pam_deny.so 
    account required      pam_permit.so 
    account required      pam_krb5.so minimum_uid=2000 
    
  • /etc/pam.d/common-auth

    auth [success=3 default=ignore]  pam_krb5.so minimum_uid=2000 ignore_root 
    auth [success=2 default=ignore]  pam_unix.so nullok_secure try_first_pass 
    auth [success=1 default=ignore]  pam_ldap.so use_first_pass ignore_unknown_user ignore_authinfo_unavail 
    # NOTE: Can't login with this (changed the success above)! 
    #auth requisite      pam_succeed_if.so uid [ge sign] 500 quiet 
    auth requisite      pam_deny.so 
    auth required      pam_permit.so 
    
  • /etc/ldap.conf

    bind_timelimit 10 
    pam_min_uid 2000 
    nss_initgroups_ignoreusers ubuntu,local 
    nss_reconnect_tries 2 
    nss_reconnect_sleeptime 1 
    nss_reconnect_maxsleeptime 8 
    nss_reconnect_maxconntries 2 
    

(j'ai essayé d'utiliser les blocs de pré et le code, mais SOF a refusé de me laisser poster alors, désolé si cela semble horrible - si quelqu'un avec des droits d'administrateur peut aller et fixer, s'il vous plaît faire)

Répondre

0

Relire le man page for nsswitch.conf, m'a donné ceci:.

  • return
    • Renvoyez un résultat maintenant. Ne pas appeler d'autres fonctions de recherche. Cependant, pour des raisons de compatibilité, si est l'action sélectionnée pour la base de données de groupe et l'état Not Found, et que le fichier de configuration ne contient pas la ligne initgroups, la fonction de recherche suivante est toujours appelée, sans affecter le résultat de la recherche.

Mots clés est cette partie ici: le fichier de configuration ne contient pas la ligne initgroups, la prochaine fonction de recherche est toujours appelée.

Comme dans, si j'ajouté la ligne

initgroups:  files 

Je peux maintenant vous connecter à l'utilisateur ubuntu, même lorsque le serveur LDAP est vers le bas!