sudoers 규칙의 명령 인자에 *를 사용하면 단순한 파일명 접미사뿐 아니라 공백을 포함한 연결된 인자 문자열의 범위까지 매칭할 수 있습니다. 따라서 /var/log/messages*가 붙은 정책을 ‘messages 계열 한 파일만 허용’이라고 단정하면 안 됩니다.
이 글은 sudoers 매뉴얼의 와일드카드 동작을 해석하는 방어 교육 자료입니다. 운영 설정을 수정하거나 실제 권한 검사를 실행하지 않으며, 예시 경로와 정책은 교육용으로 새로 만들었습니다.
명령 파일명과 인자 패턴은 다르게 해석합니다
sudoers 규칙은 어떤 실행 파일을 허용할지와 그 실행 파일에 어떤 인자를 붙일지를 각각 제한할 수 있습니다. 실행 파일 경로 안의 와일드카드는 경로 구분자 처리 같은 별도 규칙이 있을 수 있지만, 명령 인자는 공백을 포함한 임의의 문자열과 매칭될 수 있습니다. 따라서 /usr/bin/cat이라는 파일을 지정했다는 사실만으로 안전한 정책이 되는 것은 아닙니다. 함께 지정한 인자 패턴이 어디까지 맞는지 따로 읽어야 합니다.
교육용 정책 한 줄의 경계가 넓어지는 이유
| 규칙 조각 | 검토 질문 | 주의할 결론 |
|---|---|---|
| /usr/bin/cat /var/log/app* | 별표가 어떤 문자열까지 허용하나? | 연결된 인자 안에서 공백을 넘을 수 있음 |
| /var/log/app-current.log | 예상한 단일 파일 예시인가? | 정책 설명만으로 이 입력에 한정된다고 보장할 수 없음 |
| /var/log/app-current.log /var/log/audit/summary.log | 추가 경로가 붙어도 매칭되나? | 공백 포함 인자 매칭이 의도보다 넓을 수 있음 |
sudoers 매뉴얼은 명령행 인자를 하나의 연결된 문자열로 비교하며, 별표가 공백을 포함해 여러 문자와 맞을 수 있다고 설명합니다. 위 예시는 ‘어떤 실행을 해 보라’는 지시가 아닙니다. 정책을 읽을 때 규칙의 별표가 의도한 단일 로그 이름뿐 아니라 다른 인자 조합도 포함할 수 있는지 질문하라는 표시입니다. 승인된 설정 검토자는 안전한 검증 절차와 정책 도구를 사용하고, 여기서 실제 계정 권한을 확인하지 않습니다.
권한 범위를 줄이려면 입력 처리 책임도 따져 봅니다
- 규칙에 적힌 실행 파일의 절대 경로를 확인합니다.
- 인자가 생략됐는지, 특정 문자열로 제한됐는지, 와일드카드가 있는지 표시합니다.
- 공백·슬래시·여러 단어가 포함된 입력도 매칭될 수 있는지 공식 매뉴얼과 정책 검토 도구로 따져 봅니다.
- 업무가 특정 로그 파일 집합이라면 그 집합을 안전하게 고정할 별도 방식이 있는지 운영자가 설계합니다.
- 검토 결과와 예외 승인을 기록하고 변경 뒤에는 승인된 테스트 계획으로 재확인합니다.
sudoers 문법만으로 복잡한 입력 검증을 구현하려 하면 의도가 애매해질 수 있습니다. 공식 매뉴얼은 비단순 인자 처리를 별도 스크립트로 수행하는 편이 더 안전한 경우를 설명합니다. 이 권고 역시 만능 해결책은 아닙니다. 스크립트의 소유자·쓰기 권한·인자 처리·실행 환경이 적절해야 하고, 그 검토와 승인 책임은 시스템 운영자에게 있습니다.
사용자에게 보이는 권한 목록은 출발점입니다
sudo의 -l 기능은 현재 정책이 보여 주는 허용 명령을 살펴볼 때 쓸 수 있는 확인 단서입니다. 하지만 권한 목록 한 번을 읽었다고 모든 호스트 조건, 별칭, 포함 파일, 정책 플러그인, 버전별 세부가 해결되지는 않습니다. 특히 sudoers 규칙은 포함 파일과 태그, 실행 계정, 호스트 조건을 함께 읽어야 합니다. 문제에 제공된 규칙을 단순화해 풀이한다면 그 가정이 실제 시스템을 전부 설명한다고 확대하지 마세요.
쉘 따옴표가 sudoers 와일드카드 경계를 좁힌다고 착각하지 않습니다
흔한 실수는 와일드카드가 쉘에서 파일명으로 확장되는 동작과 sudoers의 정책 매칭을 같은 단계로 보는 것입니다. 두 과정은 구분해야 합니다. 쉘이 어떤 인자를 만들었는지와 sudo 정책이 그 인자 목록을 어떻게 비교하는지는 각각 다른 문제입니다. 사용자가 따옴표를 입력했는지 여부만으로 sudoers 쪽 허용 범위가 자동으로 좁아진다고 말할 수 없습니다. 해당 sudo 버전의 매뉴얼과 실제 정책 구문을 확인해야 합니다.
정책 예시에서 허용 범위를 문장으로 바꿔 말합니다
정답을 쓸 때 ‘*는 여러 문자’만 적지 말고, ‘명령 인자에 쓰인 와일드카드는 공백을 포함한 연결 문자열 경계를 넘을 수 있으므로 의도한 대상보다 넓은 호출을 허용할 수 있다’고 설명하세요. 그 다음 예상한 단일 경로와 추가 인자가 포함된 경우를 비교합니다. 추가 범위를 배제할 근거가 없으면 좁게 허용한다고 단정하지 말고 위험을 검토 대상으로 남깁니다.
정답을 가리고 확인해 보세요
이 글을 위해 만든 학습 예시이며 공식 기출문제나 판매 카드의 인용이 아닙니다.
sudoers의 인자 패턴 /var/log/app*를 ‘app으로 시작하는 파일 하나만 허용’한다고 바로 결론 내릴 수 있나요?
정답과 해설 확인
아니요. sudoers의 인자 와일드카드는 공백을 포함한 연결된 인자 문자열과 매칭될 수 있어 추가 인자까지 포함하는지 확인해야 합니다.sudoers 매뉴얼은 명령 인자를 연결된 문자열로 비교하고, *가 공백을 포함한 여러 문자와 맞을 수 있다고 설명합니다. 따라서 단일 파일로 제한된다고 가정하지 말고 정확한 버전과 정책 조건을 검토합니다.