왜 시스템에 /etc/sudoers.d가 있습니까? 어떻게 편집해야합니까?


48

마지막으로, 나는 / etc / sudoers에서 이러한 위험에 대해 물었습니다 :

    user_name ALL=(ALL) /usr/bin/vim /etc/httpd/confs/httpd.conf
    %group_name ALL=(ALL) /usr/bin/vim /etc/httpd/confs/httpd.conf

이 문제에 대해 생각하면서 /etc/sudoers.d 디렉토리를 찾았 습니다 . 디렉토리의 파일은 / etc / sudoers와 유사한 기능을 가져야합니다 (위의 스크립트는 /etc/sudoers.d에서도 여전히 문제가 있음을 의미 함). 그러나 한 기사에서는 visudo파일을 편집 하는 데 사용할 수 없으므로 디렉토리를 사용해서는 안된다고 말했습니다 . 그것. 즉 sudo, 디렉토리에서 실수를하면 사용할 권리가 상실됩니다 .

이것이 사실이라면 왜 /etc/sudoers.d가 있습니까? 아니면 /etc/sudoers.d 에서 파일을 편집하는 좋은 방법이 있습니까?

답변:


45

/etc/sudoers.d시스템을 업그레이드하면 파일의 변경 사항이 그대로 유지됩니다. 이렇게하면 시스템을 업그레이드 할 때 사용자 잠금이 방지 될 수 있습니다. 우분투는 이런 행동을 좋아하는 경향이 있습니다. 다른 배포판에서도이 레이아웃을 사용하고 있습니다.

이 디렉토리에있는 파일의 규칙이 for보다 느슨하다는 것이 제 경험이었습니다 /etc/sudoers. 여기에는 다음이 포함됩니다.

  • 파일의 실수는 sudo실패 하지 않았습니다 . 그러나 파일은 무시되었습니다.
  • 권한 규칙이 덜 엄격 해 보입니다. 해당 그룹 또는 다른 사용자가 파일을 읽을 수 있습니다. 나는 그것이 가능했다고 믿지 않습니다 /etc/sudoers. root보안을 유지 하려면 쓰기 권한을 제한해야합니다 . sudo의 현재 Ubuntu 버전은 그룹 또는 기타에 대한 읽기 권한을 허용합니다. (이 기능을 사용하면 루트 액세스 없이도 sudo 액세스를 감사 할 수 있습니다.)

visudo명령의 기본값은 /etc/sudoers입니다. -f옵션으로 지정한 파일을 편집하고 확인합니다 . 이 기능을 사용하여로 /etc/sudoers또는에 자동으로 설치 될 파일을 편집합니다 /etc/sudoders.d. 그러나 다른 파일의 정의를 찾지 못할 수 있습니다. 파일을 독립적으로 만드는 것이 가장 좋습니다.

독립형 파일을 보유 할 수 있으므로 응용 프로그램이 sudo설치시 기능 을 사용 가능하게 하고 설치 제거시이를 제거 할 수 있습니다. 자동화 된 구성 도구도이 기능을 사용할 수 있습니다.

이 기능을 사용하여 특정 시스템의 특정 사용자 그룹에 대한 액세스 권한을 부여하는 데 필요한 변경 사항을 격리했습니다.


1
언급 한 sudoers.d의 두 가지 특성은 정말 중요하고 도움이되는 것 같습니다. 감사합니다!
aob

왜 실제로 sudoers.s의 특성이 아닌지에 대한 내 대답과 경고를 참조하십시오.
dragon788

1
'파일의 실수는 sudo실패 하지 않았습니다'라는 말에 강력하게 동의하지 않습니다 . /etc/sudoers.d의 파일에서 잘못된 구문으로 RHEL에서 sudo를 중단했습니다. 이를 수정하려면 상당한 노력이 필요했으며 visudo -f이러한 파일을 편집하는 데 항상 사용하는 것이 좋습니다 .
79E09796

@ 79E09796 다른 파일의 규칙에 문제를 일으키지 않고 /etc/sudoers.d의 파일을 손상 시켰습니다. YMMV. 시스템에 들어가는 sudo 구성을 중단하면 문제가 발생합니다. 시스템을 재부트 할 수있는 권한이 있으면 복구 모드로 재부트하고 파일을 수정하는 것이 상대적으로 쉽습니다. visodo를 사용하여 sudo 구성 파일의 변경 사항을 편집하거나 확인하는 것이 가장 좋습니다.
BillThor 2016 년

