web-dev-qa-db-ja.com

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

単純な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ではうまく機能しないため、すべてのパッケージは「テスト」リポジトリからのものです。

8
user1095108

ごく最近(2018年7月27日からのバージョン2.32-0.2のutil-linux)、Debianは別のsu実装に切り替えました。 バグ833256 を参照してください。 「新しい」suutil-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 -を使用する必要があります。

17
scai