를 실행할 때 sudo
2가지 예외를 제외하고 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에서 와일드카드를 구문 분석하는 방식의 제한일 수도 있습니다. -=
이 줄은 일치하는 전체 변수 집합으로 확장되기 전에 관련 없는 것으로 삭제됩니다.*