debian su - and su $PATH differences?
Very recently (with version 2.32-0.2 of util-linux
from 27 Jul 2018) Debian switched to a different su
implementation, see bug 833256. The "new" su
is from util-linux
while the "old" one was contained in the login
package and originated from src:shadow
Quoting from util-linux/NEWS.Debian.gz
:
The two implementations are very similar but have some minor differences (and there might be more that was not yet noticed ofcourse), e.g.
- new 'su' (with no args, i.e. when preserving the environment) also preserves PATH and IFS, while old su would always reset PATH and IFS even in 'preserve environment' mode.
- su '' (empty user string) used to give root, but now returns an error.
- previously su only had one pam config, but now 'su -' is configured separately in /etc/pam.d/su-l
The first difference is probably the most user visible one. Doing plain 'su' is a really bad idea for many reasons, so using 'su -' is strongly recommended to always get a newly set up environment similar to a normal login. If you want to restore behaviour more similar to the previous one you can add 'ALWAYS_SET_PATH yes' in /etc/login.defs.
The previously used su
implementation behaved differently regarding PATH
. This is also discussed in this bug report, see 833256#80. The new su
preserves PATH
if not invoked with su -
.
In short: Debian's old su
behaved like su -
, at least regarding PATH
. With the new implementation you should almost always use su -
, similar to other distributions.