Recipe 5.1 Running a root Login Shell

5.1.1 Problem

While logged in as a normal user, you need to run programs with root privileges as if root had logged in.

5.1.2 Solution

$ su -

5.1.3 Discussion

This recipe might seem trivial, but some Linux users don't realize that su alone does not create a full root environment. Rather, it runs a root shell but leaves the original user's environment largely intact. Important environment variables such as USER, MAIL, and PWD can remain unchanged.

su - (or equivalently, su -l or su login) runs a login shell, clearing the original user's environment and running all the startup scripts in ~root that would be run on login (e.g., .bash_profile).

Look what changes in your environment when you run su:

$ env > /tmp/env.user $ su # env > /tmp/env.rootshell # diff  /tmp/env.user /tmp/env.rootshell # exit

Now compare the environment of a root shell and a root login shell:

$ su - # env > /tmp/env.rootlogin # diff /tmp/env.rootshell /tmp/env.rootlogin # exit

Or do a quick three-way diff:

$ diff3 /tmp/env.user /tmp/env.rootshell /tmp/env.rootlogin

5.1.4 See Also

su(1), env(1), environ(5). Your shell's manpage explains environment variables.



Linux Security Cookbook
Linux Security Cookbook
ISBN: 0596003919
EAN: 2147483647
Year: 2006
Pages: 247

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net