sudo時のPATHと設定

chefを使うとき、chef-solo実行時だけrootになってそれ以外のときは出来るだけchefユーザとして作業したかった。

最近のsudoはデフォルトではPATHは引き継がれない。設定と設定によってはオプションが必要。


よく見るのはsudo実行時に"-E"オプションをつけるか、sudoersにこの1行を加えるというもの。

Defaults    env_keep += "PATH"


しかし、最近は以下の記述があるため、ここのPATHはうまく機能しない。

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin


機能させたい場合は知るところでは2種類あって、

  1. secure_path をコメントアウト
  2. exempt_group を追加する

というもの。

secure_path

ここに記述された信頼できるPATHのみ追加できるようにする設定。

ただ、設定すると全ユーザに制限が適用されてしまうし、コメントアウトすると全ユーザがやりたい放題になるかもしれない。

(sudoresに登録するユーザが全て信頼できるなら別だけど。)

一部のユーザだけ例外にしたいという要望もあるはず。それが次。

exempt_group

グループを指定するとそのグループのユーザーは、パスワード入力の省略やsecure_pathの制限を回避することができるようになる。

例えばグループchefにのみsecure_pathの制限を受けないようにしたい場合。

Defaults exempt_group += chef

後は、env_keep += "PATH"を設定するか、sudo -E で実行するかすれば、

そのグループの人はsecure_pathの影響を受けずにPATHを引き継ぐことができ、実行することができる。


secure_pathは設定しておき、exempt_groupで信頼できるグループのみを登録する感じのほうがセキュアになりそうだし、管理もラクだと思う。