How to (really) restore legacy behavior of `su` in Debian Buster


The su command in buster is provided by the util-linux source package, instead of the shadow source package, and no longer alters the PATH variable by default. This means that after doing su, your PATH may not contain directories like /sbin, and many system administration commands will fail. There are several workarounds:

    • Use su – instead; this launches a login shell, which forces PATH to be changed, but also changes everything else including the working directory.

    • Use sudo instead. sudo still runs commands with an altered PATH variable.

      • To get a regular root shell with the correct PATH, you may use sudo -s.

      • To get a login shell as root (equivalent to su -), you may use sudo -i.

    • Put ALWAYS_SET_PATH yes in /etc/login.defs to get an approximation of the old behavior.

    • Put the system administration directories (/sbin, /usr/sbin, /usr/local/sbin) in your regular account’s PATH (see EnvironmentVariables for help with this).

This has never worked for me. Adding ALWAYS_SET_PATH yes even broke my system. I however have another solution which restores behavior to the legacy one. Just add this line to your ~/.bashrc and you are good:

alias su="su -c \"cd '\`pwd\`'; /bin/bash\" - "

Leave a Reply

Your email address will not be published. Required fields are marked *