62

예, visudo해당 파일을 편집하는 데 사용할 수 있습니다 . -f옵션 으로 편집 할 파일 이름을 지정하기 만하면됩니다 . 예를 들면 다음과 같습니다.

visudo -f /etc/sudoers.d/somefilename

또는 필요한 경우 :

sudo visudo -f /etc/sudoers.d/somefilename

문서

보낸 사람 man visudo:

-f sudoers
sudoers 파일 위치를 지정하고 대체합니다. 이 옵션을 사용하면 visudo는 기본 / etc / sudoers 대신 선택한 sudoers 파일을 편집 (또는 검사)합니다. 사용 된 잠금 파일은 ".tmp"가 추가 된 지정된 sudoers 파일입니다. 점검 전용 모드에서만 -f에 대한 인수는 "-"일 수 있으며, 표준 입력에서 sudoers를 읽습니다.

요약하자면:

  1. 구문 : 둘 다 visudovisudo -f 같은 구문 검사를 수행합니다 .

  2. 권한 / 소유권 : 대규모 시스템의 관리를 지원하기 위해 추가 된 기능으로 편집 된 파일의 visudo -f소유권 또는 권한을 검사하지 않습니다. 오프라인 또는 수정 제어 시스템의 일부로 파일의 구문 검사를 허용합니다.

왜 사용 /etc/sudoers.d/

일반적으로 /etc/sudoers배포판의 패키지 관리자가 제어합니다. 해당 파일을 변경하고 패키지 관리자가 파일을 업그레이드하려는 경우 변경 사항을 수동으로 검사하고 변경 사항이 새 버전으로 병합되는 방식을 승인해야합니다. 로컬 변경 사항을 /etc/sudoers.d/디렉토리 의 파일에 배치 하면이 수동 단계를 피하고 업그레이드가 자동으로 진행될 수 있습니다.

sudo의 파일을 언제 무시 /etc/sudoers합니까?

귀하의 경우 /etc/sudoers파일은 행이 포함됩니다 :

#includedir /etc/sudoers.d

그런 다음 sudo디렉토리의 파일을 읽습니다 /etc/sudoers.d.

예외는 다음과 같습니다.

  1. 이름이 끝나는 파일 ~
  2. 이름에 .문자가 포함 된 파일

이는 (a) 패키지 관리자의 편의를 위해 수행되며 (b) 편집기의 백업 파일이 무시되도록합니다.


고마워요,하지만 한 가지 의심이 있습니다. 가 visudo -f안전?
aob

5
예, visudo -fnormal처럼 안전한 방식으로 편집 visudo합니다. 이것이 우리가 가진 visudo이유와 그것이 -f옵션을 제공하는 이유 입니다.
John1024

사용 권한을 무시하는 방법에 대한 참고 사항은 -f누군가를 사용 권한 을 두 번 확인하지 않고 /etc/sudoers.d/에 복사 할 수 있기 때문에 사용 권한이 무시되는 방식에 대한 참고 사항 입니다.
dragon788

1
예외 섹션에 감사합니다. 나는 내 파일 이름을 비슷한 것으로 지정 /etc/sudoers.d/mysudorules.sudo했고 내 인생에서는 대답을 읽기 전에 내부 규칙이 적용되지 않은 이유를 알 수 없었습니다.
Zaroth

1
예외를 언급 해 주셔서 감사합니다. 아래 파일 /sudoers.d/mysite.co.uk이 작동하지 않고 이름을 바꾼 후 mysite작동합니다! :)
J86

20

왜 /etc/sudoers.d가 있습니까?

자동 도구 (예 : Chef 또는 Puppet)가 변경하기보다는 개별 파일을이 디렉토리에 놓기 /etc/sudoers가 더 쉽기 때문에 깨지기 쉽습니다.

파일 /etc/sudoers.d은 (실제로) 연결되어 있습니다. 당신은이 패턴의 여러 가지 다른 경우 볼 /etc과 같은, /etc/cron.d/etc/logrotate.d.


다른 비슷한 디렉토리가 있다는 것을 몰랐습니다. 감사합니다.
aob

14

