Book: LPI Linux Certification in a Nutshell
Section: Chapter 7.  Administrative Tasks (Topic 2.11)



7.2 Objective 2: Tune the User Environment

When you create a new user account on your Linux system, some basic setup information is necessary for the user to initially become productive. When the user logs into the system, she will need:

  • A minimal set of environment variables, including a PATH that is meaningful for your system.

  • Basic configuration files in her home directory.

The amount of default information you provide can range from minimal to extremely detailed. In general, you'll want to provide the setup information that will allow the user to begin working without extensive personal customization.

7.2.1 System-wide Startup Scripts

When the bash shell starts, it looks for a number of configuration script files, including /etc/profile. Commands in this file are executed at login time and contain global startup information and settings for all bash users.[5] Example 7-1 contains an example profile.

[5] This does not apply to users of other shells, such as tcsh. Those shells require different global startup setup and are not among the Objectives for the LPIC Level 1 exams.

Example 7-1. Sample /etc/profile File
# /etc/profile

# System wide environment and startup programs
# Functions and aliases go in /etc/bashrc

PATH="$PATH:/usr/X11R6/bin"
PS1="[\u@\h \W]\\$ "

ulimit -c 1000000
if [ `id -gn` = `id -un` -a `id -u` -gt 14 ]; then
	umask 002
else
	umask 022
fi

USER=`id -un`
LOGNAME=$USER
MAIL="/var/spool/mail/$USER"

HOSTNAME=`/bin/hostname`
HISTSIZE=1000
HISTFILESIZE=1000

INPUTRC=/etc/inputrc
PATH="$PATH:/usr/local/bin"
export PATH PS1 HOSTNAME HISTSIZE HISTFILESIZE 
USER LOGNAME MAIL INPUTRC

The syntax for bash programming is in Chapter 17. However, you can see that this file does basic shell setup for the user, including the assignment of a number of environment variables. As an example of a common local customization, note the line containing PATH= adds an additional directory to those already listed in the PATH environment variable. In this case, the system administrator expects that most users will need to run programs stored in /usr/local/bin. Making this modification once in /etc/profile eliminates the need for individuals to make it in their personal bash profiles.

On the Exam

Remember that /etc/profile is executed only once, while /etc/bashrc is called for each new shell invocation. Also note that these startup scripts are specific to bash and that users of other shells will have a different configuration.

As you may have noted in the comments at the top of Example 7-1, the definition of functions and aliases typically is not done in /etc/profile, but instead in /etc/bashrc. This is because functions and aliases are not inherited by new shells. Since commands in /etc/profile are executed only at login time, functions and aliases defined there would only be available in the login shell. Commands in the bashrc file are executed each time a new shell starts; their effects will apply to all shells.

7.2.2 Setting the Home Directory for New Accounts

When creating a new account, usually you'll want to create a default home directory for the user of the account. On Linux systems, the home directory is most likely something like /home/username, but you can define it in any way you like.

When you create a new home directory, it is a courtesy to the new user to initially populate the directory with useful files. These might include startup files for the user's shell, his desktop, or for X Window applications. To facilitate the automated population of new user directories, an example home directory is created in a "skeleton" directory /etc/skel. This directory should contain all of the files and subdirectories that all new users will need. Example 7-2 shows the contents of an example /etc/skel directory.

Example 7-2. Sample Skeleton (/etc/skel) Directory
-rw-r--r--  1 root   root   1422 Mar 29  1999 .Xdefaults
-rw-r--r--  1 root   root     24 Jul 13  1994 .bash_logout
-rw-r--r--  1 root   root    230 Aug 22  1998 .bash_profile
-rw-r--r--  1 root   root    124 Aug 23  1995 .bashrc
drwxr-xr-x  3 root   root   1024 Dec  2 09:37 .kde
-rw-r--r--  1 root   root    966 Apr 16  1999 .kderc
drwxr-xr-x  5 root   root   1024 Dec  2 09:37 Desktop

This example /etc/skel directory contains:

  • An X application startup file (.Xdefaults).

  • Three configuration files for the shell (.bash_logout, .bash_ profile, and .bashrc).

  • A directory and a startup file for KDE (.kde and .kderc).

  • A Desktop directory, which defines the appearance of the user's desktop.

The specifics of this example are not important, but illustrate that a number of default files can be included in a new user's account setup. Additions could include default files for other desktop environments such as GNOME as well as startup files for other shells.

When a new account is created with a home directory, the entire contents of /etc/skel are copied recursively (that is, including subdirectories) to the new home directory location. The home directory and its entire contents are then set to the new account's UID and GID, making the new user owner of her initial files. She is then free to modify these files and directories as necessary.

As the system administrator, you may add, modify, and delete files in /etc/skel as needed for your environment.