sudo를 하기 전에 sudo 기능을 확인할 수 있나요?

sudo를 하기 전에 sudo 기능을 확인할 수 있나요?

저는 작은 유틸리티 프로그램을 작성 중입니다. 필요한 경우 sudo뭔가를 실행 하려고 합니다.

즉, 파일 권한이 현재 사용자가 특정 파일에 대해 작업하는 것을 허용하지 않는 경우(그리고 sudo규칙이 이를 허용하는 경우) 내 유틸리티가 sudo파일 소유자로서 무언가를 실행하기를 원합니다.

시스템 로그가 sudo실패한 시도의 소음으로 가득 차지 않기를 바라기 때문에 이 기능을 미리 확인해보고 싶었습니다. sudo실패 시 자체적으로 보고된 대로 : "이 이벤트가 보고됩니다."

따라서 프로그래밍 방식으로 확인하고 싶습니다.user <x>통과 될 수 있나요 ?command <y>sudo

문제는 /etc/sudoers매핑이 포함되어 있지만 루트가 소유하므로 일반 사용자가 읽을 수 없다는 것입니다.

실행할 하위 프로세스를 생성하려고 합니다 sudo -l(현재 사용자가 sudo 실행할 수 있는 명령을 출력함). 그런 다음 출력을 구문 분석하겠습니다. 다만, 이건 좀 취약한 것 같습니다. 출력에는 내가 원하는 정보가 포함되어 있지만 사람이 읽을 수 있도록 설계된 것 같습니다(프로그래밍 방식으로 소비하는 것이 아님). 향후 출력이 동일한 형식을 따르거나 다른 플랫폼에 걸쳐 보장될 수 있는지는 알 수 없습니다.

프로그래밍 방식으로 출력을 구문 분석하는 것이 sudo -l안전한 것으로 간주됩니까 ? 그렇지 않은 경우 sudo 명령의 성공 여부를 미리 결정하는 더 좋은 옵션이 있습니까?


(관련 sudo 규칙에 대한 배경)

답변1

sudo 매뉴얼 페이지에 따르면:

 -l, --list  If no command is specified, list the allowed (and forbidden)
             commands for the invoking user (or the user specified by the
             -U option) on the current host.  A longer list format is used
             if this option is specified multiple times and the security
             policy supports a verbose output format.

             If a command is specified and is permitted by the security
             policy, the fully-qualified path to the command is displayed
             along with any command line arguments.  If command is
             specified but not allowed, sudo will exit with a status value
             of 1.

그래서 이것은 다음과 같이 요약됩니다.

if sudo -l -U $USER shutdown > /dev/null
then
   ## $USER can
else
   ## $USER cannot
fi 

Muru가 지적했듯이 필요에 따라 사용하거나 사용하지 마십시오 -U $USER.-U $USERTOTEST

관련 정보