visudo -f일부 답변에서 언급 한 바와 같이 사용 하면 얻을 수있는 또 다른 이점은 해당 옵션이 -c있거나 --checksudoers.d 파일 또는 sudoers.d에 넣을 다른 파일에 잘못된 정보가 없는지 확인한다는 것입니다. 예를 들어 다음과 같이 실행할 수 있기 때문에 자동화 도구로 언급 된 경우에 매우 편리합니다.

sudo visudo -c -q -f /home/myuser/mysudoers && \
sudo chmod 600 /home/myuser/mysudoers && \
sudo cp /home/myuser/mysudoers /etc/sudoers.d/mysudoers

이것은 자동으로 파일을 확인하고 (-q로 인한 출력 없음) 오류를 반환하지 않는 경우에만 (1은 잘못된 sudoers 파일을 의미합니다) 파일을 sudoers.d에 복사하여 파일을 만들 수 있습니다. 처음에는 제대로 만들 필요없이 작업하십시오 (사용 sudo visudo -f /etc/sudoers.d/myfile하지 않으면 내용을 삭제하거나 사용 하지 않아야 함).

또한, 다른 답변들로부터 이러한 진술들에 관한 주의단어 .

이 디렉토리의 파일에 대한 규칙이 / etc / sudoers보다 느슨하다는 것이 제 경험이었습니다. 여기에는 다음이 포함됩니다.

파일의 실수로 sudo가 실패하지 않았습니다. 그러나 파일은 무시되었습니다. 권한 규칙이 덜 엄격 해 보입니다. 해당 그룹이 파일을 읽을 수 있도록 허용합니다. 나는 그것이 / etc / sudo로 가능하다고 생각하지 않습니다.

/etc/sudoers.d의 파일은 / etc / sudoers와 동일한 구문을 준수해야합니다. 덮개 아래에서 시스템은 동일한 항목에 대해 여러 개의 항목이있는 경우 "winning"의 마지막 파일과 모든 파일을 함께 연결하기 때문입니다. 단일 설정.

/etc/sudoers.d/의 파일에 대한 사용 권한이 끔찍한 (세계 쓰기 가능) 권한 인 경우 무시됩니다. 이는 유효하지 않은 파일을 간과하는 원인 일 수 있습니다. 그렇지 않으면 sudo유효하지 않은 sudoers를 사용 하여 명령을 심각하게 중단 할 수 있습니다 . 올바른 권한을 가진 d 파일.

실수로 다른 사용자 또는 sudo로 루트 권한을 부여해야하는 '기타'쓰기 권한을 허용하는 경우 sudoers 파일을 세계에서 읽을 수 있도록 허용 할 수 있습니다. root : root 이외의 다른 사람이 파일을 소유 한 경우에도 중단 될 수 있습니다.

sudo chmod 644 /etc/sudoers.d/mysudoers
sudo chown root:root /etc/sudoers.d/mysudoers

방금 실행 chmod o+w /etc/sudoers.d/vagrant하면 더 이상 방랑자 사용자로 sudo를 할 수 없다는 것을 확인한 후 암호를 묻는 메시지가 표시되고 실패합니다.

sudo -l다른 유효한 sudo 사용자로 적용된 명령 권한을 보려고 실행했을 때 파일 권한에 대한 경고도 받았습니다. 이것은 사용자에게 sudo o+w권한을 부여하는 파일 에 권한을 적용 할 때 'vagrant'사용자가 sudo를 잃어 버렸음을 확인하는 데 사용한 명령과 동일 합니다.


3

일반적인 답변에 대한 짧은 추가 기능 ... 다른 답변 중 어느 것도 내 문제를 해결하지 못했습니다.이 순서는 중요했습니다.

행이 sudoers에서 작동하지만 sudoers.d가 아닌 경우 #include를 이동하거나 sudoers.d 파일의 순서를 변경하십시오 (숫자 접두사로). 가장 구체적인 것은 파일에서 첫 번째 것이어야합니다.

나는 다음과 같은 것을 가지고 있었다 :

somebody ALL=(ALL): somecommand
somebody ALL=(someoneelse) NOPASSWD: somecommand

두 번째 것은 이미 일치했기 때문에 아무런 효과가 없었습니다. NOPASSWD는 조건이 아니라 조치를 수정하는 방법입니다.

그리고 sudoers.d 디렉토리로 인해 단일 파일에 없기 때문에 분명하지 않았습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.