4 votes

Modifier pam avec Ansible

Dans le cadre de l'installation d'un nouveau serveur, je mets à disposition /etc/security/access.conf avec l'utilisateur/le groupe et les adresses IP src des connexions ssh autorisées. Pour ce faire, il est nécessaire d'activer la fonction pam_access dans le /etc/pam.d/login und /etc/pam.d/sshd (sur Ubuntu en tout cas)

Il semble Ansible dispose d'un module permettant de modifier certaines de ces règles, mais je n'arrive pas à le faire fonctionner. Une stipulation des modules est : "Pour qu'une règle PAM puisse être modifiée, le type, le contrôle et le chemin d'accès au module doivent correspondre à une règle existante." Cela signifie-t-il que si une règle est commentée, la pamd Le module ne fonctionnera pas pour activer cette ligne ?

C'est mon cahier des charges actuel. J'ai essayé de supprimer le with_items dans la tâche et en utilisant login pour les name: mais cela ne semble pas fonctionner non plus :

---
- hosts: all
  gather_facts: False
  tasks:
    - name: modify pam_access in /etc/pam.d for sshd and login
      pamd:
        name   : "{{ item }}"
        type   : account
        control: required
        module_path: pam_access.so
      with_items:
        - login
        - sshd

Et voici le résultat de sa mise en œuvre. Cela ne me donne pas beaucoup d'éléments pour avancer :

$ ansible-playbook tests/pam-access.yml -i 192.168.24.66,                                                             
SUDO password: 

PLAY [all] ***********************************************************************************************************

TASK [modify pam_access in /etc/pam.d for sshd and login] ************************************************************
ok: [192.168.24.66] => (item=login)
failed: [192.168.24.66] (item=sshd) => {"changed": false, "item": "sshd", "module_stderr": "Shared connection to 192.168.24.66 closed.\r\n", "module_stdout": "\r\nTraceback (most recent call last):\r\n  File \"/tmp/ansible_vzO7tZ/ansible_module_pamd.py\", line 691, in <module>\r\n    main()\r\n  File \"/tmp/ansible_vzO7tZ/ansible_module_pamd.py\", line 645, in main\r\n    pamd.load_rules_from_file()\r\n  File \"/tmp/ansible_vzO7tZ/ansible_module_pamd.py\", line 361, in load_rules_from_file\r\n    self.load_rules_from_string(stringline.replace(\"\\\\\\n\", \"\"))\r\n  File \"/tmp/ansible_vzO7tZ/ansible_module_pamd.py\", line 380, in load_rules_from_string\r\n    self.rules.append(PamdRule.rulefromstring(stringline))\r\n  File \"/tmp/ansible_vzO7tZ/ansible_module_pamd.py\", line 312, in rulefromstring\r\n    rule_type = result.group(1)\r\nAttributeError: 'NoneType' object has no attribute 'group'\r\n", "msg": "MODULE FAILURE", "rc": 1}

PLAY RECAP ***********************************************************************************************************
192.168.24.66              : ok=0    changed=0    unreachable=0    failed=1

2voto

rizidoro Points 1993

En fin de compte, nous avons opté pour lineinfile . Si quelqu'un a une meilleure solution, j'aimerais la voir.

   ---
    - hosts: all
      gather_facts: False
      tasks:
        - name: un-comment or add pam_access in /etc/pam.d files
          lineinfile:
            path   : "{{ item }}"
            regexp : "#.*account.*required.*pam_access.so"
            line   : "account   required   pam_access.so"
            insertafter : ".*include.*common-auth"
            state  : present
          with_items:
            - /etc/pam.d/login
            - /etc/pam.d/sshd

1voto

Crystal Points 1

Exécutez-le avec l'option -vvvv pour savoir pourquoi il a échoué. Dans les fichiers sshd et login, trouvez une règle qui existe déjà, puis utilisez le paramètre state pour lui indiquer d'insérer votre nouvelle règle avant ou après la règle existante. Par exemple :

Essayez ce format pour créer une nouvelle règle :

- name: modify pam_access in /etc/pam.d for sshd and login
  pamd:
    name: '{{ item }}'
    #Existing type, control, and module_path in sshd and login
    type: account
    control: required
    module_path: pam_nologin.so
    #New rule you want to add
    new_type: account
    new_control: required
    new_module_path: pam_access.so
    module_arguments: insert new args here, if applicable.  Remove if none.
    #Inserts rule before existing rule - can use after as well
    state: before 
  #loops through both files - if existing module exists in both.
  loop:
    - login
    - sshd

Vous pouvez également trouver une règle existante et modifier le module/contrôle :

 - name: Update pam_pwquality.so Rule Control 
  pamd:
    name: '{{ item }}'
    type: account
    control: required
    module_path: pam_nologin.so
    new_module_path: pam_pwquality.so
  loop:
    - login
    - sshd

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X