Debian su - そして su $PATH の違いは何ですか?

Debian su - そして su $PATH の違いは何ですか?
$ 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-linux2018年7月27日にバージョン2.32-0.2リリース)、Debianは別の実装suに切り替えました。エラー833256。 「New」suはに由来し、「Old」は包装util-linuxに含まれています。loginsrc: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 -PATHsu -

答え2

Debiansuマンページ言う:

現在の環境が新しいシェルに渡されます。一般ユーザーまたはスーパーユーザーの場合、値は$PATH にリセットされます。これは定義によって異なります。/bin:/usr/bin/sbin:/bin:/usr/sbin:/usr/binENV_PATHENV_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/binsu -/etc/profilePATH

したがって、変更があることを確認して変更するか、/etc/login.defs他の部分が後者を変更しPATHたかどうかを確認する必要があります(たとえば、ログインではなくbashrcスクリプトなどのシェル起動スクリプト)。

関連情報