$ 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
単純なsuを実行すると、/ binと/ sbinが$PATH
に追加されない理由がわかりません。これはかつてそうでした。どうすれば修正できますか?私はそれに気づきました:
-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
EDIT2:
$ cat /etc/issue
Debian GNU/Linux buster/sid \n \l
「安定した」パッケージはaarch64ではうまく機能しないため、すべてのパッケージは「テスト」リポジトリからのものです。
ごく最近(2018年7月27日からのバージョン2.32-0.2のutil-linux
)、Debianは別のsu
実装に切り替えました。 バグ833256 を参照してください。 「新しい」su
はutil-linux
からのものですが、「古い」ものはlogin
パッケージに含まれており、src:shadow
からのものです。
util-linux/NEWS.Debian.gz
からの引用:
2つの実装は非常に似ていますが、いくつかのマイナーな違いがあります(もちろん、まだ気付かれていないものもあるかもしれません)。
- 新しい「su」(引数なし、つまり環境を保持する場合)もPATHとIFSを保持しますが、古いsuは「環境を保持」モードでも常にPATHとIFSをリセットします。
- su ''(空のユーザー文字列)はrootを与えるために使用されていましたが、現在はエラーを返します。
- 以前のsuには1つのpam構成しかありませんでしたが、現在「su-」は/etc/pam.d/su-lで個別に構成されています
最初の違いは、おそらく最も目に見えるものです。単純な 'su'を実行することは、多くの理由で本当に悪い考えです。そのため、通常のログインと同様に、新しくセットアップされた環境を常に取得するには、 'su-'を使用することを強くお勧めします。以前の動作に似た動作に戻したい場合は、/ etc/login.defsに「ALWAYS_SET_PATH yes」を追加できます。
以前に使用されたsu
実装は、PATH
に関して異なる動作をしました。これはこのバグレポートでも説明されています 833256#8 を参照してください。新しいsu
は、su -
で呼び出されたnotif PATH
を保持します。
つまり、Debianの古いsu
は、少なくともPATH
に関してはsu -
のように動作していました。新しい実装では、他のディストリビューションと同様に、ほとんど常にsu -
を使用する必要があります。