Mastering CentOS 7 Linux Server - Sample Chapter
Mastering CentOS 7 Linux Server - Sample Chapter
P U B L I S H I N G
Bhaskarjyoti Roy
$ 49.99 US
31.99 UK
Sa
m
pl
C o m m u n i t y
E x p e r i e n c e
D i s t i l l e d
Mohamed Alibi
Mastering CentOS 7
Linux Server
ee
Mastering CentOS 7
Linux Server
Configure, manage, and secure a CentOS 7 Linux server
to serve a variety of services provided in a sustainable
computer's infrastructure
Mohamed Alibi
Bhaskarjyoti Roy
Bhaskarjyoti Roy is a Linux and open source enthusiast with more than 12 years
of experience in Linux system administration, virtualization, and cloud computing.
He provides his services to many companies and organizations on a daily basis. He
learns from his experience, which he has gained through self-learning and serving
clients regularly. He has built more than 100 servers based on various CentOS
versions running different types of services such as virtualization, web-server,
e-mail, DNS, and many more.
He is currently working with gotcha! Mobile Solutions, a Dallas based digital
marketing agency specializing in local SEO, mobile web apps, and custom web
development projects.
Preface
CentOS 7 Linux is one of the most reliable Linux operating systems to be used for
multiple functionalities in a computer infrastructure. It is like Pandora's box for any
system administrator in that he can shape it to perform any task for his environment.
Having a CentOS 7 server in any infrastructure can help deploy a number of
useful services to maintain, secure, and manage the infrastructure in a smart and
automated way.
Preface
User and group management from the GUI and the command line
Quotas
Password aging
Sudoers
This creates a user entry in the /etc/passwd file and automatically creates the home
directory for the user in /home. The /etc/passwd entry looks like this:
testuser:x:1001:1001::/home/testuser:/bin/bash
[1]
But, as we all know, the user is in a locked state and cannot log in to the system
unless we add a password for the user using the command:
passwd testuser
This will, in turn, modify the /etc/shadow file, at the same time unlock the user,
and the user will be able to log in to the system.
By default, the preceding set of commands will create both a user and a group for
the testuser user on the system. What if we want a certain set of users to be a part
of a common group? We will use the -g option along with the useradd command to
define the group for the user, but we have to make sure that the group already exists.
So, to create users such as testuser1, testuser2, and testuser3 and make them
part of a common group called testgroup, we will first create the group and then
we create the users using the -g or -G switches. So, we will do this:
# To create the group :
groupadd testgroup
# To create the user with the above group and provide password and unlock
user at the same time :
useradd testuser1 -G testgroup
passwd testuser1
useradd testuser2 -g 1002
passwd testuser2
Here, we have used both -g and -G. The difference between them is: with -G, we
create the user with its default group and assign the user to the common testgroup
as well, but with -g, we create the user as part of the testgroup only. In both cases,
we can use either the gid or the group name obtained from the /etc/group file.
There are a couple more options that we can use for an advanced level user creation;
for example, for system users with uid less than 500, we have to use the -r option,
which will create a user on the system, but the uid will be less than 500. We also can
use -u to define a specific uid, which must be unique and greater than 499. Common
options that we can use with the useradd command are:
-c: This option is used for comments, generally to define the user's real
name, such as -c "John Doe".
-d: This option is used to define home-dir; by default, the home directory is
created in /home such as -d /var/<user name>.
[2]
Chapter 1
-g: This option is used for the group name or the group number for the user's
default group. The group must already have been created earlier.
-G: This option is used for additional group names or group numbers,
separated by commas, of which the user is a member. Again, these groups
must also have been created earlier.
-r: This option is used to create a system account with a UID less than 500
and without a home directory.
-u: This option is the user ID for the user. It must be unique and greater
than 499.
There are few quick options that we use with the passwd command as well.
These are:
-l: This option is to lock the password for the user's account
-u: This option is to unlock the password for the user's account
-x: This option is to define the maximum days for the password lifetime
-n: This option is to define the minimum days for the password lifetime
Quotas
In order to control the disk space used in the Linux filesystem, we must use quota,
which enables us to control the disk space and thus helps us resolve low disk space
issues to a great extent. For this, we have to enable user and group quotas on the
Linux system.
In CentOS 7, the user and group quotas are not enabled by default so we have to
enable them first.
[3]
The image shows that the root filesystem is enabled without quota as mentioned by
the noquota in the output.
Now, we have to enable quota on the root (/) filesystem, and to do that, we have
to first edit the file /etc/default/grub and add the following to GRUB_CMDLINE_
LINUX:
rootflags=usrquota,grpquota
[4]
Chapter 1
The output of cat /etc/default/grub command should look like the following
screenshot:
Since we have to reflect the changes we just made, we should backup the grub
configuration using the following command:
cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.original
Now, we have to rebuild the grub with the changes we just made using
the command:
grub2-mkconfig -o /boot/grub2/grub.cfg
Next, reboot the system. Once it's up, log in and verify that the quota is enabled
using the command we used before:
mount | grep ' / '
[5]
It should now show us that the quota is enabled and will show us an output
as follows:
/dev/mapper/centos-root on / type xfs (rw,relatime,attr2,inode64,usrquota
,grpquota)
Add the following lead-in before image and apply CIT style to mount | grep ' / '
Now, since quota is enabled, we will further install quota using the following to
operate quota for different users and groups, and so on:
yum -y install quota
Once quota is installed, we check the current quota for users using the following
command:
repquota -as
[6]
Chapter 1
From the preceding screenshot, there are two ways we can limit quota for users and
groups; one is setting soft and hard limits for the size of disk space used, and another
is limiting the user or group by limiting the number of files they can create. In both
cases, soft and hard limits are used. A soft limit is something that warns the user
when the soft limit is reached, and the hard limit is the limit that they cannot bypass.
[7]
The preceding command output shall look like the following screenshot:
Now, we will use the following command to modify the group quota:
edquota -g groupname
[8]
Chapter 1
If you have other partitions mounted separately, you have to modify the /etc/fstab
file command to enable quota on the filesystem by adding usrquota and grpquota
after the defaults for that specific partition as in the following screenshot, where we
have enabled the quota for the /var partition:
[9]
Once you are finished enabling quota, remount the filesystem and run the following
commands:
To remount /var :
mount -o remount /var
To enable quota :
quotacheck -avugm
quotaon -avug
Quota is something all system admins use to handle disk space consumed on a
server by users or groups and limit over usage of the space. It thus helps them
manage the disk space usage on the system. In this regard, it should be noted that
you plan before your installation and create partitions accordingly as well so that
the disk space is used properly. Multiple separate partitions such as /var and /
home etc are always suggested, as generally these are the partitions which consume
most space on a Linux system. So, if we keep them on a separate partition, it will
not eat up the root (/) filesystem space and will be more failsafe than using an entire
filesystem mounted as only root.
Password aging
It is a good policy to have password aging so that the users are forced to change their
passwords at a certain interval. This, in turn, helps to keep the security of the system
as well.
We can use chage to configure the password to expire the first time the user logs in
to the system.
Note: This process will not work if the user logs in to the system using SSH.
This method of using chage will ensure that the user is forced to change the
password right away.
If we use only chage <username>, it will display the current
password aging value for the specified user and will allow them to
be changed interactively.
Chapter 1
3. Unlock the account. This can be achieved in two ways. One is to assign an
initial password and the other is to assign a null password. We will take the
first approach as the second one, though possible, is not good practice in terms
of security. Therefore, here is what we do to assign an initial password:
4. At the shell, enter the following command with the encrypted output of the
Python interpreter:
usermod -p "<encrypted-password>" <username>
So, here, in our case, if the username is testuser, and the encrypted output
is " BiagqBsi6gl1o" we will do:
usermod -p "BiagqBsi6gl1o" testuser
Now, upon initial login using the Q!W@E#R$ password, the user will be prompted for
a new password.
Password aging
Password length
Password complexity
Limit login failures
Limit prior password reuse
[ 11 ]
[ 12 ]
Chapter 1
[ 13 ]
required
pam_tally2.so
[ 14 ]
Chapter 1
[ 15 ]
To reset the failure attempts and to enable the user to log in again, use the
following command:
pam_tally2 user=<User Name> --reset
Sudoers
Separation of user privileges is one of the main features in Linux operating
systems. Normal users operate in limited privilege sessions to limit the scope of
their influence on the entire system. One special user exists on Linux that we know
already is root, which has super-user privileges. This account doesn't have any
restrictions that are present to normal users. Users can execute commands with
super-user or root privileges in a number of different ways.
There are mainly three different ways to obtain root privileges on a system:
Log in to the system as any user and then use the su - command. This will
ask you for the root password and once authenticated, will give you the root
shell session. We can disconnect this root shell using Ctrl + D or using the
command exit. Once exited, we will come back to our normal user shell.
Run commands with root privileges using sudo without spawning a root
shell or logging in as root. This sudo command works as follows:
sudo <command to execute>
Unlike su, sudo will request the password of the user calling the command, not the
root password.
The sudo doesn't work by default and requires to be set up before it functions
correctly.
In the following section, we will see how to configure sudo and modify
the /etc/sudoers file so that it works the way we want it to.
visudo
The sudo is modified or implemented using the /etc/sudoers file, and visudo is the
command that enables us to edit the file.
[ 16 ]
Chapter 1
Note: This file should not be edited using a normal text editor
to avoid potential race conditions in updating the file with other
processes. Instead, the visudo command should be used.
The visudo command opens a text editor normally, but then validates the syntax of
the file upon saving. This prevents configuration errors from blocking sudo operations.
By default, visudo opens the /etc/sudoers file in vi editor, but we can configure
it to use the nano text editor instead. For that, we have to make sure nano is already
installed or we can install nano using:
yum install nano -y
[ 17 ]
Now, we can use visudo with nano to edit the /etc/sudoers file. So, let's open
the /etc/sudoers file using visudo and learn a few things.
We can use different kinds of aliases for different sets of commands, software,
services, users, groups, and so on. For example:
Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/
dhclient, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial,
/sbin/iwconfig, /sbin/mii-tool
Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum
Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig
We can use these aliases to assign a set of command execution rights to a user or a
group. For example, if we want to assign the NETWORKING set of commands to the
group netadmin we will define:
%netadmin ALL = NETWORKING
Otherwise, if we want to allow the wheel group users to run all the commands,
we will do the following:
%wheel
ALL=(ALL)
ALL
If we want a specific user, john, to get access to all commands, we will do the
following:
john
ALL=(ALL)
ALL
User_Alias
User_Alias
Group names must start with a capital letter. We can then allow members of
GROUPTWO to update the yum database and all the commands assigned to the
preceding software by creating a rule like this:
GROUPTWO
ALL = SOFTWARE
[ 18 ]
Chapter 1
We can allow members of GROUPTHREE to shut down and reboot the machine by
creating a command alias and using that in a rule for GROUPTHREE:
Cmnd_Alias
restart
GROUPTHREE
We create a command alias called POWER that contains commands to power off
and reboot the machine. We then allow the members of GROUPTHREE to execute
these commands.
We can also create Runas aliases, which can replace the portion of the rule that
specifies to the user to execute the command as:
Runas_Alias
GROUPONE
This will allow anyone who is a member of GROUPONE to execute commands as the
www-data user or the apache user.
Just keep in mind that later, rules will override previous rules when there is a conflict
between the two.
There are a number of ways that you can achieve more control over how sudo
handles a command. Here are some examples:
The updatedb command associated with the mlocate package is relatively harmless.
If we want to allow users to execute it with root privileges without having to type a
password, we can make a rule like this:
GROUPONE
In this case, a user can run the updatedb command without a password as the
root user, but entering the root password will be required for running the kill
command. Another helpful tag is NOEXEC, which can be used to prevent some
dangerous behavior in certain programs.
[ 19 ]
For example, some programs, such as less, can spawn other commands by typing
this from within their interface:
!command_to_run
This basically executes any command the user gives it with the same permissions
that less is running under, which can be quite dangerous.
To restrict this, we could use a line like this:
username
You should now have clear understanding of what sudo is and how we modify and
provide access rights using visudo. There are many more things left here. You can
check the default /etc/sudoers file, which has a good number of examples, using
the visudo command, or you can read the sudoers manual as well.
One point to remember is that root privileges are not given to regular users often.
It is important for us to understand what these commands do when you execute with
root privileges. Do not take the responsibility lightly. Learn the best way to use these
tools for your use case, and lock down any functionality that is not needed.
Reference
Now, let's take a look at the major reference used throughout the chapter:
https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_
Linux/7/html/System_Administrators_Guide/index.html
Summary
In this chapter, you learned about some advanced user management and how
to manage users through the command line, along with password aging, quota,
exposure to /etc/sudoers, and how to modify them using visudo. User and
password management is a regular task that a system administrator performs on
servers, and it has a very important role in the overall security of the system.
In the next chapter, we will look into advanced security features called SecurityEnhanced Linux (SELinux), which comes integrated with CentOS or RedHat Linux
operating systems.
[ 20 ]
www.PacktPub.com
Stay Connected: