ansible을 통해 /etc/sudoers에 새 줄을 추가합니다.

ansible을 통해 /etc/sudoers에 새 줄을 추가합니다.

/etc/sudoersansible을 통해 파일에 새 줄을 추가 하려고합니다 . 그런데 여전히 작동하지 않습니다. 무엇이 문제인가요?

파일을 쓰기 가능하게 visudo -c만드는 명령을 시도했습니다 .sudoers

~를 제외하고

sudo echo "test ALL=(ALL)       NOPASSWD: ALL" >> /etc/sudoers

모든 라인이 유효합니다.

이것은 내가 실행한 sh 파일인데, 그 중 아무 것도 작동하지 않았습니다.

 sudo adduser test
 sudo echo "******" | passwd --stdin test
 sudo cp /etc/sudoers /etc/sudoers_20180418
 sudo echo "test ALL=(ALL)       NOPASSWD: ALL" >> /etc/sudoers
 sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config20180418
 sudo sed -i 's/AllowUsers/AllowUsers test/g' /etc/ssh/sshd_config

.sh 파일

 sudo adduser test
 sudo echo "******" | passwd --stdin test
 sudo cp /etc/sudoers /etc/sudoers_20180418
 visudo -c
 sudo echo "test ALL=(ALL)       NOPASSWD: ALL" >> /etc/sudoers
 sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config20180418
 sudo sed -i 's/AllowUsers/AllowUsers test/g' /etc/ssh/sshd_config

답변1

문제는 명령줄일 수 있습니다.

sudo echo "test ALL=(ALL)       NOPASSWD: ALL" >> /etc/sudoers

명령의 출력은 원래 사용자의 ID를 사용하여 리디렉션됩니다 . sudo쓰기 위해서는 루트 액세스 권한이 필요하므로 /etc/sudoers이 작업은 실패합니다 . 명령은 echo루트로 실행되지만 리디렉션을 수행하지는 않습니다. 이는 sudo echo ...명령줄을 실행하도록 준비된 셸에 의해 이미 설정되어 있습니다. 여기서는 sudo를 사용하고 있으므로 쉘이 루트로 실행되고 있지 않은 것 같습니다.

다음과 같이 다시 작성할 수 있습니다.

echo "test ALL=(ALL)       NOPASSWD: ALL" | sudo tee -a /etc/sudoers >/dev/null

이 버전에서는:

  • 명령 은 echo원래 사용자로 실행됩니다.
  • /dev/null로의 리디렉션은 원래 사용자로 수행됩니다.
  • 그러나 tee -a <filename>파이프된 입력의 복사본을 지정된 파일에 루트로 추가하는 것이 바로 필요한 작업입니다.

답변2

RHEL에는 /etc/sudoers.d파일이 포함된 디렉터리가 있습니다 /etc/sudoers. 자체적으로 편집하는 대신 파일 조각을 추가해 보세요 /etc/sudoers.

echo "test ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/ansible

또는 Ansible에 sudoers직접 관리 기능이 있다는 것을 알 수 있습니다.

관련 정보