LoginSignup
193
173

More than 5 years have passed since last update.

sudo時にPATHを引き継ぐ方法

Last updated at Posted at 2014-08-26

背景

sudoしたときにせっかく設定したrubyやらrubygemが見つからないよって、言われて嫌な気持ちになったので対処方法を残しておく、

以下環境情報。

  • ubuntu: 12.04

デフォルト設定

デフォルトの設定ではsudo実行ユーザのPATHは引き継がれずに、ユーザ固有のPATHに指定したコマンドは失敗する。

path_not_found
$ gem list | head -5
bigdecimal (1.2.4)
fluent-logger (0.4.9)
hirb (0.7.2)
httpclient (2.3.4.1)
io-console (0.4.2)
$ sudo gem list | head -5
sudo: gem: command not found
$ env | grep PATH
PATH=/usr/local/rbenv/shims:/usr/local/rbenv/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
$ sudo env | grep PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

これはデフォルトの/etc/sudoersが以下のようにsecurity_pathを指定してPATHを固定しているため。

/etc/sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#

Defaults    env_reset
Defaults    secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

# Host alias specification

設定変更

visudoコマンドで以下のようにsecure_pathをコメントアウトして、env_keepPATHを追加すれば、sudo実行ユーザが使っていたコマンドが使えるようになる。

visudo(/etc/sudoers)
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#

Defaults    env_reset
#Defaults   secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Defaults    env_keep += "PATH"

env_keepにはPATHだけでなく環境変数で指定しているものはなんでも入れて良さげ。

ここで注意することは、PATHを引き継いでしまうとsecurity_pathで指定されていた/sbinなどの管理系のコマンドのPATHが設定されなくなってしまうので注意。

変更確認

以下のコマンドでPATHが引き継がれていることを確認。

check_path
$ env | grep PATH
PATH=/usr/local/rbenv/shims:/usr/local/rbenv/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
$ sudo env | grep PATH
PATH=/usr/local/rbenv/shims:/usr/local/rbenv/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
$ 
$ sudo gem list | head -5
bigdecimal (1.2.4)
fluent-logger (0.4.9)
hirb (0.7.2)
httpclient (2.3.4.1)
io-console (0.4.2)
$ 

おしまい。

193
173
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
193
173