지난번에 나는 다음과 같은 위험에 대해 물었습니다 /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
?
답변1
/etc/sudoers.d
시스템을 업그레이드해도 파일에 대한 변경 사항은 그대로 유지됩니다. 이렇게 하면 시스템이 업그레이드될 때 사용자 잠금을 방지할 수 있습니다. 우분투는 이런 행동을 좋아하는 경향이 있습니다. 다른 배포판에서도 이 레이아웃을 사용하고 있습니다.
내 경험에 따르면 이 디렉토리의 파일에 대한 규칙은 /etc/sudoers
. 여기에는 다음이 포함됩니다.
- 파일의 실수
sudo
로 인해 오류가 발생하지 않았습니다. 그러나 파일은 무시되었습니다. - 권한 규칙은 덜 엄격해 보입니다. 해당 그룹이나 다른 사람이 파일을 읽을 수 있도록 허용합니다. 나는 그것이 가능하다고 믿지 않습니다
/etc/sudoers
. 보안을 유지하려면 쓰기 권한을 으로 제한해야 합니다root
. 현재 Ubuntu 버전의 sudo는 그룹 또는 기타에 대한 읽기 권한을 허용합니다. (이 기능을 사용하면 루트 액세스 없이도 sudo 액세스를 감사할 수 있습니다.)
명령 visudo
의 기본값은 /etc/sudoers
. 옵션 으로 지정한 파일을 편집하고 확인합니다 -f
. 나는 이 기능을 사용하여 자동 /etc/sudoers
으로 설치될 파일을 편집합니다 /etc/sudoders.d
. 그러나 다른 파일의 정의는 찾을 수 없습니다. 파일을 독립적으로 만드는 것이 가장 좋습니다.
독립 실행형 파일을 갖는 기능을 사용하면 응용 프로그램이 sudo
설치 시 기능을 활성화하고 제거 시 해당 파일을 제거하는 것이 간단해집니다. 자동화된 구성 도구에서도 이 기능을 사용할 수 있습니다.
나는 이 기능을 사용하여 특정 시스템의 특정 사용자 그룹에 대한 액세스 권한을 부여하는 데 필요한 변경 사항을 격리했습니다.
답변2
예, 해당 파일을 편집하는 데 사용할 수 있습니다 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에 대한 인수는 "-"일 수 있으며 이는 표준 입력에서 sudoer를 읽음을 나타냅니다.
요약하자면:
통사론:둘다
visudo
visudo -f
동일한 구문 검사를 수행합니다..권한/소유권: 추가된 기능으로대규모 시스템의 관리를 지원하기 위해, 아래에서 편집된 파일은
visudo -f
소유권이나 권한을 확인하지 않습니다. 이를 통해 오프라인으로 또는 개정 제어 시스템의 일부로 파일의 구문을 확인할 수 있습니다.
왜 사용합니까?/etc/sudoers.d/
일반적으로 /etc/sudoers
배포판 패키지 관리자의 제어를 받습니다. 해당 파일을 변경했고 패키지 관리자가 이를 업그레이드하려는 경우 변경 사항을 수동으로 검사하고 새 버전에 병합되는 방법을 승인해야 합니다. 로컬 변경 사항을 디렉터리의 파일에 저장하면 /etc/sudoers.d/
이 수동 단계를 피할 수 있으며 업그레이드가 자동으로 진행될 수 있습니다.
는 언제 sudo
파일을 무시 합니까 /etc/sudoers
?
파일에 다음 줄이 포함되어 있는 경우 /etc/sudoers
:
#includedir /etc/sudoers.d
그런 다음 sudo
디렉토리의 파일을 읽습니다 /etc/sudoers.d
.
예외는 다음과 같습니다:
- 이름이 다음으로 끝나는 파일
~
- 이름에
.
문자가 포함된 파일
이는 (a) 패키지 관리자의 편의를 위해 그리고 또한 (b) 편집기의 백업 파일이 무시되도록 수행됩니다.
중요한:mysudo.conf
위의 예외 2는 매우 일반적인 것으로, 또는 같은 합리적인 파일 이름이 이름에 있기 mysudo.txt
때문에 무시된다는 것을 의미합니다..
답변3
왜 /etc/sudoers.d가 있나요?
/etc/sudoers
취약할 수 있는 을 변경하는 것보다 자동화된 도구(예: Chef 또는 Puppet)를 사용하여 개별 파일을 이 디렉터리에 놓는 것이 더 쉽기 때문입니다 .
의 파일은 /etc/sudoers.d
(사실상) 연결되어 있습니다. 및 /etc
등에서 이 패턴의 다른 여러 인스턴스를 볼 수 있습니다 ./etc/cron.d
/etc/logrotate.d
답변4
일반적인 답변에 대한 짧은 추가 기능입니다. 다른 답변 중 어느 것도 내 문제를 해결하지 못했습니다. 즉, 순서가 중요합니다.
라인이 sudoers에서는 작동하지만 sudoers.d에서는 작동하지 않는 경우 #include를 이동하거나 sudoers.d 파일의 순서를 변경해 보십시오(접두사에 숫자를 추가하여). 파일에서 가장 구체적인 내용이 먼저 나와야 할 것 같습니다.
나는 다음과 같은 것을 가지고있었습니다 :
somebody ALL=(ALL): somecommand
somebody ALL=(someoneelse) NOPASSWD: somecommand
그리고 두 번째 것은 첫 번째가 이미 일치했기 때문에 아무런 효과가 없었습니다. NOPASSWD는 조건이 아니지만 작업을 수정하는 방법입니다.
그리고 sudoers.d 디렉터리로 인해 단일 파일에 있지 않았기 때문에 명확하지 않았습니다.