From: Bastien Roucariès <[email protected]>

Clearly document that su by default does not change this variables.

Signed-off-by: Bastien Roucariès <[email protected]>
---
 man7/environ.7 | 41 +++++++++++++++++++++++++++++++++++++----
 1 file changed, 37 insertions(+), 4 deletions(-)

diff --git a/man7/environ.7 b/man7/environ.7
index ec886d83d..8fc26bb92 100644
--- a/man7/environ.7
+++ b/man7/environ.7
@@ -65,15 +65,15 @@ Common examples are:
 .TP
 .B USER
 The name of the logged-in user (used by some BSD-derived programs).
+Set at login time, see section NOTES below.
 .TP
 .B LOGNAME
 The name of the logged-in user (used by some System-V derived programs).
+Set at login time, see section NOTES below.
 .TP
 .B HOME
-A user's login directory, set by
-.BR login (1)
-from the password file
-.BR passwd (5).
+A user's login directory.
+Set at login time, see section NOTES below.
 .TP
 .B LANG
 The name of a locale to use for locale categories when not overridden
@@ -114,6 +114,7 @@ Set by some shells.
 .TP
 .B SHELL
 The absolute pathname of the user's login shell.
+Set at login time, see section NOTES below.
 .TP
 .B TERM
 The terminal type for which output is to be prepared.
@@ -260,6 +261,37 @@ The
 and
 .B PR_SET_MM_ENV_END
 operations can be used to control the location of the process's environment.
+.PP
+The
+.B HOME,
+.B LOGNAME,
+.B SHELL
+and
+.B USER
+variables are set from a user database (such as the
+.B password (5)
+database) only when when a user is changed using the
+session management interface, for instance by the
+.B login(1)
+program.
+In particular, the
+.B setuid (2)
+family of functions does not set these variables.
+Note that as documented in
+.B su (1),
+getting a root shell with just the command
+.I su
+results in a mixed environment where
+.B LOGNAME
+and
+.B USER
+are retained from the old user. Using
+.I su -p
+preserves all the variables from the existing shell, and
+.I su -
+or
+.I su -l
+is the recommended way of getting a full root environment.
 .SH BUGS
 Clearly there is a security risk here.
 Many a system command has been
@@ -306,6 +338,7 @@ should consider renaming their option to
 .BR mktemp (1),
 .BR printenv (1),
 .BR sh (1),
+.BR su (1),
 .BR tcsh (1),
 .BR execve (2),
 .BR clearenv (3),
-- 
2.29.2

Reply via email to