sudoer의 프로그램 매개변수에 대한 엄격한 조건

sudoer의 프로그램 매개변수에 대한 엄격한 조건

sudoers는 정규식을 지원하지 않기 때문에 아래 예에서 내가 한 일을 누군가가 수행했습니까, 아니면 이것이 나쁜 것입니까?

user ALL = (root) NOPASSWD: /bin/program [0-9],\
                            /bin/program [0-9][0-9],\
                            /bin/program [0-9][0-9][0-9],\
                            /bin/program [0-9][0-9][0-9][0-9]

답변1

아니요, "나쁜" 것은 아닙니다.

당신이 가지고 있는 것은 잘 작동해야 하지만 일반적으로 매개변수를 확인하는 래퍼 스크립트를 작성하는 것이 더 좋습니다. 예를 들면 다음과 같습니다 /etc/sudoers.

user ALL = (root) NOPASSWD: /usr/local/bin/suprogram

그리고 다음과 같은 것 /usr/local/bin/suprogram:

#!/bin/bash

if [[ $1 =~ ^[0-9]{1,4}$ ]]; then
  exec program "$1"
else
  echo "Bad argument, only 1 to 4 digits allowed"
fi

이는 더 많은 매개변수를 허용하고 확인하도록 확장될 수 있습니다(예를 들어, 파일 이름 매개변수가 특정 디렉토리 내에 있는지 또는 특정 패턴과 일치하는지 확인하거나 특정 옵션이 sudo 프로그램에 전달되는 것을 허용하지 않는 등).

쉘 스크립트에서 수행할 수 있는 모든 작업(awk, sed, Perl 및 기타 도구 실행 포함)을 사용하여 sudo로 실행되는 프로그램에 전달하는 인수를 검증하고 정리할 수 있습니다.

확인은 매개변수에만 국한되지 않습니다. uid, gid, 사용자가 로컬로 또는 ssh를 통해 로그인했는지 여부, 날짜, 시간, 네트워크 상태, 데몬 상태, 여유 디스크 공간, 문 페이즈 등을 확인할 수 있습니다.

관련 정보