sudo의 #include 및 #includedir 지시어 앞에 파운드(#) 문자가 붙는 이유는 무엇입니까?

sudo의 #include 및 #includedir 지시어 앞에 파운드(#) 문자가 붙는 이유는 무엇입니까?

환경을 설정하는 동안 sudoinclude 지시문 앞에 파운드(#) 문자가 붙는 것을 발견했습니다.

Solaris는 이를 다음과 같이 표시합니다.

## Read drop-in files from /etc/sudoers.d
## (the '#' here does not indicate a comment)
#includedir /etc/sudoers.d

설명서(Linux 및 Solaris)에는 다음과 같이 명시되어 있습니다.

sudoers에 다른 파일 포함 #include 및 #includedir 지시문을 사용하여 현재 구문 분석 중인 sudoers 파일 내에 다른 sudoers 파일을 포함할 수 있습니다.

그리고:

기타 특수 문자 및 예약어 파운드 기호('#')는 주석을 표시하는 데 사용됩니다(#include 지시문의 일부이거나 사용자 이름의 컨텍스트에서 발생하고 뒤에 하나 이상의 숫자가 나오지 않는 한). 이 경우 uid로 처리됩니다. 주석 문자와 그 뒤의 모든 텍스트(줄 끝까지)는 무시됩니다.

#includeand 지시문에서 파운드 문자를 사용하기로 선택한 이유를 아는 사람이 있습니까 #includedir?

참고로 저는 기본이 아닌/활성 구성 설정을 얻기 위해 비슷한 접근 방식을 자주 사용하는데 , 이는 분명히 이 파일 egrep -v '^#|^$' configfile에서는 작동하지 않습니다 .sudoers

답변1

#include가입하다2004년. 기존 콘텐츠와 호환되어야 합니다. 하지만 모호하다고 생각하지는 않지만 파서가 (지시문 포함)과 (사용자가 명령을 실행하도록 허용 ) include /path/to/file을 구별해야 하기 때문에 파싱하기가 약간 어려울 수 있습니다 .include /path/to/fileinclude = fooincludefoo

하지만 가장 큰 이유는 C 전처리기와 비슷하기 때문이라고 생각합니다.수동영감으로 명시적으로 인용되었습니다.

답변2

참고로 저는 종종 egrep -v '^#|^$' configfile과 같은 것을 사용하여 기본이 아닌/활성 구성 설정을 가져오는데, 이는 분명히 sudoers 파일에서는 작동하지 않습니다.

이 시작됩니다sudo 버전 1.9.1지원으로 @include추가 @includedir되었습니다."덜 혼잡함".

@include 및 @includedir에 대한 지원 추가

해시 문자가 주석 문자이기도 하면 #include 및 #includedir보다 더 혼란스럽습니다.

또한 이 커밋은 이전에 사용된 순수 어휘분석기 접근 방식이 아닌 include 지시문의 실제 구문 분석을 추가합니다. 따라서 이제 큰따옴표로 묶인 문자열을 사용하거나 백슬래시로 공백 문자를 이스케이프 처리하여 공백이 있는 파일을 포함할 수 있습니다.

사용 #include하고 #includedir있습니다예약하다1.9.1 이전 버전과의 호환성을 위해.

관련 정보