Ansible 사용자 모듈은 sudo 구성을 제거합니다. 왜?

Ansible 사용자 모듈은 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 플레이북이 다음과 같이 동일한 사용자를 그룹에 추가할 때 보존됩니다.

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

그러나 플레이북에서 이전 두 줄이 다음 4줄로 변경되면 동일한 사용자는 존재하지 않는 비밀번호를 입력하라는 메시지가 표시되지 않고 더 이상 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

앤서블 모듈사용자사용자의 기본 그룹을 설정합니다.단일 사용자 이름에게다른 그룹 이름.

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기본값은 no이고, 사용자 그룹은 키워드로 선언된 그룹 집합으로 설정됩니다 groups. 사용자가 목록에 없는 다른 그룹에 속한 경우 groups사용자는 해당 그룹에서 제거됩니다.

관련 정보