$ su -
Password:
# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# exit
logout
$ su
Password:
# echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
$PATH
単純なsuを実行すると、/ binと/ sbinが追加されない理由がわかりません。過去にもこんなことがありました。この問題をどのように解決できますか?私が気づいたこと:
-rw-r--r-- 1 root root 0 Jan 8 2018 /etc/environment
しかし、それ以外は私のシステムは正常に見えます。
編集:必須事項を忘れました。uname -a
Linux rpi3 4.17.0-1-arm64 #1 SMP Debian 4.17.8-1 (2018-07-20) aarch64 GNU/Linux
編集2:
$ cat /etc/issue
Debian GNU/Linux buster/sid \n \l
「安定した」パッケージはaarch64で正しく実行されないため、すべてのパッケージは「テスト」リポジトリにあります。
答え1
最近(util-linux
2018年7月27日にバージョン2.32-0.2リリース)、Debianは別の実装su
に切り替えました。エラー833256。 「New」su
はに由来し、「Old」は包装util-linux
に含まれています。login
src:shadow
から引用util-linux/NEWS.Debian.gz
:
2つの実装は非常に似ていますが、わずかな微妙な違いがあります(もちろん、まだ見つかっていないものがあるかもしれません)。
- 新しい「su」(引数なし、つまり環境を保存するとき)もPATHとIFSを保存しますが、古いsuは「環境保存」モードでも常にPATHとIFSをリセットします。
- su'' (空のユーザー文字列) はルートを提供するために使用されましたが、今はエラーを返します。
- 以前は su に 1 つの pam 設定しかありませんでしたが、現在 'su -' は /etc/pam.d/su-l に別々に設定されます。
最初の違いはおそらくユーザーにとって最も明白です。単純な「su」を使用することはさまざまな理由で実際には悪い考えなので、常に通常のログインと同様の新しい設定環境を得るために「su -」を使用することをお勧めします。以前の動作と同様の動作を復元するには、/etc/login.defs に「ALWAYS_SET_PATH yes」を追加します。
以前に使用されたsu
実装PATH
もこのバグレポートで説明されています。833256#80。新しいsu
予約PATH
済みいいえに電話してくださいsu -
。
簡単に言えば、以前のバージョンのDebianは少なくともsu
のように動作します。最新の実装では、他のディストリビューションと同様に、ほぼ常に使用する必要があります。su -
PATH
su -
答え2
Debiansu
マンページ言う:
現在の環境が新しいシェルに渡されます。一般ユーザーまたはスーパーユーザーの場合、値は
$PATH
にリセットされます。これは定義によって異なります。/bin:/usr/bin
/sbin:/bin:/usr/sbin:/usr/bin
ENV_PATH
ENV_SUPATH
/etc/login.defs
引用元/etc/login.defs
:
# Three items must be defined: MAIL_DIR, ENV_SUPATH, and ENV_PATH. # If unspecified, some arbitrary (and possibly incorrect) value will # be assumed. All other items are optional - if not specified then
一般的な Debian システムでは、変数は次の場所で定義されます/etc/login.defs
。
#
# *REQUIRED* The default PATH settings, for superuser and normal users.
#
# (they are minimal, add the rest in the shell startup files)
ENV_SUPATH PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ENV_PATH PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
注釈付きテストはENV_SUPATH
問題を部分的に再現します。ログインスクリプトは同時に実行されsu
ず、rootユーザーに対して期待どおりに上書きされます。/sbin
/usr/local/bin
su -
/etc/profile
PATH
したがって、変更があることを確認して変更するか、/etc/login.defs
他の部分が後者を変更しPATH
たかどうかを確認する必要があります(たとえば、ログインではなくbashrcスクリプトなどのシェル起動スクリプト)。