Sudoers env_keep 와일드카드 표현식(예외 포함)

Sudoers env_keep 와일드카드 표현식(예외 포함)

를 실행할 때 sudo2가지 예외를 제외하고 Borg 백업 프로그램과 관련된 모든 환경 변수를 보존하려고 했습니다.

env_keep내 sudoers config에서 (활성화)를 사용하면 env_reset이것이 지금까지 가지고 있는 것입니다.

Defaults env_keep += "BORG_*"

Defaults env_keep -= "BORG_CACHE_DIR BORG_SECURITY_DIR"

이로 인해 모든 BORG_*변수(예: BORG_REPO)가 유지되지만 제외하려는 변수(BORG_CACHE_DIR 및 BORG_SECURITY_DIR)도 유지됩니다. 이것이 작동하지 않는 이유와 내가하려는 일을 달성하는 방법을 알려주는 사람이 있습니까?


추가 정보

sudo -l규칙을 읽었는지 확인하려면 다음을 실행하세요 .

Matching Defaults entries for ...:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin,
    passwd_timeout=2, env_keep+="SSH_CLIENT SSH_CONNECTION SSH_TTY SSH_AUTH_SOCK",
    env_keep+=BORG_*, env_keep-="BORG_CACHE_DIR BORG_SECURITY_DIR"

그러나 sudo -V루트로 실행하면 규칙에 일부 예외를 설정하려는 시도가 env_keep아직 인식되지 않았음 을 확인하는 것 같습니다 sudo.

...
Reset the environment to a default set of variables
Environment variables to check for safety:
    TZ
    TERM
...
Environment variables to remove:
    *=()*
    RUBYOPT
    RUBYLIB
... (nothing BORG related) ...
    IFS
Environment variables to preserve:
    BORG_*
    SSH_AUTH_SOCK
    SSH_TTY
... (nothing else BORG related) ...

추가 시도

연산자 사용에 대한 의견에서 Steeldriver의 제안에 따라 !위 대신 sudoers에서 이 줄을 사용해 보았습니다.

Defaults env_keep += "BORG_* !BORG_CACHE_DIR !BORG_SECURITY_DIR"

그러나 와일드카드 표현식에서 제외하려는 두 변수는 여전히 제외되지 않습니다.

-=와일드카드 없이 and 연산자를 더 간단하게 사용하면 +=다음과 같이 예상대로 작동합니다.

Defaults env_keep += "BORG_REPO BORG_LOGGING_CONF BORG_CONFIG_DIR BORG_CACHE_DIR"
Defaults env_keep -= "BORG_CACHE_DIR"

따라서 이는 sudoer에서 와일드카드를 구문 분석하는 방식의 제한일 수도 있습니다. -=이 줄은 일치하는 전체 변수 집합으로 확장되기 전에 관련 없는 것으로 삭제됩니다.*

관련 정보