Машина 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
По умолчанию append
defaults равно no
, а группы пользователей устанавливаются в набор групп, объявленных ключевым groups
словом. Если пользователь принадлежит к другим группам, которых нет в списке groups
, пользователь удаляется из этих групп.