web-dev-qa-db-fra.com

pam_unix (Sudo: auth): la conversation a échoué, l'authentification n'a pas pu identifier le mot de passe pour [nom d'utilisateur]

J'utilise ansible pour approvisionner mon cluster de production Centos 7. Malheureusement, l'exécution des commandes ci-dessous se traduit par ansibleTiemout et les modules d'authentification enfichables Linux (pam) error conversation failed.

La même commande ansible fonctionne bien, exécutée contre un laboratoire virtuel fou de vagrant cases.

Commande Ansible

$ ansible master_server -m yum -a 'name=vim state=installed' -b -K -u lukas -vvvv
123.123.123.123 | FAILED! => {
    "msg": "Timeout (7s) waiting for privilege escalation Prompt: \u001b[?1h\u001b=\r\r"
}

Journal SSHd

# /var/log/secure
Aug 26 13:36:19 master_server Sudo: pam_unix(Sudo:auth): conversation failed
Aug 26 13:36:19 master_server Sudo: pam_unix(Sudo:auth): auth could not identify password for [lukas]
2
Lukasz Dynowski

J'ai trouvé le problème. Il s'est avéré que PAM's problème de module d'authentification ! Permettez-moi de décrire comment je suis arrivé à la solution.

Le contexte:

J'ai configuré ma machine pour le débogage - c'est-à-dire que j'avais quatre fenêtres de terminal ouvertes.

  • 1er terminal (machine locale): Ici, j'exécutais ansible prduction_server -m yum -a 'name=vim state=installed' -b -K -u username
  • 2ème terminal (serveur de production): Ici, j'ai exécuté journalctl -f (journal à l'échelle du système).
  • 3ème terminal (serveur de production): Ici, j'ai exécuté tail -f /var/log/secure (journal pour sshd).
  • 4ème terminal (serveur de production): Ici, je modifiais vi /etc/pam.d/Sudo fichier.

Chaque fois, j'exécute une commande à partir de 1er terminal J'ai ces erreurs:

# ansible error - on local machine
Timeout (7s) waiting for privilege escalation Prompt error.
# sshd error - on remote machine
pam_unix(Sudo:auth): conversation failed
pam_unix(Sudo:auth):  [username]

J'ai montré toute ma configuration à mon collègue, et il m'a dit que l'erreur devait faire quelque chose avec "PAM". Franchement, c'était la première fois que j'entendais parler de PAM . J'ai donc dû lire ceci Tutoriel PAM . J'ai compris que cette erreur se rapporte à l'interface auth située dans /etc/pam.d/Sudo module. En fouillant sur Internet, je suis tombé sur ce pam_permit.so module avec sufficient drapeau de contrôle, qui a résolu mon problème!

Solution

Fondamentalement, ce que j'ai ajouté était auth sufficient pam_permit.so ligne vers /etc/pam.d/Sudo fichier. Regardez l'exemple ci-dessous.

$ cat /etc/pam.d/Sudo
#%PAM-1.0
# Fixing ssh "auth could not identify password for [username]"
auth       sufficient   pam_permit.so

# Below is original config
auth       include      system-auth
account    include      system-auth
password   include      system-auth
session    optional     pam_keyinit.so revoke
session    required     pam_limits.so
session    include      system-auth

Conclusion:

J'ai passé 4 jours pour arriver à cette solution. Je suis tombé sur des dizaines de solutions qui n'ont pas fonctionné pour moi, à partir de "mot de passe Sudo dupliqué dans les fichiers ansible/fichier de configuration", "configuration spécifique ldap" = pour obtenir des conseils d'administrateurs système toujours grincheux!

Remarque:

Depuis, je ne suis pas expert en PAM, je ne sais pas si ce correctif affecte d'autres aspects du système, alors soyez prudent lorsque vous copiez aveuglément en collant ce code! Cependant, si vous êtes expert en PAM, veuillez partager avec nous des solutions ou des suggestions alternatives. Merci !

5
Lukasz Dynowski

En supposant que l'utilisateur lukas est un compte local, vous devriez regarder comment le module pam_unix.so est déclaré dans votre fichier pam system-auth. Mais plus d'informations sur le compte d'utilisateur et la configuration de pam sont nécessaires pour une réponse spécifique.


En ajoutant auth suffisant pam_permit.so suffit pour y accéder. Son utilisation dans tout autre environnement de test que celui le plus dangereux ne serait pas recommandée. Depuis la page de manuel pam_permit:

   pam_permit is a PAM module that always permit access. It does nothing
   else.

Donc, ajouter pam_permit.so comme suffisant pour l'authentification de cette manière sera complètement contourner la sécurité pour tous les utilisateurs.

0
defaultadminuser

J'ai eu la même erreur lorsque j'ai essayé de redémarrer Apache2 avec Sudo service Apache2 restart

Lors de la connexion à root, j'ai pu voir la véritable erreur liée à la configuration d'Apache2. Il s'est avéré que j'ai supprimé les fichiers de certificat SSL d'un site il y a quelques mois, mais je n'ai pas désactivé le site dans Apache2. a2dissite a fait l'affaire.

0
Sebastian Wimmer