hack のためのネタ帳, etc,,,

状況

WPAD で proxy を提供されてる環境で、ユーザー環境では WPAD や IWebProxy.GetProxy() で proxy の自力解決をして環境変数に自動設定するよう細工をしてるんだけど、apt 等で sudo する proxy の環境変数が渡らずいろいろと面倒でいけない。
apt で WPAD や PAC 処理できないものかと「apt proxy PAC」でググってみたところ、以下のページを見つけた。

WPAD や PAC を直接処理するわけじゃないんだけど、/etc/sudoers に
Defaults	env_keep+="http_proxy https_proxy no_proxy"
渡しとけば、ユーザー環境の proxy 関連の環境変数を sudo に引き継げるぞとのこと。

という事で自動設定スクリプト作った。
_ ()
#   Export proxy to sudo
{
  local f="/etc/sudoers"; f=( "$f"{,$(date -r "$f" +,%Y%m%d_%H%M%S)} )
  local s=$'Defaults\tenv_keep+="ftp_proxy http_proxy https_proxy no_proxy"'
  sudo grep -a "$s" "$f" || {
    sudo cp -av "${f[@]}"
    sudo awk -vs="$s" '/^Defaults/{a=1;n--}{n+=a}n==1{print s}1' "${f[1]}" | sudo tee "$f" >/dev/null
  }
  unset -f "$FUNCNAME"
}
_
↓ one liner 版
_ () { local f="/etc/sudoers"; f=( "$f"{,$(date -r "$f" +,%Y%m%d_%H%M%S)} ); local s=$'Defaults\tenv_keep+="ftp_proxy http_proxy https_proxy no_proxy"'; sudo grep -a "$s" "$f" || { sudo cp -av "${f[@]}"; sudo awk -vs="$s" '/^Defaults/{a=1;n--}{n+=a}n==1{print s}1' "${f[1]}" | sudo tee "$f" >/dev/null; }; unset -f "$FUNCNAME"; }; _

2022-04-07: 追記

ふと気が付いたのだが、あれ? 昨日これやってる最中 TAB で入力補間した際に /etc/sudoers.d とかちょくちょく出て来てなかったか? と。
確認してみると、
  • /etc/sudoers.d/README
や manpage に説明があった。
曰く、
  • Debian version 1.7.2p1-1 で標準の /etc/sudoers に「#includedir /etc/sudoers.d」ディレクティブが追加されたよ。
  • 末尾が ~ または . を含むファイルは処理対象外だよ。
と。

Debian 言われてるけど、Ubuntu 20.04.3 LTS もこれに該当する。
「#includedir」の頭の # は一見コメントのようだが、これも含めてディレクティブなんだそうな。

という事で、上記のように /etc/sudoers 書き換える必要は全くなくて、以下のようにするだけで良かったという落ちが付いたのであった。
sudo tee /etc/sudoers.d/inherit_proxy <<<$'Defaults\tenv_keep+="ftp_proxy http_proxy https_proxy no_proxy"'
sudo chmod 440 /etc/sudoers.d/inherit_proxy

/2022-04-07: 追記

2022-04-18: 追記

文字数最適化の試行錯誤

結果
sudo sh -c 'printf $@>$0;chmod 440 $0' /etc/sudoers.d/inherit_proxy 'Defaults\tenv_keep+=%s_proxy\n' {f,ht}tp{,s} no
/2022-04-18: 追記

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Wiki内検索

フリーエリア

管理人/副管理人のみ編集できます