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 -Vrootとして実行すると、ルールにいくつかの例外を設定する試みが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"

ただし、ワイルドカード式から除外したい2つの変数はまだ除外されません。

-=ワイルドカードなしでand演算子をより簡単に使用すると、+=次のように期待どおりに機能します。

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

したがって、これはsudoerがワイルドカードを解析する方法の制限である可能性があります。-=この行は、一致する変数全体に展開される前に無関係に削除されます。*

ベストアンサー1

おすすめ記事