[linux] 스크립트에서 / etc / sudoers를 어떻게 편집합니까?

/etc/sudoers화이트리스트에서 항목을 추가 / 제거하려면 스크립트에서 편집해야 합니다.

일반 파일에서 작동하는 명령이 있다고 가정하면 어떻게 적용 할 수 /etc/sudoers있습니까?

복사 및 수정 한 다음 visudo원본을 수정 된 사본으로 바꿀 수 있습니까? 내 자신의 스크립트를 제공하여 $EDITOR?

아니면 동일한 잠금 장치를 사용할 수 cp있습니까?

문제는 단순히 작동하는 것을 찾는 것보다 잠재적 인 문제에 관한 것입니다.



답변

오래된 스레드, 그러나 어떨까요?

echo 'foobar ALL=(ALL:ALL) ALL' | sudo EDITOR='tee -a' visudo


답변

이를 위해 사용자 정의 편집기로 visudo를 사용하십시오. 이것은 Brian의 솔루션으로 모든 경쟁 조건과 “해킹”문제를 해결합니다.

#!/bin/sh
if [ -z "$1" ]; then
  echo "Starting up visudo with this script as first parameter"
  export EDITOR=$0 && sudo -E visudo
else
  echo "Changing sudoers"
  echo "# Dummy change to sudoers" >> $1
fi

이 스크립트는 sudoers 끝에 “# Dummy change to sudoers”줄을 추가합니다. 해킹이나 경쟁 조건이 없습니다.

이것이 실제로 어떻게 작동하는지 설명하는 주석이 달린 버전 :

if [ -z "$1" ]; then

  # When you run the script, you will run this block since $1 is empty.

  echo "Starting up visudo with this script as first parameter"

  # We first set this script as the EDITOR and then starts visudo.
  # Visudo will now start and use THIS SCRIPT as its editor
  export EDITOR=$0 && sudo -E visudo
else

  # When visudo starts this script, it will provide the name of the sudoers 
  # file as the first parameter and $1 will be non-empty. Because of that, 
  # visudo will run this block.

  echo "Changing sudoers"

  # We change the sudoers file and then exit  
  echo "# Dummy change to sudoers" >> $1
fi


답변

임시 파일을 편집 한 다음 visudo -c -f sudoers.temp를 사용하여 변경 사항이 유효한지 확인한 다음 / etc / sudoers 위에 복사해야합니다.

#!/bin/sh
if [ -f "/etc/sudoers.tmp" ]; then
    exit 1
fi
touch /etc/sudoers.tmp
edit_sudoers /tmp/sudoers.new
visudo -c -f /tmp/sudoers.new
if [ "$?" -eq "0" ]; then
    cp /tmp/sudoers.new /etc/sudoers
fi
rm /etc/sudoers.tmp


답변

Debian 및 파생물에서는 /etc/sudoers.d/권한이있는 사용자 지정 스크립트를 디렉터리에 삽입 할 수 있습니다 . 0440자세한 내용은 /etc/sudoers.d/README를 참조하십시오 .

도움이 될 수 있습니다.


답변

visudo는 편집을위한 휴먼 인터페이스로 간주됩니다 /etc/sudoers. 파일을 직접 교체하여 동일한 결과를 얻을 수 있지만 동시 편집 및 구문 유효성 검사에주의해야합니다. r--r-----권한에 유의하십시오 .


답변

sudo항목을 추가 /etc/sudoers.d할 수있는 경우 @ dragon788의 답변을 사용할 수 있습니다.

https://superuser.com/a/1027257/26022

기본적으로 visudo파일을으로 복사하기 전에 파일을 확인하는 데 사용 /etc/sudoers.d하므로 sudo누구에게도 깨지지 않도록 할 수 있습니다 .

visudo -c -q -f filename

이를 확인하고 유효한 경우 성공 (0)을 반환하므로 if, &&및 기타 스크립트 부울 연산과 함께 사용할 수 있습니다 . 유효성을 검사 한 후에 복사하면 /etc/sudoers.d작동합니다. 루트가 소유하고 다른 사람이 쓸 수 없는지 확인하십시오.


답변

사용자 정의 편집기를 설정하십시오. 기본적으로 파일 이름 (이 경우 /etc/sudoers.tmp)을 받아들이고 수정하고 제자리에 저장하는 스크립트입니다. 그래서 당신은 그 파일에 쓸 수 있습니다. 완료되면 스크립트를 종료하면 visudo가 실제 sudoers 파일을 수정합니다.

sudo EDITOR=/path/to/my_dummy_editor.sh visudo