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
사용자는 해당 그룹에서 제거됩니다.