30685


CentOS を利用しています。  
root になったとき、`/usr/local/bin` にインストールしたコマンドを実行しようとしたのですが、初期状態では PATH
が通っていませんでした。

セキュリティ関係かと思うのですが、何か理由があって `/usr/local/bin` に PATH
を通していないのでしょうか。ご存知の方いらっしゃいましたらご教授お願いします。


CC BY-SA 4.0
2016-11-25T08:20:38.593
30665
2020-07-30T17:18:19.843
2020-07-30T17:18:19.843
3060
7918
question
linux centos
root ユーザーの環境で /usr/local/bin にパスが通っていない理由は？


rootはどのマシンにも絶対にある強力なアカウントなので、

  * クラッキングの対象になりやすい
  * 操作ミスが致命的なシステムエラーを引き起こす可能性が高い

ことからログイン非推奨になっていると思います。

そのため、rootアカウントはログイン禁止にしておき、root権限が必要な際は  
sudoが実行できるアカウントを`/etc/sudoers`（`visudo`で編集します)により定義し  
権限を持つユーザーのみが、自分のアカウントとパスワードで、  
`sudo` コマンド名  
と、sudoコマンドで現在のログインアカウントからそのコマンドのみroot権限で実行するのが一般的になっています。

つまり、ログインしないはずのアカウントなのでPATHの設定も必要無いからだと理解しています。


CC BY-SA 3.0
2016-11-26T03:03:39.990
30677
2016-11-26T03:03:39.990
14745
30665
answer


バグとして2012年に[レポート](https://bugs.centos.org/view.php?id=5707)されていますが、なぜかスルーされていますね。

Unix & Linux Stack Exchangeに似たような「[Why does root not have /usr/local in
path?](https://unix.stackexchange.com/questions/115129/why-does-root-not-have-
usr-local-in-
path)」という質問があります。これの回答によると、歴史的に`/usr/local`は、公式ソフトウェア(多分`/bin`にあるコマンドなど)にバグがあったりした場合に、それをオーバーライドするためにローカルにインストールした非公式なソフトウェア(修正版や実験的機能を追加した版)を置く場所らしいです。で、rootは権限が強力なので、こういう非公式なものを不用意に実行すべきでないので、デフォルトでrootのPATHには`/usr/local`が含まれていないんだそうです。


CC BY-SA 3.0
2016-11-26T07:04:20.430
30681
2016-11-26T07:09:33.013
2017-04-13T12:37:20.867
-1
19437
30665
answer


CentOS を離れて商用 UNIX の事情を言うなら

`/usr/bin` や `/bin` はベンダが提供している＝ベンダが動作保証をしているソフトが入っていて  
`/usr/local/bin` は野良ビルド (ユーザが自力コンパイルしたソフト) が入っています。  
(うちの HP-UX は完全にそういう構成、運用をしてます。  
バイナリ提供されたソフトの実行形式だけをインストールするなんてありえないです)

ベンダが提供している `root` で起動していいのはベンダが保証しているソフトのみ、  
ってことで `root` の `PATH` には `/usr/local/bin` を含めないほうが良い、という判断らしいです。

セキュリティにうるさい `root` は `ls` の起動ですら `/bin/ls` と打つべし  
なんて話を聞いたことがあります (不正な `ls` を絶対に起動させないため) 。  
`/usr/local/bin` にあるソフトを `root` で使わざるを得ないときは意識してフルパス打つべし  
ってことでしょう。


CC BY-SA 3.0
2016-11-26T09:12:32.413
30685
2016-11-26T09:12:32.413
8589
30665
answer