서비스 사용자가 대화 상자 스크립트를 통해 파일을 검색할 수 있도록 허용하고 싶지만 정규 표현식이 포함된 명령 하나만 허용되도록 sudoers를 통해 find 명령을 잠그고 싶습니다.
이 정확한 명령은 sudoers에서만 허용되어야 하며 다른 명령은 허용되지 않습니다(특히 find의 -delete 및 -exec 기능이 걱정됩니다).
operator ALL=NOPASSWD:/bin/find / -type f -regex ".*/core.[0-9]*$"
하지만 sudoers glob이 정규식 패턴으로 인해 엉망이 된 것 같습니다. 정규식 패턴을 탈출하려고 시도했지만 sudo는 항상 비밀번호를 묻습니다.
전체 "잠금"을 스크립트로 이동하고 sudo가 쓰기 권한으로만 스크립트를 실행하도록 허용하는 것은 배포 프로세스를 복잡하게 만드는 SVN 루틴을 통해 이 대화 상자 스크립트를 업데이트하기 때문에 루트 사용자에게는 옵션이 아닙니다.
답변1
정규식을 플래그 인수로 사용하고 있으므로 정규식이 지원되지 않더라도 쉘 와일드카드와 같은 와일드카드만 지원됩니다( find
참조sudoers
매뉴얼 페이지) 그래서 당신이 시도하는 접근 방식은 개념적으로 타당해 보입니다.
적어도 GNU bash 4.x 이상의 경우 -regex 기본 모드의 구문은 EMACS 정규식 구문입니다. 미묘한 차이가 있을 수 있습니다(알려면 조사해야 합니다). 예를 들어, 유틸리티 정규식 구문 과 같이 더 친숙할 수 있는 항목이 있습니다 sed
. RHEL을 사용하는 경우 이에 대한 문서를 다시 확인하세요. 상황이 약간 다를 수 있습니다... 어쨌든 다음과 같이 언제든지 지정할 수 있습니다.awk
grep
operator ALL=NOPASSWD: /usr/bin/find -type f -regextype grep -regex ".*core\.[0-9]*$"
...일반 파일을 의미합니다.현재 디렉터리에서 아래로, 하나 이상의 임의 문자로 시작하고 그 뒤에 문자열 "core."가 오고 하나 이상의 숫자로 끝납니다.
다시 말하지만, 이것이 당신이 원하는 것입니까?
그렇지 않다면, 정규식으로 원하는 작업을 일반 영어로 명시하거나 캡처하려는 내용에 대한 몇 가지 중요한 예를 제공하면 적절한 GNU 스타일 grep 스타일 정규식으로 번역할 수 있습니다.
친절한 팁:
- 다양한 플랫폼에서 동일한 규칙을 사용 하려면
sudoers
위에 표시된 대로 적용하려는 정규식 구문 유형을 체계적으로 지정하는 것이 좋습니다. - 의 맥락에서는
sudoers
항상 검색을 수행하려는 경로를 지정합니다.-path
검색할 하위 트리의 최상위 하위 트리에 대한 절대 경로 뒤에 이 플래그를 사용하십시오 .
======================
전체적으로 가독성과 보안상의 이유로 를 처리할 때 일반적으로 인수를 허용하지 않는 권한 751을 사용하여 이라는 이름의 , 소유 한 과 같은 cmd sudoers
에 대한 find
최소 래퍼 스크립트를 작성하는 것이 좋습니다 ( 를 사용하여 ).findcore.sh
root:root
""
operator ALL=NOPASSWD: /path/to/findcore.sh ""
그런 다음 선호하는 메커니즘을 통해 수행되는 업데이트에 대해 특별히 sudo
파일에 두 번째 규칙을 포함시켜 SVN 또는 기타 비밀번호 없는 메커니즘을 통해 스크립트 내용을 쉽게 업데이트할 수 있습니다 .sudoers
화타이