Модуль Ansible User удаляет конфигурацию sudo. Почему?

Модуль Ansible User удаляет конфигурацию sudo. Почему?

Машина Amazon Linux 2 настроена с пользователем, который может использовать sudo без пароля следующим образом:

# Add user
sudo groupadd -g 2002 one-username
sudo useradd -u 2002 -g 2002 -c "One Username Account" -s /bin/bash -m -d /home/one-username one-username

# Configure SSH for the user
mkdir -p /home/one-username/.ssh
cp -pr /home/ec2-user/.ssh/authorized_keys /home/one-username/.ssh/authorized_keys
chown -R one-username:one-username /home/one-username/.ssh
chmod 700 /home/one-username/.ssh
cat << 'EOF' > /etc/sudoers.d/one-username
User_Alias ONE_USERNAME = %one-username
ONE_USERNAME ALL=(ALL)      NOPASSWD: ALL
EOF
chmod 400 /etc/sudoers.d/one-username
# disable login for one-username except through ssh keys
cat << 'EOF' >> /etc/ssh/sshd_config
Match User one-username
        PasswordAuthentication no
        AuthenticationMethods publickey

EOF
# restart sshd
systemctl restart sshd

Эта конфигурация сохраняется, когда ansible playbook добавляет того же пользователя в группу следующим образом:

 - name: Add user to different-groupname group
   command: usermod -a -G different-groupname one-username

Однако если в сценарии изменить две предыдущие строки на следующие четыре строки, тот же пользователь больше не сможет выполнить sudo без запроса несуществующего пароля:

 - name: Add user to different-groupname group
   user:
     name: one-username
     group: different-groupname

Почему это происходит? Как можно перенастроить пользовательский модуль Ansible, чтобы избежать этой проблемы?

Примечание: different-groupnameгруппа создается отдельно (и one-usernameдобавляется к different-groupnameотдельно) одинаково в обеих ситуациях, и это не является причиной проблемы.

решение1

Короткий ответ

Команда usermod -a ...добавляет группу, но groupпараметрпользовательмодуль «устанавливает основную группу пользователя».

Подробности

Пользовательодно имя пользователясоздается с первичной группойодно имя пользователя

sudo groupadd -g 2002 one-username
sudo useradd -u 2002 -g 2002 ... one-username

Участники группыодно имя пользователяразрешено использовать sudo

User_Alias ONE_USERNAME = %one-username
ONE_USERNAME ALL=(ALL)      NOPASSWD: ALL

Модуль Ansibleпользовательустанавливает основную группу пользователяодно имя пользователякдругое-название-группы.

user:
  name: one-username
  group: different-groupname

Весьма вероятно, что члены группыдругое-название-группыне имеют права использовать sudo.

Решение

Использовать groupsвместо groupпараметра модуляпользователь. Вместо

user:
  name: one-username
  group: different-groupname

использовать

user:
  name: one-username
  groups:
    - different-groupname

(не испытано)

Кроме того, appendключевое слово модуля пользователя влияет на набор групп для пользователя. Если вы добавляете append: yes, то different-groupnameдобавляется в список групп для пользователя:

user:
  name: one-username
  append: yes
  groups:
    - different-groupname

По умолчанию appenddefaults равно no, а группы пользователей устанавливаются в набор групп, объявленных ключевым groupsсловом. Если пользователь принадлежит к другим группам, которых нет в списке groups, пользователь удаляется из этих групп.

Связанный контент