Alex와 Alexa라는 두 명의 사용자가 있다고 가정해 보겠습니다. 우리는 htop
디스크 사용 통계를 보기 위해 Alex가 루트로 실행되도록 허용하고 싶지만 루트가 할 수 있는 다른 사용자의 프로세스를 보는 것을 원하지 않습니다. 그런 다음 플래그를 자신의 사용자 이름 htop
으로 실행하도록 허용해야 합니다.-u
(중요한 참고 사항: @HBruijn이 언급한 것처럼 사용자 플래그를 지정해도 htop
실행기가 U 키로 사용자 필터를 변경하는 것을 막지는 못합니다. 플래그가 문제를 설명하기 위해 실행기를 제한한다고 가정해 보겠습니다.). 그러나 마지막으로 지정된 -u
인수가 인지 확인해야 하며 alex
, 마지막으로 지정된 인수가 되도록 강제하고 싶지도 않습니다. 정규 표현식은 다음과 같습니다.
^.*(--user=alex|-u alex)\b((?!-u).)*$
^
문자열 시작을 나타냅니다.(--user=alex|-u alex)
-u
- 매개변수 에 대한 캡처 그룹\b
- 단어 경계(알렉스가 지정할 수 없음-u alexa
)((?!-u).)*
-u
- 유효한 패스(-u alex
)가 전달된 후 모든 패스를 거부하는 부정적인 예측
그리고 우리는 그것을 파일에 씁니다 /etc/sudoers
:
echo "alex ALL=(ALL) NOPASSWD: /usr/bin/htop ^.*(--user=alex|-u alex)\b((?!-u).)*$" >> /etc/sudoers
그러나 Alex가 일반 명령을 실행하려고 하면 sudo는 이를 거부합니다.
$ sudo /usr/bin/htop -u alex
[sudo] password for alex:
Sorry, user alex is not allowed to execute '/usr/bin/htop -u alex' as root on machine.
정규 표현식을 확인할 때 egrep
(Sudo 문서에는 정규 표현식을 통해 문자열을 검증하는 방법과 유사하다고 명시되어 있음) 예상대로 작동합니다.
$ echo '-u alex' | egrep '^.*(--user=alex|-u alex)\b((?!-u).)*$'
-u alex
해당 일치 항목을 무시하는 sudo 동작의 원인은 무엇입니까? Ubuntu 22.04, Sudo 1.9.14p3을 사용합니다.