Help us understand the problem. What is going on with this article?

【Ubuntu】sudoする際にPATHをどう引き継ぐか

More than 5 years have passed since last update.

はじめに

最近の Ubuntu では標準で sudoers に secure_path が指定されており、
sudo する時の PATH が secure_path で上書きされます。

PATH に関しては sudo -E のようにオプションをつけても引き継がれず、
sudoers に Defaults env_keep += "PATH" などと記述してもダメです。

しかし、開発用サーバーなどでは PATH も引き継いで
気軽にコマンドを叩きたいこともあるでしょう。

そんな時の対処法をメモしておきます。

対処方法

suders で exempt_group を指定します。

sudoers
# '%' はつけずにスペース区切りで列挙
Defaults exempt_group="GROUP1 GROUP2 ..."

exempt_group に指定されたグループに所属するユーザーは、
secure_path による PATH の制限、およびパスワード入力が免除されます。

ここに admin や sudo グループを指定してしまっては元も子もないので、
「特別な開発者ユーザー」を表すグループを定義しておくと良いかと思います。

sudo groupadd developer
sudo gpasswd --add USERNAME developer
sudo visudo
sudoers
Defaults exempt_group="developer"

良くない方法

PATH を生かす方法はいくつかありますが exempt_group 以外の方法は
いずれも影響範囲が大きすぎたり、やっつけな対症療法だったりするので
好ましくないようです。

  • Defaults !secure_path で secure_path を無効化する
  • secure_path の行をコメントアウトして無効化する
  • secure_path に手動で実パスを追記する

参考リンク

hidekuro
雑食。私がQiitaで公開する独自コードは、特に記載がない限り CC0 https://creativecommons.org/publicdomain/zero/1.0/deed.ja とします。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away