Oracle 6 Admin Guide
Oracle 6 Admin Guide
Oracle 6 Admin Guide
E41138-28
August 2017
Oracle Legal Notices
Copyright 2013, 2017, Oracle and/or its affiliates. All rights reserved.
This software and related documentation are provided under a license agreement containing restrictions on use and disclosure and are protected
by intellectual property laws. Except as expressly permitted in your license agreement or allowed by law, you may not use, copy, reproduce,
translate, broadcast, modify, license, transmit, distribute, exhibit, perform, publish, or display any part, in any form, or by any means. Reverse
engineering, disassembly, or decompilation of this software, unless required by law for interoperability, is prohibited.
The information contained herein is subject to change without notice and is not warranted to be error-free. If you find any errors, please report them
to us in writing.
If this is software or related documentation that is delivered to the U.S. Government or anyone licensing it on behalf of the U.S. Government, then
the following notice is applicable:
U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware,
and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition
Regulation and agency-specific supplemental regulations. As such, use, duplication, disclosure, modification, and adaptation of the programs,
including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license
terms and license restrictions applicable to the programs. No other rights are granted to the U.S. Government.
This software or hardware is developed for general use in a variety of information management applications. It is not developed or intended for
use in any inherently dangerous applications, including applications that may create a risk of personal injury. If you use this software or hardware
in dangerous applications, then you shall be responsible to take all appropriate fail-safe, backup, redundancy, and other measures to ensure its
safe use. Oracle Corporation and its affiliates disclaim any liability for any damages caused by use of this software or hardware in dangerous
applications.
Oracle and Java are registered trademarks of Oracle and/or its affiliates. Other names may be trademarks of their respective owners.
Intel and Intel Xeon are trademarks or registered trademarks of Intel Corporation. All SPARC trademarks are used under license and are
trademarks or registered trademarks of SPARC International, Inc. AMD, Opteron, the AMD logo, and the AMD Opteron logo are trademarks or
registered trademarks of Advanced Micro Devices. UNIX is a registered trademark of The Open Group.
This software or hardware and documentation may provide access to or information about content, products, and services from third parties.
Oracle Corporation and its affiliates are not responsible for and expressly disclaim all warranties of any kind with respect to third-party content,
products, and services unless otherwise set forth in an applicable agreement between you and Oracle. Oracle Corporation and its affiliates will not
be responsible for any loss, costs, or damages incurred due to your access to or use of third-party content, products, or services, except as set
forth in an applicable agreement between you and Oracle.
Abstract
This manual provides an introduction to administering various features of Oracle Linux systems.
iii
Oracle Linux
iv
Oracle Linux
v
Oracle Linux
vi
Oracle Linux
vii
Oracle Linux
viii
Oracle Linux
ix
Oracle Linux
x
Preface
The Oracle Linux Administrator's Guide provides introductory information about administering various
features of Oracle Linux systems, including system configuration, networking, network services, storage
devices, file systems, authentication, and security.
Audience
This document is intended for administrators who need to configure and administer Oracle Linux. It is
assumed that readers are familiar with web technologies and have a general understanding of using the
Linux operating system, including knowledge of how to use a text editor such as emacs or vim, essential
commands such as cd, chmod, chown, ls, mkdir, mv, ps, pwd, and rm, and using the man command to
view manual pages.
Document Organization
The document is organized as follows:
Part I, System Configuration describes how to configure software and kernel updates, booting, kernel
and module settings, and devices, how to schedule tasks, and how to monitor and tune your system.
Part II, Networking and Network Services describes how to configure network interfaces, network
addresses, name service, network time services, basic web and email services, load balancing, and high
availability.
Part III, Storage and File Systems describes how to configure storage devices and how to create and
manage local, shared, and cluster file systems.
Part IV, Authentication and Security describes how to configure user account databases and
authentication, how to add group and user accounts, how to administer essential aspects of system
security, and how to configure and use the OpenSSH tools.
Related Documents
The documentation for this product is available at:
http://www.oracle.com/technetwork/server-storage/linux/documentation/index.html.
Conventions
The following text conventions are used in this document:
Convention Meaning
boldface Boldface type indicates graphical user interface elements associated with an
action, or terms defined in text or the glossary.
italic Italic type indicates book titles, emphasis, or placeholder variables for which
you supply particular values.
monospace Monospace type indicates commands within a paragraph, URLs, code in
examples, text that appears on the screen, or text that you enter.
Documentation Accessibility
For information about Oracle's commitment to accessibility, visit the Oracle Accessibility Program website
at
xi
Access to Oracle Support
http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc.
xii
Part I System Configuration
This section contains the following chapters:
Chapter 1, The Unbreakable Linux Network describes how to access and use the software channels that are
available on the Unbreakable Linux Network (ULN).
Chapter 2, Yum describes how you can use the yum utility to install and upgrade software packages.
Chapter 3, Ksplice Uptrack describes how to configure Ksplice Uptrack to update the kernel on a running system.
Chapter 4, Boot Configuration describes the Oracle Linux boot process, how to use the GRUB boot loader, how to
change the run level of a system, and how to configure the services that are available at each run level.
Chapter 5, System Configuration Settings describes the files and virtual file systems that you can use to change
configuration settings for your system.
Chapter 6, Kernel Modules describes how to load, unload, and modify the behavior of kernel modules.
Chapter 7, Device Management describes how the system uses device files and how the udev device manager
dynamically creates or removes device node files.
Chapter 8, Task Management describes how to configure the system to run tasks automatically within a specific
period of time, at a specified time and date, or when the system is lightly loaded.
Chapter 9, System Monitoring and Tuning describes how to collect diagnostic information about a system for Oracle
Support, and how to monitor and tune the performance of a system.
Chapter 10, System Dump Analysis describes how to configure a system to create a memory image in the event
of a system crash, and how to use the crash debugger to analyse the memory image in a crash dump or for a live
system.
Table of Contents
1 The Unbreakable Linux Network ...................................................................................................... 7
1.1 About the Unbreakable Linux Network ................................................................................... 7
1.2 About ULN Channels ............................................................................................................ 7
1.3 About Software Errata .......................................................................................................... 9
1.4 Registering as a ULN User ................................................................................................... 9
1.5 Registering an Oracle Linux 6 or Oracle Linux 7 System ...................................................... 10
1.6 Registering an Oracle Linux 4 or Oracle Linux 5 System ...................................................... 10
1.7 Configuring an Oracle Linux 5 System to Use yum with ULN ................................................ 10
1.8 Disabling Package Updates ................................................................................................ 11
1.9 Subscribing Your System to ULN Channels ......................................................................... 11
1.10 Browsing and Downloading Errata Packages ..................................................................... 12
1.11 Downloading Available Errata for a System ........................................................................ 12
1.12 Updating System Details ................................................................................................... 13
1.13 Deleting a System ............................................................................................................ 13
1.14 About CSI Administration .................................................................................................. 13
1.14.1 Becoming a CSI Administrator ................................................................................ 14
1.14.2 Listing Active CSIs and Transferring Their Registered Servers .................................. 15
1.14.3 Listing Expired CSIs and Transferring Their Registered Servers ............................... 16
1.14.4 Removing a CSI Administrator ................................................................................ 17
1.15 Switching from RHN to ULN .............................................................................................. 17
1.16 For More Information About ULN ....................................................................................... 18
2 Yum .............................................................................................................................................. 19
2.1 About Yum ......................................................................................................................... 19
2.2 Yum Configuration .............................................................................................................. 19
2.2.1 Configuring Use of a Proxy Server ........................................................................... 20
2.2.2 Yum Repository Configuration .................................................................................. 21
2.3 Downloading the Oracle Linux Yum Server Repository Files ................................................. 21
2.4 Using Yum from the Command Line .................................................................................... 22
2.5 Yum Groups ....................................................................................................................... 23
2.6 Installing and Using the Yum Security Plugin ....................................................................... 23
2.7 Switching CentOS or Scientific Linux Systems to Use the Oracle Linux Yum Server ................ 26
2.8 Creating and Using a Local ULN Mirror ............................................................................... 26
2.9 Creating a Local Yum Repository Using an ISO Image ......................................................... 26
2.10 Setting up a Local Yum Server Using an ISO Image .......................................................... 27
2.11 For More Information About Yum ...................................................................................... 28
3 Ksplice Uptrack ............................................................................................................................. 29
3.1 About Ksplice Uptrack ........................................................................................................ 29
3.1.1 Supported Kernels ................................................................................................... 29
3.2 Registering to Use Ksplice Uptrack ..................................................................................... 30
3.3 Installing Ksplice Uptrack .................................................................................................... 30
3.4 Configuring Ksplice Uptrack ................................................................................................ 31
3.5 Managing Ksplice Updates .................................................................................................. 32
3.6 Patching and Updating Your System ................................................................................... 33
3.7 Removing the Ksplice Uptrack software ............................................................................... 33
3.8 About Ksplice Offline Client ................................................................................................. 33
3.8.1 Modifying a Local Yum Server to Act as a Ksplice Mirror ........................................... 33
3.8.2 Configuring Ksplice Offline Clients ............................................................................ 34
3.9 For More Information About Ksplice Uptrack ........................................................................ 36
4 Boot Configuration ......................................................................................................................... 37
4.1 About the Boot Process ...................................................................................................... 37
4.2 About the GRUB Boot Loader ............................................................................................. 38
3
4.2.1 About the GRUB Configuration File .......................................................................... 39
4.2.2 Configuring a GRUB Password ................................................................................ 42
4.2.3 Using GRUB ............................................................................................................ 43
4.3 About Run Levels ............................................................................................................... 43
4.3.1 Displaying the Run Level ......................................................................................... 44
4.3.2 Changing the Run Level .......................................................................................... 44
4.3.3 Shutting down the System ........................................................................................ 44
4.3.4 About Service Scripts ............................................................................................... 44
4.3.5 About the Service Configuration GUI ........................................................................ 45
4.3.6 Starting and Stopping Services ................................................................................. 46
4.3.7 Configuring Services to Start at Different Run Levels ................................................. 46
5 System Configuration Settings ....................................................................................................... 49
5.1 About /etc/sysconfig Files .................................................................................................... 49
5.2 About the /proc Virtual File System ...................................................................................... 50
5.2.1 Virtual Files and Directories Under /proc ................................................................... 51
5.2.2 Changing Kernel Parameters .................................................................................... 54
5.2.3 Parameters that Control System Performance ........................................................... 55
5.2.4 Parameters that Control Kernel Panics ..................................................................... 56
5.3 About the /sys Virtual File System ....................................................................................... 57
5.3.1 Virtual Directories Under /sys ................................................................................... 57
6 Kernel Modules ............................................................................................................................. 59
6.1 About Kernel Modules ........................................................................................................ 59
6.2 Listing Information about Loaded Modules ........................................................................... 59
6.3 Loading and Unloading Modules ......................................................................................... 60
6.4 About Module Parameters ................................................................................................... 61
6.5 Specifying Modules to be Loaded at Boot Time ................................................................... 62
7 Device Management ...................................................................................................................... 63
7.1 About Device Files ............................................................................................................. 63
7.2 About the Udev Device Manager ......................................................................................... 65
7.3 About Udev Rules .............................................................................................................. 65
7.4 Querying Udev and Sysfs ................................................................................................... 68
7.5 Modifying Udev Rules ......................................................................................................... 71
8 Task Management ......................................................................................................................... 73
8.1 About Automating Tasks ..................................................................................................... 73
8.2 Configuring cron Jobs ......................................................................................................... 73
8.2.1 Controlling Access to Running cron Jobs .................................................................. 74
8.3 Configuring anacron Jobs ................................................................................................... 75
8.4 Running One-time Tasks .................................................................................................... 76
8.4.1 Changing the Behavior of Batch Jobs ....................................................................... 76
9 System Monitoring and Tuning ....................................................................................................... 79
9.1 About sosreport .................................................................................................................. 79
9.1.1 Configuring and Using sosreport ............................................................................... 79
9.2 About System Performance Tuning ..................................................................................... 80
9.2.1 About Performance Problems ................................................................................... 80
9.2.2 Monitoring Usage of System Resources .................................................................... 81
9.2.3 Using the Graphical System Monitor ......................................................................... 84
9.2.4 About OSWatcher Black Box .................................................................................... 84
10 System Dump Analysis ................................................................................................................ 87
10.1 About Kdump ................................................................................................................... 87
10.1.1 Configuring and Using Kdump ................................................................................ 87
10.1.2 Files Used by Kdump ............................................................................................. 89
10.1.3 Using Kdump with OCFS2 ...................................................................................... 89
10.1.4 Using Kdump with a System Hang ......................................................................... 90
10.2 Using the crash Debugger ................................................................................................ 90
4
10.2.1 Installing the crash Packages ................................................................................. 90
10.2.2 Running crash ....................................................................................................... 91
10.2.3 Kernel Data Structure Analysis Commands ............................................................. 92
10.2.4 System State Commands ....................................................................................... 94
10.2.5 Helper Commands ................................................................................................. 97
10.2.6 Session Control Commands ................................................................................... 97
10.2.7 Guidelines for Examining a Dump File .................................................................... 98
5
6
Chapter 1 The Unbreakable Linux Network
Table of Contents
1.1 About the Unbreakable Linux Network ........................................................................................... 7
1.2 About ULN Channels .................................................................................................................... 7
1.3 About Software Errata .................................................................................................................. 9
1.4 Registering as a ULN User ........................................................................................................... 9
1.5 Registering an Oracle Linux 6 or Oracle Linux 7 System .............................................................. 10
1.6 Registering an Oracle Linux 4 or Oracle Linux 5 System .............................................................. 10
1.7 Configuring an Oracle Linux 5 System to Use yum with ULN ........................................................ 10
1.8 Disabling Package Updates ........................................................................................................ 11
1.9 Subscribing Your System to ULN Channels ................................................................................. 11
1.10 Browsing and Downloading Errata Packages ............................................................................. 12
1.11 Downloading Available Errata for a System ................................................................................ 12
1.12 Updating System Details ........................................................................................................... 13
1.13 Deleting a System .................................................................................................................... 13
1.14 About CSI Administration .......................................................................................................... 13
1.14.1 Becoming a CSI Administrator ........................................................................................ 14
1.14.2 Listing Active CSIs and Transferring Their Registered Servers ......................................... 15
1.14.3 Listing Expired CSIs and Transferring Their Registered Servers ....................................... 16
1.14.4 Removing a CSI Administrator ........................................................................................ 17
1.15 Switching from RHN to ULN ..................................................................................................... 17
1.16 For More Information About ULN ............................................................................................... 18
This chapter describes how to access and use the software channels that are available on the
Unbreakable Linux Network (ULN).
If you want to use yum with ULN to manage your systems, you must register the systems with ULN and
subscribe each system to one or more ULN channels. When you register a system with ULN, the channel
that contains the latest version is chosen automatically according to the architecture and operating system
revision of the system.
When you run yum, it connects to the ULN server repository and downloads the latest software packages
in RPM format onto your system. yum then presents you with a list of the available packages so that you
can choose which ones you want to install.
7
About ULN Channels
You can choose for your system to remain at a specific OS revision, or you can allow the system to be
updated with packages from later revisions.
You should subscribe to the channel that corresponds to the architecture of your system and the update
level at which you want to maintain it. Patches and errata are available for specific revisions of Oracle
Linux, but you do not need to upgrade from a given revision level to install these fixes. ULN channels also
exist for MySQL, Oracle VM, OCFS2, RDS, and productivity applications.
The following table describes the main channels that are available.
Channel Description
_latest Provides all the packages in a distribution, including any errata that are also provided
in the patch channel. Unless you explicitly specify the version, any package that you
download on this channel will be the most recent that is available. If no vulnerabilities
have been found in a package, the package version might be the same as that
included in the original distribution. For other packages, the version will be the same
as that provided in the patch channel for the highest update level. For example, the
ol6_arch_latest channel for Oracle Linux 6 Update 3 contains a combination of
the ol6_u3_arch_base and ol6_u3_arch_patch channels.
_base Provides the packages for each major version and minor update of Oracle Linux and
Oracle VM. This channel corresponds to the released ISO media image. For example,
there is a base channel for each of the updates to Oracle Linux 6 as well as for Oracle
Linux 6. Oracle does not publish security errata and bugfixes on these channels.
_patch Provides only those packages that have changed since the initial release of a major or
minor version of Oracle Linux or Oracle VM. The patch channel always provides the most
recent version of a package, including all fixes that have been provided since the initial
version was released.
_addons Provides packages that are not included in the base distribution, such as the package
that you can use to create a yum repository on Oracle Linux 6.
_oracle Provides freely downloadable RPMs from Oracle that you can install on Oracle Linux,
such as ASMLib and Oracle Instant Client.
_optional Provides optional packages for Oracle Linux 7 that have been sourced from upstream.
This channel includes most development packages (*-devel).
Other channels may also be available, such as _beta channels for the beta versions of packages.
As each new major version or minor update of Oracle Linux becomes available, Oracle creates new base
and patch channels for each supported architecture to distribute the new packages. The existing base
and patch channels for the previous versions or updates remain available and do not include the new
packages. The _latest channel distributes the highest possible version of any package, and tracks the
top of the development tree independently of the update level.
Caution
You can choose to maintain your system at a specific update level of Oracle
Linux and selectively apply errata to that level by subscribing the system to the
_base and _patch channels and unsubscribing it from the _latest channel.
However, for Oracle Linux 7, patches are not added to the _patch channel for
previous updates after a new update has been released. For example, after the
release of Oracle Linux 7 Update 1, no further errata will be released on the
ol7_x86_64_u0_patch channel.
8
About Software Errata
Oracle recommends that you keep you system subscribed to the _latest channel.
If you unsubscribe from the _latest channel, your system will become vulnerable
to security-related issues when a new update is released.
Security advisories, which have names prefixed by ELSA-* (for Oracle Linux) and OVMSA-* (for Oracle
VM).
Bug fix advisories, which have names prefixed by ELBA-* and OVMBA-*.
Feature enhancement advisories, which have names prefixed by ELEA-* and OVMEA-*.
To be notified when new errata packages are released, you can subscribe to the Oracle Linux and Oracle
VM errata mailing lists at https://oss.oracle.com/mailman/listinfo/el-errata and https://oss.oracle.com/
mailman/listinfo/oraclevm-errata.
If you are logged into ULN, you can also subscribe to these mailing lists by following the Subscribe to
Enterprise Linux Errata mailing list and Subscribe to Oracle VM Errata mailing list links that are
provided on the Errata tab.
1. In a browser, go to https://linux.oracle.com/register.
2. If you do not have an SSO account, click Create New Single Signon Account and follow the onscreen
instructions to create one.
4. On the Create New ULN User page, enter your CSI and click Create New User.
Note
If your user name already exists on the system, you are prompted to proceed
to ULN by clicking the link Unbreakable Linux Network. If you enter a different
9
Registering an Oracle Linux 6 or Oracle Linux 7 System
CSI from your existing CSIs, your user name is associated with the new CSI in
addition to your existing CSIs.
Alternatively, if you use the GNOME graphical user desktop, select System > Administration > ULN
Registration on Oracle Linux 6 or Applications > System Tools > ULN Registration on Oracle Linux
7. You can also register your system with ULN if you configure networking when installing Oracle Linux
6 or Oracle Linux 7.
2. When prompted, enter your ULN user name, password, and customer support identifier (CSI).
3. Enter a name for the system that will allow you to identify it on ULN, and choose whether to upload
hardware and software profile data that allows ULN to select the appropriate packages for the system.
4. If you have an Oracle Linux Premier Support account, you can choose to configure an Oracle Linux
6 or Oracle Linux 7 system that is running a supported kernel to receive kernel updates from Oracle
Ksplice. See Section 3.2, Registering to Use Ksplice Uptrack.
The yum-rhn-plugin is enabled and your system is subscribed to the appropriate software channels.
If you use a proxy server for Internet access, see Section 2.2.1, Configuring Use of a Proxy Server.
3. When prompted, enter your ULN user name, password, and CSI.
4. Enter the name of the system that will be displayed on ULN, and choose whether to upload hardware
and software profile data that will allow ULN to select the appropriate packages for your system.
1. Install yum-rhn-plugin.
# up2date --install yum-rhn-plugin
10
Disabling Package Updates
2. If your organization uses a proxy server as an intermediary for Internet access, specify the
enableProxy and httpProxy settings in /etc/sysconfig/rhn/up2date as shown in this
example.
enableProxy=1
httpProxy=http://proxysvr.yourdom.com:3128
If the proxy server requires authentication, additionally specify the enableProxyAuth, proxyUser,
and proxyPassword settings:
enableProxy=1
enableProxyAuth=1
httpProxy=http://proxysvr.yourdom.com:3128
proxyUser=yumacc
proxyPassword=clydenw
Caution
With the plugin installed, you can immediately start to use yum instead of up2date.
To disable updates for particular packages, add an exclude statement to the [main] section of the /
etc/yum.conf file. For example, to exclude updates for VirtualBox and kernel:
exclude=VirtualBox* kernel*
Note
Excluding certain packages from being updated can cause dependency errors for
other packages. Your machine might also become vulnerable to security-related
issues if you do not install the latest updates.
2. On the Systems tab, click the link named for the system in the list of registered machines.
4. On the System Summary page, select channels from the list of available or subscribed channels and
click the arrows to move the channels between the lists.
11
Browsing and Downloading Errata Packages
The Errata page displays a table of the available errata for all releases that are available on ULN.
3. On the Errata page, you can perform the following actions on the displayed errata:
To sort the table of available errata, click the title of the Type, Severity, Advisory, Systems
Affected, or Release Date column. Click the title again to reverse the order of sorting.
Note
The Systems Affected column shows how many of your systems are
potentially affected by an advisory.
To display or hide advisories of different types, select or deselect the Bug, Enhancement, and
Security check boxes and click Go.
To display only advisories for a certain release of Oracle Linux or Oracle VM, select that release from
the Release drop-down list and click Go.
To search within the table, enter a string in the Search field and click Go.
b. On the Errata Detail page for an advisory, you can download the RPMs for the supported releases
and system architectures. The Superseded By Advisory column displays a link to the most recent
advisory (if any) that replaces the advisory you are browsing.
2. On the Systems tab, click the link named for the system in the list of registered machines.
The System Details page lists the available errata for the system in the Available Errata table, which
might be split over several pages.
3. To download the CSV report file, click the link Download All Available Errata for this System.
12
Updating System Details
b. On the System Errata Detail page for an advisory, you can download the RPMs for the affected
releases and system architectures.
2. On the Systems tab, click the link named for the system in the list of registered machines.
4. On the Edit System Properties page, you can change the name associated with your system, register it
as a local yum server for your site, or change the CSI with which it is registered.
Note
You cannot change the CSI of a system unless it is registered to your user
name.
2. On the Systems tab, click the link named for the system in the list of registered machines.
Note
If you are registered as a CSI administrator, you can access the CSI Administration tab while logged in to
ULN and perform the following tasks:
Assign yourself as administrator of a CSI, or assign someone else as administrator of a CSI. See
Section 1.14.1, Becoming a CSI Administrator.
13
Becoming a CSI Administrator
List active CSIs, list the servers that are currently registered with an active CSI, and transfer those
servers to another user or to another CSI. See Section 1.14.2, Listing Active CSIs and Transferring
Their Registered Servers.
List expired CSIs, list the servers that are currently registered with an expired CSI, and transfer those
servers to another user or to another CSI. See Section 1.14.3, Listing Expired CSIs and Transferring
Their Registered Servers.
Remove yourself or someone else as administrator of a CSI. See Section 1.14.4, Removing a CSI
Administrator.
When you register with ULN, if no administrator is currently assigned to manage the CSI, you are
prompted to click Confirm to become the CSI administrator. If you click Cancel, you cannot access the
CSI administration feature.
When logged into ULN, if you access the System tab and no administrator is currently assigned to
manage one of the CSIs for which you are registered, you are prompted to choose whether to become
the CSI administrator.
1. Click the red link labeled enter the CSI you would like to be the administrator for in this page.
2. On the Add CSI page, verify the CSI and click Confirm.
Note
On the Systems page, the CSIs of all systems that have no assigned
administrator are also shown in red.
If you are already an administrator of a CSI, you can add yourself as administrator of another CSI
provided that you have registered either a server or your ULN user name with the other CSI.
3. On the Assign Administrator page, enter the CSI, and click Add.
4. If there are existing administrators, the page lists these administrators and prompts you to click
Confirm to confirm your request. Each administrator is sent an email to inform them that you have
added yourself as an administrator of the CSI.
An administrator for a CSI can add you as an administrator for the same CSI.
1. Log in to ULN as administrator of the CSI, and select the CSI Administration tab.
14
Listing Active CSIs and Transferring Their Registered Servers
4. On the Assign Administrator page in the Select New Administrator list, click the + icon that is next to
the user name of the user that you want to add as an administrator. Their user name is added to the
Administrator box.
5. If you administer more than one CSI, select the CSI that the user will administer from the CSI drop
down list.
Note
If you want to become the administrator of a CSI but the person to whom it
is registered is no longer with your organization, contact an Oracle support
representative to request that you be made the administrator for the CSI.
1. Log in to ULN as administrator of the CSI, and select the CSI Administration tab.
2. On the Managed CSIs page in the Select Managed CSI Services pane, select the Active link. The
Managed Active CSI Services pane displays the service details for each active CSI that you administer.
3. Click the View # Server(s) link to display the details of the servers that are registered to an active CSI.
4. On the Registered Servers page, you can transfer one or more systems to another user or to another
CSI that you administer.
Note
If you transfer a system to another user, at least one of the following conditions
must be true:
One or more of the servers, for which they are the owner, must be registered
to this CSI.
He or she must be an administrator of at least one CSI for which you are also
an administrator.
a. Select the Transfer System check boxes for the systems that you want to transfer.
c. On the Transfer Registered System(s) - Owner page in the Transfer To column, click the red arrow
icon that is next to the user name of the user to whom you want to transfer ownership.
d. On the Confirm Transfer Profile - Owner page, click Apply Changes to confirm the transfer to the
new owner.
a. Select the Transfer System check boxes for the systems that you want to transfer.
15
Listing Expired CSIs and Transferring Their Registered Servers
c. On the Transfer Registered System(s) - CSI page in the Transfer To column, click the red arrow
icon that is next to the CSI to which you want to transfer the systems.
d. On the Confirm Transfer Profile - CSI page, click Apply Changes to confirm the transfer to the new
CSI.
1. Log in to ULN as administrator of the CSI, and select the CSI Administration tab.
2. On the Managed CSIs page in the Select Managed CSI Services pane, select the Expired link.
The Managed Expired CSI Services pane displays the service details for each expired CSI that you
administer.
3. Click the View # Server(s) link to display the details of the servers that are registered to an expired
CSI.
4. On the Registered Servers page, you can transfer one or more systems to another user or to another
CSI that you administer.
Note
If you transfer a system to another user, at least one of the following conditions
must be true:
One or more of the servers, for which they are the owner, must be registered
to this CSI.
He or she must be an administrator of at least one CSI for which you are also
an administrator.
a. Select the Transfer System check boxes for the systems that you want to transfer.
c. On the Transfer Registered System(s) - Owner page in the Transfer To column, click the red arrow
icon that is next to the user name of the user to whom you want to transfer ownership.
d. On the Confirm Transfer Profile - Owner page, click Apply Changes to confirm the transfer to the
new owner.
a. Select the Transfer System check boxes for the systems that you want to transfer.
c. On the Transfer Registered System(s) - CSI page in the Transfer To column, click the red arrow
icon that is next to the CSI to which you want to transfer the systems.
16
Removing a CSI Administrator
d. On the Confirm Transfer Profile - CSI page, click Apply Changes to confirm the transfer to the new
CSI.
3. On the CSI Administrators page in the Delete? column, click the trash can icon that is next to the user
name of the user that you want to remove as administrator for the CSI specified in the same row.
4. When prompted to confirm that you want to revoke administration privileges for the CSI from that user,
click OK.
This procedure is for a Red Hat Enterprise Linux 6 system. For details of equivalent
procedures for Red Hat Enterprise Linux 3, 4, and 5, see http://linux.oracle.com/
switch.html.
If you have an Oracle Linux 6 system that is registered with the Red Hat Network
(RHN), you can use the uln_register utility to register it as described in
Section 1.5, Registering an Oracle Linux 6 or Oracle Linux 7 System.
You must have a ULN account before you can register a system with ULN. You can
create a ULN account at http://linux.oracle.com/register.
If the rhn-setup-gnome package is already installed on your system, also download the
uln_register-gnome.tgz from the same URL.
If the rhn-setup-gnome package is installed on your system, extract the packages from
uln_register-gnome.tgz.
# tar -xzf uln_register-gnome.tgz
17
For More Information About ULN
5. Follow the instructions on the screen to complete the registration. The uln_register utility collects
information about your system and uploads it to Oracle.
18
Chapter 2 Yum
Table of Contents
2.1 About Yum ................................................................................................................................. 19
2.2 Yum Configuration ...................................................................................................................... 19
2.2.1 Configuring Use of a Proxy Server ................................................................................... 20
2.2.2 Yum Repository Configuration .......................................................................................... 21
2.3 Downloading the Oracle Linux Yum Server Repository Files ......................................................... 21
2.4 Using Yum from the Command Line ............................................................................................ 22
2.5 Yum Groups ............................................................................................................................... 23
2.6 Installing and Using the Yum Security Plugin ............................................................................... 23
2.7 Switching CentOS or Scientific Linux Systems to Use the Oracle Linux Yum Server ....................... 26
2.8 Creating and Using a Local ULN Mirror ....................................................................................... 26
2.9 Creating a Local Yum Repository Using an ISO Image ................................................................. 26
2.10 Setting up a Local Yum Server Using an ISO Image .................................................................. 27
2.11 For More Information About Yum .............................................................................................. 28
This chapter describes how you can use the yum utility to install and upgrade software packages.
The Oracle Linux Yum Server is a convenient way to install Oracle Linux and Oracle VM packages,
including bug fixes, security fixes and enhancements, rather than installing them from installation media.
You can access the server at http://yum.oracle.com/.
You can also subscribe to the Oracle Linux and Oracle VM errata mailing lists to be notified when new
packages are released. You can access the mailing lists at https://oss.oracle.com/mailman/listinfo/el-errata
and https://oss.oracle.com/mailman/listinfo/oraclevm-errata.
If you have registered your system with the Unbreakable Linux Network (ULN), you can use yum with ULN
channels to maintain the software on your system, as described in Chapter 1, The Unbreakable Linux
Network.
Directive Description
cachedir Directory used to store downloaded packages.
debuglevel Logging level, from 0 (none) to 10 (all).
exactarch If set to 1, only update packages for the correct architecture.
exclude A space separated list of packages to exclude from installs or updates, for
example: exclude=VirtualBox-4.? kernel*.
19
Configuring Use of a Proxy Server
Directive Description
gpgcheck If set to 1, verify the authenticity of the packages by checking the GPG
signatures. You might need to set gpgcheck to 0 if a package is unsigned, but
you should be wary that the package could have been maliciously altered.
gpgkey Pathname of the GPG public key file.
installonly_limit Maximum number of versions that can be installed of any one package.
keepcache If set to 0, remove packages after installation.
logfile Pathname of the yum log file.
obsoletes If set to 1, replace obsolete packages during upgrades.
plugins If set to 1, enable plugins that extend the functionality of yum.
proxy URL of a proxy server including the port number. See Section 2.2.1,
Configuring Use of a Proxy Server.
proxy_password Password for authentication with a proxy server.
proxy_username User name for authentication with a proxy server.
reposdir Directories where yum should look for repository files with a .repo extension.
The default directory is /etc/yum.repos.d.
The following listing shows an example [main] section from the yum configuration file.
[main]
cachedir=/var/cache/yum
keepcache=0
debuglevel=2
logfile=/var/log/yum.log
exactarch=1
obsoletes=1
gpgkey=file://media/RPM-GPG-KEY
gpgcheck=1
pligins=1
installonly_limit=3
It is possible to define repositories below the [main] section in /etc/yum.conf or in separate repository
configuration files. By default, yum expects any repository configuration files to be located in the /etc/
yum.repos.d directory unless you use the reposdir directive to define alternate directories.
If the proxy server requires authentication, additionally specify the proxy_username, and
proxy_password settings.
proxy=http://proxysvr.yourdom.com:3128
proxy_username=yumacc
proxy_password=clydenw
If you use the yum plugin (yum-rhn-plugin) to access the ULN, specify the enableProxy and
httpProxy settings in /etc/sysconfig/rhn/up2date as shown in this example.
20
Yum Repository Configuration
enableProxy=1
httpProxy=http://proxysvr.yourdom.com:3128
If the proxy server requires authentication, additionally specify the enableProxyAuth, proxyUser, and
proxyPassword settings.
enableProxy=1
httpProxy=http://proxysvr.yourdom.com:3128
enableProxyAuth=1
proxyUser=yumacc
proxyPassword=clydenw
Caution
Directive Description
baseurl Location of the repository channel (expressed as a file://, ftp://,
http://, or https:// address). This directive must be specified.
enabled If set to 1, permit yum to use the channel.
name Descriptive name for the repository channel. This directive must be specified.
Any other directive that appears in this section overrides the corresponding global definition in [main]
section of the yum configuration file. See the yum.conf(5) manual page for more information.
The following listing shows an example repository section from a configuration file.
[ol6_u2_base]
name=Oracle Linux 6 U2 - $basearch - base
baseurl=http://yum.oracle.com/repo/OracleLinux/OL6/2/base/$basearch
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY
gpgcheck=1
enabled=1
In this example, the values of gpgkey and gpgcheck override any global setting. yum substitutes the
name of the current system's architecture for the variable $basearch.
The following procedure assumes that yum on your system is configured to expect
to find repository files in the default /etc/yum.repos.d directory.
21
Using Yum from the Command Line
2. Use the wget utility to download the repository configuration file that is appropriate for your system.
# wget http://yum.oracle.com/public-yum-release.repo
The /etc/yum.repos.d directory is updated with the repository configuration file, in this example,
public-yum-ol6.repo.
3. You can enable or disable repositories in the file by setting the value of the enabled directive to 1 or 0
as required.
Command Description
yum repolist Lists all enabled repositories.
yum list Lists all packages that are available in all enabled repositories and
all packages that are installed on your system.
yum list installed Lists all packages that are installed on your system.
yum list available Lists all packages that are available to be installed in all enabled
repositories.
yum search string Searches the package descriptions for the specified string.
yum provides feature Finds the name of the package to which the specified file or feature
belongs. For example:
22
Yum Groups
Command Description
yum clean all Removes all cached package downloads and cached headers
that contain information about remote packages. Running
this command can help to clear problems that can result from
unfinished transactions or out-of-date headers.
yum help Displays help about yum usage.
yum help command Displays help about the specified yum command. For example:
To list the files in a package, use the repoquery utility, which is included in the yum-utils package. For
example, the following command lists the files that the btrfs-progs package provides.
# repoquery -l btrfs-progs
/sbin/btrfs
/sbin/btrfs-convert
/sbin/btrfs-debug-tree
.
.
.
Note
Command Description
yum grouplist Lists installed groups and groups that are available for installation.
yum groupinfo groupname Displays detailed information about a group.
yum groupinstall groupname Installs all the packages in a group.
yum groupupdate groupname Updates all the packages in a group.
yum groupremove groupname Removes all the packages in a group.
23
Installing and Using the Yum Security Plugin
To list the errata that are available for your system, enter:
# yum updateinfo list
Loaded plugins: refresh-packagekit, rhnplugin, security
ELBA-2012-1518 bugfix NetworkManager-1:0.8.1-34.el6_3.x86_64
ELBA-2012-1518 bugfix NetworkManager-glib-1:0.8.1-34.el6_3.x86_64
ELBA-2012-1518 bugfix NetworkManager-gnome-1:0.8.1-34.el6_3.x86_64
ELBA-2012-1457 bugfix ORBit2-2.14.17-3.2.el6_3.x86_64
ELBA-2012-1457 bugfix ORBit2-devel-2.14.17-3.2.el6_3.x86_64
ELSA-2013-0215 Important/Sec. abrt-2.0.8-6.0.1.el6_3.2.x86_64
ELSA-2013-0215 Important/Sec. abrt-addon-ccpp-2.0.8-6.0.1.el6_3.2.x86_64
ELSA-2013-0215 Important/Sec. abrt-addon-kerneloops-2.0.8-6.0.1.el6_3.2.x86_64
ELSA-2013-0215 Important/Sec. abrt-addon-python-2.0.8-6.0.1.el6_3.2.x86_64
ELSA-2013-0215 Important/Sec. abrt-cli-2.0.8-6.0.1.el6_3.2.x86_64
ELSA-2013-0215 Important/Sec. abrt-desktop-2.0.8-6.0.1.el6_3.2.x86_64
...
The output from the command sorts the available errata in order of their IDs, and it also specifies whether
each erratum is a security patch (severity/Sec.), a bug fix (bugfix), or a feature enhancement
(enhancement). Security patches are listed by their severity: Important, Moderate, or Low.
You can use the --sec-severity option to filter the security errata by severity, for example:
# yum updateinfo list --sec-severity=Moderate
Loaded plugins: refresh-packagekit, rhnplugin, security
ELSA-2013-0269 Moderate/Sec. axis-1.2.1-7.3.el6_3.noarch
ELSA-2013-0668 Moderate/Sec. boost-1.41.0-15.el6_4.x86_64
ELSA-2013-0668 Moderate/Sec. boost-date-time-1.41.0-15.el6_4.x86_64
ELSA-2013-0668 Moderate/Sec. boost-devel-1.41.0-15.el6_4.x86_64
ELSA-2013-0668 Moderate/Sec. boost-filesystem-1.41.0-15.el6_4.x86_64
ELSA-2013-0668 Moderate/Sec. boost-graph-1.41.0-15.el6_4.x86_64
ELSA-2013-0668 Moderate/Sec. boost-iostreams-1.41.0-15.el6_4.x86_64
ELSA-2013-0668 Moderate/Sec. boost-program-options-1.41.0-15.el6_4.x86_64
ELSA-2013-0668 Moderate/Sec. boost-python-1.41.0-15.el6_4.x86_64
...
To list the security errata by their Common Vulnerabilities and Exposures (CVE) IDs instead of their errata
IDs, specify the keyword cves as an argument:
# yum updateinfo list cves
Loaded plugins: refresh-packagekit, rhnplugin, security
CVE-2012-5659 Important/Sec. abrt-2.0.8-6.0.1.el6_3.2.x86_64
CVE-2012-5660 Important/Sec. abrt-2.0.8-6.0.1.el6_3.2.x86_64
CVE-2012-5659 Important/Sec. abrt-addon-ccpp-2.0.8-6.0.1.el6_3.2.x86_64
CVE-2012-5660 Important/Sec. abrt-addon-ccpp-2.0.8-6.0.1.el6_3.2.x86_64
CVE-2012-5659 Important/Sec. abrt-addon-kerneloops-2.0.8-6.0.1.el6_3.2.x86_64
CVE-2012-5660 Important/Sec. abrt-addon-kerneloops-2.0.8-6.0.1.el6_3.2.x86_64
CVE-2012-5659 Important/Sec. abrt-addon-python-2.0.8-6.0.1.el6_3.2.x86_64
CVE-2012-5660 Important/Sec. abrt-addon-python-2.0.8-6.0.1.el6_3.2.x86_64
...
Similarly, the keywords bugfix, enhancement, and security filter the list for all bug fixes,
enhancements, and security errata.
You can use the --cve option to display the errata that correspond to a specified CVE, for example:
# yum updateinfo list --cve CVE-2012-2677
Loaded plugins: refresh-packagekit, rhnplugin, security
ELSA-2013-0668 Moderate/Sec. boost-1.41.0-15.el6_4.x86_64
ELSA-2013-0668 Moderate/Sec. boost-date-time-1.41.0-15.el6_4.x86_64
ELSA-2013-0668 Moderate/Sec. boost-devel-1.41.0-15.el6_4.x86_64
ELSA-2013-0668 Moderate/Sec. boost-filesystem-1.41.0-15.el6_4.x86_64
ELSA-2013-0668 Moderate/Sec. boost-graph-1.41.0-15.el6_4.x86_64
ELSA-2013-0668 Moderate/Sec. boost-iostreams-1.41.0-15.el6_4.x86_64
ELSA-2013-0668 Moderate/Sec. boost-program-options-1.41.0-15.el6_4.x86_64
24
Installing and Using the Yum Security Plugin
To update all packages for which security-related errata are available to the latest versions of the
packages, even if those packages include bug fixes or new features but not security errata, enter:
# yum --security update
To update all packages to the latest versions that contain security errata, ignoring any newer packages that
do not contain security errata, enter:
# yum --security update-minimal
To update all kernel packages to the latest versions that contain security errata, enter:
# yum --security update-minimal kernel*
You can also update only those packages that correspond to a CVE or erratum, for example:
# yum update --cve CVE-2012-3954
Note
Some updates might require you to reboot the system. By default, the boot
manager will automatically enable the most recent kernel version.
25
Switching CentOS or Scientific Linux Systems to Use the Oracle Linux Yum Server
To perform the switch to Oracle Linux, run the following commands as root:
# curl -O https://linux.oracle.com/switch/centos2ol.sh
# sh centos2ol.sh
The system must have sufficient storage space to host a full Oracle Linux Media
Pack DVD image (approximately 3.5 GB for Oracle Linux Release 6 Update 3).
To create a local yum repository (for example, if a system does not have Internet access):
1. On a system with Internet access, download a full Oracle Linux DVD image from the Oracle Software
Delivery Cloud at http://edelivery.oracle.com/linux onto removable storage (such as a USB memory
stick). For example, V33411-01.iso contains the Oracle Linux Release 6 Update 3 Media Pack for
x86 (64 bit).
Note
You can verify that the ISO was copied correctly by comparing its checksum
with the digest value that is listed on edelivery.oracle.com, for example:
# sha1sum V33411-01.iso
7daae91cc0437f6a98a4359ad9706d678a9f19de V33411-01.iso
2. Transfer the removable storage to the system on which you want to create a local yum repository, and
copy the DVD image to a directory in a local file system.
# cp /media/USB_stick/V33411-01.iso /ISOs
3. Create a suitable mount point, for example /var/OSimage/OL6.3_x86_64, and mount the DVD
image on it.
# mkdir -p /var/OSimage/OL6.3_x86_64
# mount -o loop,ro /ISOs/V33411-01.iso /var/OSimage/OL6.3_x86_64
Note
Include the read-only mount option (ro) to avoid changing the contents of the
ISO by mistake.
26
Setting up a Local Yum Server Using an ISO Image
4. Create an entry in /etc/fstab so that the system always mounts the DVD image after a reboot.
/ISOs/V33411-01.iso /var/OSimage/OL6.3_x86_64 iso9660 loop,ro 0 0
5. In the /etc/yum.repos.d directory, edit the existing repository files, such as public-yum-
ol6.repo or ULN-base.repo, and disable all entries by setting enabled=0.
6. Create the following entries in a new repository file (for example, /etc/yum.repos.d/OL63.repo).
[OL63]
name=Oracle Linux 6.3 x86_64
baseurl=file:///var/OSimage/OL6.3_x86_64
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY
gpgcheck=1
enabled=1
1. Choose one of the systems to be the yum server, and create a local yum repository on it as described
in Section 2.9, Creating a Local Yum Repository Using an ISO Image.
2. Install the Apache HTTP server from the local yum repository.
# yum install httpd
a. Use the semanage command to define the default file type of the repository root directory hierarchy
as httpd_sys_content_t:
# /usr/sbin/semanage fcontext -a -t httpd_sys_content_t "/var/OSimage(/.*)?"
b. Use the restorecon command to apply the file type to the entire repository.
# /sbin/restorecon -R -v /var/OSimage
Note
27
For More Information About Yum
a. Specify the resolvable domain name of the server in the argument to ServerName.
ServerName server_addr:80
If the server does not have a resolvable domain name, enter its IP address instead.
b. Verify that the setting of the Options directive in the <Directory "/var/www/html"> section
specifies Indexes and FollowSymLinks to allow you to browse the directory hierarchy, for
example:
Options Indexes FollowSymLinks
6. Start the Apache HTTP server, and configure it to start after a reboot.
# service httpd start
# chkconfig httpd on
7. If you have enabled a firewall on your system, configure it to allow incoming HTTP connection requests
on TCP port 80.
For example, the following command configures iptables to allow incoming HTTP connection
requests and saves the change to the firewall configuration:
# iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
# service iptables save
[OL63]
name=Oracle Linux 6.3 x86_64
baseurl=http://server_addr/OSimage/OL6.3_x86_64
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY
gpgcheck=1
enabled=1
Replace server_addr with the IP address or resolvable host name of the local yum server.
9. On each client, copy the repository file from the server to the /etc/yum.repos.d directory.
10. In the /etc/yum.repos.d directory, edit any other repository files, such as public-yum-ol6.repo
or ULN-base.repo, and disable all entries by setting enabled=0.
11. On the server and each client, test that you can use yum to access the repository.
# yum repolist
Loaded plugins: refresh-packagekit, security
...
repo id repo name status
OL63 Oracle Linux 6.3 x86_64 25,459
repolist: 25,459
For more information about how to download the latest packages from the Unbreakable Linux Network and
make the packages available through a local yum server, see http://www.oracle.com/technetwork/articles/
servers-storage-admin/yum-repo-setup-1659167.html.
28
Chapter 3 Ksplice Uptrack
Table of Contents
3.1 About Ksplice Uptrack ................................................................................................................ 29
3.1.1 Supported Kernels ........................................................................................................... 29
3.2 Registering to Use Ksplice Uptrack ............................................................................................. 30
3.3 Installing Ksplice Uptrack ............................................................................................................ 30
3.4 Configuring Ksplice Uptrack ........................................................................................................ 31
3.5 Managing Ksplice Updates .......................................................................................................... 32
3.6 Patching and Updating Your System ........................................................................................... 33
3.7 Removing the Ksplice Uptrack software ....................................................................................... 33
3.8 About Ksplice Offline Client ......................................................................................................... 33
3.8.1 Modifying a Local Yum Server to Act as a Ksplice Mirror ................................................... 33
3.8.2 Configuring Ksplice Offline Clients .................................................................................... 34
3.9 For More Information About Ksplice Uptrack ................................................................................ 36
This chapter describes how to configure Ksplice Uptrack to update the kernel on a running system.
Note
An enhanced version of the Ksplice client is available that can patch shared
libraries for user-space processes that are running on an Oracle Linux 6 system.
For more information, see About the Enhanced Ksplice Client in the Oracle Linux
Ksplice User's Guide.
All Oracle Unbreakable Enterprise Kernel versions for Oracle Linux 5 and Oracle Linux 6 starting with
2.6.32-100.28.9 (released March 16, 2011).
All Oracle Linux 5 Red Hat Compatible Kernels starting with Oracle Linux 5.4 (2.6.18-164.el5, released
September 9, 2009).
All Oracle Linux 5 Red Hat Compatible Kernels with bug fixes added by Oracle starting with Oracle Linux
5.6 (2.6.18-238.0.0.0.1.el5, released January 22, 2011).
29
Registering to Use Ksplice Uptrack
To confirm whether a particular kernel is supported, install the Uptrack client on a system that is running
the kernel.
If you already have an account on ULN, you can register your system to use Ksplice Uptrack at http://
linux.oracle.com.
1. From your browser, log in to ULN with your existing user name and password. If your subscription
grants you access to Ksplice, the ULN home page displays the Ksplice Uptrack Registration button.
2. Click Ksplice Uptrack Registration. The screen displays all valid Customer Support Identifiers (CSIs)
for your account.
3. Select the CSI that you want to use and click Register. The screen displays an acknowledgment that a
Ksplice account has been created and that an e-mail containing the Ksplice access key, a temporary
password for Ksplice, and a URL for confirming your registration has been sent to your e-mail account.
4. When you receive the e-mail, open the URL that it contains.
After registering to use Ksplice Uptrack, you can log in at https://uptrack.ksplice.com using your e-mail
address as your user name, and the temporary password. You must change your password when you first
log in. You can view the status of your registered systems, the patches that have been applied, and the
patches that are available. You can also create access control groups for your registered systems.
The system on which you want to install Ksplice Uptrack must meet the following criteria:
The operating system must be Oracle Linux 5 or Oracle Linux 6 with a supported version of either the
Unbreakable Enterprise Kernel or the Red Hat Compatible Kernel installed. You can verify the kernel
version by using the uname -a command. See Section 3.1.1, Supported Kernels.
The kernel that is running currently is assumed to be the one that you want to update. Ksplice Uptrack
applies updates only to the running kernel.
30
Configuring Ksplice Uptrack
2. If you use an Internet proxy, configure the HTTP and HTTPS settings for the proxy in the shell.
For the sh, ksh, or bash shells, use commands such as the following:
# http_proxy=http://proxy_URL:http_port
# https_proxy=http://proxy_URL:https_port
# export http_proxy https_proxy
3. Using a browser, log in at http://linux.oracle.com with the ULN user name and password that you used
to register the system, and perform the following steps:
a. On the Systems tab, click the link named for your system in the list of registered machines.
c. On the System Summary page, select the Ksplice for Oracle Linux channel for the correct release
and your system's architecture (i386 or x86_64) from the list of available channels and click the
right arrow (>) to move it to the list of subscribed channels.
The access key for Ksplice Uptrack is retrieved from ULN and added to /etc/uptrack/
uptrack.conf, for example:
[Auth]
accesskey = 0e1859ad8aea14b0b4306349142ce9160353297daee30240dab4d61f4ea4e59b
5. To enable the automatic installation of updates, change the following entry in /etc/uptrack/
uptrack.conf:
autoinstall = no
so that it reads:
autoinstall = yes
For information about configuring Ksplice Uptrack, see Section 3.4, Configuring Ksplice Uptrack.
For information about managing Ksplice updates, see Section 3.5, Managing Ksplice Updates.
31
Managing Ksplice Updates
https_proxy = https://proxy_URL:https_port
You receive e-mail notification when Ksplice updates are available for your system.
To make Ksplice Uptrack install all updates automatically as they become available, set the following entry:
autoinstall = yes
Note
To install updates automatically at boot time, the following entry must appear in /etc/uptrack/
uptrack.conf:
install_on_reboot = yes
When you boot the system into the same kernel, the /etc/init.d/uptrack script reapplies the installed
Ksplice updates to the kernel.
To prevent Ksplice Uptrack from automatically reapplying updates to the kernel when you reboot the
system, set the entry to:
install_on_reboot = no
To install all available updates at boot time, even if you boot the system into a different kernel, uncomment
the following entry in /etc/uptrack/uptrack.conf:
#upgrade_on_reboot = yes
so that it reads:
upgrade_on_reboot = yes
After Ksplice has applied updates to a running kernel, the kernel has an effective version that is different
from the original boot version displayed by the uname -a command. Use the uptrack-uname command
to display the effective version of the kernel:
# uptrack-uname -a
uptrack-uname supports the commonly used uname flags, including -a and -r, and provides a way
for applications to detect that the kernel has been patched. The effective version is based on the version
number of the latest patch that Ksplice Uptrack has applied to the kernel.
To view the updates that Ksplice has made to the running kernel:
# uptrack-show
32
Patching and Updating Your System
To prevent Ksplice Uptrack from reapplying the updates at the next system reboot, create the empty file /
etc/uptrack/disable:
# touch /etc/uptrack/disable
Alternatively, specify nouptrack as a parameter on the boot command line when you next restart the
system.
A Ksplice offline client does not require a network connection to be able to apply the update package to
the kernel. For example, you could use rpm to install the update package from a memory stick. However,
a more usual arrangement would be to create a local yum server that acts as a mirror of the Ksplice for
Oracle Linux channels on ULN. At regular intervals, you download the latest Ksplice update packages to
this server. After installing Ksplice Offline Client on your local systems, they can connect to the local ULN
mirror to receive updates. They do not require access the Oracle Uptrack server.
Note
You cannot use the web interface or the Ksplice Uptrack API to monitor systems
that are running Ksplice Offline Client as such systems are not registered with
https://uptrack.ksplice.com.
You must have configured the system as a local yum server. See Creating and Using a Local ULN Mirror
in the Oracle Linux Unbreakable Linux Network User's Guide.
33
Configuring Ksplice Offline Clients
The system should also have enough disk space to store copies of the packages that it hosts. As a
general rule, you require between 6 and 10 GB of space for the packages of each major release.
1. Using a browser, log in at http://linux.oracle.com with the ULN user name and password that you used
to register the system.
2. On the Systems tab, click the link named for your system in the list of registered machines.
6. On the System Summary page, select channels from the list of available or subscribed channels and
click the arrows to move the channels between the lists.
Modify the subscribed channels to include Ksplice for Oracle Linux for the system architectures that you
want to support as well as any other channels that you want to make available to local systems.
For example, the following table shows the channels that are available for Ksplice on Oracle Linux.
Channel Name Channel Label Description
Ksplice for Oracle ol5_i386_ksplice Oracle Ksplice clients, updates, and dependencies
Linux 5 (i386) for Oracle Linux 5 on i386 systems.
Ksplice for Oracle ol5_x86_64_ksplice Oracle Ksplice clients, updates, and dependencies
Linux 5 (x86_64) for Oracle Linux 5 on x86_64 systems.
Ksplice for Oracle ol6_i386_ksplice Oracle Ksplice clients, updates, and dependencies
Linux 6 (i386) for Oracle Linux 6 on i386 systems.
Ksplice for Oracle ol6_x86_64_ksplice Oracle Ksplice clients, updates, and dependencies
Linux 6 (x86_64) for Oracle Linux 6 on x86_64 systems.
Ksplice for Oracle ol7_x86_64_ksplice Oracle Ksplice clients, updates, and dependencies
Linux 7 (x86_64) for Oracle Linux 7 on x86_64 systems.
For more information about the release channels that are available, see http://www.oracle.com/
technetwork/articles/servers-storage-admin/yum-repo-setup-1659167.html.
7. When you have finished selecting channels, click Save Subscriptions and log out of ULN.
1. In the /etc/yum.repos.d directory, edit the existing repository file, such as public-yum-
ol6.repo or ULN-base.repo, and disable all entries by setting enabled=0.
2. In the /etc/yum.repos.d directory, create the file local-yum.repo, which contains entries such
as the following for an Oracle Linux 6 client:
[ol6_x86_64_ksplice]
name=Ksplice for $releasever - $basearch
34
Configuring Ksplice Offline Clients
baseurl=http://local_yum_server/yum/OracleLinux/OL6/ksplice/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY
gpgcheck=1
enabled=1
[ol6_latest]
name=Oracle Linux $releasever - $basearch - latest
baseurl=http://local_yum_server/yum/OracleLinux/OL6/latest/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY
gpgcheck=1
enabled=1
[ol6_addons]
name=Oracle Linux $releasever - $basearch - addons
baseurl=http://local_yum_server/yum/OracleLinux/OL6/addons/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY
gpgcheck=1
enabled=0
[ol6_oracle]
name=Oracle Linux $releasever - $basearch - oracle
baseurl=http://local_yum_server/yum/OracleLinux/OL6/oracle/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY
gpgcheck=1
enabled=0
[ol6_ga_base]
name=Oracle Linux $releasever GA - $basearch - base
baseurl=http://local_yum_server/yum/OracleLinux/OL6/0/base/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY
gpgcheck=1
enabled=0
[ol6_u1_base]
name=Oracle Linux $releasever U1 - $basearch - base
baseurl=http://local_yum_server/yum/OracleLinux/OL6/1/base/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY
gpgcheck=1
enabled=0
[ol6_u2_base]
name=Oracle Linux $releasever U2 - $basearch - base
baseurl=http://local_yum_server/yum/OracleLinux/OL6/2/base/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY
gpgcheck=1
enabled=0
[ol6_u3_base]
name=Oracle Linux $releasever U3 - $basearch - base
baseurl=http://local_yum_server/yum/OracleLinux/OL6/3/base/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY
gpgcheck=1
enabled=0
[ol6_ga_patch]
name=Oracle Linux $releasever GA - $basearch - patch
baseurl=http://local_yum_server/yum/OracleLinux/OL6/0/patch/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY
gpgcheck=1
enabled=0
[ol6_u1_patch]
name=Oracle Linux $releasever U1 - $basearch - patch
baseurl=http://local_yum_server/yum/OracleLinux/OL6/1/patch/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY
gpgcheck=1
enabled=0
35
For More Information About Ksplice Uptrack
[ol6_u2_patch]
name=Oracle Linux $releasever U2 - $basearch - patch
baseurl=http://local_yum_server/yum/OracleLinux/OL6/2/patch/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY
gpgcheck=1
enabled=0
[ol6_u3_patch]
name=Oracle Linux $releasever U3 - $basearch - patch
baseurl=http://local_yum_server/yum/OracleLinux/OL6/3/patch/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY
gpgcheck=1
enabled=0
Replace local_yum_server with the IP address or resolvable host name of the local yum server.
In the sample configuration, only the ol6_latest and ol6_x86_64_ksplice channels are enabled.
Note
If yum cannot connect to the local yum server, check that the firewall settings on that server allow
incoming TCP connections to port 80.
4. Install the Ksplice updates that are available for the kernel.
# yum install uptrack-updates-`uname -r`
For an Oracle Linux 5 client, use this form of the command instead:
As new Ksplice updates are made available, you can use this command to pick up these updates
and apply them. It is recommended that you set up a cron job to perform this task. For example, the
following crontab entry for root runs the command once per day at 7am:
0 7 * * * yum install uptrack-updates-`uname -r`
To display information about Ksplice updates, use the rpm -qa | grep uptrack-updates and
uptrack-show commands.
36
Chapter 4 Boot Configuration
Table of Contents
4.1 About the Boot Process .............................................................................................................. 37
4.2 About the GRUB Boot Loader ..................................................................................................... 38
4.2.1 About the GRUB Configuration File .................................................................................. 39
4.2.2 Configuring a GRUB Password ........................................................................................ 42
4.2.3 Using GRUB .................................................................................................................... 43
4.3 About Run Levels ....................................................................................................................... 43
4.3.1 Displaying the Run Level ................................................................................................. 44
4.3.2 Changing the Run Level .................................................................................................. 44
4.3.3 Shutting down the System ............................................................................................... 44
4.3.4 About Service Scripts ....................................................................................................... 44
4.3.5 About the Service Configuration GUI ................................................................................ 45
4.3.6 Starting and Stopping Services ......................................................................................... 46
4.3.7 Configuring Services to Start at Different Run Levels ......................................................... 46
This chapter describes the Oracle Linux boot process, how to use the GRUB boot loader, how to change
the run level of a system, and how to configure the services that are available at each run level.
1. The computer's BIOS performs a power-on self-test (POST), and then locates and initializes any
peripheral devices including the hard disk.
2. The BIOS reads the Master Boot Record (MBR) into memory from the boot device. (For GUID Partition
Table (GPT) disks, this MBR is the protective MBR on the first sector of the disk.) The MBR stores
information about the organization of partitions on that device. On a computer with x86 architecture,
the MBR occupies the first 512 bytes of the boot device. The first 446 bytes contain boot code that
points to the bootloader program, which can be on the same device or on another device. The next
64 bytes contain the partition table. The final two bytes are the boot signature, which is used for error
detection. The default bootloader program used on Oracle Linux is GRUB, which stands for GRand
Unified Bootloader.
3. The GRUB bootloader loads the Oracle Linux kernel into memory.
5. The kernel reads the initramfs file, extracts its contents into a temporary, memory-based file system
(tmpfs), and loads the modules that the file system contains.
6. The kernel starts the /sbin/init process with a process ID of 1 (PID 1). init is the ancestor of all
processes on a system. init reads its job configuration from the /etc/init directory. The /etc/
init/rcS.conf file controls how init handles system initialization.
7. init reads /etc/inittab to determine the default run level. The entry in /etc/inittab should
take the form id:N:initdefault:, where N is the default run level. If the file does not define a
default boot level, the default run level is 3.
37
About the GRUB Boot Loader
Note
Do not edit /etc/inittab other than to change or comment out the default
run level.
The sole function of /etc/inittab is to define the default run level. The
*.conf scripts in /etc/init determine how init should behave in response
to changes in system state.
You can use a kernel boot parameter to override the default run level. See
Section 4.2.1.1, Kernel Boot Parameters.
starting swapping
9. init executes scripts in the /etc/rcX.d directory to bring the system to the default run level, X. The
/etc/init/rc.conf file controls how init starts individual run levels. See Section 4.3, About Run
Levels and Section 4.3.4, About Service Scripts.
10. init runs any actions that you have defined in /etc/rc.local.
Note
The Upstart version of init in Oracle Linux does not keep track of system run
levels. Instead, user-space utilities such as initctl implement run levels. The
processes that init manages are known as jobs, which are defined by files in the
/etc/init directory. init is an event-based daemon, starting or stopping jobs
in response to changes in the system state, which can be the result of other jobs
starting or stopping.
For information on Upstart and on how to write Upstart event handlers, see the init(5), init(8), and
initctl(8) manual pages.
38
About the GRUB Configuration File
information by editing the /boot/grub/grub.conf file, by using the GRUB menu, or by entering it on
the command line. A portion of the GRUB bootloader code (stage 1 code) is written to the MBR, and the
remainder is written to the /boot partition.
Stage 1 Stage 1 code is stored in the MBR. This code contains a block list that points to the next
stage of GRUB, which is either stage1_5 or stage 2, depending on the file system type.
An unamended copy of the stage 1 code can be found in the file /boot/grub/stage1.
# file /boot/grub/stage1
/boot/grub/stage1: x86 boot sector; GRand Unified Bootloader, stage1 version 0x3,
GRUB version 0.94, code offset 0x48
Stage 1_5 Stage1_5 code allows GRUB to interpret different types of file system. For some file system
types such as ext4, GRUB does not need to load stage1_5. The code for each file system
type is stored as files in /boot/grub:
# cd /boot/grub
# ls *stage1_5
e2fs_stage1_5 iso9660_stage1_5 reiserfs_stage1_5 xfs_stage1_5
fat_stage1_5 jfs_stage1_5 ufs2_stage1_5
ffs_stage1_5 minix_stage1_5 vstafs_stage1_5
Stage 2 Stage 2 code reads /boot/grub/grub.conf to determine how to load the kernel. The stage
2 code is stored in the file /boot/grub/stage2:
# ls -al /boot/grub/stage2
-rw-r--r--. 1 root root 125976 Jun 28 2012 /boot/grub/stage2
default Specifies the kernel entry that GRUB should boot by default. GRUB counts the kernel
entries in the configuration file starting at 0. The directive default=0 means that GRUB
boots the first kernel entry by default, unless you override this action. If you have installed
the Unbreakable Enterprise Kernel, it is configured as the first entry, and the Red Hat
Compatible Kernel is configured as the second entry. Changing the value of default to
1 would cause GRUB to boot the Red Hat Compatible Kernel by default.
timeout Specifies the number of seconds that GRUB should wait for keyboard input before
booting the default kernel. Pressing any alphanumeric key within this period displays
the GRUB menu. The default timeout is 5 seconds. A value of 0 causes GRUB to boot
the default kernel immediately. A value of -1 or no value at all causes GRUB to wait
indefinitely until you press a key.
39
About the GRUB Configuration File
splashimage Specifies the splash screen that hides boot messages. Pressing Esc bypasses the splash
screen. The default splash image is (hd0,0)/grub/splash.xpm.gz, which is a
gzipped, xpm-format file.
hiddenmenu If specified, instructs GRUB not to display the GRUB menu by default unless a key is
pressed.
password If specified with the arguments --md5 pwhash, specifies the MD5 hash of a GRUB
password generated using the /sbin/grub-md5-crypt command. See Section 4.2.2,
Configuring a GRUB Password.
Following these directives are title entries that represent each bootable Oracle Linux kernel or other
operating system partition.
For Linux systems, the title contains a description of the kernel and the kernel version number in
parentheses. Each title is followed by root, kernel, initrd, and optional lock directives, which
should be indented:
lock If specified, you must enter the correct GRUB password to boot the specified kernel or operating
system. See Section 4.2.2, Configuring a GRUB Password.
root Specifies the root partition, which can be on a local disk or on a SAN-attached disk. The first
hard drive detected by the BIOS is named hd0, the second is named hd1, and so on. The
partitions on a disk are numbered from 0. For example, root (hd0,1) specifies the first
detected disk and the second partition on that disk. The mapping between BIOS-detected disks
and device files is stored in /boot/grub/device.map, for example:
# cat /boot/grub/device.map
# this device map was generated by anaconda
(hd0) /dev/sda
kernel Specifies the kernel version to be booted as a path relative to the root of the boot partition,
together with any kernel boot parameters. See Section 4.2.1.1, Kernel Boot Parameters.
initrd Specifies the initramfs file as a path relative to the root of the boot partition. The kernel uses
this file to create the initial root file system that it mounts before the real root file system. The
purpose of the initial root file system is to allow the kernel to preload driver modules for IDE,
SCSI, RAID and other devices, so that it can access and mount the real root file system. After
the newly-loaded kernel has complete access to the real root file system, it switches over to
using it.
initramfs files accompany kernel distributions and usually have the same version number as
the kernel that they support. You would not usually need to change or modify an initramfs file
unless you build a kernel to support a new device driver module.
Note
The name initrd is a legacy of when the initial root file system was
provided as a file system image. The initramfs file is actually a cpio
archive.
The following sample entries are taken from a GRUB configuration file:
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
40
About the GRUB Configuration File
In this example, the default kernel is the Unbreakable Enterprise Kernel (3.6.39-400.17.1.el6uek.x86_64)
and the other bootable kernel is the Red Hat Compatible Kernel (2.6.32-358.0.1.el6.x86_64). As this
system has a separate boot partition, the paths of the kernel and initrd files are given relative to the
root of that partition.
Option Description
1|2|3|4|5 Specifies the run level, overriding the value set in /
etc/inittab.
KEYBOARDTYPE=kbtype Specifies the keyboard type, which is written to /
etc/sysconfig/keyboard in the initramfs.
KEYTABLE=kbtype Specifies the keyboard layout, which is written to /
etc/sysconfig/keyboard in the initramfs.
LANG=language_territory.codeset Specifies the system language and code set,
which is written to /etc/sysconfig/i18n in the
initramfs.
max_loop=N Specifies the number of loop devices (/dev/
loop*) that are available for accessing files as
block devices. The default and maximum values of N
are 8 and 255.
nouptrack Disables Ksplice Uptrack updates from being
applied to the kernel.
quiet Reduces debugging output.
rd_LUKS_UUID=UUID Activates an encrypted Linux Unified Key Setup
(LUKS) partition with the specified UUID.
rd_LVM_VG=vg/lv_vol Specifies an LVM volume group and volume to be
activated.
rd_NO_LUKS Disables detection of an encrypted LUKS partition.
rhgb Specifies that the Red Hat graphical boot display
should be used to indicate the progress of booting.
rn_NO_DM Disables Device-Mapper (DM) RAID detection.
41
Configuring a GRUB Password
Option Description
rn_NO_MD Disables Multiple Device (MD) RAID detection.
ro root=/dev/mapper/vg-lv_root Specifies that the root file system is to be mounted
read only, and specifies the root file system by the
device path of its LVM volume (where vg is the
name of the volume group).
rw root=UUID=UUID Specifies that the root (/) file system is to be
mounted read-writable at boot time, and specifies
the root partition by its UUID.
selinux=0 Disables SELinux.
single Boots the computer in single-user mode, without
prompting for the root password.
SYSFONT=font Specifies the console font, which is written to /etc/
sysconfig/i18n in the initramfs.
The kernel boot parameters that were last used to boot a system are recorded in /proc/cmdline, for
example:
# cat /proc/cmdline
ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=us
LANG=en_US.UTF-8 rd_NO_MD rd_LVM_LV=VolGroup/lv_swap SYSFONT=latarcyrheb-sun16
rd_LVM_LV=VolGroup/lv_root rd_NO_DM rhgb quiet selinux=0
Note
1. Use the following command to generate the MD5 hash of your password:
# /sbin/grub-md5-crypt
Password: clydenw
Retype password: clydenw
$1$qhqh.1$7MQxS6GHg4IlOFMdnDx9S.
2. Edit /boot/grub/grub.conf, and add a password entry below the timeout entry near the top of
the file, for example:
timeout=5
password --md5 pwhash
3. If GRUB has been configured to boot multiple operating systems on the same machine, add a lock
entry to after the title entry for each operating system, for example:
42
Using GRUB
title Windows
lock
When you reboot the machine, you must press P and enter the GRUB password before you can access the
GRUB command interface.
All changes that you make at boot time are temporary. GRUB does not update the
configuration file. To make your changes permanent, boot the system, and use a
text editor to modify the entries in /boot/grub/grub.conf.
When booting a system, you can access the GRUB menu by pressing a key before the timeout expires.
GRUB displays the title entries from the /boot/grub/grub.conf file, and highlights the default entry.
You can use the up and down arrow keys to choose a different entry and press Enter to boot it.
If you have set a GRUB password, you must press P and enter the valid password to be able to edit the
titles or change kernel boot parameters. To edit any of the root, kernel, or initrd directives, press E.
To edit the kernel directive only, press A. To use the GRUB command line, press C.
If you press E, select the root, kernel, or initrd directive, and press E to edit it. Initially, the entry
cursor is placed at the end of the directive. Use the Home, End, and left and right arrow keys to move
through the line. Use the Backspace and Delete keys to erase characters, and type in your changes at
the cursor position. Press Enter to save your changes or press Esc to discard them. Press B to start the
boot sequence using the changes that you have made.
If you press A, you can edit the root directive. Initially, the entry cursor is placed at the end of the
directive. Use the Home, End, and left and right arrow keys to move through the line. Use the Backspace
and Delete keys to erase characters, and type in your changes at the cursor position. Press Enter to
save your changes and boot the system or press Esc to discard the changes.
If you press C, you can enter GRUB commands. Enter help to see a list of commands. Enter help
command to see more information about a specified command.
For more information, enter the info grub command to access the GRUB manual.
The following run levels are defined by default under Oracle Linux:
43
Displaying the Run Level
If there is no previous run level, N is displayed. In this example, the current run level is 5.
The who -r command also displays the current run level, for example:
# who -r
run-level 5 2013-03-15 09:24
For more information, see the runlevel(8) and who(1) manual pages.
Tip
You can also use the init command to change run level. Any instance of init that does not have a
process ID of 1 invokes telinit to change the run level.
For example, to shutdown a system in 5 minutes time and then reboot it:
# shutdown -r 5
The system is going down for reboot in 5 minutes!
44
About the Service Configuration GUI
For each run level N, there is an /etc/rcN.d directory that contains the scripts that init uses to start
and stop services. For example, /etc/rc3.d is the directory for run level 3. Each script in an /etc/
rcN.d directory is actually a symbolic link to a script in /etc/init.d. Using symbolic links allows you to
reconfigure run levels without affecting the scripts that the symbolic links reference.
The name of each symbolic link begins with either K (for kill) or S (for start), followed by a sequence
number that indicates the order in which init should kill or start the services. init first stops each of the
K* services in the order of their sequence numbers by executing each K script with the argument stop.
init then starts each of the S* services in the order of their sequence numbers by executing each S script
with the argument start. If symbolic links have the same sequence number, init stops or starts them in
alphabetic order.
Note
The entries for init.d, rc, rc.local, rc.sysinit, and rcN.d in /etc are
actually symbolic links to entries in the /etc/rc.d directory. These links ensure
compatibility with UNIX System V (SysV).
To customize service initialization, you can add scripts to /etc/init.d and create symbolic links to these
scripts in the /etc/rcN.d directories, naming the links with an initial K or S according to whether init
should stop or start the service in each run level N.
Alternatively, you can add commands to the /etc/rc.local script to start services or initialize devices.
Figure 4.1 shows the Service Configuration GUI with the NetworkManager service selected.
45
Starting and Stopping Services
Note
Changing the state of a service only lasts as long as the system remains at the
same run level. If you stop a service and then change the system's run state to one
in which the service is configured to run (for example, by rebooting the system), the
service restarts.
Some scripts take other arguments, such as restart, reload, and status. Omitting an argument
displays a usage message:
# service sshd
Usage: /etc/init.d/sshd {start|stop|restart|reload|force-reload|condrestart|try-restart|status}
If supported, you can use the status argument to view the status of a service:
# service sshd status
openssh-daemon (pid 12101) is running...
Note
You cannot use chkconfig to change the current state of a service. To stop or
start a service, use the service command.
To list the run-level configuration of all services that run their own daemon:
# chkconfig --list
NetworkManager 0:off 1:off 2:on 3:on 4:on 5:on 6:off
abrt-ccpp 0:off 1:off 2:off 3:on 4:off 5:on 6:off
abrt-oops 0:off 1:off 2:off 3:on 4:off 5:on 6:off
abrtd 0:off 1:off 2:off 3:on 4:off 5:on 6:off
acpid 0:off 1:off 2:on 3:on 4:on 5:on 6:off
atd 0:off 1:off 2:off 3:on 4:on 5:on 6:off
...
The command lists each service, followed by its configured state for each run level. For example, the abrtd
service is configured to run at run levels 3 and 5.
46
Configuring Services to Start at Different Run Levels
To view the configuration of a particular service, such as ntpd, specify its name as an argument:
# chkconfig --list ntpd
ntpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
To enable the service for certain run levels only, specify the --level option followed by a concatenated
list of the run levels, for example:
# chkconfig --level 35 httpd on
# chkconfig --list httpd
httpd 0:off 1:off 2:off 3:on 4:off 5:on 6:off
Similarly, the off argument disables a service for run levels 2, 3, 4, and 5, or for the run levels specified by
--level, for example:
# chkconfig sshd off
# chkconfig --list sshd
sshd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
# chkconfig sshd on
# chkconfig --list sshd
sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
# chkconfig --level 34 sshd off
# chkconfig --list sshd
sshd 0:off 1:off 2:on 3:off 4:off 5:on 6:off
The chkconfig command changes the configuration of a service to run at a particular run level. It does
not change the current state of a service as this example shows:
# runlevel
N 5
# chkconfig sshd off
# chkconfig --list sshd
sshd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
# service sshd status
openssh-daemon (pid 12101) is running...
The changed configuration of the sshd service takes effect only when you next change the system's
run state, for example, by rebooting the system. You could, of course, use the service sshd stop
command to stop the service.
47
48
Chapter 5 System Configuration Settings
Table of Contents
5.1 About /etc/sysconfig Files ............................................................................................................ 49
5.2 About the /proc Virtual File System ............................................................................................. 50
5.2.1 Virtual Files and Directories Under /proc ........................................................................... 51
5.2.2 Changing Kernel Parameters ............................................................................................ 54
5.2.3 Parameters that Control System Performance ................................................................... 55
5.2.4 Parameters that Control Kernel Panics ............................................................................. 56
5.3 About the /sys Virtual File System ............................................................................................... 57
5.3.1 Virtual Directories Under /sys ........................................................................................... 57
This chapter describes the files and virtual file systems that you can use to change configuration settings
for your system.
Some of the files that you might find in the /etc/sysconfig directory include:
atd Specifies additional command line arguments for the atd daemon.
autofs Defines custom options for automatically mounting devices and controlling the
operation of the automounter.
i18n Defines the default language, any other supported languages, and the default
system font.
init Controls how the system appears and functions during the boot process.
ip6tables-config Stores information that the kernel uses to set up IPv6 packet filtering services
when the iptables service starts.
iptables-config Stores information that the kernel uses to set up IPv4 packet filtering services
when the iptables service starts.
modules (directory) Contains scripts that the kernel runs to load additional modules at boot time.
A script in the modules directory must have the extension .modules and
it must have 755 executable permissions. For an example, see the bluez-
uinput.modules script that loads the uinput module. For more information,
see Section 6.5, Specifying Modules to be Loaded at Boot Time.
49
About the /proc Virtual File System
named Passes arguments to the name service daemon at boot time. The named
daemon is a Domain Name System (DNS) server that is part of the Berkeley
Internet Name Domain (BIND) distribution. This server maintains a table that
associates host names with IP addresses on the network.
network Specifies the host name of the system and whether networking is configured.
nfs Controls which ports remote procedure call (RPC) services use for NFS v2
and v3. This file allows you to set up firewall rules for NFS v2 and v3. Firewall
configuration for NFS v4 does not require you to edit this file.
ntpd Passes arguments to the network time protocol (NTP) daemon at boot time.
samba Passes arguments to the smbd, nmbd, and winbindd daemons at boot time
to support file-sharing connectivity for Windows clients, NetBIOS-over-IP
naming service, and connection management to domain controllers.
The name of the proc file system stems from its original purpose on the Oracle Solaris operating system,
which was to allow access by debugging tools to the data structures inside running processes. Linux added
this interface and extended it to allow access to data structures in the kernel. Over time, /proc became
quite disordered and the sysfs file system was created in an attempt to tidy it up. For more information,
see Section 5.3, About the /sys Virtual File System.
Files under the /proc directory are virtual files that the kernel creates on demand to present a browsable
view of the underlying data structures and system information. As such, /proc is an example of a virtual
file system. Most virtual files are listed as zero bytes in size, but they contain a large amount of information
when viewed.
Files that contain information about related topics are grouped into virtual directories. For example, a
separate directory exists in /proc for each process that is currently running on the system, and the
directory's name corresponds to the numeric process ID. /proc/1 corresponds to the init process,
which has a PID of 1.
You can use commands such as cat, less, and view to examine virtual files within /proc. For example,
/proc/cpuinfo contains information about the system's CPUs:
# cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 42
model name : Intel(R) Core(TM) i5-2520M CPU @ 2.50GHz
stepping : 7
cpu MHz : 2393.714
cache size : 6144 KB
physical id : 0
siblings : 2
50
Virtual Files and Directories Under /proc
core id : 0
cpu cores : 2
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 5
wp : yes
...
Certain files under /proc require root privileges for access or contain information that is not human-
readable. You can use utilities such as lspci, free, and top to access the information in these files. For
example, lspci lists all PCI devices on a system:
# lspci
00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma] (rev 02)
00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II]
00:01.1 IDE interface: Intel Corporation 82371AB/EB/MB PIIX4 IDE (rev 01)
00:02.0 VGA compatible controller: InnoTek Systemberatung GmbH VirtualBox Graphics Adapter
00:03.0 Ethernet controller: Intel Corporation 82540EM Gigabit Ethernet Controller (rev 02)
00:04.0 System peripheral: InnoTek Systemberatung GmbH VirtualBox Guest Service
00:05.0 Multimedia audio controller: Intel Corporation 82801AA AC'97 Audio Controller (rev 01)
00:06.0 USB controller: Apple Inc. KeyLargo/Intrepid USB
00:07.0 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 08)
00:0b.0 USB controller: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB2 EHCI Controller
00:0d.0 SATA controller: Intel Corporation 82801HM/HEM (ICH8M/ICH8M-E) SATA Controller [AHCI mode]
(rev 02)
...
root Symbolic link to the effective root directory for the process.
51
Virtual Files and Directories Under /proc
process ID
52
Virtual Files and Directories Under /proc
cpu Total CPU time (measured in jiffies) spent in user mode, low-
priority user mode, system mode, idle, waiting for I/O, handling
hardirq events, and handling softirq events.
53
Changing Kernel Parameters
Other files take value that take binary or Boolean values. For example, the value of /proc/sys/net/
ipv4/ip_forward determines whether the kernel forwards IPv4 network packets.
# cat /proc/sys/net/ipv4/ip_forward
0
# echo 1 > /proc/sys/net/ipv4/ip_forward
# cat /proc/sys/net/ipv4/ip_forward
1
You can use the sysctl command to view or modify values under the /proc/sys directory.
Note
Even root cannot bypass the file access permissions of virtual file entries under
/proc. If you attempt to change the value of a read-only entry such as /proc/
partitions, there is no kernel code to service the write() system call.
Note
The delimiter character in the name of a setting is a period (.) rather than a slash
(/) in a path relative to /proc/sys. For example, net.ipv4.ip_forward
represents net/ipv4/ip_forward and kernel.msgmax represents kernel/
msgmax.
54
Parameters that Control System Performance
To change the value of a setting, use the following form of the command:
# sysctl -w net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1
Changes that you make in this way remain in force only until the system is rebooted. To make
configuration changes persist after the system is rebooted, you must add them to the /etc/sysctl.conf
file. Any changes that you make to this file take effect when the system reboots or if you run the sysctl -
p command, for example:
# sed -i '/net.ipv4.ip_forward/s/= 0/= 1/' /etc/sysctl.conf
# grep ip_forward /etc/sysctl.conf
net.ipv4.ip_forward = 1
# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 0
# sysctl -p
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 1
...
kernel.shmall = 4294967296
# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
For more information, see the sysctl(8) and sysctl.conf(5) manual pages.
fs.file-max
Specifies the maximum number of open files for all processes. Increase the value of this parameter if you
see messages about running out of file handles.
net.core.netdev_max_backlog
Specifies the size of the receiver backlog queue, which is used if an interface receives packets faster than
the kernel can process them. If this queue is too small, packets are lost at the receiver, rather than on the
network.
net.core.rmem_max
Specifies the maximum read socket buffer size. To minimize network packet loss, this buffer must be large
enough to handle incoming network packets.
net.core.wmem_max
Specifies the maximum write socket buffer size. To minimize network packet loss, this buffer must be large
enough to handle outgoing network packets.
net.ipv4.tcp_available_congestion_control
Displays the TCP congestion avoidance algorithms that are available for use. Use the modprobe
command if you need to load additional modules such as tcp_htcp to implement the htcp algorithm.
net.ipv4.tcp_congestion_control
55
Parameters that Control Kernel Panics
net.ipv4.tcp_max_syn_backlog
Specifies the number of outstanding SYN requests that are allowed. Increase the value of this parameter
if you see synflood warnings in your logs, and investigation shows that they are occurring because the
server is overloaded by legitimate connection attempts.
net.ipv4.tcp_rmem
Specifies minimum, default, and maximum receive buffer sizes that are used for a TCP socket. The
maximum value cannot be larger than net.core.rmem_max.
net.ipv4.tcp_wmem
Specifies minimum, default, and maximum send buffer sizes that are used for a TCP socket. The maximum
value cannot be larger than net.core.wmem_max.
vm.swappiness
Specifies how likely the kernel is to write loaded pages to swap rather than drop pages from the system
page cache. When set to 0, swapping only occurs to avoid an out of memory condition. When set to
100, the kernel swaps aggressively. For a desktop system, setting a lower value can improve system
responsiveness by decreasing latency. The default value is 60.
Caution
This parameter is intended for use with laptops to reduce power consumption by the
hard disk. Do not adjust this value on server systems.
kernel.hung_task_panic
If set to 1, the kernel panics if any user or kernel thread sleeps in the TASK_UNINTERRUPTIBLE state (D
state) for more than kernel.hung_task_timeout_secs seconds. A process remains in D state while
waiting for I/O to complete. You cannot kill or interrupt a process in this state.
Tip
kernel.hung_task_timeout_secs
Specifies how long a user or kernel thread can remain in D state before a message is generated or the
kernel panics (if the value of kernel.hung_task_panic is 1). The default value is 120 seconds.
kernel.panic
Specifies the number of seconds after a panic before a system will automatically reset itself.
If the value is 0, the system hangs, which allows you to collect detailed information about the panic for
troubleshooting. This is the default value.
56
About the /sys Virtual File System
To enable automatic reset, set a non-zero value. If you require a memory image (vmcore), allow enough
time for Kdump to create this image. The suggested value is 30 seconds, although large systems will
require a longer time.
kernel.panic_on_oops
If set to 0, the system tries to continue operations if the kernel encounters an oops or BUG condition. When
set to 1 (default), the system delays a few seconds to give the kernel log daemon, klogd, time to record
the oops output before the panic occurs.
In an OCFS2 cluster. set the value to 1 to specify that a system must panic if a kernel oops occurs. If
a kernel thread required for cluster operation crashes, the system must reset itself. Otherwise, another
node might not be able to tell whether a node is slow to respond or unable to respond, causing cluster
operations to hang.
vm.panic_on_oom
If set to 0 (default), the kernels OOM-killer scans through the entire task list and attempts to kill a
memory-hogging process to avoid a panic. When set to 1, the kernel panics but can survive under certain
conditions. If a process limits allocations to certain nodes by using memory policies or cpusets, and those
nodes reach memory exhaustion status, the OOM-killer can kill one process. No panic occurs in this case
because other nodes memory might be free and the system as a whole might not yet be out of memory.
When set to 2, the kernel always panics when an OOM condition occurs. Settings of 1 and 2 are for
intended for use with clusters, depending on your preferred failover policy.
Note
/sys exposes kernel data structures and control points, which implies that it might
contain circular references, where a directory links to an ancestor directory. As a
result, a find command used on /sys might never terminate.
57
Virtual Directories Under /sys
58
Chapter 6 Kernel Modules
Table of Contents
6.1 About Kernel Modules ................................................................................................................ 59
6.2 Listing Information about Loaded Modules ................................................................................... 59
6.3 Loading and Unloading Modules ................................................................................................. 60
6.4 About Module Parameters ........................................................................................................... 61
6.5 Specifying Modules to be Loaded at Boot Time ........................................................................... 62
This chapter describes how to load, unload, and modify the behavior of kernel modules.
Note
The output shows the module name, the amount of memory it uses, the number of processes using the
module and the names of other modules on which it depends. In the sample output, the module parport
depends on the modules ppdev and parport_pc, which are loaded in advance of parport. Two
processes are currently using all three modules.
To display detailed information about a module, use the modinfo command, for example:
# modinfo ahci
filename: /lib/modules/2.6.32-300.27.1.el6uek.x86_64/kernel/drivers/ata/ahci.ko
version: 3.0
license: GPL
description: AHCI SATA low-level driver
author: Jeff Garzik
srcversion: AC5EC885397BF332DE16389
59
Loading and Unloading Modules
alias: pci:v*d*sv*sd*bc01sc06i01*
...
depends:
vermagic: 2.6.32-300.27.1.el6uek.x86_64 SMP mod_unload modversions
parm: skip_host_reset:skip global host reset (0=don't skip, 1=skip) (int)
parm: ignore_sss:Ignore staggered spinup flag (0=don't ignore, 1=ignore) (int)
...
vermagic Kernel version that was used to compile the module, which is checked against the current
kernel when the module is loaded.
Modules are loaded into the kernel from kernel object (ko) files in the /lib/
modules/kernel_version/kernel directory. To display the absolute path of a kernel object file,
specify the -n option, for example:
# modinfo -n parport
/lib/modules/2.6.32-300.27.1.el6uek.x86_64/kernel/drivers/parport/parport.ko
For more information, see the lsmod(5) and modinfo(8) manual pages.
Use the -v verbose option to show if any additional modules are loaded to resolve dependencies.
# modprobe -v nfs
insmod /lib/modules/2.6.32-300.27.1.el6uek.x86_64/kernel/net/sunrpc/auth_gss/auth_rpcgss.ko
insmod /lib/modules/2.6.32-300.27.1.el6uek.x86_64/kernel/fs/nfs_common/nfs_acl.ko
insmod /lib/modules/2.6.32-300.27.1.el6uek.x86_64/kernel/fs/fscache/fscache.ko
...
60
About Module Parameters
Note
modprobe does not reload modules that are already loaded. You must first unload
a module before you can load it again.
Modules are unloaded in the reverse order that they were loaded. Modules are not unloaded if a process or
another loaded module requires them.
Note
modprobe uses the insmod and rmmod utilities to load and unload modules. As
insmod and rmmod do not resolve module dependencies, do not use these utilities.
For more information, see the modprobe(8) and modules.dep(5) manual pages.
Use spaces to separate multiple parameter/value pairs. Array values are represented by a comma-
separated list, for example:
# modprobe foo arrayparm=1,2,3,4
You can also change the values of some parameters for loaded modules and built-in drivers by writing the
new value to a file under /sys/module/module_name/parameters, for example:
# echo 0 > /sys/module/ahci/parameters/skip_host_reset
The /etc/modprobe.d directory contains .conf configuration files specify module options, create
module aliases, and override the usual behavior of modprobe for modules with special requirements.
The /etc/modprobe.conf file that was used with earlier versions of modprobe is also valid if it exists.
Entries in the /etc/modprobe.conf and /etc/modprobe.d/*.conf files use the same syntax.
alias Creates an alternate name for a module. The alias can include shell wildcards. For example,
create an alias for the sd-mod module:
alias block-major-8-* sd_mod
blacklist Ignore a module's internal alias that is displayed by the modinfo command. This command
is typically used if the associated hardware is not required, if two or more modules both
support the same devices, or if a module invalidly claims to support a device. For example,
blacklist the alias for the frame-buffer driver cirrusfb:
61
Specifying Modules to be Loaded at Boot Time
blacklist cirrusfb
install Runs a shell command instead of loading a module into the kernel. For example, load the
module snd-emu10k1-synth instead of snd-emu10k1:
install snd-emu10k1 /sbin/modprobe --ignore-install snd-emu10k1 && \
/sbin/modprobe snd-emu10k1-synth
options Defines options for a module,. For example, define the nohwcrypt and qos options for the
b43 module:
options b43 nohwcrypt=1 qos=0
remove Runs a shell command instead of unloading a module. For example, unmount /proc/fs/
nfsd before unloading the nfsd module:
remove nfsd { /bin/umount /proc/fs/nfsd > /dev/null 2>&1 || :; } ; \
/sbin/modprobe -r --first-time --ignore-remove nfsd
1. Create a file in the /etc/sysconfig/modules directory. The file name must have the extension
.modules, for example foo.modules.
2. Edit the file to create the script that loads the module.
The script to load a module can be a simple modprobe call, for example:
#!/bin/sh
modprobe foo
62
Chapter 7 Device Management
Table of Contents
7.1 About Device Files ..................................................................................................................... 63
7.2 About the Udev Device Manager ................................................................................................. 65
7.3 About Udev Rules ...................................................................................................................... 65
7.4 Querying Udev and Sysfs ........................................................................................................... 68
7.5 Modifying Udev Rules ................................................................................................................. 71
This chapter describes how the system uses device files and how the udev device manager dynamically
creates or removes device node files.
The /dev directory has several subdirectory hierarchies, each of which holds device files that relate to
a certain type of device. For example, the /dev/disk/id-by-uuid directory contains device files for
hard disks named according to the universally unique identifier (UUID) for the disk. The device files in
subdirectories such as these are actually implemented as symbolic links to device files in /dev. You can
access the same device using the file in /dev or the corresponding link to the file listed in /dev/disk/
id-by-uuid.
If you use the ls -l command to list the files under /dev, you see that some device files are shown as
being either type b for block or type c for character. These devices have a pair of numbers associated with
them instead of a file size. These major and minor numbers identify the device to the system.
# ls -l /dev
total 0
crw-rw----. 1 root root 10, 56 Mar 17 08:17 autofs
drwxr-xr-x. 2 root root 640 Mar 17 08:17 block
drwxr-xr-x. 2 root root 80 Mar 17 08:16 bsg
drwxr-xr-x. 3 root root 60 Mar 17 08:16 bus
lrwxrwxrwx. 1 root root 3 Mar 17 08:17 cdrom -> sr0
drwxr-xr-x. 2 root root 2880 Mar 17 08:17 char
crw-------. 1 root root 5, 1 Mar 17 08:17 console
lrwxrwxrwx. 1 root root 11 Mar 17 08:17 core -> /proc/kcore
drwxr-xr-x. 4 root root 100 Mar 17 08:17 cpu
crw-rw----. 1 root root 10, 61 Mar 17 08:17 cpu_dma_latency
drwxr-xr-x. 6 root root 120 Mar 17 08:16 disk
brw-rw----. 1 root disk 253, 0 Mar 17 08:17 dm-0
brw-rw----. 1 root disk 253, 1 Mar 17 08:17 dm-1
...
crw-rw-rw-. 1 root root 1, 3 Mar 17 08:17 /dev/null
...
drwxr-xr-x. 2 root root 0 Mar 17 08:16 pts
...
crw-rw-rw-. 1 root root 1, 8 Mar 17 08:17 random
...
brw-rw----. 1 root disk 8, 0 Mar 17 08:17 sda
brw-rw----. 1 root disk 8, 1 Mar 17 08:17 sda1
brw-rw----. 1 root disk 8, 2 Mar 17 08:17 sda2
...
lrwxrwxrwx. 1 root root 15 Mar 17 08:17 stderr -> /proc/self/fd/2
lrwxrwxrwx. 1 root root 15 Mar 17 08:17 stdin -> /proc/self/fd/0
63
About Device Files
Block devices support random access to data, seeking media for data, and usually allow data to be
buffered while it is being written or read. Examples of block devices include hard disks, CD-ROM drives,
flash memory, and other addressable memory devices. The kernel writes data to or reads data from a
block device in blocks of a certain number of bytes. In the sample output, sda is the block device file that
corresponds to the hard disk, and it has a major number of 8 and a minor number of 0. sda1 and sda2 are
partitions of this disk, and they have the same major number as sda (8), but their minor numbers are 1 and
2.
Character devices support streaming of data to or from a device, and data is not usually buffered nor is
random access permitted to data on a device. The kernel writes data to or reads data from a character
device one byte at a time. Examples of character devices include keyboards, mice, terminals, pseudo-
terminals, and tape drives. tty0 and tty1 are character device files that correspond to terminal devices
that allow users to log in from serial terminals or terminal emulators. These files have major number 4 and
minor numbers 0 and 1.
Pseudo-terminals slave devices emulate real terminal devices to interact with software. For example, a
user might log in on a terminal device such as /dev/tty1, which then uses the pseudo-terminal master
device /dev/pts/ptmx to interact with an underlying pseudo-terminal device. The character device files
for pseudo-terminal slaves and master are located in the /dev/pts directory:
# ls -l /dev/pts
total 0
crw--w----. 1 guest tty 136, 0 Mar 17 10:11 0
crw--w----. 1 guest tty 136, 1 Mar 17 10:53 1
crw--w----. 1 guest tty 136, 2 Mar 17 10:11 2
c---------. 1 root root 5, 2 Mar 17 08:16 ptmx
Some device entries, such as stdin for the standard input, are symbolically linked via the self
subdirectory of the proc file system. The pseudo-terminal device file to which they actually point depends
on the context of the process.
# ls -l /proc/self/fd/[012]
total 0
lrwx------. 1 root root 64 Mar 17 10:02 0 -> /dev/pts/1
lrwx------. 1 root root 64 Mar 17 10:02 1 -> /dev/pts/1
lrwx------. 1 root root 64 Mar 17 10:02 2 -> /dev/pts/1
Character devices such as null, random, urandom, and zero are examples of pseudo-devices that
provide access to virtual functionality implemented in software rather than to physical hardware.
/dev/null is a data sink. Data that you write to /dev/null effectively disappears but the write operation
succeeds. Reading from /dev/null returns EOF (end-of-file).
/dev/random and /dev/urandom are data sources of streams of pseudo-random bytes. To maintain
high-entropy output, /dev/random blocks if its entropy pool does not contains sufficient bits of noise. /
dev/urandom does not block and, as a result, the entropy of its output might not be as consistently high
as that of /dev/random. However, neither /dev/random nor /dev/urandom are considered to be truly
random enough for the purposes of secure cryptography such as military-grade encryption.
64
About the Udev Device Manager
You can find out the size of the entropy pool and the entropy value for /dev/random from virtual files
under /proc/sys/kernel/random:
# cat /proc/sys/kernel/random/poolsize
4096
# cat /proc/sys/kernel/random/entropy_avail
3467
For more information, see the null(4), pts(4), and random(4) manual pages.
Udev can use persistent device names to guarantee consistent naming of devices across reboots,
regardless of their order of discovery. Persistent device names are especially important when using
external storage devices.
The configuration file for udev is /etc/udev/udev.conf, in which you can define the following variables:
udev_log The logging priority, which can be set to err, info and debug. The default value is err.
udev_root Specifies the location of the device nodes. The default value is /dev.
/etc/udev/rules.d/ Contains customized rules files. You can modify these files.
*.rules
udevd processes the rules files in lexical order, regardless of which directory they are located. Rules files
in /etc/udev/rules.d override files of the same name in /lib/udev/rules.d.
The following rules are extracted from the file /lib/udev/rules.d/50-udev- default.rules and
illustrate the syntax of udev rules.
# do not edit this file, it will be overwritten on update
SUBSYSTEM=="block", SYMLINK{unique}+="block/%M:%m"
SUBSYSTEM!="block", SYMLINK{unique}+="char/%M:%m"
65
About Udev Rules
# CPU
KERNEL=="cpu[0-9]*", MODE="0444"
...
# do not delete static device nodes
ACTION=="remove", NAME=="", TEST=="/lib/udev/devices/%k", \
OPTIONS+="ignore_remove"
ACTION=="remove", NAME=="?*", TEST=="/lib/udev/devices/$name", \
OPTIONS+="ignore_remove"
Comment lines begin with a # character. All other non-blank lines define a rule, which is a list of one or
more comma-separated key-value pairs. A rule either assigns a value to a key or it tries to find a match for
a key by comparing its current value with the specified value. The following table shows the assignment
and comparison operators that you can use.
Operator Description
= Assign a value to a key, overwriting any previous value.
+= Assign a value by appending it to the key's current list of values.
:= Assign a value to a key. This value cannot be changed by any further rules.
== Match the key's current value against the specified value for equality.
!= Match the key's current value against the specified value for equality.
You can use the following shell-style pattern matching characters in values.
Character Description
? Matches a single character.
* Matches any number of characters, including zero.
[] Matches any single character or character from a range of characters specified
within the brackets. For example, tty[sS][0-9] would match ttys7 or ttyS7.
66
About Udev Rules
cmdline Import a single property from the boot kernel command line. For
simple flags, udevd sets the value of the property to 1. For example,
IMPORT{cmdline}="nodmraid".
db Interpret the specified value as an index into the device database and
import a single property, which must have already been set by an earlier
event. For example, IMPORT{db}="DM_UDEV_LOW_PRIORITY_FLAG".
file Interpret the specified value as the name of a text file and import its
contents, which must be in environmental key format. For example,
IMPORT{file}="keyfile".
parent Interpret the specified value as a key-name filter and import the stored
keys from the database entry for the parent device. For example
IMPORT{parent}="ID_*".
program Run the specified value as an external program and imports its
result, which must be in environmental key format. For example
IMPORT{program}="usb_id --export %p".
MODE Specifies the permissions for a device file. For example, MODE="0640".
NAME Specifies the name of a device file. For example, NAME="eth0".
OPTIONS Specifies rule and device options. For example, OPTIONS+="ignore_remove",
which means that the device file is not removed if the device is removed.
OWNER Specifies the owner for a device file. For example, GROUP="root".
RUN Specifies a command to be run after the device file has been created. For example,
RUN+="/usr/bin/eject $kernel", where $kernel is the kernel name of the
device.
SYMLINK Specifies the name of a symbolic link to a device file. For example, SYMLINK
+="disk/by-uuid/$env{ID_FS_UUID_ENC}", where $env{} is substituted
with the specified device property.
Other assignment keys include ATTR{key}, GOTO, LABEL, RUN, and WAIT_FOR.
The following table shows string substitutions that are commonly used with the GROUP, MODE, NAME,
OWNER, PROGRAM, RUN, and SYMLINK keys.
67
Querying Udev and Sysfs
%k
$major or Specifies the major number of a device. For example,
IMPORT{program}="udisks-dm-export %M %m".
%M
$minor or Specifies the minor number of a device. For example, RUN
+="$env{LVM_SBIN_PATH}/lvm pvscan --cache --major $major --
%m minor $minor".
$name Specifies the device file of the current device. For example, TEST=="/lib/udev/
devices/$name".
Udev expands the strings specified for RUN immediately before its program is executed, which is after udev
has finished processing all other rules for the device. For the other keys, udev expands the strings while it
is processing the rules.
For example, to query the sysfs device path relative to /sys that corresponds to the device file /dev/
sda:
# udevadm info --query=path --name=/dev/sda
/devices/pci0000:00/0000:00:0d.0/host0/target0:0:0/0:0:0:0/block/sda
68
Querying Udev and Sysfs
DEVNAME=/dev/sda
DEVTYPE=disk
SUBSYSTEM=block
ID_ATA=1
ID_TYPE=disk
ID_BUS=ata
ID_MODEL=VBOX_HARDDISK
ID_MODEL_ENC=VBOX\x20HARDDISK\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20...
ID_REVISION=1.0
ID_SERIAL=VBOX_HARDDISK_VB579a85b0-bf6debae
ID_SERIAL_SHORT=VB579a85b0-bf6debae
ID_ATA_WRITE_CACHE=1
ID_ATA_WRITE_CACHE_ENABLED=1
ID_ATA_FEATURE_SET_PM=1
ID_ATA_FEATURE_SET_PM_ENABLED=1
ID_ATA_SATA=1
ID_ATA_SATA_SIGNAL_RATE_GEN2=1
ID_SCSI_COMPAT=SATA_VBOX_HARDDISK_VB579a85b0-bf6debae
ID_PATH=pci-0000:00:0d.0-scsi-0:0:0:0
ID_PART_TABLE_TYPE=dos
LVM_SBIN_PATH=/sbin
UDISKS_PRESENTATION_NOPOLICY=0
UDISKS_PARTITION_TABLE=1
UDISKS_PARTITION_TABLE_SCHEME=mbr
UDISKS_PARTITION_TABLE_COUNT=2
UDISKS_ATA_SMART_IS_AVAILABLE=0
DEVLINKS=/dev/block/8:0 /dev/disk/by-id/ata-VBOX_HARDDISK_VB579a85b0-bf6debae ...
69
Querying Udev and Sysfs
To display all properties of /dev/sda and its parent devices that udev has found in /sys:
# udevadm info --attribute-walk --name=/dev/sda
...
looking at device '/devices/pci0000:00/0000:00:0d.0/host0/target0:0:0/0:0:0:0/block/sda':
KERNEL=="sda"
SUBSYSTEM=="block"
DRIVER==""
ATTR{range}=="16"
ATTR{ext_range}=="256"
ATTR{removable}=="0"
ATTR{ro}=="0"
ATTR{size}=="83886080"
ATTR{alignment_offset}=="0"
ATTR{capability}=="52"
ATTR{stat}==" 20884 15437 1254282 338919 5743 8644 103994 109005 ...
ATTR{inflight}==" 0 0"
70
Modifying Udev Rules
ATTRS{enable}=="1"
ATTRS{broken_parity_status}=="0"
ATTRS{msi_bus}==""
ATTRS{msi_irqs}==""
The command starts at the device specified by its device path and walks up the chain of parent devices.
For every device that it finds, it displays all possible attributes for the device and its parent devices in the
match key format for udev rules.
The following example illustrates how to implement a udev rules file that adds a symbolic link to the disk
device /dev/sdb.
1. Create a rule file under /etc/udev/rules.d with a file name such as 10-local.rules that udev
will read before any other rules file.
For example, the following rule in 10-local.rules creates the symbolic link /dev/my_disk, which
points to /dev/sdb:
KERNEL=="sdb", ACTION=="add", SYMLINK="my_disk"
Listing the device files in /dev shows that udev has not yet applied the rule:
# ls /dev/sd* /dev/my_disk
ls: cannot access /dev/my_disk: No such file or directory
/dev/sda /dev/sda1 /dev/sda2 /dev/sdb
2. To simulate how udev applies its rules to create a device, you can use the udevadm test command
with the device path of sdb listed under the /sys/class/block hierarchy, for example:
# udevadm test /sys/class/block/sdb
run_command: calling: test
udevadm_test: version ...
This program is for debugging only, it does not run any program
specified by a RUN key. It may show incorrect results, because
some values may be different, or not available at a simulation run.
...
udev_rules_apply_to_event: LINK 'my_disk' /etc/udev/rules.d/10-local.rules:1
...
link_update: creating link '/dev/my_disk' to '/dev/sdb'
node_symlink: creating symlink '/dev/my_disk' to 'sdb'
...
udevadm_test: DEVNAME=/dev/sdb
udevadm_test: DEVTYPE=disk
udevadm_test: ACTION=add
udevadm_test: SUBSYSTEM=block
udevadm_test: DEVLINKS=/dev/my_disk
/dev/block/8:16
/dev/disk/by-id/ata-VBOX_HARDDISK_VB560b13ed-94b71e56
/dev/disk/by-id/scsi-SATA_VBOX_HARDDISK_VB560b13ed-94b71e56
/dev/disk/by-path/pci-0000:00:0d.0-scsi-0:0:0:0
71
Modifying Udev Rules
/dev/disk/by-uuid/f49e77ee-d00e-4eab-aa8c-094a55bdc59a
...
After Udev processes the rules files, the symbolic link /dev/my_disk has been added:
# ls -F /dev/sd* /dev/my_disk
/dev/my_disk@ /dev/sda /dev/sda1 /dev/sda2 /dev/sdb
To undo the changes, remove your rules file and run start_udev again.
72
Chapter 8 Task Management
Table of Contents
8.1 About Automating Tasks ............................................................................................................. 73
8.2 Configuring cron Jobs ................................................................................................................. 73
8.2.1 Controlling Access to Running cron Jobs .......................................................................... 74
8.3 Configuring anacron Jobs ........................................................................................................... 75
8.4 Running One-time Tasks ............................................................................................................ 76
8.4.1 Changing the Behavior of Batch Jobs ............................................................................... 76
This chapter describes how to configure the system to run tasks automatically within a specific period of
time, at a specified time and date, or when the system is lightly loaded.
The cron and anacron utilities allow you to schedule the execution of recurring tasks (jobs) according
to a combination of the time, day of the month, month, day of the week, and week. cron allows you to
schedule jobs to run as often as every minute. If the system is down when a job is scheduled, cron does
not run the job when the system restarts. anacron allows you to schedule a system job to run only once
per day. However, if a scheduled job has not been run, that job runs when the system restarts. anacron is
mainly intended for use on laptop computers.
You do not usually need to run cron and anacron directly. The crond daemon executes scheduled tasks
on behalf of cron and it starts anacron once every hour. crond looks in /etc/crontab or in files in /
etc/cron.d for system cron job definitions, and /var/spool/cron for cron job definitions belonging
to users. crond checks each job definition to see whether it should run in the current minute. If a job is
scheduled for execution, crond runs it as the owner of the job definition file or, for system cron jobs, the
user specified in the job definition (if any).
crond runs the 0anacron script in the /etc/cron.hourly directory as root once per hour according
to the schedule in /etc/cron.d/0hourly. If anacron is not already running and the system is
connected to mains and not battery power, crond starts anacron.
minute 0-59.
73
Controlling Access to Running cron Jobs
hour 0-23.
day 1-31.
user The user to run the command as, or * for the owner of the crontab file.
For the minute through day-of week fields, you can use the following special characters:
/ (forward slash) A step value, for example, /3 in the hour field means every three hours.
For example, the following entry would run a command every five minutes on weekdays:
0-59/5 * * * 1-5 * command
Run a command at one minute past midnight on the first day of the months April, June, September, and
November:
1 0 1 4,6,9,11 * * command
root can add job definition entries to /etc/crontab, or add crontab-format files to the /etc/cron.d
directory.
Note
root can use the /etc/cron.allow and /etc/cron.deny files to restrict access to cron. crontab
checks the access control files each time that a user tries to add or delete a cron job. If /etc/
cron.allow exists, only users listed in it are allowed to use cron, and /etc/cron.deny is ignored. If /
etc/cron.allow does not exist, users listed in /etc/cron.deny are not allowed to use cron. If neither
file exists, only root can use cron. The format of both /etc/cron.allow and /etc/cron.deny is one
user name on each line.
To create or edit a crontab file as a user, log in as that user and type the command crontab -e, which
opens your crontab file in the vi editor (or the editor specified by the EDITOR or VISUAL environment
74
Configuring anacron Jobs
variables). The file has the same format as /etc/crontab except that the user field is omitted. When you
save changes to the file, these are written to the file /var/spool/cron/username. To list the contents
of your crontab file, use the crontab -l command. To delete your crontab file, use the crontab -r
command.
RANDOM_DELAY is the maximum number of random time in minutes that anacron adds to the delay
parameter for a job. The default minimum delay is 6 minutes. The random offset is intended to prevent
anacron overloading the system with too many jobs at the same time.
START_HOURS_RANGE is the time range of hours during the day when anacron can run scheduled jobs.
period Frequency of job execution specified in days or as @daily, @weekly, or @monthly for once
per day, week, or month.
The following entries are taken from the default /etc/anacrontab file:
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22
By default, anacron runs jobs between 03:00 and 22:00 and randomly delays jobs by between 11 and 50
minutes. The job scripts in /etc/cron.daily, run anywhere between 03:11 and 03:50 every day if the
system is running, or after the system is booted and the time is less than 22:00. The run-parts script
sequentially executes every program within the directory specified as its argument.
Scripts in /etc/cron.weekly run once per week with a delay offset of between 31 and 70 minutes.
Scripts in /etc/cron.monthly run once per week with a delay offset of between 51 and 90 minutes.
For more information, see the anacron(8) and anacrontab(5) manual pages.
75
Running One-time Tasks
at takes a time as its argument and reads the commands to be run from the standard input. For example,
run the commands in the file atjob in 20 minutes time:
# at now + 20 minutes < ./atjob
job 1 at 2013-03-19 11:25
The atq command shows the at jobs that are queued to run:
# atq
1 2013-03-19 11:25 a root
The batch command also reads command from the standard input, but it does not run until the system
load average drops below 0.8. For example:
# batch < batchjob
job 2 at 2013-03-19 11:31
To cancel one or more queued jobs, specify their job numbers to the atrm command, for example:
# atrm 1 2
If you know that a batch job typically takes more than a minute to run, you can also change the minimum
interval that atd waits between starting batch jobs. The default minimum interval is 60 seconds.
To change the load-average limit and interval time for batch jobs:
1. Edit /etc/init.d/atd, and add a line that defines the new load-average limit, minimum interval, or
both in the OPTS variable for the atd daemon, for example:
exec=/usr/sbin/atd
OPTS="-b 120 -l 3.2"
prog="atd"
This example sets the minimum interval to 120 seconds and the load-average limit to 3.2.
76
Changing the Behavior of Batch Jobs
Stopping atd: [ OK ]
Starting atd: [ OK ]
3. Verify that the atd daemon is running with the new minimum interval and load-average limit:
# ps -fC atd
UID PID PPID C STIME TTY TIME CMD
root 8359 1 0 12:06 ? 00:00:00 /usr/sbin/atd -b 120 -l 3.2
77
78
Chapter 9 System Monitoring and Tuning
Table of Contents
9.1 About sosreport .......................................................................................................................... 79
9.1.1 Configuring and Using sosreport ....................................................................................... 79
9.2 About System Performance Tuning ............................................................................................. 80
9.2.1 About Performance Problems ........................................................................................... 80
9.2.2 Monitoring Usage of System Resources ........................................................................... 81
9.2.3 Using the Graphical System Monitor ................................................................................. 84
9.2.4 About OSWatcher Black Box ............................................................................................ 84
This chapter describes how to collect diagnostic information about a system for Oracle Support, and how to
monitor and tune the performance of a system.
Use the following command to list the available plugins and plugin options.
# sosreport -l
The following plugins are currently enabled:
See the sosreport(1) manual page for information about how to enable or disable plugins, and how to
set values for plugin options.
To run sosreport:
1. Enter the command, specifying any options that you need to tailor the report to report information about
a problem area.
79
About System Performance Tuning
For example, to record only information about Apache and Tomcat, and to gather all the Apache logs:
# sosreport -o apache,tomcat -k apache.log=on
To enable all boolean options for all loaded plugins except the rpm.rpmva plugin that verifies all
packages, and which takes a considerable time to run:
# sosreport -a -k rpm.rpmva=off
A typical problem involves out of memory errors and generally poor performance when running Oracle
Database. The cause of this problem is likely to be that the system is not configured to use the HugePages
feature for the System Global Area (SGA). With HugePages, you can set the page size to between
2MB and 256MB, so reducing the total number of pages that the kernel needs to manage. The memory
associated with HugePages cannot be swapped out, which forces the SGA to remain resident in memory.
80
Monitoring Usage of System Resources
The following utilities allow you to collect information about system resource usage and errors, and can
help you to identify performance problems caused by overloaded disks, network, memory, or CPUs:
dmesg Displays the contents of the kernel ring buffer, which can contain errors about system resource
usage. Provided by the util-linux-ng package.
dstat Displays statistics about system resource usage. Provided by the dstat package.
free Displays the amount of free and used memory in the system. Provided by the procps package.
iotop Monitors disk and swap I/O on a per-process basis. Provided by the iotop package.
ip Reports network interface statistics and errors. Provided by the iproute package.
sar Reports information about system activity. Provided by the sysstat package.
top Provides a dynamic real-time view of the tasks that are running on a system. Provided by the
procps package.
uptime Displays the system load averages for the past 1, 5, and 15 minutes. Provided by the procps
package.
Many of these utilities provide overlapping functionality. For more information, see the individual manual
page for the utility.
See Section 5.2.3, Parameters that Control System Performance for a list of kernel parameters that affect
system performance.
To run a monitoring command every interval seconds in real time and watch its output change, use the
watch command. For example, the following command runs the mpstat command once per second:
# watch -n interval mpstat
Alternatively, many of the commands allow you to specify the sampling interval in seconds, for example:
# mpstat interval
If installed, the sar command records statistics every 10 minutes while the system is running and retains
this information for every day of the current month. The following command displays all the statistics that
sar recorded for day DD of the current month:
# sar -A -f /var/log/sa/saDD
To run sar command as a background process and collect data in a file that you can display later by using
the -f option:
81
Monitoring Usage of System Resources
Oracle OSWatcher Black Box (OSWbb) and OSWbb analyzer (OSWbba) are useful tools for collecting and
analysing performance statistics. For more information, see Section 9.2.4, About OSWatcher Black Box.
The commands mpstat -P ALL and sar -u -P ALL display CPU usage statistics for each CPU core
and averaged across all CPU cores.
The %idle value shows the percentage of time that a CPU was not running system code or process code.
If the value of %idle is near 0% most of the time on all CPU cores, the system is CPU-bound for the
workload that it is running. The percentage of time spent running system code (%systemor %sys) should
not usually exceed 30%, especially if %idle is close to 0%.
The system load average represents the number of processes that are running on CPU cores, waiting to
run, or waiting for disk I/O activity to complete averaged over a period of time. On a busy system, the load
average reported by uptime or sar -q should usually be not greater than two times the number of CPU
cores over periods as long as 5 or 15 minutes. If the load average exceeds four times the number of CPU
cores for long periods, the system is overloaded.
In addition to load averages (ldavg-*), the sar -q command reports the number of processes currently
waiting to run (the run-queue size, runq-sz) and the total number of processes (plist_sz). The value of
runq-sz also provides an indication of CPU saturation.
Determine the system's average load under normal loads where users and applications do not experience
problems with system responsiveness, and then look for deviations from this benchmark over time. A
dramatic rise in the load average can indicate a serious performance problem.
A combination of sustained large load average or large run queue size and low %idle can indicate that the
system has insufficient CPU capacity for the workload. When CPU usage is high, use a command such as
dstat or top to determine which processes are most likely to be responsible. For example, the following
dstat command shows which processes are using CPUs, memory, and block I/O most intensively:
# dstat --top-cpu --top-mem --top-bio
The top command provides a real-time display of CPU activity. By default, top lists the most CPU-
intensive processes on the system. In its upper section, top displays general information including the load
averages over the past 1, 5 and 15 minutes, the number of running and sleeping processes (tasks), and
total CPU and memory usage. In its lower section, top displays a list of processes, including the process
ID number (PID), the process owner, CPU usage, memory usage, running time, and the command name.
By default, the list is sorted by CPU usage, with the top consumer of CPU listed first. Type f to select
which fields top displays, o to change the order of the fields, or O to change the sort field. For example,
entering On sorts the list on the percentage memory usage field (%MEM).
82
Monitoring Usage of System Resources
sar -B reports memory paging statistics, including pgscank/s, which is the number of memory pages
scanned by the kswapd daemon per second, and pgscand/s, which is the number of memory pages
scanned directly per second.
sar -W reports swapping statistics, including pswpin/s and pswpout/s, which are the numbers of
pages per second swapped in and out per second.
If %memused is near 100% and the scan rate is continuously over 200 pages per second, the system has a
memory shortage.
Once a system runs out of real or physical memory and starts using swap space, its performance
deteriorates dramatically. If you run out of swap space, your programs or the entire operating system are
likely to crash. If free or top indicate that little swap space remains available, this is also an indication
you are running low on memory.
The output from the dmesg command might include notification of any problems with physical memory that
were detected at boot time.
iostat -x reports extended statistics about block I/O activity at one second intervals, including %util,
which is the percentage of CPU time spent handling I/O requests to a device, and avgqu-sz, which is
the average queue length of I/O requests that were issued to that device. If %util approaches 100% or
avgqu-sz is greater than 1, device saturation is occurring.
You can also use the sar -d command to report on block I/O activity, including values for %util and
avgqu-sz.
The iotop utility can help you identify which processes are responsible for excessive disk I/O. iotop has
a similar user interface to top. In its upper section, iotop displays the total disk input and output usage in
bytes per second. In its lower section, iotop displays I/O information for each process, including disk input
output usage in bytes per second, the percentage of time spent swapping in pages from disk or waiting
on I/O, and the command name. Use the left and right arrow keys to change the sort field, and press A to
toggle the I/O units between bytes per second and total number of bytes, or O to toggle between displaying
all processes or only those processes that are performing I/O.
iostat -n reports I/O statistics for each NFS file system that is mounted.
83
Using the Graphical System Monitor
CPU usage history in graphical form and the current CPU usage as a percentage.
Memory and swap usage history in graphical form and the current memory and swap usage.
Network usage history in graphical form, the current network usage for reception and transmission, and
the total amount of data received and transmitted.
To display the System Monitor Manual, press F1 or select Help > Contents.
OSWbb is particularly useful for Oracle RAC (Real Application Clusters) and Oracle Grid Infrastructure
configurations. The RAC-DDT (Diagnostic Data Tool) script file includes OSWbb, but does not install it by
default.
3. Copy the file to the directory where you want to install OSWbb, and run the following command:
# tar xvf oswbbVERS.tar
VERS represents the version number of OSWatcher, for example 730 for OSWatcher 7.30.
Extracting the tar file creates a directory named oswbb, which contains all the directories and files that
are associated with OSWbb, including the startOSWbb.sh script.
4. To enable the collection of iostat information for NFS volumes, edit the OSWatcher.sh script in the
oswbb directory, and set the value of nfs_collect to 1:
nfs_collect=1
84
About OSWatcher Black Box
The optional frequency and duration arguments specifying how often in seconds OSWbb should collect
data and the number of hours for which OSWbb should run. The default values are 30 seconds and 48
hours. The following example starts OSWbb recording data at intervals of 60 seconds, and has it record
data for 12 hours:
# ./startOSWbb.sh 60 12
...
Testing for discovery of OS Utilities...
VMSTAT found on your system.
IOSTAT found on your system.
MPSTAT found on your system.
IFCONFIG found on your system.
NETSTAT found on your system.
TOP found on your system.
Discovery completed.
OSWbba_archive is the path of the archive directory that contains the OSWbb log files.
To stop OSWbb prematurely, run the stopOSWbb.sh script from the oswbb directory.
# ./stopOSWbb.sh
OSWbb collects data in the following directories under the oswbb/archive directory:
Directory Description
oswiostat Contains output from the iostat utility.
oswmeminfo Contains a listing of the contents of /proc/meminfo.
oswmpstat Contains output from the mpstat utility.
oswnetstat Contains output from the netstat utility.
oswprvtnet If you have enable private network tracing for RAC, contains information about the
status of the private networks.
oswps Contains output from the ps utility.
oswslabinfo Contains a listing of the contents of /proc/slabinfo.
oswtop Contains output from the top utility.
oswvmstat Contains output from the vmstat utility.
85
About OSWatcher Black Box
Use the following command to run OSWbba from the oswbb directory:
# java -jar oswbba.jar -i OSWbba_archive
OSWbba_archive is the path of the archive directory that contains the OSWbb log files.
You can use OSWbba to display the following types of performance graph:
Reads per second, writes per second, service time for I/O requests, and percentage utilization of
bandwidth for a specified block device.
You can also use OSWbba to save the analysis to a report file, which reports instances of system
slowdown,spikes in run queue length, or memory shortage, describes probable causes, and offers
suggestions of how to improve performance.
# java -jar oswbba.jar -i OSWbba_archive -A
For more information about OSWbb and OSWbba, refer to the OSWatcher Black Box User Guide (Article
ID 301137.1) and the OSWatcher Black Box Analyzer User Guide (Article ID 461053.1), which are
available from My Oracle Support (MOS) at http://support.oracle.com.
86
Chapter 10 System Dump Analysis
Table of Contents
10.1 About Kdump ........................................................................................................................... 87
10.1.1 Configuring and Using Kdump ........................................................................................ 87
10.1.2 Files Used by Kdump ..................................................................................................... 89
10.1.3 Using Kdump with OCFS2 ............................................................................................. 89
10.1.4 Using Kdump with a System Hang ................................................................................. 90
10.2 Using the crash Debugger ........................................................................................................ 90
10.2.1 Installing the crash Packages ......................................................................................... 90
10.2.2 Running crash ............................................................................................................... 91
10.2.3 Kernel Data Structure Analysis Commands ..................................................................... 92
10.2.4 System State Commands ............................................................................................... 94
10.2.5 Helper Commands ......................................................................................................... 97
10.2.6 Session Control Commands ........................................................................................... 97
10.2.7 Guidelines for Examining a Dump File ............................................................................ 98
This chapter describes how to configure a system to create a memory image in the event of a system
crash, and how to use the crash debugger to analyse the memory image in a crash dump or for a live
system.
Kdump uses kexec to boot into a second kernel whenever the system crashes. kexec is a fast-boot
mechanism which allows a Linux kernel to boot from inside the context of a kernel that is already running
without passing through the bootloader stage.
If the kexec-tools and system-config-kdump packages are not already installed on your system,
use yum to install them.
The Kernel Dump Configuration GUI starts. If Kdump is currently disabled, the green Enable button is
selectable and the Disable button is greyed out.
3. You can select the following settings tags to adjust the configuration of Kdump.
87
Configuring and Using Kdump
Basic Settings Allows you to specify the amount of memory to reserve for Kdump. The
default setting is 128 MB.
Target Settings Allows you to specify the target location for the vmcore dump file on
a locally accessible file system, to a raw disk device, or to a remote
directory using NFS or SSH over IPv4. The default location is /var/
crash.
Filtering Settings Allows to select which type of data to include in or exclude from the dump
file. Selecting or deselecting the options alters the value of the argument
that Kdump specifies to the -d option of the core collector program,
makedumpfile.
Expert Settings Allows you to choose which kernel to use, edit the command line options
that are passed to the kernel and the core collector program, choose
the default action if the dump fails, and modify the options to the core
collector program, makedumpfile.
For example, if Kdump fails to start, and the following error appears
in /var/log/messages, set the offset for the reserved memory
to 48 MB or greater in the command line options, for example
crashkernel=128M@48M:
Note
You can select one of five default actions should the dump fail:
mount rootfs and run /sbin/ Mount the root file system and run
init init. The /etc/init.d/kdump
script attempts to save the dump to /
var/crash, which requires a large
amount of memory to be reserved.
88
Files Used by Kdump
4. Click Apply to save your changes. The GUI displays a popup message to remind you that you must
reboot the system for the changes to take effect.
File Description
/boot/grub/grub.conf Appends the crashkernel option to the kernel line to specify the
amount of reserved memory and any offset value.
/etc/kdump.conf Sets the location where the dump file can be written, the filtering level
for the makedumpfile command, and the default behavior to take if
the dump fails. See the comments in the file for information about the
supported parameters.
If you edit these files, you must reboot the system for the changes to take effect.
To configure a node to panic when it next fences, run the following command on the node after the cluster
starts:
# echo panic > /sys/kernel/config/cluster/cluster_name/fence_method
where cluster_name is the name of the cluster. To set the value after each reboot of the system, add
this line to /etc/rc.local. To restore the default behavior, set the value of fence_method to reset
instead of panic and remove the line from /etc/rc.local.
For more information, see Section 22.3.5, Configuring the Behavior of Fenced Nodes.
89
Using Kdump with a System Hang
The setting remains in force only until the system is rebooted. To make the setting persist after the system
is rebooted, add it to the /etc/sysctl.conf file. To restore the default behavior, set the value of
kernel.hung_task_panic to 0.
For more information, see Section 5.2.2, Changing Kernel Parameters and Section 5.2.4, Parameters
that Control Kernel Panics.
2. Download the appropriate debuginfo and debuginfo-common packages for the vmcore or kernel
that you want to examine from https://oss.oracle.com/ol6/debuginfo/:
If you want to examine the running Unbreakable Enterprise Kernel on the system, use commands
such as the following to download the packages:
# export DLP="https://oss.oracle.com/ol6/debuginfo"
# wget ${DLP}/kernel-uek-debuginfo-`uname -r`.rpm
# wget ${DLP}/kernel-uek-debuginfo-common-`uname -r`.rpm
If you want to examine the running Red Hat Compatible Kernel on the system, use commands such
as the following to download the packages:
# export DLP="https://oss.oracle.com/ol6/debuginfo"
# wget ${DLP}/kernel-debuginfo-`uname -r`.rpm
# wget ${DLP}/kernel-debuginfo-common-`uname -r`.rpm
If you want to examine a vmcore file that relates to a different kernel than is currently running,
download the appropriate debuginfo and debuginfo-common packages for the kernel that
produce the vmcore, for example:
# export DLP="https://oss.oracle.com/ol6/debuginfo"
# wget ${DLP}/kernel-uek-debuginfo-2.6.32-300.27.1.el6uek.x86_64.rpm
# wget ${DLP}/kernel-uek-debuginfo-common-2.6.32-300.27.1.el6uek.x86_64.rpm
90
Running crash
Note
If the vmcore file was produced by Kdump, you can use the following crash
command to determine the version:
# crash --osrelease /var/tmp/vmcore/2013-0211-2358.45-host03.28.core
2.6.39-200.24.1.el6uek.x86_64
The vmlinux kernel object file (also known as the namelist file) that crash requires is installed in /
usr/lib/debug/lib/modules/kernel_version/.
Running crash on a live system is dangerous and can cause data corruption or
total system failure. Do not use crash to examine a production system unless so
directed by Oracle Support.
To examine a vmcore file, specify the path to the file as an argument, for example:
# crash /var/tmp/vmcore/2013-0211-2358.45-host03.28.core
If the vmlinux file is located elsewhere, specify its path before the path to the vmcore file, for example:
# crash /var/tmp/namelist/vmlinux-host03.28 /var/tmp/vmcore/2013-0211-2358.45-host03.28.core
The following crash output is from a vmcore file that was dumped after a system panic:
KERNEL: /usr/lib/debug/lib/modules/2.6.39-200.24.1.el6uek.x86_64/vmlinux
DUMPFILE: /var/tmp/vmcore/2013-0211-2358.45-host03.28.core
CPUS: 2
DATE: Fri Feb 11 16:55:41 2013
UPTIME: 04:24;54
LOAD AVERAGE: 0.00, 0.01, 0.05
TASKS: 84
NODENAME: host03.mydom.com
RELEASE: 2.6.39-200.24.1.el6uek.x86_64
VERSION: #1 SMP Sat Jun 23 02:39:07 EDT 2012
MACHINE: x86_64 (2992 MHz)
MEMORY: 2 GB
PANIC: "Oops: 0002" (check log for details)
PID: 1696
COMMAND: "insmod
91
Kernel Data Structure Analysis Commands
TASK: c74de000
CPU: 0
STATE: TASK_RUNNING (PANIC)
crash>
The output includes the number of CPUs, the load average over the last 1 minute, last 5 minutes, and
last 15 minutes, the number of tasks running, the amount of memory, the panic string, and the command
that was executing at the time the dump was created. In this example, an attempt by insmod to install a
module resulted in an oops violation.
At the crash> prompt, you can enter help or ? to display the available crash commands. Enter help
command to display more information for a specified command.
crash commands can be grouped into several different groups according to purpose:
Kernel Data Structure Analysis Display kernel text and data structures. See Section 10.2.3, Kernel
Commands Data Structure Analysis Commands.
System state commands Examine kernel subsystems on a system-wide or a per-task basis. See
Section 10.2.4, System State Commands.
Session control commands Control the crash session. See Section 10.2.6, Session Control
Commands
* The pointer-to command can be used instead struct or union. The gdb module calls the
appropriate function. For example:
crash> *buffer_head
struct buffer_head {
long unsigned int b_state;
struct buffer_head *b_this_page;
struct page *b_page;
sector_t b_blocknr;
size_t b_size;
char *b_data;
struct block_device *b_bdev;
bh_end_io_t *b_end_io;
void *b_private;
struct list_head b_assoc_buffers;
struct address_space *b_assoc_map;
atomic_t b_count;
}
SIZE: 104
dis Disassembles source code instructions of a complete kernel function, from a specified address
for a specified number of instructions, or from the beginning of a function up to a specified
address. For example:
crash> dis fixup_irqs
92
Kernel Data Structure Analysis Commands
struct Displays either a structure definition, or a formatted display of the contents of a structure at a
specified address. For example:
crash> struct cpu
struct cpu {
int node_id;
int hotpluggable;
struct sys_device sysdev;
}
SIZE: 88
sym Translates a kernel symbol name to a kernel virtual address and section, or a kernel virtual
address to a symbol name and section. You can also query (-q) the symbol list for all symbols
containing a specified string or list (-l) all kernel symbols. For example:
crash> sym jiffies
ffffffff81b45880 (A) jiffies
crash> sym -q runstate
c590 (d) per_cpu__runstate
c5c0 (d) per_cpu__runstate_snapshot
ffffffff8100e563 (T) xen_setup_runstate_info
crash> sym -l
0 (D) __per_cpu_start
0 (D) per_cpu__irq_stack_union
4000 (D) per_cpu__gdt_page
5000 (d) per_cpu__exception_stacks
b000 (d) per_cpu__idt_desc
b010 (d) per_cpu__xen_cr0_value
b018 (D) per_cpu__xen_vcpu
b020 (D) per_cpu__xen_vcpu_info
b060 (d) per_cpu__mc_buffer
c570 (D) per_cpu__xen_mc_irq_flags
c578 (D) per_cpu__xen_cr3
c580 (D) per_cpu__xen_current_cr3
c590 (d) per_cpu__runstate
c5c0 (d) per_cpu__runstate_snapshot
...
93
System State Commands
union Similar to the struct command, displaying kernel data types that are defined as unions instead
of structures.
whatis Displays the definition of structures, unions, typedefs or text or data symbols. For example:
bt Displays a kernel stack trace of the current context or of a specified PID or task. In the case of a
dump that followed a kernel panic, the command traces the functions that were called leading up
to the panic. For example:
crash> bt
PID: 10651 TASK: d1347000 CPU: 1 COMMAND: "insmod"
#0 [d1547e44] die at c010785a
#1 [d1547e54] do_invalid_op at c0107b2c
#2 [d1547f0c] error_code (via invalid_op) at c01073dc
...
You can use the -l option to display the line number of the source file that corresponds to each
function call in a stack trace.
crash> bt -l 1
PID: 1 TASK: ffff88007d032040 CPU: 1 COMMAND: "init"
#0 [ffff88007d035878] schedule at ffffffff8144fdd4
/usr/src/debug/kernel-2.6.32/linux-2.6.32.x86_64/kernel/sched.c: 3091
#1 [ffff88007d035950] schedule_hrtimeout_range at ffffffff814508e4
/usr/src/debug/kernel-2.6.32/linux-2.6.32.x86_64/arch/x86/include/asm/current.h: 14
#2 [ffff88007d0359f0] poll_schedule_timeout at ffffffff811297d5
/usr/src/debug/kernel-2.6.32/linux-2.6.32.x86_64/arch/x86/include/asm/current.h: 14
#3 [ffff88007d035a10] do_select at ffffffff81129d72
/usr/src/debug/kernel-2.6.32/linux-2.6.32.x86_64/fs/select.c: 500
#4 [ffff88007d035d80] core_sys_select at ffffffff8112a04c
/usr/src/debug/kernel-2.6.32/linux-2.6.32.x86_64/fs/select.c: 575
#5 [ffff88007d035f10] sys_select at ffffffff8112a326
/usr/src/debug/kernel-2.6.32/linux-2.6.32.x86_64/fs/select.c: 615
#6 [ffff88007d035f80] system_call_fastpath at ffffffff81011cf2
/usr/src/debug////////kernel-2.6.32/linux-2.6.32.x86_64/arch/x86/kernel/entry_64.S:
488
RIP: 00007fce20a66243 RSP: 00007fff552c1038 RFLAGS: 00000246
RAX: 0000000000000017 RBX: ffffffff81011cf2 RCX: ffffffffffffffff
RDX: 00007fff552c10e0 RSI: 00007fff552c1160 RDI: 000000000000000a
RBP: 0000000000000000 R8: 0000000000000000 R9: 0000000000000200
R10: 00007fff552c1060 R11: 0000000000000246 R12: 00007fff552c1160
R13: 00007fff552c10e0 R14: 00007fff552c1060 R15: 00007fff552c121f
ORIG_RAX: 0000000000000017 CS: 0033 SS: 002b
bt is probably the most useful crash command. It has a large number of options that you can
use to examine a kernel stack trace. For more information, enter help bt.
94
System State Commands
dev Displays character and block device data. The -d and -i options display disk I/O statistics and I/
O port usage. For example:
crash> dev
CHRDEV NAME CDEV OPERATIONS
1 mem ffff88007d2a66c0 memory_fops
4 /dev/vc/0 ffffffff821f6e30 console_fops
4 tty ffff88007a395008 tty_fops
4 ttyS ffff88007a3d3808 tty_fops
5 /dev/tty ffffffff821f48c0 tty_fops
...
BLKDEV NAME GENDISK OPERATIONS
1 ramdisk ffff88007a3de800 brd_fops
259 blkext (none)
7 loop ffff880037809800 lo_fops
8 sd ffff8800378e9800 sd_fops
9 md (none)
...
crash> dev -d
MAJOR GENDISK NAME REQUEST QUEUE TOTAL ASYNC SYNC DRV
8 0xffff8800378e9800 sda 0xffff880037b513e0 10 0 10 0
11 0xffff880037cde400 sr0 0xffff880037b50b10 0 0 0 0
253 0xffff880037902c00 dm-0 0xffff88003705b420 0 0 0 0
253 0xffff880037d5f000 dm-1 0xffff88003705ab50 0 0 0 0
crash> dev -i
RESOURCE RANGE NAME
ffffffff81a9e1e0 0000-ffff PCI IO
ffffffff81a96e30 0000-001f dma1
ffffffff81a96e68 0020-0021 pic1
ffffffff81a96ea0 0040-0043 timer0
ffffffff81a96ed8 0050-0053 timer1
ffffffff81a96f10 0060-0060 keyboard
...
files Displays information about files that are open in the current context or in the context of a specific
PID or task. For example:
fuser Displays the tasks that reference a specified file name or inode address as the current root
directory, current working directory, open file descriptor, or that memory map the file. For
example:
95
System State Commands
crash> irq 0
IRQ: 0
STATUS: 400000 ()
HANDLER: ffffffff81b3da30 <ioapic_chip>
typename: ffffffff815cdaef "IO-APIC"
startup: ffffffff8102a513 <startup_ioapic_irq>
shutdown: ffffffff810aef92 <default_shutdown>
enable: ffffffff810aefe3 <default_enable>
disable: ffffffff810aeecc <default_disable>
ack: ffffffff8102a43d <ack_apic_edge>
mask: ffffffff81029be1 <mask_IO_APIC_irq>
...
kmem Displays the state of the kernel memory subsystems. For example:
crash> kmem -i
PAGES TOTAL PERCENTAGE
TOTAL MEM 512658 2 GB ----
FREE 20867 81.5 MB 4% of TOTAL MEM
USED 491791 1.9 GB 95% of TOTAL MEM
SHARED 176201 688.3 MB 34% of TOTAL MEM
BUFFERS 8375 32.7 MB 1% of TOTAL MEM
CACHED 229933 898.2 MB 44% of TOTAL MEM
SLAB 39551 154.5 MB 7% of TOTAL MEM
kmem has a large number of options. For more information, enter help kmem.
log Displays the kernel message buffer in chronological order. This is the same data that dmesg
displays but the output can include messages that never made it to syslog or disk.
mach Displays machine-specific information such as the cpuinfo structure and the physical memory
map.
mod Displays information about the currently installed kernel modules. The -s and -S options load
debug data (if available) from the specified module object files to enable symbolic debugging.
pte Translates a page table entry (PTE) to the physical page address and page bit settings. If the PTE
refers to a swap location, the command displays the swap device and offset.
runq Displays the list of tasks that are on the run queue of each CPU.
sig Displays signal-handling information for the current context or for a specified PID or task.
task Displays the contents of the task_struct for the current context or for a specified PID or task.
96
Helper Commands
vm Displays the virtual memory data, including the addresses of mm_struct and the page directory,
resident set size, and total virtual memory size for the current context or for a specified PID or
task.
vtop Translates a user or kernel virtual address to a physical address. The command also displays the
PTE translation, vm_area_struct data for user virtual addresses, mem_map page data for a
physical page, and the swap location or file location if the page is not mapped.
ascii Translates a hexadecimal value to ASCII. With no argument, the command displays an ASCII
chart.
eval Evaluates an expression and displays the result in hexadecimal, decimal, octal, and binary. For
example:
crash> eval 4g / 0x100
hexadecimal: 1000000 (16MB)
decimal: 16777216
octal: 100000000
binary: 0000000000000000000000000000000000000001000000000000000000000000
list Displays the contents of a linked list of data objects, typically structures, starting at a specified
address.
search Searches for a specified value in a specified range of user virtual memory, kernel virtual
memory, or physical memory.
rd Displays a selected range of user virtual memory, kernel virtual memory, or physical memory
using the specified format.
Warning
To avoid data loss or data corruption, take great care when using the wr
command.
alias Defines an alias for a command. With no argument, the command displays the
current list of aliases.
97
Guidelines for Examining a Dump File
extend Loads or unloads the specified crash extension shared object libraries.
foreach Execute a bt, files, net, task, set, sig, vm, or vtop command on multiple
tasks.
repeat Repeats a command indefinitely until you type Ctrl-C. This command is only
useful when you use crash to examine a live system.
set Sets the context to a specified PID or task. With no argument, the command
displays the current context.
Use bt -a to trace the active task on each CPU. There is often a relationship between the panicking
task on one CPU and the running tasks on the other CPUs. If the listed command is cpu_idle or
swapper, no task was running on a CPU.
Use bt -l to display the line number of the source files corresponding to each function call in the stack
trace.
Use kmem -i to obtain a summary of memory and swap usage. Look for a SLAB value greater than 500
MB and a SWAP USED value greater than 0%.
Use ps | grep UN to check for processes in the TASK_UNINTERRUPTIBLE state (D state), usually
because they are waiting on I/O. Such processes contribute to the load average and cannot be killed.
You can shell indirection operators to save output from a command to a file for later analysis or to pipe the
output through commands such as grep, for example:
crash> foreach files > files.txt
crash> foreach bt | grep bash
PID: 3685 TASK: ffff880058714580 CPU: 1 COMMAND: "bash"
PID: 11853 TASK: ffff88001c6826c0 CPU: 0 COMMAND: "bash"
98
Part II Networking and Network Services
This section contains the following chapters:
Chapter 11, Network Configuration describes how to configure a system's network interfaces and network routing.
Chapter 12, Network Address Configuration describes how to configure a DHCP server, DHCP client, and Network
Address Translation.
Chapter 13, Name Service Configuration describes how to use BIND to set up a DNS name server.
Chapter 14, Network Time Configuration describes how to configure the Network Time Protocol (NTP) or Precision
Time Protocol (PTP) daemons for setting the system time.
Chapter 15, Web Service Configuration describes how to configure a basic HTTP server.
Chapter 16, Email Service Configuration describes email programs and protocols that are available with Oracle
Linux, and how to set up a basic Sendmail client.
Chapter 17, Load Balancing and High Availability Configuration describes how to use Keepalived and HAProxy to
set up load balancing and high availability configurations with networked systems.
Table of Contents
11 Network Configuration ................................................................................................................ 103
11.1 About Network Interfaces ................................................................................................ 103
11.2 About Network Configuration Files ................................................................................... 105
11.2.1 /etc/hosts ............................................................................................................. 105
11.2.2 /etc/nsswitch.conf ................................................................................................. 105
11.2.3 /etc/resolv.conf ..................................................................................................... 105
11.2.4 /etc/sysconfig/network ........................................................................................... 106
11.3 Command-line Network Configuration Interfaces ............................................................... 106
11.4 Configuring Network Interfaces Using Graphical Interfaces ................................................ 108
11.5 Configuring Network Interface Bonding ............................................................................ 109
11.5.1 Using ifenslave to Create Bonded Interfaces ......................................................... 110
11.6 Configuring VLANs with Untagged Data Frames ............................................................... 111
11.6.1 Using vconfig to Create VLAN Devices ................................................................. 112
11.7 Configuring Network Routing ........................................................................................... 112
12 Network Address Configuration .................................................................................................. 115
12.1 About the Dynamic Host Configuration Protocol ............................................................... 115
12.2 Configuring a DHCP Server ............................................................................................ 115
12.3 Configuring a DHCP Client .............................................................................................. 116
12.4 About Network Address Translation ................................................................................. 117
13 Name Service Configuration ....................................................................................................... 119
13.1 About DNS and BIND ..................................................................................................... 119
13.2 About Types of Name Servers ........................................................................................ 120
13.3 About DNS Configuration Files ........................................................................................ 120
13.3.1 /etc/named.conf .................................................................................................... 120
13.3.2 About Resource Records in Zone Files ................................................................. 123
13.3.3 About Resource Records for Reverse-name Resolution ......................................... 124
13.4 Configuring a Name Server ............................................................................................. 125
13.5 Administering the Name Service ...................................................................................... 126
13.6 Performing DNS Lookups ................................................................................................ 127
14 Network Time Configuration ....................................................................................................... 129
14.1 About the NTP Daemon .................................................................................................. 129
14.1.1 Configuring the ntpd Service ................................................................................. 129
14.2 About PTP ...................................................................................................................... 130
14.2.1 Configuring the PTP Service ................................................................................. 131
14.2.2 Using PTP as a Time Source for NTP ................................................................... 133
15 Web Service Configuration ......................................................................................................... 135
15.1 About the Apache HTTP Server ...................................................................................... 135
15.2 Installing the Apache HTTP Server .................................................................................. 135
15.3 Configuring the Apache HTTP Server .............................................................................. 135
15.4 Testing the Apache HTTP Server .................................................................................... 138
15.5 Configuring Apache Containers ....................................................................................... 138
15.5.1 About Nested Containers ...................................................................................... 139
15.6 Configuring Apache Virtual Hosts .................................................................................... 140
16 Email Service Configuration ....................................................................................................... 143
16.1 About Email Programs .................................................................................................... 143
16.2 About Email Protocols ..................................................................................................... 143
16.2.1 About SMTP ........................................................................................................ 143
16.2.2 About POP and IMAP .......................................................................................... 144
16.3 About the Postfix SMTP Server ....................................................................................... 144
16.4 About the Sendmail SMTP Server ................................................................................... 145
16.4.1 About Sendmail Configuration Files ....................................................................... 145
101
16.5 Forwarding Email ............................................................................................................ 146
16.6 Configuring a Sendmail Client ......................................................................................... 146
17 Load Balancing and High Availability Configuration ..................................................................... 149
17.1 About HAProxy ............................................................................................................... 149
17.2 Installing and Configuring HAProxy .................................................................................. 149
17.2.1 About the HAProxy Configuration File ................................................................... 150
17.3 Configuring Simple Load Balancing Using HAProxy .......................................................... 150
17.3.1 Configuring HAProxy for Session Persistence ........................................................ 152
17.4 About Keepalived ............................................................................................................ 153
17.5 Installing and Configuring Keepalived .............................................................................. 153
17.5.1 About the Keepalived Configuration File ................................................................ 154
17.6 Configuring Simple Virtual IP Address Failover Using Keepalived ...................................... 155
17.7 Configuring Load Balancing Using Keepalived in NAT Mode ............................................. 157
17.7.1 Configuring Firewall Rules for Keepalived NAT-Mode Load Balancing ..................... 161
17.7.2 Configuring Back-End Server Routing for Keepalived NAT-Mode Load Balancing ..... 161
17.8 Configuring Load Balancing Using Keepalived in DR Mode ............................................... 162
17.8.1 Configuring Firewall Rules for Keepalived DR-Mode Load Balancing ....................... 164
17.8.2 Configuring the Back-End Servers for Keepalived DR-Mode Load Balancing ............ 164
17.9 Configuring Keepalived for Session Persistence and Firewall Marks .................................. 165
17.10 Making HAProxy Highly Available Using Keepalived ....................................................... 166
17.11 About Keepalived Notification and Tracking Scripts ......................................................... 169
17.12 Making HAProxy Highly Available Using Oracle Clusterware ........................................... 170
102
Chapter 11 Network Configuration
Table of Contents
11.1 About Network Interfaces ........................................................................................................ 103
11.2 About Network Configuration Files ........................................................................................... 105
11.2.1 /etc/hosts ..................................................................................................................... 105
11.2.2 /etc/nsswitch.conf ......................................................................................................... 105
11.2.3 /etc/resolv.conf ............................................................................................................. 105
11.2.4 /etc/sysconfig/network ................................................................................................... 106
11.3 Command-line Network Configuration Interfaces ....................................................................... 106
11.4 Configuring Network Interfaces Using Graphical Interfaces ........................................................ 108
11.5 Configuring Network Interface Bonding .................................................................................... 109
11.5.1 Using ifenslave to Create Bonded Interfaces ................................................................. 110
11.6 Configuring VLANs with Untagged Data Frames ...................................................................... 111
11.6.1 Using vconfig to Create VLAN Devices ......................................................................... 112
11.7 Configuring Network Routing ................................................................................................... 112
This chapter describes how to configure a system's network interfaces and network routing.
In this example, there are two configuration files for Ethernet interfaces, ifcfg-eth0 and ifcfg-eth1,
and one for the loopback interface, ifcfg-lo. The system reads the configuration files at boot time to
configure the network interfaces.
The following are sample entries from an ifcfg-eth0 file for a network interface that obtains its IP
address using the Dynamic Host Configuration Protocol (DHCP):
DEVICE="eth0"
NM_CONTROLLED="yes"
ONBOOT=yes
USERCTL=no
TYPE=Ethernet
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="System eth0"
UUID=5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03
HWADDR=08:00:27:16:C3:33
PEERDNS=yes
PEERROUTES=yes
If the interface is configured with a static IP address, the file contains entries such as the following:
DEVICE="eth0"
NM_CONTROLLED="yes"
103
About Network Interfaces
ONBOOT=yes
USERCTL=no
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="System eth0"
UUID=5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03
HWADDR=08:00:27:16:C3:33
IPADDR=192.168.1.101
NETMASK=255.255.255.0
BROADCAST=192.168.1.255
PEERDNS=yes
PEERROUTES=yes
The following configuration parameters are typically used in interface configuration files:
DEVICE Name of the physical network interface device (or a PPP logical device).
MASTER Specifies the name of the master bonded interface, of which this interface is
slave.
NM_CONTROLLED Whether the network interface device is controlled by the network management
daemon, NetworkManager.
PEERDNS Whether the /etc/resolv.conf file used for DNS resolution contains
information obtained from the DHCP server.
104
About Network Configuration Files
PEERROUTES Whether the information for the routing table entry that defines the default
gateway for the interface is obtained from the DHCP server.
USERCTL Whether users other than root can control the state of this interface.
11.2.1 /etc/hosts
The /etc/hosts file associates host names with IP addresses. It allows the system to look up (resolve)
the IP address of a host given its name, or the name given the UP address. Most networks use DNS
(Domain Name Service) to perform address or name resolution. Even if your network uses DNS, it is usual
to include lines in this file that specify the IPv4 and IPv6 addresses of the loopback device, for example:
The first and second column contains the IP address and host name. Additional columns contain aliases
for the host name.
11.2.2 /etc/nsswitch.conf
The /etc/nsswitch.conf file configures how the system uses various databases and name resolution
mechanisms. The first field of entries in this file identifies the name of the database. The second field
defines a list of resolution mechanisms in the order in which the system attempts to resolve queries on the
database.
The following example hosts definition from /etc/nsswitch.conf indicates that the system first
attempts to resolve host names and IP addresses by querying files (that is, /etc/hosts) and, if that
fails, next by querying a DNS server, and last of all, by querying NIS+ (NIS version 3) :
11.2.3 /etc/resolv.conf
The /etc/resolv.conf file defines how the system uses DNS to resolve host names and IP addresses.
This file usually contains a line specifying the search domains and up to three lines that specify the IP
addresses of DNS server. The following entries from /etc/resolv.conf configure two search domains
and three DNS servers:
105
/etc/sysconfig/network
nameserver 192.168.154.4
nameserver 10.216.106.3
If your system obtains its IP address from a DHCP server, it is usual for the system to configure the
contents of this file with information also obtained using DHCP.
11.2.4 /etc/sysconfig/network
The /etc/sysconfig/network file specifies additional information that is valid to all network interfaces
on the system. The following entries from /etc/sysconfig/network define that IPv4 networking is
enabled, IPv6 networking is not enabled, the host name of the system, and the IP address of the default
network gateway:
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=host20.mydomain.com
GATEWAY=192.168.1.1
# nm-tool
NetworkManager Tool
State: connected
Capabilities:
Carrier Detect: yes
Speed: 1000 Mb/s
Wired Properties
Carrier: on
IPv4 Settings:
Address: 10.0.2.15
Prefix: 24 (255.255.255.0)
Gateway: 10.0.2.2
DNS: 192.168.249.52
DNS: 192.168.249.41
You can also use the ip command to display the status of an interface, for debugging, or for system
tuning. For example, to display the status of all active interfaces:
# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
106
Command-line Network Configuration Interfaces
For each network interface, the output shows the current IP address, and the status of the interface. To
display the status of a single interface such as eth0, specify its name as shown here:
# ip addr show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 08:00:27:16:c3:33 brd ff:ff:ff:ff:ff:ff
inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0
inet6 fe80::a00:27ff:fe16:c333/64 scope link
valid_lft forever preferred_lft forever
You can also use ip to set properties and activate a network interface. The following example sets the IP
address of the eth1 interface and activates it:
# ip addr add 10.1.1.1/24 dev eth1
# ip link set eth1 up
Note
You might be used to using the ifconfig command to perform these operations.
However, ifconfig is considered obsolete and will eventually be replaced
altogether by the ip command.
Any settings that you configure for network interfaces using ip do not persist across system reboots.
To make the changes permanent, set the properties in the /etc/sysconfig/network-scripts/
ifcfg-interface file.
Any changes that you make to an interface file in /etc/sysconfig/network-scripts do not take
effect until you restart the network service or bring the interface down and back up again. For example, to
restart the network service:
# service network restart
Shutting down interface eth0: Device state: 3 (disconnected)
[ OK ]
Shutting down loopback interface: [ OK ]
Bringing up loopback interface: [ OK ]
Bringing up interface eth0: Active connection state: activating
Active connection path: /org/freedesktop/NetworkManager/ActiveConnection/1
state: activated
Connection activated
[ OK ]
To restart an individual interface, you can use the ifup or ifdown commands, which invoke the script in /
etc/sysconfig/network-scripts that corresponds to the interface type, for example:
# ifdown eth0
Device state: 3 (disconnected)
# ifup eth0
Active connection state: activating
Active connection path: /org/freedesktop/NetworkManager/ActiveConnection/1
state: activated
Connection activated
107
Configuring Network Interfaces Using Graphical Interfaces
The ethtool utility is useful for diagnosing potentially mismatched settings that affect performance, and
allows you to query and set the low-level properties of a network device. Any changes that you make using
ethtool do not persist across a reboot. To make the changes permanent, modify the settings in the
device's ifcfg-interface file in /etc/sysconfig/network-scripts.
For more information, see the ethtool(8), ifup(8), ip(8), and nm-tool(1) manual pages.
The NetworkManager service dynamically detects and configures network connections. It includes a
GNOME Notification Area applet (nm-applet)that provides you with information about the network status
and graphical configuration tools to manage network interfaces and connections.
The applet icon changes its appearance indicate the state of the network. Hover the mouse pointer over
the icon to display more information as a tool tip. Clicking the icon displays a drop-down menu that allows
you to restart or disconnect each named interface.
Enable Notifications Controls whether NetworkManager notifies you of changes to the status
of network connections.
Connection Information Displays the Connection Information window, which lists the connection
type, hardware address, IP address, and other useful information for each
interface.
Edit Connections Displays the Network Connections window, which allows you to configure
wired, wireless, mobile broadband, Virtual Private Network (VPN), and
Digital Subscriber Link (DSL) interfaces. You can also open this window by
using the nm-connection-editor command.
Figure 11.1 shows the Network Connections window with the Wired tab selected.
108
Configuring Network Interface Bonding
You can also use the system-config-network command, which provides a text-based user interface
that allows you to configure network interface and DNS resolver settings.
Basic load-balancing modes (balance-rr and balance-xor) work with any switch that supports
EtherChannel or trunking. Advanced load-balancing modes (balance-tlb and balance-alb) do not
impose requirements on the switching hardware, but do require that the device driver for each component
interfaces implement certain specific features such as support for ethtool or the ability to modify the
hardware address while the device is active. For more information see /usr/share/doc/iputils-*/
README.bonding.
You can use the bonding driver that is provided with the Oracle Linux kernel to aggregate multiple network
interfaces, such as eth0 and eth1, into a single logical interface such as bond0.
2. Edit the contents of ifcfg-bondN to be similar to the configuration settings for an Ethernet interface
except that DEVICE is set to bondN rather than ethn, for example:
DEVICE="bond0"
109
Using ifenslave to Create Bonded Interfaces
IPADDR=192.168.1.121
NETMASK=255.255.255.0
NETWORK=192.168.1.0
BROADCAST=192.168.1.255
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
TYPE=Ethernet
BONDING_OPTS="bonding parameters separated by spaces"
The BONDING_OPTS setting is optional, unless you need to pass parameters to the bonding module,
for example, to specify the load balancing mechanism or to configure ARP link monitoring. For more
information, see /usr/share/doc/iputils-*/README.bonding.
3. For each interface that you want to bond, edit its ifcfg-interface file so that it contains
MASTER=bondN and SLAVE entries, for example:
DEVICE="eth0"
NAME="System eth0"
IPADDR=192.168.1.101
NETMASK=255.255.255.0
BROADCAST=192.0.2.255
NM_CONTROLLED="yes"
ONBOOT=yes
USERCTL=no
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
PEERDNS=yes
PEERROUTES=yes
MASTER=bond0
SLAVE
4. Create the file /etc/modprobe.d/bonding.conf, so that it contains an entry for each bonded
interface, for example:
alias bond0 bonding
The existence of this file ensures that the kernel loads the bonding module is loaded when you bring up
the bonded interface. All bonded interfaces that you configure require an entry in this file.
5. If the component interfaces are up, bring them down, and then bring up the bonded interface:
# ip link set eth0 down
# ip link set eth1 down
# ip link set bond0 up
110
Configuring VLANs with Untagged Data Frames
For example, if the PVID of the switch port is 5 and the interface connected to it is eth0, copy the
ifcfg-eth0 file to ifcfg-eth0.5:
# cd /etc/sysconfig/network-scripts
# cp ifcfg-eth0 ifcfg-eth0.5
For the bonded interface bond0, where the PVID of the connected switch ports is 10, copy the ifcfg-
bond0 file to ifcfg-bond0.10:
# cd /etc/sysconfig/network-scripts
# cp ifcfg-bond0 ifcfg-bond0.10
Note
You do not need to create virtual interfaces for the component interfaces of the
bonded interface. However, you must set the PVID on each switch port to which
they connect.
2. Edit the ifcfg-interface.pvid file, change the DEVICE (and NAME, if specified) entries, and add a
VLAN=yes entry. For example, ifcfg-eth0.5 would appear similar to the following:
DEVICE="eth0.5"
NAME="System eth0.5"
VLAN=yes
IPADDR=192.168.1.101
NETMASK=255.255.255.0
BROADCAST=192.0.2.255
NM_CONTROLLED="yes"
ONBOOT=yes
USERCTL=no
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
111
Using vconfig to Create VLAN Devices
IPV6INIT=no
PEERDNS=yes
PEERROUTES=yes
Save your changes to the file. Do not edit the original ifcfg-ethN file.
In addition to the regular interface, eth0 or bond0, which uses the physical LAN, you now have a
VLAN device, such as eth0.5 or bond0.10, which can use untagged frames to access the virtual
LAN.
To obtain detailed information about VLAN interfaces, view the /proc/net/vlan directory.
If you subsequently need to delete the interface, use the following commands to bring it down and
remove its definition:
# ip link set eth0.5 down
# vconfig rem eth0.5
112
Configuring Network Routing
To create a default route for IPv4 network packets, include an entry for GATEWAY in the /etc/
sysconfig/network file. For example, the following entry configures the IP address of the gateway
system:
GATEWAY=192.0.2.1
If your system has more than one network interface, you can specify which interface should be used:
GATEWAY=192.0.2.1
GATEWAYDEV=eth0
A single statement is usually sufficient to define the gateway for IPv6 packets, for example:
IPV6_DEFAULTGW="2001:db8:1e10:115b::2%eth0"
Any changes that you make to /etc/sysconfig/network do not take effect until you restart the
network service:
# service network restart
To display the routing table, use the ip route show command, for example:
# ip route show
10.0.2.0/24 dev eth0 proto kernel scope link src 10.0.2.15
default via 10.0.2.2 dev eth0 proto static
This example shows that packets destined for the local network (10.0.2.0/24) do not use the gateway. The
default entry means that any packets destined for addresses outside the local network are routed via the
gateway 10.0.2.2.
Note
You might be used to using the route command to configure routing. However,
route is considered obsolete and will eventually be replaced altogether by the ip
command.
You can also use the netstat -rn command to display this information:
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
10.0.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
0.0.0.0 10.0.2.2 0.0.0.0 UG 0 0 0 eth0
To add or delete a route from the table, use the ip route add or ip route del commands. For
example, to replace the entry for the static default route:
# ip route del default
# ip route show
10.0.2.0/24 dev eth0 proto kernel scope link src 10.0.2.15
# ip ro add default via 10.0.2.1 dev eth0 proto static
# ip route show
10.0.2.0/24 dev eth0 proto kernel scope link src 10.0.2.15
default via 10.0.2.1 dev eth0 proto static
To add a route to the network 10.0.3.0/24 via 10.0.3.1 over interface eth1, and then delete that route:
# ip route add 10.0.4.0/24 via 10.0.2.1 dev eth1
# ip route show
10.0.2.0/24 dev eth0 proto kernel scope link src 10.0.2.15
10.0.3.0/24 via 10.0.3.1 dev eth1
default via 10.0.2.2 dev eth0 proto static
# ip route del 10.0.3.0/24
113
Configuring Network Routing
# ip route show
10.0.2.0/24 dev eth0 proto kernel scope link src 10.0.2.15
default via 10.0.2.2 dev eth0 proto static
The ip route get command is a useful feature that allows you to query the route on which the system
will send packets to reach a specified IP address, for example:
# ip route get 23.6.118.140
23.6.118.140 via 10.0.2.2 dev eth0 src 10.0.2.15
cache mtu 1500 advmss 1460 hoplimit 64
In this example, packets to 23.6.118.140 are sent out of the eth0 interface via the gateway 10.0.2.2.
Any changes that you make to the routing table using ip route do not persist across system reboots.
To permanently configure static routes, you can configure them by creating a route-interface file in/
etc/sysconfig/network-scripts for the interface. For example, you would configure a static route
for the eth0 interface in a file named route-eth0. An entry in these files can take the same format as the
arguments to the ip route add command.
For example, to define a default gateway entry for eth0, create an entry such as the following in route-
eth0:
default via 10.0.2.1 dev eth0
The following entry in route-eth1 would define a route to 10.0.3.0/24 via 10.0.3.1 over eth1:
10.0.3.0/24 via 10.0.3.1 dev eth1
Any changes that you make to a route-interface file do not take effect until you restart either the
network service or the interface.
For more information, see the ip(8) and netstat(8) manual pages.
114
Chapter 12 Network Address Configuration
Table of Contents
12.1 About the Dynamic Host Configuration Protocol ....................................................................... 115
12.2 Configuring a DHCP Server .................................................................................................... 115
12.3 Configuring a DHCP Client ...................................................................................................... 116
12.4 About Network Address Translation ......................................................................................... 117
This chapter describes how to configure a DHCP server, DHCP client, and Network Address Translation.
When you configure an Oracle Linux system as a DHCP client, the client daemon, dhclient, contacts the
DHCP server to obtain the networking parameters. As DHCP is broadcast-based, the client must be on the
same subnet as either a server or a relay agent. If a client cannot be on the same subnet as the server, a
DHCP relay agent can be used to pass DHCP messages between subnets.
The server provides a lease for the IP address that it assigns to a client. The client can request specific
terms for the lease, such as the duration. You can configure a DHCP server to limit the terms that it can
grant for a lease. Provided that a client remains connected to the network, dhclient automatically renews
the lease before it expires. You can configure the DHCP server to provide the same IP address to a client
based on the MAC address of its network interface.
reuse of IP addresses reducing the total number of IP addresses that are required
simple reconfiguration of the IP address space on the DHCP server without needing to reconfigure each
client
2. Edit the /etc/dhcp/dhcpd.conf file to store the settings that the DHCP server can provide to the
clients.
The following example configures the domain name, a range of client addresses on the 192.168.2.0/24
subnet from 192.168.2.101 through 192.168.2.254 together with the IP addresses of the default
115
Configuring a DHCP Client
gateway and the DNS server, the default and maximum lease times in seconds, and a static IP address
for the application server svr01 that is identified by its MAC address:
option domain-name "mydom.org";
option domain-name-servers 192.168.2.1, 10.0.1.4;
option broadcast-address 192.168.2.255;
option routers 192.168.2.1;
host svr01 {
hardware ethernet 80:56:3e:00:10:00;
fixed-address 192.168.2.100;
max-lease-time 86400;
}
The DHCP server sends the information in the option lines to each client when it requests a lease
on an IP address. An option applies only to a subnet if you define it inside a subnet definition. In the
example, the options are global and apply to both the subnet and host definitions. The subnet and
host definitions have different settings for the maximum lease time.
3. Edit /etc/sysconfig/dhcpd to configure settings for the DHCP server itself. For example, the
following setting specifies the interfaces on which the server listens for DHCP requests:
DHCPDARGS="eth0 eth1"
4. Touch the /var/lib/dhcpd/dhcpd.leases file, which stores information about client leases:
# touch /var/lib/dhcpd/dhcpd.leases
5. Enter the following commands to start the DHCP service and ensure that it starts after a reboot:
# service dhcpd start
# chkconfig dhcpd on
For information about configuring a DHCP relay, see the dhcrelay(8) manual page.
116
About Network Address Translation
4. To specify options for the client, such as the requested lease time and the network interface on which
to request an address from the server, create the file /etc/dhclient.conf containing the required
options.
The following example specifies that the client should use the eth1 interface, request a lease time of
24 hours, and identify itself using its MAC address:
interface "eth1" {
send dhcp-lease-time 86400;
send dhcp-client-identifier 80:56:3e:00:10:00;
}
5. Restart the network interface or the network service to enable the client, for example:
When the client has requested and obtained a lease, information about this lease is stored in /var/
lib/dhclient/dhclient-interface.leases.
The netfilter kernel subsystem provides the nat table to implement NAT in addition to its tables
for packet filtering. The kernel consults the nat table whenever it handles a packet that creates a new
incoming or outgoing connection.
Note
If your want a system to be able to route packets between two of its network
interfaces, you must turn on IP forwarding:
OUTPUT Handles packets generated on the host system before sending them externally.
POSTROUTING Handles packets arriving from local systems before sending them externally.
The NAT table has the following targets that can be used with the rule chains:
DNAT Alters the destination IP address and port of an incoming packet to route it to a different
host.
SNAT Alters the source IP address and port on an outgoing packet so that it appears to come
from a different host.
117
About Network Address Translation
MASQUERADE Masks the private IP address of a node with the external IP address of the firewall or
gateway router.
The following example specifies that NAT should use the PREROUTING chain to forward incoming HTTP
requests on the eth0 interface to port 8080 of the dedicated HTTP server 192.168.1.100. The rule
changes the destination address and port of the packet.
# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 \
-j DNAT --to 192.168.1.100:8080
The following example allows nodes on the LAN with private IP addresses to communicate with external
public networks:
# iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
This rule makes requests from internal systems appear to originate from the IP address of the firewalls
external interface (eth1).
You can also use the Firewall Configuration GUI (system-config-firewall) to configure simple
masquerading and port forwarding.
118
Chapter 13 Name Service Configuration
Table of Contents
13.1 About DNS and BIND ............................................................................................................. 119
13.2 About Types of Name Servers ................................................................................................ 120
13.3 About DNS Configuration Files ................................................................................................ 120
13.3.1 /etc/named.conf ............................................................................................................ 120
13.3.2 About Resource Records in Zone Files ......................................................................... 123
13.3.3 About Resource Records for Reverse-name Resolution ................................................. 124
13.4 Configuring a Name Server ..................................................................................................... 125
13.5 Administering the Name Service .............................................................................................. 126
13.6 Performing DNS Lookups ........................................................................................................ 127
This chapter describes how to use BIND to set up a DNS name server.
DNS is a hierarchical and distributed database, where each level of the hierarchy is delimited by a period
(.). Consider the following fully qualified domain name (FQDN):
wiki.us.mydom.com.
The root domain, represented by the final period in the FQDN, is usually omitted, except in DNS
configuration files:
wiki.us.mydom.com
In this example, the top-level domain is com, mydom is a subdomain of com, us is a subdomain of mydom,
and wiki is the host name. Each of these domains are grouped into zones for administrative purposes.
A DNS server, or name server, stores the information that is needed to resolve the component domains
inside a zone. In addition, a zone's DNS server stores pointers to the DNS servers that are responsible for
resolving each subdomain.
If a client outside the us.mydom.com domain requests that its local name server resolve a FQDN such as
wiki.us.mydom.com into an IP address for which the name server is not authoritative, the name server
queries a root name server for the address of a name server that is authoritative for the com domain.
Querying this name server returns the IP address of a name server for mydom.com. In turn, querying this
name server returns the IP address of the name server for us.oracle.com, and querying this final name
server returns the IP address for the FQDN. This process is known as a recursive query, where the local
name server handles each referral from an external name server to another name server on behalf of the
resolver.
Iterative queries rely on the resolver being able to handle the referral from each external name server to
trace the name server that is authoritative for the FQDN. Most resolvers use recursive queries and so
cannot use name servers that support only iterative queries. Fortunately, most
Oracle Linux provides the Berkeley Internet Name Domain (BIND) implementation of DNS. The bind
package includes the DNS server daemon (named), tools for working with DNS such as rndc, and a
number of configuration files, including:
119
About Types of Name Servers
/etc/named.conf Contains settings for named and lists the location and characteristics of
the zone files for your domain. Zone files are usually stored in /var/
named.
/etc/named.rfc1912.zones Contains several zone sections for resolving local loopback names and
addresses.
Master name server Authoritative for one or more domains, a master name server maintains
its zone data in several database files, and can transfer this information
periodically to any slave name servers that are also configured in the
zone. In older documentation, master name servers are known as
primary name servers. An organization might maintain two master name
servers for a zone: one master outside the firewall to provide restricted
information about the zone for publicly accessible hosts and services,
and a hidden or stealth master inside the firewall that holds details of
internal hosts and services.
Slave name server Acting as a backup to a master name server, a slave name server
maintains a copy of the zone data, which it periodically refreshes from
the master's copy. In older documentation, slave name servers are
known as secondary name servers.
Stub name server A master name server for a zone might also be configured as a stub
name server that maintains information about the master and slave
name servers of child zones.
Caching-only name server Performs queries on behalf of a client and stores the responses in a
cache after returning the results to the client. It is not authoritative for
any domains and the information that it records is limited to the results
of queries that it has cached.
Forwarding name server Forwards all queries to another name server and caches the results,
which reduces local processing, external access, and network traffic.
In practice, a name server can be a combination of several of these types in complex configurations.
13.3.1 /etc/named.conf
The main configuration file for named is /etc/named.conf, which contains settings for named and the
top-level definitions for zones, for example:
120
/etc/named.conf
include "/etc/rndc.key";
controls {
inet 127.0.0.1 allow { localhost; } keys { "rndc-key"; }
};
zone "us.mydom.com" {
type master;
file "master-data";
allow-update { key "rndc-key"; };
notify yes;
};
zone "mydom.com" IN {
type slave;
file "sec/slave-data";
allow-update { key "rndc-key"; };
masters {10.1.32.1;};
};
zone "2.168.192.in-addr.arpa" IN {
type master;
file "reverse-192.168.2";
allow-update { key rndc-key; };
notify yes;
};
The include statement allows external files to be referenced so that potentially sensitive data such as key
hashes can be placed in a separate file with restricted permissions.
The controls statement defines access information and the security requirements that are necessary to
use the rndc command with the named server:
inet Specifies which hosts can run rndc to control named. In this example, rndc must be run on the
local host (127.0.0.1).
keys Specifies the names of the keys that can be used. The example specifies using the key named
rndc-key, which is defined in /etc/rndc.key. Keys authenticate various actions by named and
are the primary method of controlling remote access and administration.
The zone statements define the role of the server in different zones.
type Specifies that this system is the master name server for the zone us.mydom.com and
a slave server for mydom.com. 2.168.192.in-addr.arpa is a reverse zone for
resolving IP addresses to host names. See Section 13.3.3, About Resource Records for
Reverse-name Resolution .
file Specifies the path to the zone file relative to /var/named. The zone file for
us.mydom.com is stored in /var/named/master-data and the transferred zone data
for mydom.com is cached in /var/named/sec/slave-data.
allow-update Specifies that a shared key must exist on both the master and a slave name server for
a zone transfer to take place from the master to the slave. The following is an example
record for a key in /etc/rndc.key:
key "rndc-key" {
algorithm hmac-md5;
secret "XQX8NmM41+RfbbSdcqOejg==";
};
121
/etc/named.conf
notify Specifies whether to notify the slave name servers when the zone information is
updated.
masters Specifies the master name server for a slave name server.
The next example is taken from the default /etc/named.conf file that is installed with the bind package,
and which configures a caching-only name server.
options {
listen-on port 53 { 127.0.0.1; };
listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
allow-query { localnets; };
recursion yes;
dnssec-enable yes;
dnssec-validation yes;
dnssec-lookaside auto;
managed-keys-directory "/var/named/dynamic";
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
zone "." IN {
type hint;
file "named.ca";
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
The options statement defines global server configuration options and sets defaults for other statements.
directory Specifies the default directory for zone files if a relative pathname is
specified.
statistics-file Specifies the output file for the rndc stats command.
122
About Resource Records in Zone Files
dnssec-validation Whether the name server should validate replies from DNSSEC-
enabled zones.
dnssec-lookaside Whether to enable DNSSEC Lookaside Validation (DLV) using the key
in /etc/named.iscdlv.key defined by bindkeys-file.
The zone section specifies the initial set of root servers using a hint zone. This zone specifies that named
should consult /var/named/named.ca for the IP addresses of authoritative servers for the root domain
(.).
For more information, see the named.conf(5) manual page and the BIND documentation in /usr/
share/doc/bind-version/arm.
TTL (time to live) The maximum time that a name server caches a record before it checks
whether a newer one is available.
Data The information that the record stores, such as an IP address in an A record, or
a host name in a CNAME or PTR record.
The following example shows the contents of a typical zone file such as /var/named/master-data:
123
About Resource Records for Reverse-name Resolution
dns IN A 192.168.2.1
us.mydom.com IN A 192.168.2.1
svr01 IN A 192.168.2.2
www IN CNAME svr01
host01 IN A 192.168.2.101
host02 IN A 192.168.2.102
host03 IN A 192.168.2.103
...
The $TTL directive defines the default time-to-live value for all resource records in the zone. Each resource
record can define its own time-to-live value, which overrides the global setting.
dns.us.mydom.com. The fully qualified domain name of the name server, including a trailing period
(.) for the root domain.
serial A counter that, if incremented, tells named to reload the zone file.
refresh The time after which a master name server notifies slave name servers that they
should refresh their database.
retry If a refresh fails, the time that a slave name server should wait before attempting
another refresh.
expire The maximum elapsed time that a slave name server has to complete a refresh
before its zone records are no longer considered authoritative and it will stop
answering queries.
minimum The minimum time for which other servers should cache information obtained
from this zone.
Each A record specifies the IP address that corresponds to a host name in the domain.
124
Configuring a Name Server
The characteristics for a zone's in-addr.arpa or ip6.arpa domains are usually defined in /etc/
named.conf, for example:
zone "2.168.192.in-addr.arpa" IN {
type master;
file "reverse-192.168.2";
allow-update { key rndc-key; };
notify yes;
};
The zone's name consists of in-addr.arpa preceded by the network portion of the IP address for the
domain with its dotted quads written in reverse order.
If your network does not have a prefix length that is a multiple of 8, see RFC 2317 for the format that you
should use instead.
The PTR records in in-addr.arpa or ip6.arpa domains define host names that correspond to the host
portion of the IP address. The following example is take from the /var/named/reverse-192.168.2
zone file:
$TTL 86400 ;
@ IN SOA dns.us.mydom.com. root.us.mydom.com. (
57 ;
28800 ;
7200 ;
2419200 ;
86400 ;
)
IN NS dns.us.mydom.com.
1 IN PTR dns.us.mydom.com.
1 IN PTR us.mydom.com.
2 IN PTR svr01.us.mydom.com.
101 IN PTR host01.us.mydom.com.
102 IN PTR host02.us.mydom.com.
103 IN PTR host03.us.mydom.com.
...
This line causes NetworkManager to add the following entry to /etc/resolv.conf when the
network service starts:
nameserver 127.0.0.1
125
Administering the Name Service
4. Allow incoming TCP connections to port 53 and incoming UDP datagrams on port 53 from the local
network:
5. Restart the network service, restart the named service, and configure named to start following system
reboots:
# rndc-confgen -a
wrote key file "/etc/rndc.key"
# rndc status
number of zones: 3
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
recursive clients: 0/1000
tcp clients: 0/100
server is up and running
If you modify the named configuration file or zone files, rndc reload instructs named to reload the files:
# rndc reload
server reload successful
For more information, see the named(8), rndc(8) and rndc-confgen(8) manual pages.
126
Performing DNS Lookups
Perform a reverse lookup for the domain name that corresponds to an IP address:
$ host 192.168.2.101
Use the -v and -t options to display verbose information about records of a certain type:
$ host -v -t MX www.mydom.com
Trying "www.mydom.com"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 49643
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;www.mydom.com. IN MX
;; ANSWER SECTION:
www.mydom.com. 135 IN CNAME www.mydom.com.acme.net.
www.mydom.com.acme.net. 1240 IN CNAME d4077.c.miscacme.net.
;; AUTHORITY SECTION:
c.miscacme.net. 2000 IN SOA m0e.miscacme.net. hostmaster.misc.com. ...
The -a option (equivalent to -v -t ANY) displays all available records for a zone:
$ host -a www.us.mydom.com
Trying "www.us.mydom.com"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40030
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;www.us.mydom.com. IN ANY
;; ANSWER SECTION:
www.us.mydom.com. 263 IN CNAME www.us.mydom.acme.net.
127
128
Chapter 14 Network Time Configuration
Table of Contents
14.1 About the NTP Daemon .......................................................................................................... 129
14.1.1 Configuring the ntpd Service ......................................................................................... 129
14.2 About PTP .............................................................................................................................. 130
14.2.1 Configuring the PTP Service ......................................................................................... 131
14.2.2 Using PTP as a Time Source for NTP .......................................................................... 133
This chapter describes how to configure a system to use the Network Time Protocol (NTP) or Precision
Time Protocol (PTP) daemons for setting the system time.
You can configure ntpd to run in several different modes, as described at http://doc.ntp.org/4.2.6p5/
assoc.html, using both symmetric-key and public-key cryptography, as described at http://
doc.ntp.org/4.2.6p5/authopt.html.
Note
The default configuration assumes that the system has network access to public
NTP servers with which it can synchronise. The firewall rules for your internal
networks might well prevent access to these servers but instead allow access to
local NTP servers.
The following example shows a sample NTP configuration for a system that can access three NTP
servers:
server NTP_server_1
server NTP_server_2
server NTP_server_3
server 127.127.1.0
fudge 127.127.1.0 stratum 10
driftfile /var/lib/ntp/drift
restrict default nomodify notrap nopeer noquery
The server and fudge entries for 127.127.1.0 cause ntpd to use the local system clock if the remote
NTP servers are not available. The restrict entry allows remote systems only to synchronise their
time with the local NTP service.
129
About PTP
4. If remote access to the local NTP service is required, configure the system firewall to allow access to
the NTP service on UDP port 123, for example:
# iptables -I INPUT -p udp -m udp --dport 123 -j ACCEPT
# service iptables save
5. Start the ntpd service and configure it to start following a system reboot.
# service ntpd start
# chkconfig ntpd on
You can use the ntpq and ntpstat commands to display information about the operation of ntpd, for
example:
# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
*ns1.proserve.nl 193.67.79.202 2 u 21 64 377 31.420 10.742 3.689
-pomaz.hu 84.2.46.19 3 u 22 64 377 59.133 13.719 5.958
+server.104media 193.67.79.202 2 u 24 64 377 32.110 13.436 5.222
+public-timehost 193.11.166.20 2 u 28 64 377 57.214 9.304 6.311
# ntpstat
synchronised to NTP server (80.84.224.85) at stratum 3
time correct to within 76 ms
polling server every 64
For more information, see the ntpd(8), ntpd.conf(5), ntpq(8), and ntpstat(8) manual pages and
http://doc.ntp.org/4.2.6p5/.
A grandmaster clock is typically implemented as specialized hardware that can use high-accuracy GPS
signals or lower-accuracy code division multiple access (CDMA) signals, radio clock signals, or NTP
as a time reference source. If several grandmaster clocks are available, the best master clock (BMC)
algorithm selects the grandmaster clock based on the settings of their priority1, clockClass,
clockAccuracy, offsetScaledLogVariance, and priority2 parameters and their unique
identifier, in that order.
Each boundary clock is slaved to a grandmaster clock on one subnetwork and relays PTP messages to
one or more additional subnetworks. A boundary clock is usually implemented as a function of a network
switch.
130
Configuring the PTP Service
Each slave clock on a subnetwork is slaved to a boundary clock, which acts as the master clock for that
slave clock.
A simpler configuration is to set up a single grandmaster clock and multiple slave clocks on the same
network segment, which removes any need for an intermediate layer of boundary clocks.
Grandmaster and slave clock systems, which use only one network interface for PTP, are termed ordinary
clocks.
Boundary clocks require at least two network interfaces for PTP: one interface acts a slave to a
grandmaster clock or a higher-level boundary clock; the other interfaces act as masters to slave clocks or
lower-level boundary clocks.
Synchronization of boundary and slave clock systems is achieved by sending time stamps in PTP
messages. By default, PTP messages are sent in UDPv4 datagrams. It is also possible to configure PTP to
use UDPv6 datagrams or Ethernet frames as its transport mechanism.
To be able to use PTP with a system, the driver for at least one of the system's network interfaces must
support either software or hardware time stamping. To find out whether the driver for a network interface
supports time stamping, use the ethtool command as shown in the following example:
# ethtool -T em1
Time stamping parameters for em1:
Capabilities:
hardware-transmit (SOF_TIMESTAMPING_TX_HARDWARE)
software-transmit (SOF_TIMESTAMPING_TX_SOFTWARE)
hardware-receive (SOF_TIMESTAMPING_RX_HARDWARE)
software-receive (SOF_TIMESTAMPING_RX_SOFTWARE)
software-system-clock (SOF_TIMESTAMPING_SOFTWARE)
hardware-raw-clock (SOF_TIMESTAMPING_RAW_HARDWARE)
...
The output from ethtool in this example shows that the em1 interface supports both hardware and
software time stamping capabilities.
With software time stamping, ptp4l synchronises the system clock to an external grandmaster clock.
If hardware time stamping is available, ptp4l can synchronise the PTP hardware clock to an external
grandmaster clock. In this case, you use the phc2sys daemon to synchronise the system clock with the
PTP hardware clock.
2. Edit /etc/sysconfig/ptp4l and define the start-up options for the ptp4l daemon.
Grandmaster clocks and slave clocks require that you define only one interface.
For example, to use hardware time stamping with interface em1 on a slave clock:
OPTIONS="-f /etc/ptp4l.conf -i em1 -s"
To use software time stamping instead of hardware time stamping, specify the -S option:
OPTIONS="-f /etc/ptp4l.conf -i em1 -S -s"
131
Configuring the PTP Service
Note
The -s option specifies that the clock operates only as a slave (slaveOnly
mode). Do not specify this option for a grandmaster clock or a boundary clock.
A boundary clock requires that you define at least two interfaces, for example:
You might need to edit the file /etc/ptp4l.conf to make further adjustments to the configuration of
ptp4l, for example:
For a grandmaster clock, set the value of the priority1 parameter to a value between 0 and 127,
where lower values have higher priority when the BMC algorithm selects the grandmaster clock. For
a configuration that has a single grandmaster clock, a value of 127 is suggested.
If you set the value of summary_interval to an integer value N instead of 0, ptp4l writes
N 0
summary clock statistics to /var/log/messages every 2 seconds instead of every second (2 =
10
1). For example, a value of 10 would correspond to an interval of 2 or 1024 seconds.
The logging_level parameter controls the amount of logging information that ptp4l records.
The default value of logging_level is 6, which corresponds to LOG_INFO. To turn off logging
completely, set the value of logging_level to 0. Alternatively, specify the -q option to ptp4l.
3. Configure the system firewall to allow access by PTP event and general messages to UDP ports 319
and 320, for example:
4. Start the ptp4l service and configure it to start following a system reboot.
a. Edit /etc/sysconfig/phc2sys and define the start-up options for the phc2sys daemon.
On a boundary clock or slave clock, synchronise the system clock with the PTP hardware clock that
is associated with the slave network interface, for example:
Note
The slave network interface on a boundary clock is the one that it uses to
communicate with the grandmaster clock.
The -w option specifies that phc2sys waits until ptp4l has synchronised the PTP hardware clock
before attempting to synchronise the system clock.
132
Using PTP as a Time Source for NTP
On a grandmaster clock, which derives its system time from a reference time source such as GPS,
CDMA, NTP, or a radio time signal, synchronise the network interface's PTP hardware clock from
the system clock, for example:
OPTIONS="-c em1 -s CLOCK_REALTIME -w"
b. Start the phc2sys service and configure it to start following a system reboot.
# service phc2sys start
# chkconfig phc2sys on
You can use the pmc command to query the status of ptp4l operation. The following example shows the
results of running pmc on a slave clock system that is directly connected to the grandmaster clock system
without any intermediate boundary clocks:
# pmc -u -b 0 'GET TIME_STATUS_NP'
sending: GET TIME_STATUS_NP
080027.fffe.7f327b-0 seq 0 RESPONSE MANAGEMENT TIME_STATUS_NP
master_offset -98434
ingress_time 1412169090025854874
cumulativeScaledRateOffset +1.000000000
scaledLastGmPhaseChange 0
gmTimeBaseIndicator 0
lastGmPhaseChange 0x0000'0000000000000000.0000
gmPresent true
gmIdentity 080027.fffe.d9e453
# pmc -u -b 0 'GET CURRENT_DATA_SET'
sending: GET CURRENT_DATA_SET
080027.fffe.7f327b-0 seq 0 RESPONSE MANAGEMENT CURRENT_DATA_SET
stepsRemoved 1
offsetFromMaster 42787.0
meanPathDelay 289207.0
gmIdentity The unique identifier of the grandmaster clock, which is based on the MAC address
of its network interface.
offsetFromMaster The most recent measurement of the time difference in nanoseconds relative to the
grandmaster clock.
stepsRemoved The number of network steps between this system and the grandmaster clock.
For more information, see the phc2sys(8), pmc(8), and ptp4l(8) manual pages, http://www.zhaw.ch/
en/engineering/institutes-centres/ines/downloads/documents.html, and IEEE 1588.
133
Using PTP as a Time Source for NTP
Note
For more information, see Section 14.1.1, Configuring the ntpd Service.
134
Chapter 15 Web Service Configuration
Table of Contents
15.1 About the Apache HTTP Server .............................................................................................. 135
15.2 Installing the Apache HTTP Server .......................................................................................... 135
15.3 Configuring the Apache HTTP Server ...................................................................................... 135
15.4 Testing the Apache HTTP Server ............................................................................................ 138
15.5 Configuring Apache Containers ............................................................................................... 138
15.5.1 About Nested Containers .............................................................................................. 139
15.6 Configuring Apache Virtual Hosts ............................................................................................ 140
4. Create firewall rules to allow access to the ports on which the HTTP server listens, for example:
# iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
# service iptables save
Any changes that you make to the configuration of the Apache HTTP server do not
take effect until you restart the server:
# service httpd restart
The main configuration file for the Apache HTTP server is /etc/httpd/conf/httpd.conf. You can
modify the directives in this file to customize Apache for your environment.
135
Configuring the Apache HTTP Server
Allow from client Specifies a list of clients that can access content or all to serve
[client ...] | all content to any client. The Order directive determines the order in which
httpd evaluates Allow and Deny directives.
Deny from client [client Specifies a list of clients that cannot access content or all to disallow
...] | all all clients. The Order directive determines the order in which httpd
evaluates Allow and Deny directives.
DocumentRoot directory- The top level directory for Apache server content. The apache user
path requires read access to any files and read and execute access to the
directory and any of its sub-directories. Do not place a slash at the end
of the directory path.
For example:
DocumentRoot /var/www/html
ErrorLog filename | If set to a file name, specifies the file, relative to ServerRoot, to which
syslog[:facility] httpd sends error messages.
For example:
ErrorLog logs/error_log
Listen [IP_address:]port Accept incoming requests on the specified port or IP address and port
combination. By default, the httpd server accepts requests on port
80 for all network interfaces. For a port number other than 80, HTTP
requests to the server must include the port number.
For example:
Listen 80
Listen 192.168.2.1:8080
LoadModule module path The Apache HTTP server can load external modules (dynamic shared
objects or DSOs) to extend its functionality. The module argument is
the name of the DSO, and filename is the path name of the module
relative to ServerRoot.
For example:
LoadModule auth_basic_module modules/mod_auth_basic.so
Order deny,allow | Specifies the order in which httpd evaluates Allow and Deny
allow,deny directives.
136
Configuring the Apache HTTP Server
ServerName FQDN[:port] Specifies the fully qualified domain name or IP address of the httpd
server and an optional port on which the server listens. The FQDN
must be resolvable to an IP address. If you do not specify a FQDN, the
server performs a reverse-name lookup on the IP address. If you do not
specify a port, the server uses the port corresponding to the incoming
request.
For example:
ServerName www.mydom.com:80
ServerRoot directory- The top of the directory hierarchy where the httpd server keeps its
path configuration, error, and log files. Do not place a slash at the end of the
directory path.
For example:
ServerRoot /etc/httpd
Timeout seconds Specifies the number of seconds that httpd waits for network
operations to finish before reporting a timeout error. The default value is
60 seconds.
For example:
The root and guest users are disabled from content publishing.
Assuming that ServerName is set to www.mydom.com, browsing
http://www.example.com/~alice displays alice's web
page, which must be located at ~alice/www or http://
www.example.com/alice (that is, in the directory alice relative to
ServerRoot).
137
Testing the Apache HTTP Server
Note
From the local system, direct a browser on the local system to http://localhost.
From a remote system, direct a browser to http:// followed by the value of the ServerName directive
specified in the configuration file (/etc/httpd/conf/httpd.conf).
If the browser displays the Apache 2 Test Page, the server is working correctly.
To test that the server can deliver content, create an HTML file named index.html in the directory
specified by the DocumentRoot directive (by default, /var/www/html). After reloading the page, the
browser should display this HTML file instead of the Apache 2 Test Page.
Note
138
About Nested Containers
<IfModule [!]module> Applies directives if the specified module has been loaded, or, when the
exclamation point (!) is specified, if the module has not been loaded.
<Limit method ...> Places limits on the specified HTTP methods (such as GET, OPTIONS,
POST, and PUT) for use with a Uniform Resource Identifier (URI).
Systems outside mydom.com cannot use GET and PUT with the URI.
<LimitExcept method ...> Places limits on all except the specified HTTP methods for use with a
Uniform Resource Identifier (URI).
The following example disallows any system from using any method
other than GET and POST:
<LimitExcept GET POST>
Order deny,allow
Deny from all
</Limit>
VirtualHost Specifies a group of directives that define a container for a virtual host.
IP_address:port ... See Section 15.6, Configuring Apache Virtual Hosts.
In the example, the AllowOverride directive specifies the following directive classes:
139
Configuring Apache Virtual Hosts
The Options directive controls the features of the server for the directory hierarchy, for example:
IncludesNoExec Prevents the server from running #exec cmd and #exec cgi server-side
includes.
Indexes Generates a web directory listing if the DirectoryIndex directive is not set.
MultiViews Allows the server to determine the file to use that best matches the client's
requirements based on the MIME type when several versions of the file exist
with different extensions.
SymLinksIfOwnerMatch Allows the server to follow a symbolic link if the file or directory being pointed
to has the same owner as the symbolic link.
Each virtual host has its own combination of IP address and port. The server responds to the IP
address with which the host name resolves. Host-by-IP is needed to server HTTPS requests because of
restrictions in the SSL (Secure Sockets Layer) protocol.
All virtual hosts share a common IP address. Apache responds to the request by mapping the host name
in the request to ServerName and ServerAlias directives for the virtual host in the configuration file.
To configure a virtual host, you use the <VirtualHost hostname> container. You must also divide all
served content between the virtual hosts that you configure.
The following example shows a simple name-based configuration for two virtual hosts:
NameVirtualHost *:80
<VirtualHost *:80>
ServerName websvr1.mydom.com
ServerAlias www.mydom-1.com
DocumentRoot /var/www/http/websvr1
ErrorLog websvr1.error_log
</VirtualHost>
140
Configuring Apache Virtual Hosts
<VirtualHost *:80>
ServerName websvr2.mydom.com
ServerAlias www.mydom-2.com
DocumentRoot /var/www/http/sebsvr2
ErrorLog websvr2.error_log
</VirtualHost>
141
142
Chapter 16 Email Service Configuration
Table of Contents
16.1 About Email Programs ............................................................................................................ 143
16.2 About Email Protocols ............................................................................................................. 143
16.2.1 About SMTP ................................................................................................................ 143
16.2.2 About POP and IMAP .................................................................................................. 144
16.3 About the Postfix SMTP Server ............................................................................................... 144
16.4 About the Sendmail SMTP Server ........................................................................................... 145
16.4.1 About Sendmail Configuration Files .............................................................................. 145
16.5 Forwarding Email .................................................................................................................... 146
16.6 Configuring a Sendmail Client ................................................................................................. 146
This chapter describes email programs and protocols that are available with Oracle Linux, and how to set
up a basic Sendmail client.
A Mail Transfer Agent (MTA) transports email messages between systems by using the Simple Mail
Transport Protocol (SMTP). The mail delivery services from the client program to a destination server
possibly traverses several MTAs in its route. Oracle Linux offers two MTAs, Postfix and Sendmail, and also
includes the special purpose MTA, Fetchmail for use with SLIP and PPP.
A Mail Delivery Agent (MDA) performs the actual delivery of an email message. The MTA invokes an
MDA, such as Procmail, to place incoming email in the recipients mailbox file. MDAs distribute and sort
messages on the local system that email client application can access.
SMTP does not require authentication. Anyone can use SMTP to send email, including junk email and
unsolicited bulk email. If you administer an SMTP server, you can configure relay restrictions that limit
users from sending email through it. Open relay servers do not have any such restrictions. Both Postfix
and Sendmail are SMTP server programs that use SMTP. Unless you own a domain in which you want to
receive email, you do not need to set up an SMTP server.
143
About POP and IMAP
The Internet Message Access Protocol (IMAP) is an email access protocol that email client applications
use to retrieve email messages from a remote server, typically maintained by their organization. The entire
message is downloaded only when you open it, and you can delete messages from the server without first
downloading them. Email is retained on the server when using IMAP.
Both POP and IMAP allow you to manage mail folders and create multiple mail directories to organize and
store email.
The dovecot package provides the dovecot service that implements both an IMAP server and a POP
server.
By default, the dovecot service runs IMAP and POP together with their secure versions that use Secure
Socket Layer (SSL) encryption for client authentication and data transfer sessions. The IMAP and POP
servers provided by dovecot are configured to work as installed. It is usually unnecessary to modify the
configuration file, /etc/dovecot.conf.
For more information, see the dovecot(1) manual page and /usr/share/doc/dovecot-version.
Postfix has a modular design that consists of a master daemon and several smaller processes. Postfix
stores its configuration files in the /etc/postfix directory, including:
master.cf Specifies how the Postfix master daemon and other Postfix processes interact to deliver
email.
transport Specifies the mapping between destination email addresses and relay hosts.
By default, Postfix does not accept network connections from any system other than the local host. To
enable mail delivery for other hosts, edit /etc/postfix/main.cf and configure their domain, host
name, and network information.
For more information, see postfix(1) and other Postfix manual pages, Section 16.5, Forwarding
Email, /usr/share/doc/postfix-version, and http://www.postfix.org/documentation.html.
144
About the Sendmail SMTP Server
procmail Contains Procmail, which acts as the default local MDA for Sendmail. This package is
installed as a dependency of the sendmail package.
If you want Sendmail to relay email from other systems, change the following line in sendmail.mc:
DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl
so that it reads:
dnl # DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl
The leading dnl stands for delete to new line, and effectively comments out the line.
After you have edited sendmail.mc, restart the sendmail service to regenerate sendmail.cf:
# service sendmail restart
Shutting down sm-client: [ OK ]
Shutting down sendmail: [ OK ]
Starting sendmail: [ OK ]
Starting sm-client: [ OK ]
However, Sendmail does not use the regenerated configuration file until you restart the server.
access Configures a relay host that processes outbound mail from the local host to other
systems. This is the default configuration:
Connect: localhost.localdomain RELAY
Connect: localhost RELAY
Connect: 127.0.0.1 RELAY
145
Forwarding Email
To configure Sendmail to relay mail from other systems on a local network, add an
entry such as the following:
Connect: 192.168.2 RELAY
mailertable Configures forwarding of email from one domain to another. The following example
forwards email sent to the yourorg.org domain to the SMTP server for the
mydom.com domain:
yourorg.org smtp:[mydom.com]
virtusertable Configures serving of email to multiple domains. Each line starts with a destination
address followed by the address to which Sendmail forwards the email. For example,
the following entry forwards email addressed to any user at yourorg.org to the same
user name at mydom.com:
@yourorg.org %[email protected]
Each of these configuration files has a corresponding database (.db) file in /etc/mail that Sendmail
reads. After making any changes to any of the configuration files, restart the sendmail service. To
regenerate the database files, run the /etc/mail/make all command. As for sendmail.cf, Sendmail
does not use the regenerated database files until you restart the server.
The following example redirects email for postmaster to root, and forwards email sent to admin on the
local system to several other users, including usr04, who is on a different system:
postmaster: root
admin: usr01, usr02, usr03, [email protected]
To direct email to a file, specify an absolute path name instead of the destination address. To specify a
command, precede it with a pipe character (|). The next example erases email sent to nemo by sending it
to /dev/null, and runs a script named aggregator to process emails sent to fixme:
nemo: /dev/null
fixme: |/usr/local/bin/aggregator
After changing the file, run the command newaliases to rebuild the indexed database file.
146
Configuring a Sendmail Client
# mkdir /etc/mail/auth
# chmod 700 /etc/mail/auth
b. In the auth directory, create a file smtp-auth that contains the authentication information for the
SMTP server, for example:
# echo 'AuthInfo:smtp.isp.com: "U:username" "P:password"' > /etc/mail/auth/smtp-auth
where smtp.isp.com is the FQDN of the SMTP server, and username and password are the
name and password of the account.
c. Create the database file from smtp-auth, and make both files read-writable only by root:
# cd /etc/mail/auth
# makemap hash smtp-auth < smtp-auth
# chmod 600 smtp-auth smtp-auth.db
to read:
define('SMART_host', 'smtp.isp.com')dnl
3. If the account on the SMTP server requires authentication, add the following lines after the line that
defines SMART_host:
define('RELAY_MAILER_ARGS', 'TCP $h port')dnl
define('confAUTH_MECHANISMS', 'EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
FEATURE('authinfo','hash /etc/mail/auth/smtp-auth.db')dnl
define(`confAUTH_OPTIONS', `A p y')dnl
where port is the port number used by the SMTP server (for example, 587 for SMARTTLS or 465 for
SSL/TLS).
This entry disables sendmail from listening on port 25 for incoming email.
This configuration does not receive or relay incoming email. You can use a client application to receive
email via POP or IMAP.
147
148
Chapter 17 Load Balancing and High Availability Configuration
Table of Contents
17.1 About HAProxy ....................................................................................................................... 149
17.2 Installing and Configuring HAProxy .......................................................................................... 149
17.2.1 About the HAProxy Configuration File ........................................................................... 150
17.3 Configuring Simple Load Balancing Using HAProxy .................................................................. 150
17.3.1 Configuring HAProxy for Session Persistence ................................................................ 152
17.4 About Keepalived .................................................................................................................... 153
17.5 Installing and Configuring Keepalived ...................................................................................... 153
17.5.1 About the Keepalived Configuration File ........................................................................ 154
17.6 Configuring Simple Virtual IP Address Failover Using Keepalived .............................................. 155
17.7 Configuring Load Balancing Using Keepalived in NAT Mode ..................................................... 157
17.7.1 Configuring Firewall Rules for Keepalived NAT-Mode Load Balancing ............................. 161
17.7.2 Configuring Back-End Server Routing for Keepalived NAT-Mode Load Balancing ............. 161
17.8 Configuring Load Balancing Using Keepalived in DR Mode ....................................................... 162
17.8.1 Configuring Firewall Rules for Keepalived DR-Mode Load Balancing ............................... 164
17.8.2 Configuring the Back-End Servers for Keepalived DR-Mode Load Balancing ................... 164
17.9 Configuring Keepalived for Session Persistence and Firewall Marks .......................................... 165
17.10 Making HAProxy Highly Available Using Keepalived ............................................................... 166
17.11 About Keepalived Notification and Tracking Scripts ................................................................. 169
17.12 Making HAProxy Highly Available Using Oracle Clusterware ................................................... 170
This chapter describes how to configure the Keepalived and HAProxy technologies for balancing access to
network services while maintaining continuous access to those services.
The configuration file for the haproxy daemon is /etc/haproxy/haproxy.cfg. This file must be
present on each server on which you configure HAProxy for load balancing or high availability.
2. Edit /etc/haproxy/haproxy.cfg to configure HAProxy on each server. See Section 17.2.1, About
the HAProxy Configuration File.
149
About the HAProxy Configuration File
4. Enable access to the services or ports that you want HAProxy to handle.
For example, to enable access to HTTP and make this rule persist across reboots, enter the following
commands:
# iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
# service iptables save
global Defines global settings such as the syslog facility and level to use for
logging, the maximum number of concurrent connections allowed, and
how many processes to start in daemon mode.
backend Defines the servers to which the proxy forwards client connections.
Figure 17.1 shows an HAProxy server (10.0.0.10), which is connected to an externally facing network
(10.0.0/24) and to an internal network (192.168.1/24). Two web servers, websvr1 (192.168.1.71) and
websvr2 (192.168.1.72), are accessible on the internal network. The IP address 10.0.0.10 is in the private
address range 10.0.0/24, which cannot be routed on the Internet. An upstream network address translation
(NAT) gateway or a proxy server provides access to and from the Internet.
150
Configuring Simple Load Balancing Using HAProxy
defaults
mode http
timeout connect 5s
timeout client 25s
timeout server 25s
timeout queue 10s
This configuration balances HTTP traffic between the two back-end web servers websvr1 and websvr2,
whose firewalls are configured to accept incoming TCP requests on port 80.
After implementing simple /var/www/html/index.html files on the web servers and using curl to test
connectivity, the following output demonstrate how HAProxy balances the traffic between the servers and
how it handles the httpd service stopping on websvr1:
151
Configuring HAProxy for Session Persistence
In this example, HAProxy detected that the httpd service had restarted on websvr1 and resumed using
that server in addition to websvr2.
By combining the load balancing capability of HAProxy with the high availability capability of Keepalived
or Oracle Clusterware, you can configure a backup load balancer that ensures continuity of service in the
event that the master load balancer fails. See Section 17.10, Making HAProxy Highly Available Using
Keepalived and Section 17.12, Making HAProxy Highly Available Using Oracle Clusterware.
See Section 17.2, Installing and Configuring HAProxy for details of how to install and configure HAProxy.
If you want web sessions to have persistent connections to the same server, you can use a balance
algorithm such as hdr, rdp-cookie, source, uri, or url_param.
If your implementation requires the use of the leastconn, roundrobin, or static-rr algorithm, you
can implement session persistence by using server-dependent cookies.
To enable session persistence for all pages on a web server, use the cookie directive to define the name
of the cookie to be inserted and add the cookie option and server name to the server lines, for example:
cookie WEBSVR insert
server websvr1 192.168.1.71:80 weight 1 maxconn 512 cookie 1 check
server websvr2 192.168.1.72:80 weight 1 maxconn 512 cookie 2 check
HAProxy includes an additional Set-Cookie: header that identifies the web server in its response
to the client, for example: Set-Cookie: WEBSVR=N; path=page_path. If a client subsequently
specifies the WEBSVR cookie in a request, HAProxy forwards the request to the web server whose server
cookievalue matches the value of WEBSVR.
The following example demonstrates how an inserted cookie ensures session persistence:
$ while true; do curl http://10.0.0.10; sleep 1; done
This is HTTP server websvr1 (192.168.1.71).
This is HTTP server websvr2 (192.168.1.72).
152
About Keepalived
To enable persistence selectively on a web server, use the cookie directive to specify that HAProxy
should expect the specified cookie, usually a session ID cookie or other existing cookie, to be prefixed with
the server cookie value and a ~ delimiter, for example:
cookie SESSIONID prefix
server websvr1 192.168.1.71:80 weight 1 maxconn 512 cookie 1 check
server websvr2 192.168.1.72:80 weight 1 maxconn 512 cookie 2 check
If the value of SESSIONID is prefixed with a server cookie value, for example: Set-Cookie:
SESSIONID=N~Session_ID;, HAProxy strips the prefix and delimiter from the SESSIONID cookie before
forwarding the request to the web server whose server cookie value matches the prefix.
The following example demonstrates how using a prefixed cookie enables session persistence:
$ while true; do curl http://10.0.0.10 --cookie "SESSIONID=1~1234;"; sleep 1; done
This is HTTP server websvr1 (192.168.1.71).
This is HTTP server websvr1 (192.168.1.71).
This is HTTP server websvr1 (192.168.1.71).
^C
A real web application would usually set the session ID on the server side, in which case the first HAProxy
response would include the prefixed cookie in the Set-Cookie: header.
The configuration file for the keepalived daemon is /etc/keepalived/keepalived.conf. This file
must be present on each server on which you configure Keepalived for load balancing or high availability.
153
About the Keepalived Configuration File
3. Enable IP forwarding:
# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
# sysctl -p
net.ipv4.ip_forward = 1
4. Add firewall rules to allow VRRP communication using the multicast IP address 224.0.0.18 and the
VRRP protocol (112) on each network interface that Keepalived will control, for example:
# iptables -I INPUT -i eth0 -d 224.0.0.0/8 -p vrrp -j ACCEPT
# iptables -I OUTPUT -o eth0 -d 224.0.0.0/8 -p vrrp -j ACCEPT
# service iptables save
global_defs Defines global settings such as the email addresses for sending
notification messages, the IP address of an SMTP server, the timeout
value for SMTP connections in seconds, a string that identifies the host
machine, the VRRP IPv4 and IPv6 multicast addresses, and whether
SNMP traps should be enabled.
static_ipaddress, Define static IP addresses and routes, which VRRP cannot change.
static_routes These sections are not required if the addresses and routes are
already defined on the servers and these servers already have network
connectivity.
vrrp_sync_group Defines a VRRP synchronization group of VRRP instances that fail over
together.
154
Configuring Simple Virtual IP Address Failover Using Keepalived
The following example uses Keepalived to implement a simple failover configuration on two servers. One
server acts as the master, the other acts as a backup, and the master server has a higher priority than the
backup server.
Figure 17.2 shows how the virtual IP address 10.0.0.100 is initially assigned to the master server
(10.0.0.71). When the master server fails, the backup server (10.0.0.72) becomes the new master server
and is assigned the virtual IP address 10.0.0.100.
155
Configuring Simple Virtual IP Address Failover Using Keepalived
vrrp_instance VRRP1 {
state MASTER
# Specify the network interface to which the virtual address is assigned
interface eth0
# The virtual router ID must be unique to each VRRP instance that you define
virtual_router_id 41
# Set the value of priority higher on the master server than on a backup server
priority 200
advert_int 1
authentication {
auth_type PASS
auth_pass 1066
}
virtual_ipaddress {
10.0.0.100/24
}
}
The configuration of the backup server is the same except for the values of
notification_email_from, state, priority, and possibly interface if the system hardware
configuration is different:
global_defs {
notification_email {
[email protected]
}
notification_email_from [email protected]
smtp_server localhost
smtp_connect_timeout 30
}
vrrp_instance VRRP1 {
state BACKUP
# Specify the network interface to which the virtual address is assigned
interface eth0
virtual_router_id 41
# Set the value of priority lower on the backup server than on the master server
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1066
}
virtual_ipaddress {
10.0.0.100/24
}
}
In the event that the master server (svr1) fails, keepalived assigns the virtual IP address 10.0.0.100/24
to the eth0 interface on the backup server (svr2), which becomes the master server.
To determine whether a server is acting as the master, you can use the ip command to see whether the
virtual address is active, for example:
156
Configuring Load Balancing Using Keepalived in NAT Mode
Alternatively, search for Keepalived messages in /var/log/messages that show transitions between
states, for example:
Note
Only one server should be active as the master at any time. If more than one
server is configured as the master, it is likely that there is a problem with VRRP
communication between the servers. Check the network settings for each interface
on each server and check that the firewall allows both incoming and outgoing VRRP
packets for multicast IP address 224.0.0.18.
See Section 17.5, Installing and Configuring Keepalived for details of how to install and configure
Keepalived.
Figure 17.3 shows that the Keepalived master server has network addresses 192.168.1.10, 192.168.1.1
(virtual), 10.0.0.10, and 10.0.0.100 (virtual). The Keepalived backup server has network addresses
192.168.1.11 and 10.0.0.11. The web servers websvr1 and websvr2 have network addresses 10.0.0.71
and 10.0.0.72 respectively.
157
Configuring Load Balancing Using Keepalived in NAT Mode
Figure 17.3 Example Keepalived Configuration for Load Balancing in NAT Mode
vrrp_sync_group VRRP1 {
# Group the external and internal VRRP instances so they fail over together
group {
external
internal
}
}
vrrp_instance external {
state MASTER
interface eth0
virtual_router_id 91
priority 200
advert_int 1
authentication {
auth_type PASS
auth_pass 1215
}
# Define the virtual IP address for the external network interface
virtual_ipaddress {
192.168.1.1/24
}
}
158
Configuring Load Balancing Using Keepalived in NAT Mode
vrrp_instance internal {
state MASTER
interface eth1
virtual_router_id 92
priority 200
advert_int 1
authentication {
auth_type PASS
auth_pass 1215
}
# Define the virtual IP address for the internal network interface
virtual_ipaddress {
10.0.0.100/24
}
}
real_server 10.0.0.71 80 {
weight 1
TCP_CHECK {
connect_timeout 5
connect_port 80
}
}
real_server 10.0.0.72 80 {
weight 1
TCP_CHECK {
connect_timeout 5
connect_port 80
}
}
}
This configuration is similar to that given in Section 17.6, Configuring Simple Virtual IP Address Failover
Using Keepalived with the additional definition of a vrrp_sync_group section so that the network
interfaces are assigned together on failover, and a virtual_server section to define the real back-end
servers that Keepalived uses for load balancing. The value of lb_kind is set to NAT (Network Address
Translation), which means that the Keepalived server handles both inbound and outbound network traffic
from and to the client on behalf of the back-end servers.
The configuration of the backup server is the same except for the values of
notification_email_from, state, priority, and possibly interface if the system hardware
configuration is different:
global_defs {
notification_email {
[email protected]
}
notification_email_from [email protected]
smtp_server localhost
smtp_connect_timeout 30
}
vrrp_sync_group VRRP1 {
159
Configuring Load Balancing Using Keepalived in NAT Mode
# Group the external and internal VRRP instances so they fail over together
group {
external
internal
}
}
vrrp_instance external {
state BACKUP
interface eth0
virtual_router_id 91
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1215
}
# Define the virtual IP address for the external network interface
virtual_ipaddress {
192.168.1.1/24
}
}
vrrp_instance internal {
state BACKUP
interface eth1
virtual_router_id 92
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1215
}
# Define the virtual IP address for the internal network interface
virtual_ipaddress {
10.0.0.100/24
}
}
real_server 10.0.0.71 80 {
weight 1
TCP_CHECK {
connect_timeout 5
connect_port 80
}
}
real_server 10.0.0.72 80 {
weight 1
TCP_CHECK {
connect_timeout 5
connect_port 80
}
}
}
160
Configuring Firewall Rules for Keepalived NAT-Mode Load Balancing
Configure firewall rules on each Keepalived server (master and backup) that you configure as a load
balancer as described in Section 17.7.1, Configuring Firewall Rules for Keepalived NAT-Mode Load
Balancing.
Configure a default route for the virtual IP address of the load balancer's internal network interface
on each back-end server that you intend to use with the Keepalived load balancer as described in
Section 17.7.2, Configuring Back-End Server Routing for Keepalived NAT-Mode Load Balancing.
See Section 17.5, Installing and Configuring Keepalived for details of how to install and configure
Keepalived.
1. Configure NAT mode (masquerading) on the external network interface, for example:
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# service iptables save
2. If not already enabled for your firewall, configure forwarding rules between the external and internal
network interfaces, for example:
# iptables -A FORWARD -i eth0 -o eth1 -m state \
--state RELATED,ESTABLISHED -j ACCEPT
# iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
# iptables -A FORWARD -j REJECT --reject-with icmp-host-prohibited
# service iptables save
3. Enable access to the services or ports that you want Keepalived to handle.
For example, to enable access to HTTP and make this rule persist across reboots, enter the following
commands:
# iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
# service iptables save
For example, if the virtual IP address is 10.0.0.100, you can use the ip command to examine the
routing table and to set the default route:
# ip route show
10.0.0.0/24 dev eth0 proto kernel scope link src 10.0.0.71
# ip route add default via 10.0.0.100 dev eth0
# ip route show
default via 10.0.0.100 dev eth0
10.0.0.0/24 dev eth0 proto kernel scope link src 10.0.0.71
161
Configuring Load Balancing Using Keepalived in DR Mode
To make the default route for eth0 persist across reboots, create the file /etc/sysconfig/network-
scripts/route-eth0:
# echo "default via 10.0.0.100 dev eth0" > /etc/sysconfig/network-scripts/route-eth0
Figure 17.4 shows that the Keepalived master server has network addresses 10.0.0.11 and 10.0.0.1
(virtual). The Keepalived backup server has network address 10.0.0.12. The web servers websvr1 and
websvr2 have network addresses 10.0.0.71 and 10.0.0.72 respectively. In additional, both web servers
are configured with the virtual IP address 10.0.0.1 to make them accept packets with that destination
address. Incoming requests are received by the master server and redirected to the web servers, which
respond directly.
vrrp_instance external {
state MASTER
interface eth0
virtual_router_id 91
162
Configuring Load Balancing Using Keepalived in DR Mode
priority 200
advert_int 1
authentication {
auth_type PASS
auth_pass 1215
}
virtual_ipaddress {
10.0.0.1/24
}
}
virtual_server 10.0.0.1 80 {
delay_loop 10
protocol TCP
lb_algo rr
# Use direct routing
lb_kind DR
persistence_timeout 7200
real_server 10.0.0.71 80 {
weight 1
TCP_CHECK {
connect_timeout 5
connect_port 80
}
}
real_server 10.0.0.72 80 {
weight 1
TCP_CHECK {
connect_timeout 5
connect_port 80
}
}
}
The virtual server configuration is similar to that given in Section 17.7, Configuring Load Balancing Using
Keepalived in NAT Mode except that the value of lb_kind is set to DR (Direct Routing), which means that
the Keepalived server handles all inbound network traffic from the client before routing it to the back-end
servers, which reply directly to the client, bypassing the Keepalived server. This configuration reduces the
load on the Keepalived server but is less secure as each back-end server requires external access and is
potentially exposed as an attack surface. Some implementations use an additional network interface with a
dedicated gateway for each web server to handle the response network traffic.
The configuration of the backup server is the same except for the values of
notification_email_from, state, priority, and possibly interface if the system hardware
configuration is different:
global_defs {
notification_email {
[email protected]
}
notification_email_from [email protected]
smtp_server localhost
smtp_connect_timeout 30
}
vrrp_instance external {
state BACKUP
interface eth0
virtual_router_id 91
priority 100
advert_int 1
authentication {
auth_type PASS
163
Configuring Firewall Rules for Keepalived DR-Mode Load Balancing
auth_pass 1215
}
virtual_ipaddress {
10.0.0.1/24
}
}
virtual_server 10.0.0.1 80 {
delay_loop 10
protocol TCP
lb_algo rr
# Use direct routing
lb_kind DR
persistence_timeout 7200
real_server 10.0.0.71 80 {
weight 1
TCP_CHECK {
connect_timeout 5
connect_port 80
}
}
real_server 10.0.0.72 80 {
weight 1
TCP_CHECK {
connect_timeout 5
connect_port 80
}
}
}
Configure firewall rules on each Keepalived server (master and backup) that you configure as a load
balancer as described in Section 17.8.1, Configuring Firewall Rules for Keepalived DR-Mode Load
Balancing.
Configure the arp_ignore and arp_announce ARP parameters and the virtual IP address for the
network interface on each back-end server that you intend to use with the Keepalived load balancer
as described in Section 17.8.2, Configuring the Back-End Servers for Keepalived DR-Mode Load
Balancing.
See Section 17.5, Installing and Configuring Keepalived for details of how to install and configure
Keepalived.
For example, to enable access to HTTP and make this rule persist across reboots, enter the following
commands:
# iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
# service iptables save
164
Configuring Keepalived for Session Persistence and Firewall Marks
Only the master Keepalived server should respond to ARP requests for the virtual IP address. You can set
the arp_ignore and arp_announce ARP parameters for the network interface of each back-end server
so that they do not respond to ARP requests for the virtual IP address.
To configure the ARP parameters and virtual IP address on each back-end server:
1. Configure the ARP parameters for the primary network interface, for example eth0:
# echo "net.ipv4.conf.eth0.arp_ignore = 1" >> /etc/sysctl.conf
# echo "net.ipv4.conf.eth0.arp_announce = 2" >> /etc/sysctl.conf
# sysctl -p
net.ipv4.conf.eth0.arp_ignore = 1
net.ipv4.conf.eth0.arp_announce = 2
2. To define a virtual IP address that persists across reboots, edit /etc/rc.local and add the
command ip addr add 10.0.0.1/24 dev eth0, for example:
# echo "ip addr add 10.0.0.1/24 dev eth0" >> /etc/rc.local
# cat /etc/rc.local
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
ip addr add 10.0.0.1/24 dev eth0
This example defines the virtual IP address 10.0.0.1 for eth0 in addition to the existing real IP address
of the back-end server.
3. Reboot the system and verify that the virtual IP address has been set up:
# ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 08:00:27:cb:a6:8d brd ff:ff:ff:ff:ff:ff
inet 10.0.0.72/24 brd 10.0.0.255 scope global eth0
inet 10.0.0.1/24 brd 10.0.0.255 scope global secondary eth0
inet6 fe80::a00:27ff:fecb:a68d/64 scope link
valid_lft forever preferred_lft forever
If you enable the load balancer in Keepalived to use persistence, a client connects to the same server
provided that the timeout period (persistence_timeout) has not been exceeded since the previous
connection.
Firewall marks are another method for controlling session access so that Keepalived forwards a client's
connections on different ports, such as HTTP (80) and HTTPS (443), to the same server, for example:
# iptables -t mangle -A PREROUTING -d virtual_IP_addr/32 -p tcp \
-m multiport --dports 80,443 -j MARK --set-mark 123
# service iptables save
These commands set a firewall mark value of 123 on packets that are destined for ports 80 or 443 at the
specified virtual IP address.
You must also declare the firewall mark (fwmark) value to Keepalived by setting it on the virtual server
instead of a destination virtual IP address and port, for example:
165
Making HAProxy Highly Available Using Keepalived
This configuration causes Keepalived to route the packets based on their firewall mark value rather than
the destination virtual IP address and port. When used in conjunction with session persistence, firewall
marks help ensure that all ports used by a client session are handled by the same server.
Figure 17.5 shows two HAProxy servers, which are connected to an externally facing network (10.0.0/24)
as 10.0.0.11 and 10.0.0.12 and to an internal network (192.168.1/24) as 192.168.1.11 and 192.168.1.12.
One HAProxy server (10.0.0.11) is configured as a Keepalived master server with the virtual IP address
10.0.0.10 and the other (10.0.0.12) is configured as a Keepalived backup server. Two web servers,
websvr1 (192.168.1.71) and websvr2 (192.168.1.72), are accessible on the internal network. The IP
address 10.0.0.10 is in the private address range 10.0.0/24, which cannot be routed on the Internet. An
upstream network address translation (NAT) gateway or a proxy server provides access to and from the
Internet.
Figure 17.5 Example of a Combined HAProxy and Keepalived Configuration with Web Servers on a
Separate Network
The HAProxy configuration on both 10.0.0.11 and 10.0.0.12 is very similar to Section 17.3, Configuring
Simple Load Balancing Using HAProxy. The IP address on which HAProxy listens for incoming requests is
the virtual IP address that Keepalived controls.
global
daemon
166
Making HAProxy Highly Available Using Keepalived
defaults
mode http
timeout connect 5s
timeout client 25s
timeout server 25s
timeout queue 10s
# Handle Incoming HTTP Connection Requests on the virtual IP address controlled by Keepalived
listen http-incoming
mode http
bind 10.0.0.10:80
# Use each server in turn, according to its weight value
balance roundrobin
# Verify that service is available
option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www
# Insert X-Forwarded-For header
option forwardfor
# Define the back-end servers, which can handle up to 512 concurrent connections each
server websvr1 192.168.1.71:80 weight 1 maxconn 512 check
server websvr2 192.168.1.72:80 weight 1 maxconn 512 check
It is also possible to configure HAProxy and Keepalived directly on the web servers as shown in
Figure 17.6. As in the previous example, one HAProxy server (10.0.0.11) is configured as the Keepalived
master server with the virtual IP address 10.0.0.10 and the other (10.0.0.12) is configured as a Keepalived
backup server. The HAProxy service on the master listens on port 80 and forwards incoming requests to
one of the httpd services, which listen on port 8080.
Figure 17.6 Example of a Combined HAProxy and Keepalived Configuration with Integrated Web
Servers
The HAProxy configuration is the same as the previous example except for the IP addresses and ports of
the web servers.
...
server websvr1 10.0.0.11:8080 weight 1 maxconn 512 check
server websvr2 10.0.0.12:8080 weight 1 maxconn 512 check
The firewall on each server must be configured to accept incoming TCP requests on port 8080.
The Keepalived configuration for both example configurations is similar to that given in Section 17.6,
Configuring Simple Virtual IP Address Failover Using Keepalived.
167
Making HAProxy Highly Available Using Keepalived
global_defs {
notification_email {
[email protected]
}
notification_email_from [email protected]
smtp_server localhost
smtp_connect_timeout 30
}
vrrp_instance VRRP1 {
state MASTER
# Specify the network interface to which the virtual address is assigned
interface eth0
# The virtual router ID must be unique to each VRRP instance that you define
virtual_router_id 41
# Set the value of priority higher on the master server than on a backup server
priority 200
advert_int 1
authentication {
auth_type PASS
auth_pass 1066
}
virtual_ipaddress {
10.0.0.10/24
}
}
The configuration of the backup server is the same except for the values of
notification_email_from, state, priority, and possibly interface if the system hardware
configuration is different:
global_defs {
notification_email {
[email protected]
}
notification_email_from [email protected]
smtp_server localhost
smtp_connect_timeout 30
}
vrrp_instance VRRP1 {
state BACKUP
# Specify the network interface to which the virtual address is assigned
interface eth0
virtual_router_id 41
# Set the value of priority lower on the backup server than on the master server
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1066
}
virtual_ipaddress {
10.0.0.10/24
}
}
In the event that the master server (haproxy1) fails, keepalived assigns the virtual IP address
10.0.0.10/24 to the eth0 interface on the backup server (haproxy2), which becomes the master server.
See Section 17.2, Installing and Configuring HAProxy and Section 17.5, Installing and Configuring
Keepalived for details of how to install and configure HAProxy and Keepalived.
168
About Keepalived Notification and Tracking Scripts
To invoke a notification script, include one the following lines inside a vrrp_instance or
vrrp_sync_group section:
The following executable script could be used to handle the general-purpose version of notify:
#!/bin/bash
ENDSTATE=$3
NAME=$2
TYPE=$1
case $ENDSTATE in
"BACKUP") # Perform action for transition to BACKUP state
exit 0
;;
"FAULT") # Perform action for transition to FAULT state
exit 0
;;
"MASTER") # Perform action for transition to MASTER state
exit 0
;;
*) echo "Unknown state ${ENDSTATE} for VRRP ${TYPE} ${NAME}"
exit 1
;;
esac
Tracking scripts are programs that Keepalived runs at regular intervals, according to a vrrp_script
definition:
169
Making HAProxy Highly Available Using Oracle Clusterware
vrrp_script script_name {
script "program_path arg ..."
interval i # Run script every i seconds
fall f # If script returns non-zero f times in succession, enter FAULT state
rise r # If script returns zero r times in succession, exit FAULT state
timeout t # Wait up to t seconds for script before assuming non-zero exit code
weight w # Reduce priority by w on fall
}
You can use tracking scripts with a vrrp_instance section by specifying a track_script clause, for
example:
vrrp_instance instance_name {
state MASTER
interface eth0
virtual_router_id 21
priority 200
advert_int 1
virtual_ipaddress {
10.0.0.10/24
}
track_script {
script_name
...
}
}
If a configured script returns a non-zero exit code f times in succession, Keepalived changes the state of
the VRRP instance or group to FAULT, removes the virtual IP address 10.0.0.10 from eth0, reduces the
priority value by w and stops sending multicast VRRP packets. If the script subsequently returns a zero
exit code r times in succession, the VRRP instance or group exits the FAULT state and transitions to the
MASTER or BACKUP state depending on its new priority.
If you want a server to enter the FAULT state if one or more interfaces goes down, you can also use a
track_interface clause, for example:
track_interface {
eth0
eth1
}
A possible application of tracking scripts is to deal with a potential split-brain condition in the case that
some of the Keepalived servers lose communication. For example, a script could track the existence of
other Keepalived servers or use shared storage or a backup communication channel to implement a voting
mechanism. However, configuring Keepalived to avoid a split brain condition is complex and it is difficult to
avoid corner cases where a scripted solution might not work.
For an alternative solution, see Section 17.12, Making HAProxy Highly Available Using Oracle
Clusterware.
170
Making HAProxy Highly Available Using Oracle Clusterware
Oracle Clusterware is a portable clustering software solution that allow you to configure independent
servers so that they cooperate as a single cluster. The individual servers within the cluster cooperate so
that they appear to be a single server to external client applications.
The following example uses Oracle Clusterware with HAProxy for load balancing to HTTPD web server
instances on each cluster node. In the event that the node running HAProxy and an HTTPD instance fails,
the services and their virtual IP addresses fail over to the other cluster node.
Figure 17.7 shows two cluster nodes, which are connected to an externally facing network. The nodes are
also linked by a private network that is used for the cluster heartbeat. The nodes have shared access to
certified SAN or NAS storage that holds the voting disk and Oracle Cluster Registry (OCR) in addition to
service configuration data and application data.
For a high-availability configuration, Oracle recommends that the network, heartbeat, and storage
connections are multiply redundant and that at least three voting disks are configured.
1. Install Oracle Clusterware on each system that will serve as a cluster node.
3. Use the appvipcfg command to create a virtual IP address for HAProxy and a separate virtual IP
address for each HTTPD service instance. For example, if there are two HTTPD service instances, you
would need to create three different virtual IP addresses.
4. Implement cluster scripts to start, stop, clean, and check the HAProxy and HTTPD services on each
node. These scripts must return 0 for success and 1 for failure.
5. Use the shared storage to share the configuration files, HTML files, logs, and all directories and files
that the HAProxy and HTTPD services on each node require to start.
171
Making HAProxy Highly Available Using Oracle Clusterware
If you have an Oracle Linux Support subscription, you can use OCFS2 or ASM/ACFS with the shared
storage as an alternative to NFS or other type of shared file system.
6. Configure each HTTPD service instance so that it binds to the correct virtual IP address. Each service
instance must also have an independent set of configuration, log, and other required files, so that all of
the service instances can coexist on the same server if one node fails.
7. Use the crsctl command to create a cluster resource for HAProxy and for each HTTPD service
instance. If there are two or more HTTPD service instances, binding of these instances should initially
be distributed amongst the cluster nodes. The HAProxy service can be started on either node initially.
You can use Oracle Clusterware as the basis of a more complex solution that protects a multi-tiered
system consisting of front-end load balancers, web servers, database servers and other components.
For more information, see the Oracle Clusterware 11g Administration and Deployment Guide and the
Oracle Clusterware 12c Administration and Deployment Guide.
172
Part III Storage and File Systems
This section contains the following chapters:
Chapter 18, Storage Management describes how to configure and manage disk partitions, swap space, logical
volumes, software RAID, block device encryption, iSCSI storage, and multipathing.
Chapter 19, File System Administration describes how to create, mount, check, and repair file systems, how to
configure Access Control Lists, how to configure and manage disk quotas.
Chapter 20, Local File System Administration describes administration tasks for the btrfs, ext3, ext4, OCFS2, and
XFS local file systems.
Chapter 21, Shared File System Administration describes administration tasks for the NFS and Samba shared file
systems, including how to configure NFS and Samba servers.
Chapter 22, Oracle Cluster File System Version 2 describes how to configure and use the Oracle Cluster File
System Version 2 (OCFS2) file system.
Table of Contents
18 Storage Management ................................................................................................................. 179
18.1 About Disk Partitions ....................................................................................................... 179
18.1.1 Managing Partition Tables Using fdisk ................................................................... 180
18.1.2 Managing Partition Tables Using parted ................................................................ 182
18.1.3 Mapping Partition Tables to Devices ..................................................................... 184
18.2 About Swap Space ......................................................................................................... 184
18.2.1 Viewing Swap Space Usage ................................................................................. 185
18.2.2 Creating and Using a Swap File ........................................................................... 185
18.2.3 Creating and Using a Swap Partition ..................................................................... 185
18.2.4 Removing a Swap File or Swap Partition ............................................................... 186
18.3 About Logical Volume Manager ....................................................................................... 186
18.3.1 Initializing and Managing Physical Volumes ........................................................... 186
18.3.2 Creating and Managing Volume Groups ................................................................ 187
18.3.3 Creating and Managing Logical Volumes ............................................................... 188
18.4 About Software RAID ...................................................................................................... 189
18.4.1 Creating Software RAID Devices .......................................................................... 190
18.5 Creating Encrypted Block Devices ................................................................................... 191
18.6 SSD Configuration Recommendations for btrfs, ext4, and swap ......................................... 192
18.7 About iSCSI Storage ....................................................................................................... 192
18.7.1 Configuring an iSCSI Target ................................................................................. 193
18.7.2 Configuring an iSCSI Initiator ................................................................................ 194
18.7.3 Updating the Discovery Database ......................................................................... 196
18.8 About Device Multipathing ............................................................................................... 197
18.8.1 Configuring Multipathing ....................................................................................... 198
19 File System Administration ......................................................................................................... 203
19.1 Making File Systems ....................................................................................................... 203
19.2 Mounting File Systems .................................................................................................... 204
19.2.1 About Mount Options ........................................................................................... 205
19.3 About the File System Mount Table ................................................................................. 206
19.4 Configuring the Automounter ........................................................................................... 207
19.5 Mounting a File Containing a File System Image .............................................................. 208
19.6 Creating a File System on a File ..................................................................................... 208
19.7 Checking and Repairing a File System ............................................................................ 209
19.7.1 Changing the Frequency of File System Checking ................................................. 210
19.8 About Access Control Lists ............................................................................................. 210
19.8.1 Configuring ACL Support ...................................................................................... 211
19.8.2 Setting and Displaying ACLs ................................................................................ 211
19.9 About Disk Quotas .......................................................................................................... 212
19.9.1 Enabling Disk Quotas on File Systems .................................................................. 213
19.9.2 Assigning Disk Quotas to Users and Groups ......................................................... 213
19.9.3 Setting the Grace Period ...................................................................................... 214
19.9.4 Displaying Disk Quotas ........................................................................................ 214
19.9.5 Enabling and Disabling Disk Quotas ..................................................................... 214
19.9.6 Reporting on Disk Quota Usage ........................................................................... 214
19.9.7 Maintaining the Accuracy of Disk Quota Reporting ................................................. 215
20 Local File System Administration ................................................................................................ 217
20.1 About Local File Systems ................................................................................................ 218
20.2 About the Btrfs File System ............................................................................................. 219
20.3 Creating a Btrfs File System ............................................................................................ 220
20.4 Modifying a Btrfs File System .......................................................................................... 221
20.5 Compressing and Defragmenting a Btrfs File System ....................................................... 222
175
20.6 Resizing a Btrfs File System ........................................................................................... 222
20.7 Creating Subvolumes and Snapshots .............................................................................. 223
20.7.1 Cloning Virtual Machine Images and Linux Containers ........................................... 224
20.8 Using the Send/Receive Feature ..................................................................................... 224
20.8.1 Using Send/Receive to Implement Incremental Backups ........................................ 225
20.9 Using Quota Groups ....................................................................................................... 226
20.10 Replacing Devices on a Live File System ....................................................................... 226
20.11 Creating Snapshots of Files ........................................................................................... 226
20.12 Converting an Ext2, Ext3, or Ext4 File System to a Btrfs File System ............................... 227
20.12.1 Converting a Non-root File System ...................................................................... 227
20.12.2 Converting the root File System .......................................................................... 227
20.12.3 Mounting the Image of the Original File System ................................................... 229
20.12.4 Deleting the Snapshot of the Original File System ................................................ 229
20.12.5 Recovering an Original Non-root File System ....................................................... 230
20.13 Installing a Btrfs root File System .................................................................................. 230
20.13.1 Setting up a New NFS Server ............................................................................. 230
20.13.2 Configuring an Existing NFS Server .................................................................... 231
20.13.3 Setting up a New HTTP Server ........................................................................... 232
20.13.4 Configuring an Existing HTTP Server .................................................................. 233
20.13.5 Setting up a Network Installation Server .............................................................. 233
20.13.6 Installing from a Network Installation Server ........................................................ 235
20.13.7 About the Installation root File System ................................................................ 235
20.13.8 Creating Snapshots of the root File System ......................................................... 237
20.13.9 Mounting Alternate Snapshots as the root File System ......................................... 237
20.13.10 Deleting Snapshots of the root File System ........................................................ 237
20.14 Converting a Non-root Ext2 File System to Ext3 ............................................................. 238
20.15 Converting a root Ext2 File System to Ext3 .................................................................... 238
20.16 Creating a Local OCFS2 File System ............................................................................. 239
20.17 About the XFS File System ........................................................................................... 240
20.17.1 About External XFS Journals .............................................................................. 241
20.17.2 About XFS Write Barriers ................................................................................... 242
20.17.3 About Lazy Counters .......................................................................................... 242
20.18 Installing the XFS Packages .......................................................................................... 242
20.19 Creating an XFS File System ........................................................................................ 242
20.20 Modifying an XFS File System ....................................................................................... 243
20.21 Growing an XFS File System ........................................................................................ 243
20.22 Freezing and Unfreezing an XFS File System ................................................................ 244
20.23 Setting Quotas on an XFS File System .......................................................................... 244
20.23.1 Setting Project Quotas ........................................................................................ 245
20.24 Backing up and Restoring XFS File Systems .................................................................. 246
20.25 Defragmenting an XFS File System ............................................................................... 247
20.26 Checking and Repairing an XFS File System ................................................................. 248
21 Shared File System Administration ............................................................................................. 249
21.1 About Shared File Systems ............................................................................................. 249
21.2 About NFS ..................................................................................................................... 249
21.2.1 Configuring an NFS Server ................................................................................... 251
21.2.2 Mounting an NFS File System .............................................................................. 254
21.3 About Samba .................................................................................................................. 254
21.3.1 Configuring a Samba Server ................................................................................. 254
21.3.2 About Samba Configuration for Windows Workgroups and Domains ....................... 256
21.3.3 Accessing Samba Shares from a Windows Client .................................................. 259
21.3.4 Accessing Samba Shares from an Oracle Linux Client ........................................... 259
22 Oracle Cluster File System Version 2 ......................................................................................... 261
22.1 About OCFS2 ................................................................................................................. 261
176
22.2 Installing and Configuring OCFS2 .................................................................................... 262
22.2.1 Preparing a Cluster for OCFS2 ............................................................................. 263
22.2.2 Configuring the Firewall ........................................................................................ 264
22.2.3 Configuring the Cluster Software ........................................................................... 264
22.2.4 Creating the Configuration File for the Cluster Stack .............................................. 264
22.2.5 Configuring the Cluster Stack ............................................................................... 267
22.2.6 Configuring the Kernel for Cluster Operation .......................................................... 268
22.2.7 Starting and Stopping the Cluster Stack ................................................................ 269
22.2.8 Creating OCFS2 volumes ..................................................................................... 269
22.2.9 Mounting OCFS2 Volumes ................................................................................... 271
22.2.10 Querying and Changing Volume Parameters ....................................................... 271
22.3 Troubleshooting OCFS2 .................................................................................................. 272
22.3.1 Recommended Tools for Debugging ..................................................................... 272
22.3.2 Mounting the debugfs File System ........................................................................ 272
22.3.3 Configuring OCFS2 Tracing .................................................................................. 272
22.3.4 Debugging File System Locks ............................................................................... 273
22.3.5 Configuring the Behavior of Fenced Nodes ............................................................ 275
22.4 Use Cases for OCFS2 .................................................................................................... 275
22.4.1 Load Balancing .................................................................................................... 275
22.4.2 Oracle Real Application Cluster (RAC) .................................................................. 275
22.4.3 Oracle Databases ................................................................................................ 276
22.5 For More Information About OCFS2 ................................................................................ 276
177
178
Chapter 18 Storage Management
Table of Contents
18.1 About Disk Partitions ............................................................................................................... 179
18.1.1 Managing Partition Tables Using fdisk ........................................................................... 180
18.1.2 Managing Partition Tables Using parted ........................................................................ 182
18.1.3 Mapping Partition Tables to Devices ............................................................................. 184
18.2 About Swap Space ................................................................................................................. 184
18.2.1 Viewing Swap Space Usage ......................................................................................... 185
18.2.2 Creating and Using a Swap File ................................................................................... 185
18.2.3 Creating and Using a Swap Partition ............................................................................. 185
18.2.4 Removing a Swap File or Swap Partition ...................................................................... 186
18.3 About Logical Volume Manager ............................................................................................... 186
18.3.1 Initializing and Managing Physical Volumes ................................................................... 186
18.3.2 Creating and Managing Volume Groups ........................................................................ 187
18.3.3 Creating and Managing Logical Volumes ....................................................................... 188
18.4 About Software RAID .............................................................................................................. 189
18.4.1 Creating Software RAID Devices .................................................................................. 190
18.5 Creating Encrypted Block Devices ........................................................................................... 191
18.6 SSD Configuration Recommendations for btrfs, ext4, and swap ................................................. 192
18.7 About iSCSI Storage ............................................................................................................... 192
18.7.1 Configuring an iSCSI Target ......................................................................................... 193
18.7.2 Configuring an iSCSI Initiator ........................................................................................ 194
18.7.3 Updating the Discovery Database ................................................................................. 196
18.8 About Device Multipathing ....................................................................................................... 197
18.8.1 Configuring Multipathing ............................................................................................... 198
This chapter describes how to configure and manage disk partitions, swap space, logical volumes,
software RAID, block device encryption, iSCSI storage, and multipathing.
Oracle Linux requires one partition for the root file system. It is usual to use two other partitions for swap
space and the boot file system. On x86 and x86_64 systems, the system BIOS can usually access only
the first 1024 cylinders of the disk at boot time. Configuring a separate boot partition in this region on the
disk allows the GRUB bootloader to access the kernel image and other files that are required to boot the
system.
You can create additional partitions to simplify backups, to enhance system security, and to meet other
needs, such as setting up development sandboxes and test areas. Data that frequently changes, such as
user home directories, databases, and log file directories, is typically assigned to separate partitions to
facilitate backups.
The partitioning scheme for hard disks with a master boot record (MBR) allows you to create up to four
primary partitions. If you need more than four partitions, you can divide one of the primary partitions into
up to 11 logical partitions. The primary partition that contains the logical partitions is known as an extended
partition. The MBR scheme supports disks up to 2 TB in size.
179
Managing Partition Tables Using fdisk
On hard disks with a GUID Partition Table (GPT), you can configure up to 128 partitions and there is no
concept of extended or logical partitions. You should configure a GPT if the disk is larger than 2 TB.
You can create and manage MBRs by using the fdisk command. If you want to create a GPT, use
parted instead.
Note
When partitioning a block storage device, align primary and logical partitions on
one-megabyte (1048576 bytes) boundaries. If partitions, file system blocks, or
RAID stripes are incorrectly aligned and overlap the boundaries of the underlying
storage's sectors or pages, the device controller has to modify twice as many
sectors or pages than if correct alignment is used. This recommendation applies to
most block storage devices, including hard disk drives (spinning rust), solid state
drives (SSDs), LUNs on storage arrays, and host RAID adapters.
Before running fdisk on a disk that contains data, first back up the data on to
another disk or medium.
You can use the fdisk utility to create a partition table, view an existing partition table, add partitions, and
delete partitions. Alternatively, you can also use the cfdisk utility, which is a text-based, graphical version
of fdisk.
You can use fdisk interactively or you can use command-line options and arguments to specify partitions.
When you run fdisk interactively, you specify only the name of the disk device as an argument, for
example:
# fdisk /dev/sda
Enter c to switch off DOS-compatibility mode, u to use sectors, and p to display the partition table:
Command (m for help): c
DOS Compatibility flag is not set
180
Managing Partition Tables Using fdisk
The example output shows that /dev/sda is a 42.9 GB disk. As modern hard disks support logical block
addressing (LBA), any information about the numbers of heads and sectors per track is irrelevant and
probably fictitious. The start and end offsets of each partition from the beginning of the disk are shown in
units of sectors. The partition table is displayed after the device summary, and shows:
Boot Specifies * if the partition contains the files that the GRUB bootloader
needs to boot the system. Only one partition can be bootable.
Start and End The start and end offsets in sectors. All partitions are aligned on one-
megabyte boundaries.
Id and System The partition type. The following partition types are typically used with
Oracle Linux:
The n command creates a new partition. For example, to create partition table entries for two Linux
partitions on /dev/sdc, one of which is 5 GB in size and the other occupies the remainder of the disk:
# fdisk -cu /dev/sdc
...
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First sector (2048-25165823, default 2048): 2048
Last sector, +sectors or +size{K,M,G} (2048-25165823, default 25165823): +5G
181
Managing Partition Tables Using parted
The t command allows you to change the type of a partition. For example, to change the partition type of
partition 2 to Linux LVM:
Command (m for help): t
Partition number (1-4): 2
Hex code (type L to list codes): 8e
After creating the new partition table, use the w command to write the table to the disk and exit fdisk.
Command (m for help): w
The partition table has been altered!
If you enter q instead, fdisk exits without committing the changes to disk.
For more information, see the cfdisk(8) and fdisk(8) manual pages.
Before running parted on a disk that contains data, first back up the data on to
another disk or medium.
You can use the parted utility to label a disk, create a partition table, view an existing partition table, add
partitions, change the size of partitions, and delete partitions. parted is more advanced than fdisk as it
supports more disk label types, including GPT disks, and it implements a larger set of commands.
You can use parted interactively or you can specify commands as arguments. When you run parted
interactively, you specify only the name of the disk device as an argument, for example:
# parted /dev/sda
GNU Parted 2.1
182
Managing Partition Tables Using parted
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted)
Typically, you would set the disk label type to gpt or msdos for an Oracle Linux system, depending on
whether the disk device supports GPT. You are prompted to confirm that you want to overwrite the existing
disk label.
For disks with an msdos label, you are also prompted to enter the partition type, which can be primary,
extended, or logical. The file system type is typically set to one of fat16, fat32, ext4, or linux-
swap for an Oracle Linux system. If you are going to create an btrfs, ext*, ocfs2, or xfs file system on
the partition, specify ext4. Unless you specify units such as GB for gigabytes, the start and end offsets of
a partition are assumed to be in megabytes. To specify the end of the disk for End, enter a value of -0.
Note
parted commands such as mklabel and mkpart commit the changes to disk
immediately. Unlike fdisk, you do not have the option of quitting without saving
your changes.
For more information, see the parted(8) manual page or enter info parted to view the online user
manual.
183
Mapping Partition Tables to Devices
The -l option lists any partitions that it finds, for example in an installation image file:
# kpartx -l system.img
loop0p1 : 0 204800 /dev/loop0 2048
loop0p2 : 0 12288000 /dev/loop0 206848
loop0p3 : 0 4096000 /dev/loop0 212494848
loop0p4 : 0 2 /dev/loop0 16590848
This output shows that the drive image contains four partitions, and the first column are the names of the
device files that can be created in /dev/mapper.
If a partition contains a file system, you can mount it and view the files that it contains, for example:
# mkdir /mnt/sysimage
# mount /dev/mapper/loop0p1 /mnt/sysimage
# ls /mnt/sysimage
config-2.6.32-220.el6.x86_64
config-2.6.32-300.3.1.el6uek.x86_64
efi
grub
initramfs-2.6.32-220.el6.x86_64.img
initramfs-2.6.32-300.3.1.el6uek.x86_64.img
...
# umount /mnt/sysimage
You can configure swap space on a swap file in a file system or on a separate swap partition. A dedicated
swap partition is faster, but changing the size of a swap file is easier. Configure a swap partition if you
know how much swap space your system requires. Otherwise, start with a swap file and create a swap
partition when you know what your system requires.
184
Viewing Swap Space Usage
In this example, the system is using both a 4-gigabyte swap partition on /dev/sda2 and a one-gigabyte
swap file, /swapfile. The Priority column shows that the system preferentially swaps to the swap
partition rather than to the swap file.
You can also view /proc/meminfo or use utilities such as free, top, and vmstat to view swap space
usage, for example:
# grep Swap /proc/meminfo
SwapCached: 248 kB
SwapTotal: 5128752 kB
SwapFree: 5128364 kB
# free | grep Swap
Swap: 5128752 388 5128364
1. Use the dd command to create a file of the required size (for example, one million one-kilobyte blocks):
# dd if=/dev/zero of=/swapfile bs=1024 count=1000000
4. Add an entry to /etc/fstab for the swap file so that the system uses it following the next reboot:
/swapfile swap swap defaults 0 0
1. Use fdisk to create a disk partition of type 82 (Linux swap) or parted to create a disk partition of
type linux-swap of the size that you require.
185
Removing a Swap File or Swap Partition
4. Add an entry to /etc/fstab for the swap partition so that the system uses it following the next reboot:
/dev/sda2 swap swap defaults 0 0
2. Remove the entry for the swap file or swap partition from /etc/fstab.
3. Optionally, remove the swap file or swap partition if you do not want to use it in future.
You can create file systems on logical volumes and mount the logical volume devices in the same way as
you would a physical device. If a file system on a logical volume becomes full with data, you can increase
the capacity of the volume by using free space in the volume group so that you can then grow the file
system (provided that the file system has that capability). If necessary, you can add physical storage
devices to a volume group to increase its capacity.
LVM is non-disruptive and transparent to users. You can increase the size of logical volumes and change
their layout dynamically without needing to schedule system down time to reconfigure physical storage.
LVM uses the device mapper (DM) that provides an abstraction layer that allows the creation of logical
devices above physical devices and provides the foundation for software RAID, encryption, and other
storage features.
Caution
For example, set up /dev/sdb, /dev/sdc, /dev/sdd, and /dev/sde as physical volumes:
# pvcreate -v /dev/sd[bcde]
Set up physical volume for /dev/sdb with 6313482 available
sectors
Zeroing start of device /dev/sdb
Physical volume /dev/sdb successfully created
...
186
Creating and Managing Volume Groups
To display information about physical volumes, you can use the pvdisplay, pvs, and pvscan
commands.
To remove a physical volume from the control of LVM, use the pvremove command:
# pvremove device
Other commands that are available for managing physical volumes include pvchange, pvck, pvmove,
and pvresize.
For more information, see the lvm(8), pvcreate(8), and other LVM manual pages.
For example, create the volume group myvg from the physical volumes /dev/sdb, /dev/sdc, /dev/
sdd, and /dev/sde:
# vgcreate -v myvg /dev/sd[bcde]
Wiping cache of LVM-capable devices
Adding physical volume /dev/sdb to volume group myvg
Adding physical volume /dev/sdc to volume group myvg
Adding physical volume /dev/sdd to volume group myvg
Adding physical volume /dev/sde to volume group myvg
Archiving volume group myvg metadata (seqno 0).
Creating volume group backup /etc/lvm/backup/myvg (seqno 1).
Volume group myvg successfully created
LVM divides the storage space within a volume group into physical extents, which are the smallest unit that
LVM uses when allocating storage to logical volumes. The default size of an extent is 4 MB.
The allocation policy for the volume group and logical volume determines how LVM allocates extents from
a volume group. The default allocation policy for a volume group is normal, which applies rules such as
not placing parallel stripes on the same physical volume. The default allocation policy for a logical volume
is inherit, which means that the logical volume uses the same policy as for the volume group. You
can change the default allocation policies by using the lvchange or vgchange commands, or you can
override the allocation policy when you create a volume group or logical volume. Other allocation policies
include anywhere, contiguous and cling.
To remove physical volumes from a volume group, use the vgreduce command:
# vgreduce [options] volume_group physical_volume ...
To display information about volume groups, you can use the vgdisplay, vgs, and vgscan commands.
Other commands that are available for managing volume groups include vgchange, vgck, vgexport,
vgimport, vgmerge, vgrename, and vgsplit.
For more information, see the lvm(8), vgcreate(8), and other LVM manual pages.
187
Creating and Managing Logical Volumes
For example, create the logical volume mylv of size 2 GB in the volume group myvg:
# lvcreate -v --size 2g --name mylv myvg
Setting logging type to disk
Finding volume group myvg
Archiving volume group myvg metadata (seqno 1).
Creating logical volume mylv
Create volume group backup /etc/lvm/backup/myvg (seqno 2).
...
lvcreate uses the device mapper to create a block device file entry under /dev for each logical volume
and uses udev to set up symbolic links to this device file from /dev/mapper and /dev/volume_group.
For example, the device that corresponds to the logical volume mylv in the volume group myvg might be /
dev/dm-3, which is symbolically linked by /dev/mapper/myvolg-myvol and /dev/myvolg/myvol.
Note
Having created a logical volume, you can configure and use it in the same way as you would a physical
storage device. For example, you can configure a logical volume as a file system, swap partition,
Automatic Storage Management (ASM) disk, or raw device.
You can also use lvcreate to create a snapshot of an existing logical volume such as mylv in the
volume group myvg, for example:
# lvcreate --size 500m --snapshot --name mylv-snapshot myvg/mylv
Logical volume mylv-snapshot created
You can mount and modify the contents of the snapshot independently of the original volume or preserve it
as a record of the state of the original volume at the time that you took the snapshot. The snapshot usually
takes up less space than the original volume, depending on how much the contents of the volumes diverge
over time. In the example, we assume that the snapshot only requires one quarter of the space of the
original volume. You can use the value shown by the Snap% column in the output from the lvs command
to see how much data is allocated to the snapshot. If the value of Snap% approaches 100%, indicating that
a snapshot is running out of storage, use lvresize to grow it. Alternatively, you can reduce a snapshot's
size to save storage space. To merge a snapshot with its original volume, use the lvconvert command,
specifying the --merge option.
To display information about logical volumes, you can use the lvdisplay, lvs, and lvscan commands.
To remove a logical volume from a volume group, use the lvremove command:
# lvremove volume_group/logical_volume
Note
You must specify both the name of the volume group and the logical volume.
188
About Software RAID
Other commands that are available for managing logical volumes include lvchange, lvconvert,
lvmdiskscan, lvmsadc, lvmsar, lvrename, and lvresize.
For more information, see the lvm(8), lvcreate(8), and other LVM manual pages.
The following software RAID levels are commonly used with Oracle Linux:
Linear RAID (spanning) Combines drives as a larger virtual drive. There is no data redundancy
or performance benefit. Resilience decreases because the failure of a
single drive renders the array unusable.
RAID-0 (striping) Increases performance but does not provide data redundancy. Data is
broken down into units (stripes) and written to all the drives in the array.
Resilience decreases because the failure of a single drive renders the
array unusable.
RAID-1 (mirroring) Provides data redundancy and resilience by writing identical data
to each drive in the array. If one drive fails, a mirror can satisfy I/
O requests. Mirroring is an expensive solution because the same
information is written to all of the disks in the array.
RAID-5 (striping with distributed Increases read performance by using striping and provides data
parity) redundancy. The parity is distributed across all the drives in an array
but it does not take up as much space as a complete mirror. Write
performance is reduced to some extent from RAID-0 by having to
calculate parity information and write this information in addition to
the data. If one disk in the array fails, the parity information is used to
reconstruct data to satisfy I/O requests. In this mode, read performance
and resilience are degraded until you replace the failed drive and it is
repopulated with data and parity information. RAID-5 is intermediate in
expense between RAID-0 and RAID-1.
RAID-6 (striping with double A more resilient variant of RAID-5 that can recover from the loss of
distributed parity) two drives in an array. RAID-6 is used when data redundancy and
resilience are important, but performance is not. RAID-6 is intermediate
in expense between RAID-5 and RAID-1.
RAID 0+1 (mirroring of striped Combines RAID-0 and RAID-1 by mirroring a striped array to provide
disks) both increased performance and data redundancy. Failure of a single
disk causes one of the mirrors to be unusable until you replace the disk
and repopulate it with data. Resilience is degraded while only a single
mirror remains available. RAID 0+1 is usually as expensive as or slightly
more expensive than RAID-1.
RAID 1+0 (striping of mirrored Combines RAID-0 and RAID-1 by striping a mirrored array to provide
disks or RAID-10) both increased performance and data redundancy. Failure of a single
disk causes part of one mirror to be unusable until you replace the
189
Creating Software RAID Devices
For example, to create a RAID-1 device /dev/md0 from /dev/sdf and /dev/sdg:
# mdadm --create /dev/md0 --level=1 -raid-devices=2 /dev/sd[fg]
If you want to include spare devices that are available for expansion, reconfiguration, or replacing failed
drives, use the --spare-devices option to specify their number, for example:
# mdadm --create /dev/md1 --level=5 -raid-devices=3 --spare-devices=1 /dev/sd[bcde]
Note
The number of RAID and spare devices must equal the number of devices that
you specify.
Note
This step is optional. It helps mdadm to assemble the arrays at boot time.
For example, the following entries in /etc/mdadm.conf define the devices and arrays that
correspond to /dev/md0 and /dev/md1:
DEVICE /dev/sd[c-g]
ARRAY /dev/md0 devices=/dev/sdf,/dev/sdg
ARRAY /dev/md1 spares=1 devices=/dev/sdb,/dev/sdc,/dev/sdd,/dev/sde
Having created an MD RAID device, you can configure and use it in the same way as you would a physical
storage device. For example, you can configure it as an LVM physical volume, file system, swap partition,
Automatic Storage Management (ASM) disk, or raw device.
You can view /proc/mdstat to check the status of the MD RAID devices, for example:
# cat /proc/mdstat
Personalities : [raid1]
mdo : active raid1 sdg[1] sdf[0]
To display summary and detailed information about MD RAID devices, you can use the --query and --
detail options with mdadm.
190
Creating Encrypted Block Devices
For more information, see the md(4), mdadm(8), and mdadm.conf(5) manual pages.
When you install Oracle Linux, you have the option of configure encryption on system volumes other than
the partition from which the system boots. If you want to protect the bootable partition, consider using any
password protection mechanism that is built into the BIOS or setting up a GRUB password.
You use the cryptsetup utility to set up Linux Unified Key Setup (LUKS) encryption on the device and to
manage authentication.
1. Initialize a LUKS partition on the device and set up the initial key, for example:
# cryptsetup luksFormat /dev/sdd
WARNING!
========
This will overwrite data on /dev/sdd irrevocably.
Are you sure? (Type uppercase yes): YES
Enter LUKS passphrase: passphrase
Verify passphrase: passphrase
This entry causes the operating system to prompt you to enter the passphrase at boot time.
Having created an encrypted volume and its device mapping, you can configure and use it in the same way
as you would a physical storage device. For example, you can configure it as an LVM physical volume,
file system, swap partition, Automatic Storage Management (ASM) disk, or raw device. For example, you
would create an entry in the /etc/fstab to mount the mapped device (/dev/mapper/cryptfs), not
the physical device (/dev/sdd).
Should you need to remove the device mapping, unmount any file system that the encrypted volume
contains, and run the following command:
191
SSD Configuration Recommendations for btrfs, ext4, and swap
For more information, see the crypsetup(8) and crypttab(5) manual pages.
For btrfs and ext4 file systems, specifying the discard option with mount sends discard (TRIM)
commands to an underlying SSD whenever blocks are freed. This option can extend the working life of
the device but it has a negative impact on performance, even for SSDs that support queued discards. The
recommended alternative is to use the fstrim command to discard empty blocks that the file system is
not using, especially before reinstalling the operating system or before creating a new file system on an
SSD. Schedule fstrim to run when it will have minimal impact on system performance. You can also
apply fstrim to a specific range of blocks rather than the whole file system.
Note
Using a minimal journal size of 1024 file-system blocks for ext4 on an SSD
improves performance. However, it is not recommended that you disable journalling
altogether as it improves the robustness of the file system.
Btrfs automatically enables SSD optimization for a device if the value of /sys/block/device/queue/
rotational is 0. If btrfs does not detect a device as being an SSD, you can enable SSD optimization by
specifying the ssd option to mount.
Note
By default, btrfs enables SSD optimization for Xen Virtual Devices (XVD) because
the value of rotational for these devices is 0. To disable SSD optimization,
specify the nossd option to mount.
Setting the ssd option does not imply that discard is also set.
If you configure swap files or partitions on an SSD, reduce the tendency of the kernel to perform
anticipatory writes to swap, which is controlled by the value of the vm.swappiness kernel parameter and
displayed as /proc/sys/vm/swappiness. The value of vm.swappiness can be in the range 0 to 100,
where a higher value implies a greater propensity to write to swap. The default value is 60. The suggested
value when swap has been configured on SSD is 1. You can use the following commands to change the
value:
# echo "vm.swappiness = 1" >> /etc/sysctl.conf
# sysctl -p
...
vm.swappiness = 1
192
Configuring an iSCSI Target
A client system (iSCSI initiator) accesses the storage server (iSCSI target) over an IP network. To an
iSCSI initiator, the storage appears to be locally attached.
Figure 18.1 shows a simple network where several iSCSI initiators are able to access the shared storage
that is attached to an iSCSI target.
Figure 18.1 iSCSI Initiators and an iSCSI Target Connected via an IP-based Network
A hardware-based iSCSI initiator uses a dedicated iSCSI HBA. Oracle Linux supports iSCSI initiator
functionality in software. The kernel-resident device driver uses the existing network interface card (NIC)
and network stack to emulate a hardware iSCSI initiator. As the iSCSI initiator functionality is not available
at the level of the system BIOS, you cannot boot an Oracle Linux system from iSCSI storage.
To improve performance, some network cards implement TCP/IP Offload Engines (TOE) that can create a
TCP frame for the iSCSI packet in hardware. Oracle Linux does not support TOE, although suitable drivers
may be available directly from the card vendor.
2. Edit /etc/tgt/targets.conf and create entries for the iSCSI target and the storage devices
(LUNs) that it will make available, for example:
<target iqn.2012-01.com.mydom.host01:target1>
direct-store /dev/sdb # LUN 1
direct-store /dev/sdc # LUN 2
</target>
The /etc/tgt/targets.conf file contains several sample configurations that you can use as
templates.
In the example, the target is uniquely identified by its iSCSI Qualified Name (IQN), which takes the
format:
iqn.YYYY-MM.reverse_FQDN[:target_name]
where:
193
Configuring an iSCSI Initiator
YYYY-MM Specifies the year and month that the naming authority took
ownership of the domain.
reverse_FQDN Specifies the reverse fully qualified domain name of the naming
authority.
3. Start the iSCSI target service, tgtd, and configure it to start after the system reboots:
# service tgtd start
# chkconfig tgtd on
4. Use the tgtadm command to verify that the iSCSI target is available:
# tgtadm -o show -m target
Target 1: iqn.2012-01.com.mydom.host01:target1
System information:
Driver: iscsi
State: ready
I_T nexus information:
LUN information:
LUN: 0
Type: controller
SCSI ID: deadbeaf1:0
SCSI SN: beaf10
Size: 0 MB
Online: Yes
Removable media: No
Backing store: No backing store
LUN: 1
Type: disk
SCSI ID: deadbeaf1:1
SCSI SN: beaf11
Size: 10737 MB
Online: Yes
Removable media: No
Backing store: No
...
You can use the tgtadm utility to monitor and configure iSCSI targets. In addition, the tgt-admin script
provides a simplifed interface to the tgtadm commands that create, delete, and show target information.
The tgt-setup-lun script allows you to create targets, add devices to targets, and define which iSCSI
initiators are allowed to connect to a target.
2. Use the SendTargets discovery method to discover the iSCSI targets at a specified IP address:
# iscsiadm -m discovery --type sendtargets -p 10.150.30.72
Starting iscsid: [ OK ]
10.150.30.72:3260,1 iqn.2012-01.com.mydom.host01:target1
194
Configuring an iSCSI Initiator
10.150.30.72:3260,1 iqn.2012-01.com.mydom.host01:target2
Note
The command also starts the iscsid service if it is not already running.
The following command displays information about the targets that is now stored in the discovery
database:
# iscsiadm -m discoverydb -t st -p 10.150.30.72
# BEGIN RECORD 2.0-872.41.el6
discovery.startup = manual
discovery.type = sendtargets
discovery.sendtargets.address = 10.150.30.72
discovery.sendtargets.port = 3260
discovery.sendtargets.auth.authmethod = None
discovery.sendtargets.auth.username_in = <empty>
discovery.sendtargets.auth.password_in = <empty>
discovery.sendtargets.timeo.login_timeout = 15
discovery.sendtargets.use_discoveryd = No
discovery.sendtargets.discoveryd_poll_inval = 30
discovery.sendtargets.repoen_max = 5
discovery.sendtargets.timeo.auth_timeout = 45
discovery.sendtargets.timeo.active_timeout = 30
discovery.sendtargets.iscsi.MaxRecvDataSegmentLength = 32768
4. Verify that the session is active, and display the available LUNs:
# iscsiadm -m session -P 3
Target: iqn.2012-01.com.mydom.host01:target1
Current Portal: 10.150.30.72:3260,1
Persistent Portal: 10.150.30.72:3260,1
**********
Interface:
**********
Iface Name: default
Iface Transport: tcp
Iface Initiatorname: iqn.1988-12.com.mydom:392a7cee2f
Iface IPaddress: 192.0.2.101
Iface HWaddress: <empty>
Iface Netdev: <empty>
SID: 1
iSCSI Connection State: LOGGED IN
iSCSI Session State: LOGGED IN
Internal iscsid Session State: NO CHANGE
.
.
.
************************
Attached SCSI devices:
************************
Host Number: 4 State: running
scsi10 Channel 00 Id 0 Lun:0
scsi10 Channel 00 Id 0 Lun:1
Attached scsi disk sdb
State: running
195
Updating the Discovery Database
The LUNs are represented as SCSI block devices (sd*) in the local /dev directory, for example:
# fdisk -l | grep /dev/sd[bc]
Disk /dev/sdb: 10.7 GB, 10737418240 bytes
Disk /dev/sdc: 10.7 GB, 10737418240 bytes
You can view the initialization messages for the LUNs in the /var/log/messages file:
# grep -i scsi /var/log/messages
Apr 8 15:08:53 host02 kernel: scsi12 : iSCSI Initiator over TCP/IP
Apr 8 15:08:53 host02 kernel: sd 4:0:0:1: [sdb] Attached SCSI disk
Apr 8 15:08:53 host02 kernel: sd 4:0:0:2: [sdc] Attached SCSI disk
You can configure and use a LUN in the same way as you would any other physical storage device.
For example, you can configure it as an LVM physical volume, file system, swap partition, Automatic
Storage Management (ASM) disk, or raw device.
Specify the _netdev option when creating mount entries for iSCSI LUNs in /etc/fstab, for example:
UUID=084591f8-6b8b-c857-f002-ecf8a3b387f3 /iscsi_mount_point ext4 _netdev 0 0
This option indicates the file system resides on a device that requires network access, and prevents the
system from attempting to mount the file system until the network has been enabled.
Note
Any discovered LUNs remain available across reboots provided that the target
continues to serve those LUNs and you do not log the system off the target.
For more information, see the iscsiadm(8) and iscsid(8) manual pages.
196
About Device Multipathing
To delete records from the database that are no longer supported by the target:
# iscsiadm -m discoverydb -t st -p 10.150.30.72 -o delete --discover
You would be most likely to configure multipathing with a system that can access storage on a Fibre
Channel-based storage area network (SAN). You can also use multipathing on an iSCSI initiator if
redundant network connections exist between the initiator and the target.
Figure 18.2 shows a simple DM-Multipath configuration where two I/O paths are configured between a
server and a disk on a SAN-attached storage array:
Between host bus adapter hba1 on the server and controller ctrl1 on the storage array.
Between host bus adapter hba2 on the server and controller ctrl2 on the storage array.
Without DM-Multipath, the system treats each path as being separate even though it connects the server
to the same storage device. DM-Multipath creates a single multipath device, /dev/mapper/mpathN, that
subsumes the underlying devices, /dev/sdc and /dev/sdf.
You can configure the multipathing service (multipathd) to handle I/O from and to a multipathed device
in one of the following ways:
197
Configuring Multipathing
Active/Passive (standby I/O uses only one path. If the active path fails, DM-Multipath switches I/
failover) O to a standby path. This is the default configuration.
Note
DM-Multipath can provide failover in the case of path failure, such as in a SAN
fabric. Disk media failure must be handled by using either a software or hardware
RAID solution.
This command also starts the multipathd service and configures the service to start after system
reboots.
blacklist {
# Blacklist by WWID
wwid "*"
198
Configuring Multipathing
devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"
blacklist_exceptions {
wwid "3600508b4000156d700012000000b0000"
wwid "360000970000292602744533032443941"
}
multipaths {
multipath {
wwid 3600508b4000156d700012000000b0000
alias blue
path_grouping_policy multibus
path_checker readsector0
path_selector "round-robin 0"
failback manual
rr_weight priorities
no_path_retry 5
}
multipath {
wwid 360000970000292602744533032443941
alias green
}
}
devices {
device {
vendor "SUN"
product "(StorEdge 3510|T4"
path_grouping_policy multibus
getuid_callout "/sbin/scsi_id --whitelisted --device=/dev/%n"
path_selector "round-robin 0"
features "0"
hardware_handler "0"
path_checker directio
prio const
rr_weight uniform
rr_min_io 1000
}
}
The example shows the three ways that you can use to exclude
devices: by WWID (wwid), by device name (devnode), and by
device type (device).
199
Configuring Multipathing
multipaths Defines settings for a multipath device that is identified by its WWID.
defaults {
user_friendly_names yes
getuid_callout "/bin/scsi_id --whitelisted --replace-whitespace --device=/dev/%n
}
multipaths {
multipath {
wwid 360000970000292602744533030303730
}
}
In this standby failover configuration, I/O continues through a remaining active network interface if a
network interfaces fails on the iSCSI initiator.
5. Start the multipathd service and configure the service to start after system reboots:
Multipath devices are identified in /dev/mapper by their World Wide Identifier (WWID), which is globally
unique. Alternatively, if you set the value of user_friendly_names to yes in the defaults section of
/etc/multipath.conf or by specifying the --user_friendly_names n option to mpathconf, the
200
Configuring Multipathing
device is named mpathN where N is the multipath group number. An alias attribute in the multipaths
section of /etc/multipath.conf specifies the name of the multipath device instead of a name based
on either the WWID or the multipath group number.
You can use the multipath device in /dev/mapper to reference the storage in the same way as you would
any other physical storage device. For example, you can configure it as an LVM physical volume, file
system, swap partition, Automatic Storage Management (ASM) disk, or raw device.
To display the status of DM-Multipath, use the mpathconf command, for example:
# mpathconf
multipath is enabled
find_multipaths is enabled
user_friendly_names is enabled
dm_multipath modules is loaded
multipathd is chkconfiged on
To display the current multipath configuration, specify the -ll option to the multipath command, for
example:
# multipath -ll
mpath1(360000970000292602744533030303730) dm-0 SUN,(StorEdge 3510|T4
size=20G features=0 hwhandler=0 wp=rw
|-+- policy=round-robin 0 prio=1 status=active
| - 5:0:0:2 sdb 8:16 active ready running
-+- policy=round-robin 0 prio=1 status=active
- 5:0:0:3 sdc 8:32 active ready running
If you edit /etc/multipath.conf, restart the multipathd service to make it re-read the file:
# service multipathd restart
201
202
Chapter 19 File System Administration
Table of Contents
19.1 Making File Systems ............................................................................................................... 203
19.2 Mounting File Systems ............................................................................................................ 204
19.2.1 About Mount Options ................................................................................................... 205
19.3 About the File System Mount Table ......................................................................................... 206
19.4 Configuring the Automounter ................................................................................................... 207
19.5 Mounting a File Containing a File System Image ...................................................................... 208
19.6 Creating a File System on a File ............................................................................................. 208
19.7 Checking and Repairing a File System .................................................................................... 209
19.7.1 Changing the Frequency of File System Checking ......................................................... 210
19.8 About Access Control Lists ..................................................................................................... 210
19.8.1 Configuring ACL Support .............................................................................................. 211
19.8.2 Setting and Displaying ACLs ........................................................................................ 211
19.9 About Disk Quotas .................................................................................................................. 212
19.9.1 Enabling Disk Quotas on File Systems .......................................................................... 213
19.9.2 Assigning Disk Quotas to Users and Groups ................................................................. 213
19.9.3 Setting the Grace Period .............................................................................................. 214
19.9.4 Displaying Disk Quotas ................................................................................................ 214
19.9.5 Enabling and Disabling Disk Quotas ............................................................................. 214
19.9.6 Reporting on Disk Quota Usage ................................................................................... 214
19.9.7 Maintaining the Accuracy of Disk Quota Reporting ......................................................... 215
This chapter describes how to create, mount, check, and repair file systems, how to configure Access
Control Lists, how to configure and manage disk quotas.
mkfs is a front end for builder utilities in /sbin such as mkfs.ext4. You can use either the mkfs
command with the -t fstype option or the builder utility to specify the type of file system to build. For
example, the following commands are equivalent ways of creating an ext4 file system with the label
Projects on the device /dev/sdb1:
# mkfs -t ext4 -L Projects /dev/sdb1
# mkfs.ext4 -L Projects /dev/sdb1
If you do not specify the file system type to makefs , it creates an ext2 file system.
The blkid command also display information about the device such as its UUID and label.
Each file system type supports a number of features that you can enable or disable by specifying additional
options to mkfs or the build utility. For example, you can use the -J option to specify the size and location
of the journal used by the ext3 and ext4 file system types.
For more information, see the blkid(8), mkfs(8), and mkfs.fstype(8) manual pages.
203
Mounting File Systems
You can use an existing directory as a mount point, but its contents are hidden until you unmount the
overlying file system.
The mount command attaches the device containing the file system to the mount point:
# mount [options] device mount_point
You can specify the device by its name, UUID, or label. For example, the following commands are
equivalent ways of mounting the file system on the block device /dev/sdb1:
# mount /dev/sdb1 /var/projects
# mount UUID="ad8113d7-b279-4da8-b6e4-cfba045f66ff" /var/projects
# mount LABEL="Projects" /var/projects
If you do not specify any arguments, mount displays all file systems that the system currently has
mounted, for example:
# mount
/dev/mapper/vg_host01-lv_root on / type ext4 (rw)
...
In this example, the LVM logical volume /dev/mapper/vg_host01-lv_root is mounted on /. The file
system type is ext4 and is mounted for both reading and writing. (You can also use the command cat /
proc/mounts to display information about mounted file systems.)
The df command displays information about home much space remains on mounted file systems, for
example:
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_host01-lv_root 36G 12G 22G 36% /
...
You can use the -B (bind) option to the mount command to attach a block device at multiple mount points.
You can also remount part of a directory hierarchy, which need not be a complete file system, somewhere
else. For example, the following command mounts /var/projects/project1 on /mnt:
# mount -B /var/projects/project1 /mnt
Each directory hierarchy acts as a mirror of the other. The same files are accessible in either location,
although any submounts are not replicated. These mirrors do not provide data redundancy.
You can also mount a file over another file, for example:
# touch /mnt/foo
# mount -B /etc/hosts /mnt/foo
In this example, /etc/hosts and /mnt/foo represent the same file. The existing file that acts as a
mount point is not accessible until you unmount the overlying file.
The -B option does not recursively attach any submounts below a directory hierarchy. To include
submounts in the mirror, use the -R (recursive bind) option instead.
When you use -B or -R, the file system mount options remain the same as those for the original mount
point. To modify, the mount options, use a separate remount command, for example:
204
About Mount Options
You can mark the submounts below a mount point as being shared, private, or slave:
mount --make-shared Any mounts or unmounts below the specified mount point propagate to
mount_point any mirrors that you create, and this mount hierarchy reflects mounts or
unmount changes that you make to other mirrors.
mount --make-private Any mounts or unmounts below the specified mount point do not
mount_point propagate to other mirrors, nor does this mount hierarchy reflect mounts
or unmount changes that you make to other mirrors.
mount --make-slave Any mounts or unmounts below the specified mount point do not
mount_point propagate to other mirrors, but this mount hierarchy does reflect mounts
or unmount changes that you make to other mirrors.
To prevent a mount from being mirrored by using the -B or -R options, mark its mount point as being
unbindable:
# mount --make-unbindable mount_point
To move a mounted file system, directory hierarchy, or file between mount points, use the -M option, for
example:
# touch /mnt/foo
# mount -M /mnt/foo /mnt/bar
Alternatively, you can specify the block device provided that it is mounted on only one mount point.
For more information, see the mount(8) and umount(8) manual pages.
auto Allows the file system to be mounted automatically by using the mount -a command.
exec Allows the execution of any binary files located in the file system.
loop Uses a loop device (/dev/loop*) to mount a file that contains a file system image. See
Section 19.5, Mounting a File Containing a File System Image, Section 19.6, Creating a File
System on a File, and the losetup(8) manual page.
Note
The default number of available loop devices is 8. You can use the
kernel boot parameter max_loop=N to configure up to 255 devices.
Alternatively, add the following entry to /etc/modprobe.conf:
options loop max_loop=N
where N is the number of loop devices that you require (from 0 to 255),
and reboot the system.
205
About the File System Mount Table
noauto Disallows the file system from being mounted automatically by using mount -a.
noexec Disallows the execution of any binary files located in the file system.
nouser Disallows any user other than root from mounting or unmounting the file system.
remount Remounts the file system if it is already mounted. You would usually combine this option with
another option such as ro or rw to change the behavior of a mounted file system.
For example, mount /dev/sdd1 as /test with read-only access and only root permitted to mount or
unmount the file system:
# mount -o nouser,ro /dev/sdd1 /test
Mount an ISO image file on /mount/cdrom with read-only access by using the loop device:
# mount -o ro,loop ./OracleLinux-R6-U1-Server-x86_64-dvd.iso /media/cdrom
Remount the /test file system with both read and write access, but do not permit the execution of any
binary files that are located in the file system:
# mount -o remount,rw,noexec /test
The first field is the device to mount specified by the device name, UUID, or device label, or the
specification of a remote file system. A UUID or device label is preferable to a device name if the device
name could change, for example:
LABEL=Projects /var/projects ext4 defaults 1 2
The second field is either the mount point for a file system or swap to indicate a swap partition.
The third field is the file system type, for example ext4 or swap.
The fifth column is used by the dump command. A value of 1 means dump the file system; 0 means the file
system does not need to be dumped.
The sixth column is used by the file system checker, fsck, to determine in which order to perform file
system checks at boot time. The value should be 1 for the root file system, 2 for other file systems. A
value of 0 skips checking, as is appropriate for swap, file systems that are not mounted at boot time, or for
binding of existing mounts.
206
Configuring the Automounter
For bind mounts, only the first four fields are specified, for example:
path mount_point none bind
The first field specifies the path of the file system, directory hierarchy, or file that is to be mounted on
the mount point specified by the second field. The mount point must be a file if the path specifies a file;
otherwise, it must be a directory. The third and fourth fields are specified as none and bind.
The automounter consists of two components: the autofs kernel module and the automount user-space
daemon.
1. Install the autofs package and any other packages that are required to support remote file systems:
# yum install autofs
2. Edit the /etc/auto.master configuration file to define map entries. Each map entry specifies a
mount point and a map file that contains definitions of the remote file systems that can be mounted, for
example:
/- /etc/auto.direct
/misc /etc/auto.misc
/net -hosts
Here, the /-, /misc, and /net entries are examples of a direct map, an indirect map, and a host map
respectively. Direct map entries always specify /- as the mount point. Host maps always specify the
keyword -hosts instead of a map file.
A direct map contains definitions of directories that are automounted at the specified absolute path. In
the example, the auto.direct map file might contain an entry such as:
/usr/man -fstype=nfs,ro,soft host01:/usr/man
This entry mounts the file system /usr/man exported by host01 using the options ro and soft, and
creates the /usr/man mount point if it does not already exist. If the mount point already exists , the
mounted file system hides any existing files that it contains.
As the default file system type is NFS, the previous example can be shortened to read:
/usr/man -ro,soft host01:/usr/man
An indirect map contains definitions of directories (keys) that are automounted relative to the mount
point (/misc) specified in /etc/auto.master. In the example, the /etc/auto.misc map file might
contain entries such as the following:
xyz -ro,soft host01:/xyz
cd -fstype=iso9600,ro,nosuid,nodev :/dev/cdrom
abc -fstype=ext3 :/dev/hda1
fenetres -fstype=cifs,credentials=credfile ://fenetres/c
207
Mounting a File Containing a File System Image
The /misc directory must already exist, but the automounter creates a mount point for the keys xyz,
cd , and so on if they does not already exist, and removes them when it unmounts the file system. For
example, entering a command such as ls /misc/xyz causes the automounter to the mount the /
xyz directory exported by host01 as /misc/xyz.
The cd and abc entries mount local file systems: an ISO image from the CD-ROM drive on /misc/cd
and an ext3 file system from /dev/hda1 on /misc/abc. The fenetres entry mounts a Samba share
as /misc/fenetres.
If a host map entry exists and a command references an NFS server by name relative to the mount
point (/net), the automounter mounts all directories that the server exports below a subdirectory of
the mount point named for the server. For example, the command cd /net/host03 causes the
automounter to mount all exports from host03 below the /net/host03 directory. By default, the
automounter uses the mount options nosuid,nodev,intr options unless you override the options in
the host map entry, for example:
/net -hosts -suid,dev,nointr
Note
For more information, including details of using maps with NIS, NIS+, and LDAP, see the
hosts.master(5) manual page.
3. Start the autofs service, and configure the service to start following a system reboot:
# service autofs start
# chkconfig autofs on
You can configure various settings for autofs in /etc/sysconfig/autofs, such as the idle timeout
value after which a file system is automatically unmounted.
For more information, see the automount(8), autofs(5), and auto.master(5) manual pages.
208
Checking and Repairing a File System
Warning
Running fsck on a mounted file system can corrupt the file system and cause data
loss.
209
Changing the Frequency of File System Checking
filesystem be a device name, a mount point, or a label or UUID specifier, for example:
# fsck UUID=ad8113d7-b279-4da8-b6e4-cfba045f66ff
By default, fsck prompts you to choose whether it should apply a suggested repair to the file system. If
you specify the -y option, fsck assumes a yes response to all such questions.
For the ext2, ext3, and ext4 file system types, other commands that are used to perform file system
maintenance include dumpe2fs and debugfs. dumpe2fs prints super block and block group information
for the file system on a specified device. debugfs is an interactive file system debugger that requires
expert knowledge of the file system architecture. Similar commands exist for most file system types and
also require expert knowledge.
where device specifies the block device corresponding to the file system.
Tip
Specifying a different value of mount_count for each file system reduces the
probability that the system checks all the file systems at the same time.
The unit can be d, w, or m for days, weeks, or months. The default unit is d for days. An interval of 0
disables checking that is based on the time that has elapsed since the last check. Even if the interval is
exceeded, the file system is not checked until it is next mounted.
An ACL consists of a set of rules that specify how a specific user or group can access the file or directory
with which the ACL is associated. A regular ACL entry specifies access information for a single file or
210
Configuring ACL Support
directory. A default ACL entry is set on directories only, and specifies default access information for any file
within the directory that does not have an access ACL.
2. Edit /etc/fstab and change the entries for the file systems with which you want to use ACLs so that
they include the appropriate option that supports ACLs, for example:
LABEL=/work /work ext4 acl 0 0
For mounted Samba shares, use the cifsacl option instead of acl.
[d:]u:user[:permissions] Sets the access ACL for the user specified by name or user ID. The
permissions apply to the owner if a user is not specified.
[d:]g:group[:permissions] Sets the access ACL for a group specified by name or group ID. The
permissions apply to the owning group if a group is not specified.
[d:]m[:][:permissions] Sets the effective rights mask, which is the union of all permissions of
the owning group and all of the user and group entries.
[d:]o[:][:permissions] Sets the access ACL for other (everyone else to whom no other rule
applies).
The permissions are r, w, and x for read, write, and execute as used with chmod.
The d: prefix is used to apply the rule to the default ACL for a directory.
211
About Disk Quotas
If extended ACLs are active on a file, the -l option to ls displays a plus sign (+) after the permissions, for
example:
# ls -l foofile
-rw-r--r--+ 1 bob bob 105322 Apr 11 11:02 foofile
The following are examples of how to set and display ACLs for directories and files.
Display the name, owner, group, and ACL for a file or directory.
# getfacl file
Remove write access to a file for all groups and users by modifying the effective rights mask rather than
the ACL.
# setfacl -m m::rx file
The -b option removes all extended ACL entries from a file or directory.
# setfacl -b file
Set a default ACL of read and execute access for other on a directory:
# setfacl -m d:o:rx directory
Promote the ACL settings of a directory to default ACL settings that can be inherited.
# getfacl --access directory | setfacl -d -M- directory
For more information, see the acl(5), setfacl(1), and getfacl(1) manual pages.
For information about how to configure quotas for the XFS file system, see
Section 20.23, Setting Quotas on an XFS File System.
You can set disk quotas to restrict the amount of disk space (blocks) that users or groups can use, to limit
the number of files (inodes) that users or groups can create, and to notify you when usage is reaching a
212
Enabling Disk Quotas on File Systems
specified limit. A hard limit specifies the maximum number of blocks or inodes available to a user or group
on the file system. Users or groups can exceed a soft limit for a period of time known as a grace period.
2. Include the usrquota or grpquota options in the file system's /etc/fstab entry, for example:
/dev/sdb1 /home ext4 usrquota,grpquota 0 0
This command creates the files aquota.user and aquota.group in the root of the file system (/
home in this example).
or for a group:
# edquota -g group
The command opens a text file opens in the default editor defined by the EDITOR environment variable,
allowing you to specify the limits for the user or group, for example:
Disk quotas for user guest (uid 501)
Filesystem blocks soft hard inodes soft hard
/dev/sdb1 10325 0 0 1054 0 0
The blocks and inodes entries show the user's currently usage on a file system.
Tip
2. Edit the soft and hard block limits for number of blocks and inodes, and save and close the file.
Alternatively, you can use the setquota command to configure quota limits from the command-line. The -
p option allows you to apply quota settings from one user or group to another user or group.
For more information, see the edquota(8) and setquota(8) manual pages.
213
Setting the Grace Period
The command opens a text file opens in the default editor defined by the EDITOR environment variable,
allowing you to specify the grace period, for example:
Grace period before enforcing soft limits for users:
Time units may be: days, hours, minutes, or seconds
Filesystem Block grace period Inode grace period
/dev/sdb1 7days 7days
2. Edit the grace periods for the soft limits on the number of blocks and inodes, and save and close the
file.
To display information about file systems where usage is over the quota limits:
# quota -q
Users can also use the quota command to display their own and their group's usage.
To disable disk quotas for all users, groups, and file systems:
# quotaoff -aguv
To re-enable disk quotas for all users, groups, and file systems:
# quotaon -aguv
214
Maintaining the Accuracy of Disk Quota Reporting
215
216
Chapter 20 Local File System Administration
Table of Contents
20.1 About Local File Systems ........................................................................................................ 218
20.2 About the Btrfs File System ..................................................................................................... 219
20.3 Creating a Btrfs File System ................................................................................................... 220
20.4 Modifying a Btrfs File System .................................................................................................. 221
20.5 Compressing and Defragmenting a Btrfs File System ............................................................... 222
20.6 Resizing a Btrfs File System ................................................................................................... 222
20.7 Creating Subvolumes and Snapshots ...................................................................................... 223
20.7.1 Cloning Virtual Machine Images and Linux Containers ................................................... 224
20.8 Using the Send/Receive Feature ............................................................................................. 224
20.8.1 Using Send/Receive to Implement Incremental Backups ................................................ 225
20.9 Using Quota Groups ............................................................................................................... 226
20.10 Replacing Devices on a Live File System ............................................................................... 226
20.11 Creating Snapshots of Files .................................................................................................. 226
20.12 Converting an Ext2, Ext3, or Ext4 File System to a Btrfs File System ....................................... 227
20.12.1 Converting a Non-root File System ............................................................................. 227
20.12.2 Converting the root File System .................................................................................. 227
20.12.3 Mounting the Image of the Original File System ........................................................... 229
20.12.4 Deleting the Snapshot of the Original File System ........................................................ 229
20.12.5 Recovering an Original Non-root File System ............................................................... 230
20.13 Installing a Btrfs root File System .......................................................................................... 230
20.13.1 Setting up a New NFS Server ..................................................................................... 230
20.13.2 Configuring an Existing NFS Server ............................................................................ 231
20.13.3 Setting up a New HTTP Server ................................................................................... 232
20.13.4 Configuring an Existing HTTP Server .......................................................................... 233
20.13.5 Setting up a Network Installation Server ...................................................................... 233
20.13.6 Installing from a Network Installation Server ................................................................ 235
20.13.7 About the Installation root File System ........................................................................ 235
20.13.8 Creating Snapshots of the root File System ................................................................. 237
20.13.9 Mounting Alternate Snapshots as the root File System ................................................. 237
20.13.10 Deleting Snapshots of the root File System ............................................................... 237
20.14 Converting a Non-root Ext2 File System to Ext3 ..................................................................... 238
20.15 Converting a root Ext2 File System to Ext3 ............................................................................ 238
20.16 Creating a Local OCFS2 File System .................................................................................... 239
20.17 About the XFS File System ................................................................................................... 240
20.17.1 About External XFS Journals ...................................................................................... 241
20.17.2 About XFS Write Barriers ........................................................................................... 242
20.17.3 About Lazy Counters .................................................................................................. 242
20.18 Installing the XFS Packages .................................................................................................. 242
20.19 Creating an XFS File System ................................................................................................ 242
20.20 Modifying an XFS File System ............................................................................................... 243
20.21 Growing an XFS File System ................................................................................................ 243
20.22 Freezing and Unfreezing an XFS File System ........................................................................ 244
20.23 Setting Quotas on an XFS File System .................................................................................. 244
20.23.1 Setting Project Quotas ................................................................................................ 245
20.24 Backing up and Restoring XFS File Systems ......................................................................... 246
20.25 Defragmenting an XFS File System ....................................................................................... 247
20.26 Checking and Repairing an XFS File System ......................................................................... 248
217
About Local File Systems
This chapter describes administration tasks for the btrfs, ext3, ext4, OCFS2, and XFS local file systems.
The maximum supported file or file system size is 16 EB, although these
limits are untested. Btrfs requires the Unbreakable Enterprise Kernel
Release 2 (2.6.39) or the Unbreakable Enterprise Kernel Release 3
(3.8.13).
For more information, see Section 20.2, About the Btrfs File System.
ext3 The ext3 file system includes journaling capabilities to improve reliability
and availability. Consistency checks after a power failure or an
uncontrolled system shutdown are unnecessary. ext2 file systems are
upgradeable to ext3 without reformatting.
The maximum supported file and file system sizes are 2 TB and 16 TB.
ext4 In addition to the features of ext3, the ext4 file system supports extents
(contiguous physical blocks), pre-allocation, delayed allocation, faster
file system checking, more robust journaling, and other enhancements.
vfat The vfat file system (also known as FAT32) was originally developed for
MS-DOS. It does not support journaling and lacks many of the features
218
About the Btrfs File System
that are available with other file system types. It is mainly used to
exchange data between Microsoft Windows and Oracle Linux systems.
The maximum supported file or file system size is 100 TB. XFS
is supported only on the x86_64 architecture and requires the
Unbreakable Enterprise Kernel Release 2 (2.6.39) or the Unbreakable
Enterprise Kernel Release 3 (3.8.13).
For more information, see Section 20.17, About the XFS File System.
To see what file system types your system supports, use the following command:
# ls /sbin/mkfs.*
/sbin/mkfs.btrfs /sbin/mkfs.ext3 /sbin/mkfs.msdos
/sbin/mkfs.cramfs /sbin/mkfs.ext4 /sbin/mkfs.vfat
/sbin/mkfs.ext2 /sbin/mkfs.ext4dev /sbin/mkfs.xfs
These executables are used to make the file system type specified by their extension. mkfs.msdos and
mkfs.vfat are alternate names for mkdosfs. mkfs.cramfs creates a compressed ROM, read-only
cramfs file system for use by embedded or small-footprint systems.
Copy-on-write functionality allows you to create both readable and writable snapshots, and to roll back a
file system to a previous state, even after you have converted it from an ext3 or ext4 file system.
Integrated logical volume management allows you to implement RAID 0, RAID 1, or RAID 10
configurations, and to dynamically add and remove storage capacity.
Starting with Oracle Linux 6 Update 3, the UEK Boot ISO (which boots the Unbreakable Enterprise Kernel
as the installation kernel) allows you to configure a btrfs root file system. Prior to Oracle Linux 6 Update 3,
you could not create a btrfs root file system during installation. For more information, see Section 20.13,
Installing a Btrfs root File System.
Note
219
Creating a Btrfs File System
You can find more information about the btrfs file system at https://btrfs.wiki.kernel.org/index.php/
Main_Page.
If the btrfs-progs package is not already installed on your system, use yum to
install it.
You can use the mkfs.btrfs command to create a btrfs file system that is laid out across one or more
block devices. The default configuration is to stripe the file system data and to mirror the file system
metadata across the devices. If you specify a single device, the metadata is duplicated on that device
unless you specify that only one copy of the metadata is to be used. The devices can be simple disk
partitions, loopback devices (that is, disk images in memory), multipath devices, or LUNs that implement
RAID in hardware.
The following table illustrates how to use the mkfs.btrfs command to create various btrfs configurations.
Command Description
mkfs.btrfs block_device Create a btrfs file system on a single device. For example:
mkfs.btrfs /dev/sdb1
mkfs.btrfs -L label block_device Create a btrfs file system with a label that you can use
when mounting the file system. For example:
Note
220
Modifying a Btrfs File System
Command Description
mkfs.btrfs -d raid10 -m raid10 /dev/sdf \
When you want to mount the file system, you can specify it by any of its component devices, for example:
# mkfs.btrfs -d raid10 -m raid10 /dev/sd[fghijk]
# mount /dev/sdf /raid10_mountpoint
To find out the RAID configuration of a mounted btrfs file system, use this command:
# btrfs filesystem df mountpoint
Note
Use the following form of the btrfs command to display information about all the btrfs file systems on a
system:
# btrfs filesystem show
Command Description
btrfs device add device mountpoint Add a device to the file system that is mounted on
the specified mount point. For example:
221
Compressing and Defragmenting a Btrfs File System
To enable compression of a btrfs file system, specify one of the following mount options:
LZO offers a better compression ratio, while zlib offers faster compression.
You can also compress a btrfs file system at the same time that you defragment it.
You can also defragment, and optionally compress, individual file system objects, such as directories and
files, within a btrfs file system.
Note
222
Creating Subvolumes and Snapshots
Snapshots are a type of subvolume that records the contents of their parent subvolumes at the time that
you took the snapshot. If you take a snapshot of a btrfs file system and do not write to it, the snapshot
records the state of the original file system and forms a stable image from which you can make a backup.
If you make a snapshot writable, you can treat it as a alternate version of the original file system. The copy-
on-write functionality of btrfs file system means that snapshots are quick to create, and consume very little
disk space initially.
Note
The following table shows how to perform some common snapshot operations:
Command Description
btrfs subvolume snapshot pathname Create a snapshot snapshot_path of a parent
pathname/snapshot_path subvolume or snapshot specified by pathname. For
example:
Note
223
Cloning Virtual Machine Images and Linux Containers
You can mount a btrfs subvolume as though it were a disk device. If you mount a snapshot instead of its
parent subvolume, you effectively roll back the state of the file system to the time that the snapshot was
taken. By default, the operating system mounts the parent btrfs volume, which has an ID of 0, unless you
use set-default to change the default subvolume. If you set a new default subvolume, the system will
mount that subvolume instead in future. You can override the default setting by specifying either of the
following mount options:
Note
When you have rolled back a file system by mounting a snapshot, you can take snapshots of the snapshot
itself to record its state.
When you no longer require a subvolume or snapshot, use the following command to delete it:
Note
Deleting a subvolume deletes all subvolumes that are below it in the b-tree
hierarchy. For this reason, you cannot remove the topmost subvolume of a btrfs file
system, which has an ID of 0.
The send/receive feature requires that you boot the system using UEK R3.
The send operation compares two subvolumes and writes a description of how to convert one subvolume
(the parent subvolume) into the other (the sent subvolume). You would usually direct the output to a file for
later use or pipe it to a receive operation for immediate use.
The simplest form of the send operation writes a complete description of a subvolume:
224
Using Send/Receive to Implement Incremental Backups
You can specify multiple instances of the -v option to display increasing amounts of debugging output. The
-f option allows you to save the output to a file. Both of these options are implicit in the following usage
examples.
The following form of the send operation writes a complete description of how to convert one subvolume
into another:
# btrfs send -p parent_subvol sent_subvol
If a subvolume such as a snapshot of the parent volume, known as a clone source, will be available during
the receive operation from which some of the data can be recovered, you can specify the clone source to
reduce the size of the output file:
# btrfs send [-p parent_subvol] -c clone_src [-c clone_src] ... subvol
You can specify the -c option multiple times if there is more than one clone source. If you do not specify
the parent subvolume, btrfs chooses a suitable parent from the clone sources.
You use the receive operation to regenerate the sent subvolume at a specified path:
# btrfs receive [-f sent_file] mountpoint
1. Create a read-only snapshot of the subvolume to serve as an initial reference point for the backup:
# btrfs subvolume snapshot -r /vol /vol/backup_0
2. Run sync to ensure that the snapshot has been written to disk:
# sync
3. Create a subvolume or directory on a btrfs file system as a backup area to receive the snapshot, for
example, /backupvol.
Having created the reference backup, you can then create incremental backups as required.
b. Run sync to ensure that the snapshot has been written to disk:
# sync
c. Send only the differences between the reference backup and the new backup to the backup area:
# btrfs send -p /vol/backup_0 /vol/backup_1 | btrfs receive /backupvol
225
Using Quota Groups
The quota groups feature requires that you boot the system using UEK R3.
To enable quotas, use the following command on a newly created btrfs file system before any creating any
subvolumes:
# btrfs quota enable volume
For example:
# btrfs qgroup limit 1g /myvol/subvol1
# btrfs qgroup limit 512m /myvol/subvol2
To find out the quota usage for a subvolume, use the btrfs qgroup show path command:
The device replacement feature requires that you boot the system using UEK R3.
You can replace devices on a live file system. You do not need to unmount the file system or stop any
tasks that are using it. If the system crashes or loses power while the replacement is taking place, the
operation resumes when the system next mounts the file system.
Use the following command to replace a device on a mounted btrfs file system:
# btrfs replace start source_dev target_dev [-r] mountpoint
source_dev and target_dev specify the device to be replaced (source device) and the replacement
device (target device). mountpoint specifies the file system that is using the source device. The target
device must be the same size as or larger than the source device. If the source device is no longer
available or you specify the -r option, the data is reconstructed by using redundant data obtained from
other devices (such as another available mirror). The source device is removed from the file system when
the operation is complete.
You can use the btrfs replace status mountpoint and btrfs replace cancel mountpoint
commands to check the progress of the replacement operation or to cancel the operation.
For example, the following command creates the snapshot bar of the file foo:
226
Converting an Ext2, Ext3, or Ext4 File System to a Btrfs File System
If you convert the root file system to btrfs, you can use snapshots to roll back changes such as upgrades
that you have made to the file system.
Note
You cannot convert a bootable partition, such as /boot, to a btrfs file system.
Before performing a file system conversion, make a backup of the file system from
which you can restore its state.
To convert an ext2, ext3, or ext4 file system other than the root file system to btrfs:
2. Run the correct version of fsck (for example, fsck.ext4) on the underlying device to check and
correct the integrity of file system.
# fsck.extN -f device
4. Edit the file /etc/fstab, and change the file system type of the file system to btrfs, for example:
/dev/sdb /myfs btrfs defaults 0 0
Before performing a root file system conversion, make a full system backup from
which you can restore its state.
1. Run the mount command to determine the device that is currently mounted as the root file system, and
the type of the file system.
227
Converting the root File System
In the following example, the root file system is configured as an LVM logical volume lv_root in the
volume group vg_hostol6, and the file system type is ext4. Using the ls -l command confirms
that the mapped device corresponds to /dev/vg_hostol6/lv_root.
# mount
...
/dev/mapper/vg_hostol6-lv_root on / type ext4 (rw)
...
# ls -l /dev/mapper/vg_hostol6-lv_root
lrwxrwxrwx. 1 root root 7 Sep 14 14:00 /dev/mapper/vg_hostol6-lv_root -> ../dm-0
# ls -l /dev/vg_hostol6/lv_root
lrwxrwxrwx. 1 root root 7 Sep 14 14:00 /dev/vg_hostol6/lv_root -> ../dm-0
In the next example, the root file system corresponds to the disk partition /dev/sda2:
# mount
...
/dev/sda2 on / type ext4 (rw)
...
3. Boot the system from an Oracle Linux 6 Update 3 or later UEK Boot ISO (which you can burn to CD or
DVD if necessary). You can download the UEK Boot ISO from https://edelivery.oracle.com/linux.
Note
You must use the UEK Boot ISO. You cannot use the RHCK Boot ISO to
perform the conversion.
4. From the installation menu, select Rescue Installed System. When prompted, choose a language
and keyboard, select Local CD/DVD as the installation media, select No to bypass starting the network
interface, and select Skip to bypass selecting a rescue environment.
5. Select Start shell to obtain a bash shell prompt (bash-4.1#) at the bottom of the screen.
6. If the existing root file system is configured as an LVM volume, use the following command to start the
volume group (for example, vg_hostol6):
bash-4.1# lvchange -ay vg_hostol6
7. Run the correct version of fsck (for example, fsck.ext3 or fsck.ext4) to check and correct the
integrity of the file system.
bash-4.1# fsck.extN -f device
where device is the root file system device (for example, /dev/vg_hostol6/lv_root or /dev/
sda2).
9. Create a mount point (/mnt1) and mount the converted root file system on it.
bash-4.1# mkdir /mnt1
bash-4.1# mount -t btrfs device /mnt1
10. Use the vi command to edit the file /mnt1/etc/fstab, and change the file system type of the root
file system to btrfs, for example:
228
Mounting the Image of the Original File System
11. Create the file .autorelabel in the root of the mounted file system.
bash-4.1# touch /mnt1/.autorelabel
The presence of the .autorelabel file in / instructs SELinux to recreate the security attributes of all
files on the file system.
Note
If you do not create the .autorelabel file, you might not be able to boot
the system successfully. If you forget to create the file and the reboot fails,
either disable SELinux temporarily by specifying selinux=0 to the kernel boot
parameters, or run SELinux in permissive mode by specifying enforcing=0.
13. Remove the boot CD, DVD, or ISO, and reboot the system.
1. Mount the snapshot of the original file system on a temporary mount point.
# mount -t btrfs -o subvol=ext2_saved device temp_mountpoint1
2. Mount the image of the original file system read-only on another temporary mount point, specifying the
correct file system type (ext2, ext3, or ext4) to the -t option.
# mount -t extN -o loop,ro temp_mountpoint1/image temp_mountpoint2
If you delete the snapshot of the original file system to save storage space, you will
no longer be able to recover the original file system.
To delete the snapshot of the original file system and recover the space that it uses:
For example, if you converted the root file system (/) file system, you would enter:
# btrfs subvolume delete //ext2_saved
229
Recovering an Original Non-root File System
If you roll back a conversion, you will lose any changes that you have made to the
btrfs file system. Make a back up of the changes that you want to reapply to the
restored file system.
To roll back the conversion of the file system and recover the original file system:
1. Unmount the btrfs file system and all of its snapshots and images in the reverse order from which you
originally mounted them.
# umount temp_mountpoint2
# umount temp_mountpoint1/image
# umount mountpoint
As the UEK Boot ISO contains only the bootable installation image, you must set up a network installation
server for the RPM packages. This server must have sufficient storage space to host the full Oracle Linux
Release 6 Update 3 or later Media Pack DVD image (approximately 3.5 GB), and you must configure it to
serve the image files using either NFS or HTTP to the target system on which you want to install Oracle
Linux 6 Update 3 or later.
This procedure assumes that you are setting up an Oracle Linux 6 system as an
NFSv4 server. Using NFSv4 greatly simplifies firewall configuration as you need
only configure a single rule for TCP port 2049.
230
Configuring an Existing NFS Server
2. Create the directory where you will copy the full Oracle Linux Release 6 Media Pack DVD image, for
example /var/OSimage/OL6.5:
# mkdir -p /var/OSimage/OL6.5
a. Add an entry for the directory where you will copy the DVD image.
The following example allows read-only access to the directory /var/OSimage/OL6.5 for any
NFS client on the 192.168.1 subnet:
/var/OSimage/OL6.5 192.168.1.0/24(ro)
5. If you have configured a firewall on your system, configure it to allow incoming NFSv4 requests from
NFS clients.
For example, use the following commands to configure iptables to allow NFSv4 connections and
save the change to the firewall configuration:
# iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 2049 -j ACCEPT
# service iptables save
1. Create the directory where you will copy the full Oracle Linux Release 6 Media Pack DVD image, for
example /var/OSimage/OL6.5:
# mkdir -p /var/OSimage/OL6.5
For example, to allow read-only access to the directory /var/OSimage/OL6.5 for any NFS client on
the 192.168.1 subnet:
# exportfs -i -o ro 192.168.1.0/24:/var/OSimage/OL6.5
231
Setting up a New HTTP Server
These instructions assume that you are setting up an Oracle Linux 6 system as an
Apache HTTP server.
2. Create the directory where you will copy the full Oracle Linux Release 6 Media Pack DVD image, for
example /var/www/html/OSimage/OL6.5:
# mkdir -p /var/www/html/OSimage/OL6.5
Note
a. Specify the resolvable domain name of the server in the argument to ServerName.
ServerName server_addr:80
If the server does not have a resolvable domain name, enter its IP address instead. For example,
the following entry would be appropriate for an HTTP server with the IP address 192.168.1.100.
ServerName 192.168.1.100:80
b. If the directory to which you will copy the DVD image in not under /var/www/html, change the
default setting of DocumentRoot.
In this example, the DVD image will be copied to /var/www/html/OSimage/OL6.5 so the setting
of DocumentRoot can remain unchanged.
DocumentRoot "/var/www/html"
c. Verify that the <Directory> setting points to the same setting as DocumentRoot.
#
# This should be changed to whatever you set DocumentRoot to.
#
<Directory "/var/www/html">
d. If you want to be able to browse the directory hierarchy, verify that the Options directive specifies
the Indexes option, for example:
Options Indexes FollowSymLinks
Note
232
Configuring an Existing HTTP Server
4. Start the Apache HTTP server, and configure it to start after a reboot.
# service httpd start
# chkconfig httpd on
5. If you have enabled a firewall on your system, configure it to allow incoming HTTP connection requests
on TCP port 80.
For example, the following command configures iptables to allow incoming HTTP connection
requests and saves the change to the firewall configuration:
# iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
# service iptables save
1. Under the DocumentRoot hierarchy that is defined in the HTTP server configuration file (/etc/
httpd/conf/httpd.conf), create the directory where you will copy the full Oracle Linux Release 6
Media Pack DVD image, for example /var/www/html/OSimage/OL6.5:
# mkdir -p /var/www/html/OSimage/OL6.5
2. Edit the HTTP server configuration file, /etc/httpd/conf/httpd.conf, and add a <Directory>
section, for example:
<Directory "/var/www/html/OSimage/OL6.5">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
Place this section after the closing </Directory> statement for the <Directory DocumentRoot>
section.
Note
The Indexes option is not required for installation. Specify this option if you
want to be able to browse the directory hierarchy.
This procedure assumes that you have set up the system as an NFS or HTTP
server.
1. Download the full Oracle Linux Media Pack DVD image (for example, V41362-01.iso for x86_64
(64 bit) Oracle Linux Release 6 Update 5) from the Oracle Software Delivery Cloud at http://
edelivery.oracle.com/linux.
2. Mount the DVD image on a suitable mount point (for example, /mnt):
233
Setting up a Network Installation Server
3. Use the following command to extract the contents of the DVD image into a directory (output_dir)
whose contents are shareable using NFS or HTTP:
# cp -a -T mount_dir output_dir
or to /var/www/html/OSimage/OL6.5:
# cp -a -T /mnt /var/www/html/OSimage/OL6.5
5. Download the UEK Boot ISO image for the desired architecture (for example, V41364-01.iso for
x86_64 (64 bit)).
7. Replace the contents of the images directory that you copied from the DVD image with the contents of
the images directory from the UEK Boot ISO image:
# rm -rf output_dir/images
# cp -r mount_dir/images output_dir
or to replace /var/www/html/OSimage/OL6.5/images:
# rm -rf /var/www/html/OSimage/OL6.5/images
# cp -r /mnt/images /var/www/html/OSimage/OL6.5
8. If SELinux is enabled in enforcing mode on your system and you have configured the system as an
HTTP server but you did not copy the DVD image to a directory under /var/www/html:
a. Use the semanage command to define the default file type of the directory hierarchy as
httpd_sys_content_t:
# /usr/sbin/semanage fcontext -a -t httpd_sys_content_t "/var/OSimage(/.*)?"
b. Use the restorecon command to apply the file type to the entire directory hierarchy.
# /sbin/restorecon -R -v /var/OSimage
Note
9. Copy the UEK Boot ISO image to a suitable medium from which you can boot the target system on
which you want to install Oracle Linux 6 Update 5.
234
Installing from a Network Installation Server
# umount mount_dir
2. Select Install or upgrade an existing system, press Tab, and enter askmethod as an additional
parameter on the boot command line:
3. On the Installation Method screen, select either NFS directory or URL depending on whether you
configured your installation server to use NFS or HTTP respectively.
4. After configuring the network settings, enter the settings for the NFS or HTTP installation server.
For installation using NFS, enter the path of the full DVD image, for example /var/OSimage/OL6.5.
For installation using HTTP, enter the URL of the full DVD image, for example
http://192.168.1.100/OSimage/OL6.5.
Note
You cannot configure a bootable partition, such as /boot, as a btrfs file system.
In this example, the installation root file system subvolume has an ID of 5. The subvolume with ID 258
(install) is currently mounted as /. Figure 20.1, Layout of the root File System Following Installation
illustrates the layout of the file system:
235
About the Installation root File System
The top-level subvolume with ID 5 records the contents of the root file system file system at the end of
installation. The default subvolume (install) with ID 258 is currently mounted as the active root file
system.
The mount command shows the device that is currently mounted as the root file system:
# mount
/dev/mapper/vg_btrfs-lv_root on / type btrfs (rw)
...
To mount the installation root file system volume, you can use the following commands:
# mkdir /instroot
# mount -o subvolid=5 /dev/mapper/vg_btrfs-lv_root /instroot
If you list the contents of /instroot, you can see both the contents of the installation root file system
volume and the install snapshot, for example:
# ls /instroot
bin cgroup etc install lib64 misc net proc sbin srv tmp var
boot dev home lib media mnt opt root selinux sys usr
The contents of / and /instroot/install are identical as demonstrated in the following example
where a file (foo) created in /instroot/install is also visible in /:
# touch /instroot/install/foo
# ls /
bin cgroup etc home lib media mnt opt root selinux sys usr
boot dev foo instroot lib64 misc net proc sbin srv tmp var
# ls /instroot/install
bin cgroup etc home lib media mnt opt root selinux sys usr
boot dev foo instroot lib64 misc net proc sbin srv tmp var
# rm -f /foo
# ls /
bin cgroup etc instroot lib64 misc net proc sbin srv tmp var
boot dev home lib media mnt opt root selinux sys usr
# ls /instroot/install
bin cgroup etc instroot lib64 misc net proc sbin srv tmp var
boot dev home lib media mnt opt root selinux sys usr
236
Creating Snapshots of the root File System
1. Mount the top level of the root file system on a suitable mount point.
2. Change directory to the mount point and take the snapshot. In this example, the install subvolume
is currently mounted as the root file system system.
# cd /mnt
# btrfs subvolume snapshot install root_snapshot_1
Create a snapshot of 'install' in './root_snapshot_1'
3. Change directory to / and unmount the top level of the file system.
# cd /
# umount /mnt
# cd /mnt
# btrfs subvolume delete install
Delete subvolume '/mnt/install'
3. Change directory to / and unmount the top level of the file system.
# cd /
# umount /mnt
237
Converting a Non-root Ext2 File System to Ext3
Before performing a file system conversion, make a backup of the file system from
which you can restore its state.
3. Use the following command with the block device corresponding to the ext2 file system:
# tune2fs -j device
5. Correct any entry for the file system in /etc/fstab so that its type is defined as ext3 instead of
ext2.
Before performing a root file system conversion, make a full system backup from
which you can restore its state.
1. Use the following command with the block device corresponding to the root file system:
# tune2fs -j device
The command adds an ext3 journal to the file system as the file /.journal.
2. Run the mount command to determine the device that is currently mounted as the root file system.
In the following example, the root file system corresponds to the disk partition /dev/sda2:
# mount
/dev/sda2 on / type ext2 (rw)
238
Creating a Local OCFS2 File System
4. Boot the system from an Oracle Linux boot CD, DVD or ISO. You can download the ISO from https://
edelivery.oracle.com/linux.
5. From the installation menu, select Rescue Installed System. When prompted, choose a language
and keyboard, select Local CD/DVD as the installation media, select No to bypass starting the network
interface, and select Skip to bypass selecting a rescue environment.
6. Select Start shell to obtain a bash shell prompt (bash-4.1#) at the bottom of the screen.
7. If the existing root file system is configured as an LVM volume, use the following command to start the
volume group (for example, vg_host01):
bash-4.1# lvchange -ay vg_host01
where device is the root file system device (for example, /dev/sda2).
9. Create a mount point (/mnt1) and mount the converted root file system on it.
bash-4.1# mkdir /mnt1
bash-4.1# mount -t ext3 device /mnt1
10. Use the vi command to edit /mnt1/etc/fstab, and change the file system type of the root file
system to ext3, for example:
/dev/sda2 / ext3 defaults 1 1
11. Create the file .autorelabel in the root of the mounted file system.
bash-4.1# touch /mnt1/.autorelabel
The presence of the .autorelabel file in / instructs SELinux to recreate the security attributes of all
files on the file system.
Note
If you do not create the .autorelabel file, you might not be able to boot
the system successfully. If you forget to create the file and the reboot fails,
either disable SELinux temporarily by specifying selinux=0 to the kernel boot
parameters, or run SELinux in permissive mode by specifying enforcing=0.
13. Remove the boot CD, DVD, or ISO, and reboot the system.
239
About the XFS File System
For example, create a locally mountable OCFS2 volume on /dev/sdc1 with one node slot and the label
localvol:
# mkfs.ocfs2 -M local --fs-features=local -N 1 -L "localvol" /dev/sdc1
You can use the tunefs.ocfs2 utility to convert a local OCTFS2 file system to cluster use, for example:
# umount /dev/sdc1
# tunefs.ocfs2 -M cluster --fs-features=cluster -N 8 /dev/sdc1
This example also increases the number of node slots from 1 to 8 to allow up to eight nodes to mount the
file system.
For information about using OCFS2 with clusters, see Chapter 22, Oracle Cluster File System Version 2.
You must have an Oracle Linux Premier Support account to obtain technical
support for XFS with Oracle Linux.
The XFS file system is supported for the Unbreakable Enterprise Kernel Release 2
(2.6.39) and the Unbreakable Enterprise Kernel Release 3 (3.8.13) on the x86_64
architecture only.
XFS is a high-performance journaling file system that was initially created by Silicon Graphics, Inc. for
the IRIX operating system and later ported to Linux. The parallel I/O performance of XFS provides high
scalability for I/O threads, file system bandwidth, file and file system size, even when the file system spans
many storage devices.
A typical use case for XFS is to implement a several-hundred terabyte file system across multiple storage
servers, each server consisting of multiple FC-connected disk arrays.
XFS is not supported for use with the root (/) or boot file systems on Oracle Linux.
XFS has a large number of features that make it suitable for deployment in an enterprise-level computing
environment that requires the implementation of very large file systems:
On x86_64 systems, XFS supports a maximum file system size and maximum file size of nearly 8 EB.
The maximum supported limit for XFS on Oracle Linux is 100 TB.
XFS implements journaling for metadata operations, which guarantees the consistency of the file
system following loss of power or a system crash. XFS records file system updates asynchronously
to a circular buffer (the journal) before it can commit the actual data updates to disk. The journal can
be located either internally in the data section of the file system, or externally on a separate device to
reduce contention for disk access. If the system crashes or loses power, it reads the journal when the file
system is remounted, and replays any pending metadata operations to ensure the consistency of the file
system. The speed of this recovery does not depend on the size of the file system.
XFS is internally partitioned into allocation groups, which are virtual storage regions of fixed size. Any
files and directories that you create can span multiple allocation groups. Each allocation group manages
its own set of inodes and free space independently of other allocation groups to provide both scalability
and parallelism of I/O operations. If the file system spans many physical devices, allocation groups
can optimize throughput by taking advantage of the underlying separation of channels to the storage
components.
240
About External XFS Journals
XFS is an extent-based file system. To reduce file fragmentation and file scattering, each file's blocks
can have variable length extents, where each extent consists of one or more contiguous blocks. XFS's
space allocation scheme is designed to efficiently locate free extents that it can use for file system
operations. XFS does not allocate storage to the holes in sparse files. If possible, the extent allocation
map for a file is stored in its inode. Large allocation maps are stored in a data structure maintained by
the allocation group.
To maximize throughput for XFS file systems that you create on an underlying striped, software or
hardware-based array, you can use the su and sw arguments to the -d option of the mkfs.xfs
command to specify the size of each stripe unit and the number of units per stripe. XFS uses the
information to align data, inodes, and journal appropriately for the storage. On lvm and md volumes and
some hardware RAID configurations, XFS can automatically select the optimal stripe parameters for you.
To reduce fragmentation and increase performance, XFS implements delayed allocation, reserving file
system blocks for data in the buffer cache, and allocating the block when the operating system flushes
that data to disk.
XFS supports extended attributes for files, where the size of each attribute's value can be up to 64 KB,
and each attribute can be allocated to either a root or a user name space.
Direct I/O in XFS implements high throughput, non-cached I/O by performing DMA directly between an
application and a storage device, utilising the full I/O bandwidth of the device.
To support the snapshot facilities that volume managers, hardware subsystems, and databases provide,
you can use the xfs_freeze command to suspend and resume I/O for an XFS file system. See
Section 20.22, Freezing and Unfreezing an XFS File System.
To defragment individual files in an active XFS file system, you can use the xfs_fsr command. See
Section 20.25, Defragmenting an XFS File System.
To grow an XFS file system, you can use the xfs_growfs command. See Section 20.21, Growing an
XFS File System.
To back up and restore a live XFS file system, you can use the xfsdump and xfsrestore commands.
See Section 20.24, Backing up and Restoring XFS File Systems.
XFS supports user, group, and project disk quotas on block and inode usage that are initialized when
the file system is mounted. Project disk quotas allow you to set limits for individual directory hierarchies
within an XFS file system without regard to which user or group has write access to that directory
hierarchy.
To reserve an external journal with a specified size when you create an XFS file system, specify the -
l logdev=device,size=size option to the mkfs.xfs command. If you omit the size parameter,
mkfs.xfs selects a journal size based on the size of the file system. To mount the XFS file system so that
it uses the external journal, specify the -o logdev=device option to the mount command.
241
About XFS Write Barriers
By default, an XFS file system is mounted with a write barrier. If you create an XFS file system on a LUN
that has a battery-backed, non-volatile cache, using a write barrier degrades I/O performance by requiring
data to be flushed more often than necessary. In such cases, you can remove the write barrier by mounting
the file system with the -o nobarrier option to the mount command.
Lazy counters are enabled by default, but if required, you can disable them by specifying the -l lazy-
count=0 option to the mkfs.xfs command.
You can also obtain the XFS packages from the Oracle Linux Yum Server.
2. On your system, use yum to install the xfsprogs and xfsdump packages:
# yum install xfsprogs xfsdump
# mkfs.xfs /dev/vg0/lv0
meta-data=/dev/vg0/lv0 isize=256 agcount=32, agsize=8473312 blks
= sectsz=512 attr=2, projid32bit=0
data = bsize=4096 blocks=271145984, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0
log =internal log bsize=4096 blocks=32768, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
To create an XFS file system with a stripe-unit size of 32 KB and 6 units per stripe, you would specify the
su and sw arguments to the -d option, for example:
242
Modifying an XFS File System
You can use the xfs_admin command to modify an unmounted XFS file system. For example, you can
enable or disable lazy counters, change the file system UUID, or change the file system label.
To display the existing label for an unmounted XFS file system and then apply a new label:
# xfs_admin -l /dev/sdb
label = ""
# xfs_admin -L "VideoRecords" /dev/sdb
writing all SBs
new label = "VideoRecords"
Note
You can use the xfs_growfs command to increase the size of a mounted XFS file system if there is
space on the underlying devices to accommodate the change. The command does not have any effect on
the layout or size of the underlying devices. If necessary, use the underlying volume manager to increase
the physical storage that is available. For example, you can use the vgextend command to increase the
storage that is available to an LVM volume group and lvextend to increase the size of the logical volume
that contains the file system.
243
Freezing and Unfreezing an XFS File System
You cannot use the parted command to resize a partition that contains an XFS file system. You must
instead recreate the partition with a larger size and restore its contents from a backup if you deleted the
original partition or from the contents of the original partition if you did not delete it to free up disk space.
For example, to increase the size of /myxfs1 to 4 TB, assuming a block size of 4 KB:
# xfs_growfs -D 1073741824 /myxfs1
To increase the size of the file system to the maximum size that the underlying device supports, specify the
-d option:
# xfs_growfs -d /myxfs1
Note
You do not need to explicitly suspend write operations if you use the lvcreate
command to take an LVM snapshot.
To freeze and unfreeze an XFS file system, use the -f and -u options with the xfs_freeze command,
for example:
# xfs_freeze -f /myxfs
# # ... Take snapshot of file system ...
# xfs_freeze -u /myxfs
Note
You can also use the xfs_freeze command with btrfs, ext3, and ext4 file
systems.
To show the block usage limits and the current usage in the myxfs file system for all users, use the
xfs_quota command:
# xfs_quota -x -c 'report -h' /myxfs
User quota on /myxfs (/dev/vg0/lv0)
244
Setting Project Quotas
Blocks
User ID Used Soft Hard Warn/Grace
---------- ---------------------------------
root 0 0 0 00 [------]
guest 0 200M 250M 00 [------]
The following forms of the command display the free and used counts for blocks and inodes respectively in
the manner of the df -h command:
# xfs_quota -c 'df -h' /myxfs
Filesystem Size Used Avail Use% Pathname
/dev/vg0/lv0 200.0G 32.2M 20.0G 1% /myxfs
If you specify the -x option to enter expert mode, you can use subcommands such as limit to set soft
and hard limits for block and inode usage by an individual user, for example:
# xfs_quota -x -c 'limit bsoft=200m bhard=250m isoft=200 ihard=250 guest' /myxfs
Of course, this command requires that you mounted the file system with user quotas enabled.
To set limits for a group on an XFS file system that you have mounted with group quotas enabled, specify
the -g option to limit, for example:
# xfs_quota -x -c 'limit -g bsoft=5g bhard=6g devgrp' /myxfs
For example, to enable project quotas for the /myxfs file system:
# mount -o pquota /dev/vg0/lv0 /myxfs
2. Define a unique project ID for the directory hierarchy in the /etc/projects file:
# echo project_ID:mountpoint/directory >> /etc/projects
3. Create an entry in the /etc/projid file that maps a project name to the project ID:
# echo project_name:project_ID >> /etc/projid
245
Backing up and Restoring XFS File Systems
For example, to map the project name testproj to the project with ID 51:
# echo testproj:51 >> /etc/projid
4. Use the project subcommand of xfs_quota to define a managed tree in the XFS file system for the
project:
# xfs_quota -x -c project -s project_name mountpoint
For example, to define a managed tree in the /myxfs file system for the project testproj, which
corresponds to the directory hierarchy /myxfs/testdir:
# xfs_quota -x -c project -s testproj /myxfs
5. Use the limit subcommand to set limits on the disk usage of the project:
# xfs_quota -x -c limit -p arguments project_name mountpoint
For example, to set a hard limit of 10 GB of disk space for the project testproj:
# xfs_quota -x -c limit -p bhard=10g testproj /myxfs
For more information, see the projects(5), projid(5), and xfs_quota(8) manual pages.
Note
You can use the xfsdump command to create a backup of an XFS file system on a device such as a tape
drive, or in a backup file on a different file system. A backup can span multiple physical media that are
written on the same device, and you can write multiple backups to the same medium. You can write only
a single backup to a file. The command does not overwrite existing XFS backups that it finds on physical
media. You must use the appropriate command to erase a physical medium if you need to overwrite any
existing backups.
For example, the following command writes a level 0 (base) backup of the XFS file system, /myxfs to the
device /dev/st0 and assigns a session label to the backup:
# xfsdump -l 0 -L "Backup level 0 of /myxfs `date`" -f /dev/st0 /myxfs
You can make incremental dumps relative to an existing backup by using the command:
# xfsdump -l level -L "Backup level level of /myxfs `date`" -f /dev/st0 /myxfs
A level 1 backup records only file system changes since the level 0 backup, a level 2 backup records only
the changes since the latest level 1 backup, and so on up to level 9.
If you interrupt a backup by typing Ctrl-C and you did not specify the -J option (suppress the dump
inventory) to xfsdump , you can resume the dump at a later date by specifying the -R option:
246
Defragmenting an XFS File System
In this example, the backup session label from the earlier, interrupted session is overridden.
You use the xfsrestore command to find out information about the backups you have made of an XFS
file system or to restore data from a backup.
The xfsrestore -I command displays information about the available backups, including the session ID
and session label. If you want to restore a specific backup session from a backup medium, you can specify
either the session ID or the session label.
For example, to restore an XFS file system from a level 0 backup by specifying the session ID:
# xfsrestore -f /dev/st0 -S c76b3156-c37c-5b6e-7564-a0963ff8ca8f /myxfs
If you specify the -r option, you can cumulatively recover all data from a level 0 backup and the higher-
level backups that are based on that backup:
# xfsrestore -r -f /dev/st0 -v silent /myxfs
The command searches the archive looking for backups based on the level 0 backup, and prompts you to
choose whether you want to restore each backup in turn. After restoring the backup that you select, the
command exits. You must run this command multiple times, first selecting to restore the level 0 backup,
and then subsequent higher-level backups up to and including the most recent one that you require to
restore the file system data.
Note
After completing a cumulative restoration of an XFS file system, you should delete
the housekeeping directory that xfsrestore creates in the destination directory.
You can recover a selected file or subdirectory contents from the backup medium, as shown in the
following example, which recovers the contents of /myxfs/profile/examples to /tmp/profile/
examples from the backup with a specified session label:
# xfsrestore -f /dev/sr0 -L "Backup level 0 of /myxfs Sat Mar 2 14:47:59 GMT 2013" \
-s profile/examples /usr/tmp
This form of the command allows you browse a backup as though it were a file system. You can change
directories, list files, add files, delete files, or extract files from a backup.
To copy the entire contents of one XFS file system to another, you can combine xfsdump and
xfsrestore, using the -J option to suppress the usual dump inventory housekeeping that the commands
perform:
# xfsdump -J - /myxfs | xfsrestore -J - /myxfsclone
For more information, see the xfsdump(8) and xfsrestore(8) manual pages.
247
Checking and Repairing an XFS File System
To defragment an individual file, specify the name of the file as the argument to xfs_fsr.
# xfs_fsr pathname
If you run the xfs_fsr command without any options, the command defragments all currently mounted,
writeable XFS file systems that are listed in /etc/mtab. For a period of two hours, the command
passes over each file system in turn, attempting to defragment the top ten percent of files that have
the greatest number of extents. After two hours, the command records its progress in the file /var/
tmp/.fsrlast_xfs, and it resumes from that point if you run the command again.
If you have an Oracle Linux Premier Support account and encounter a problem
mounting an XFS file system, send a copy of the /var/log/messages file to
Oracle Support and wait for advice.
If you cannot mount an XFS file system, you can use the xfs_check command to check its consistency.
Usually, you would only run this command on the device file of an unmounted file system that you believe
has a problem. If xfs_check displays any output when you do not run it in verbose mode, the file system
has an inconsistency.
# xfscheck device
If you can mount the file system and you do not have a suitable backup, you can use xfsdump to attempt
to back up the existing file system data, However, the command might fail if the file system's metadata has
become too corrupted.
You can use the xfs_repair command to attempt to repair an XFS file system specified by its device
file. The command replays the journal log to fix any inconsistencies that might have resulted from the
file system not being cleanly unmounted. Unless the file system has an inconsistency, it is usually not
necessary to use the command, as the journal is replayed every time that you mount an XFS file system.
# xfs_repair device
If the journal log has become corrupted, you can reset the log by specifying the -L option to xfs_repair.
Warning
Resetting the log can leave the file system in an inconsistent state, resulting in data
loss and data corruption. Unless you are experienced in debugging and repairing
XFS file systems using xfs_db, it is recommended that you instead recreate the
file system and restore its contents from a backup.
If you cannot mount the file system or you do not have a suitable backup, running xfs_repair is the only
viable option unless you are experienced in using xfs_db.
xfs_db provides an internal command set that allows you to debug and repair an XFS file system
manually. The commands allow you to perform scans on the file system, and to navigate and display its
data structures. If you specify the -x option to enable expert mode, you can modify the data structures.
# xfs_db [-x] device
For more information, see the xfs_check(8), xfs_db(8) and xfs_repair(8) manual pages, and the
help command within xfs_db.
248
Chapter 21 Shared File System Administration
Table of Contents
21.1 About Shared File Systems ..................................................................................................... 249
21.2 About NFS ............................................................................................................................. 249
21.2.1 Configuring an NFS Server ........................................................................................... 251
21.2.2 Mounting an NFS File System ...................................................................................... 254
21.3 About Samba .......................................................................................................................... 254
21.3.1 Configuring a Samba Server ......................................................................................... 254
21.3.2 About Samba Configuration for Windows Workgroups and Domains ............................... 256
21.3.3 Accessing Samba Shares from a Windows Client .......................................................... 259
21.3.4 Accessing Samba Shares from an Oracle Linux Client ................................................... 259
This chapter describes administration tasks for the NFS and Samba shared file systems.
NFS The Network File System (NFS) is a distributed file system that allows a
client computer to access files over a network as though the files were
on local storage. See Section 21.2, About NFS.
Samba Samba enables the provision of file and print services for Microsoft
Windows clients and can integrate with a Windows workgroup, NT4
domain, or Active Directory domain. See Section 21.3, About Samba.
NFSv2 and NFSv3 rely on Remote Procedure Call (RPC) services, which are controlled by the rpcbind
service. rpcbind responds to requests for an RPC service and sets up connections for the requested
service. In addition, separate lockd and rpc.statd services are used to handle locking and mounting
protocols. Configuring a firewall to cope with the various ranges of ports that are used by all these services
is complex and error prone.
NFSv4 does not use rpcbind as the NFS server itself listens on TCP port 2049 for service requests. The
mounting and locking protocols are also integrated into the NFSv4 protocol, so the lockd and rpc.statd
249
About NFS
services are also not required. These refinements mean that firewall configuration for NFSv4 is no more
difficult than for a service such as HTTP.
The following table describes the various services that are used with versions 2, 3, and 4 of NFS:
If only NFSv4 clients can access the server, this is the only
NFS service that needs to be started explicitly.
nfsd 2, 3, and 4 Implements the kernel-space part of the NFS service.
Start this service after the nfs service to support NFSv2 and
NFSv3 clients.
rpcbind 2 and 3 Responds to requests for an RPC service and sets up
connections for the requested service.
Start this service before the nfs service to support NFSv2 and
NFSv3 clients.
250
Configuring an NFS Server
2. Edit the /etc/exports file to define the directories that the server will make available for clients to
mount, for example:
/var/folder 192.0.2.102(rw,async)
/usr/local/apps *(all_squash,anonuid=501,anongid=501,ro)
/var/projects/proj1 192.168.1.0/24(ro) mgmtpc(rw)
Each entry consists of the local path to the exported directory, followed by a list of clients that can
mount the directory with client-specific mount options in parentheses. If this example:
The client system with the IP address 192.0.2.102 can mount /var/folder with read and write
permissions. All writes to the disk are asynchronous, which means that the server does not wait for
write requests to be written to disk before responding to further requests from the client.
All clients can mount /usr/local/apps read-only, and all connecting users including root are
mapped to the local unprivileged user with UID 501 and GID 501.
All clients on the 192.168.1.0 subnet can mount /var/projects/proj1 read-only, and the client
system named mgmtpc can mount the directory with read-write permissions.
251
Configuring an NFS Server
Note
3. If the server will serve NFSv2 and NFSv3 clients, start the rpcbind service, and configure the service
to start following a system reboot:
# service rpcbind start
# chkconfig rpcbind on
4. Start the nfs service, and configure the service to start following a system reboot:
# service nfs start
# chkconfig nfs on
5. If the server will serve NFSv2 and NFSv3 clients, start the nfslock service, and configure the service
to start following a system reboot:
# service nfslock start
# chkconfig nfslock on
6. If the server will serve NFSv4 clients, edit /etc/idmapd.conf and edit the definition for the Domain
parameter to specify the DNS domain name of the server, for example:
Domain = mydom.com
This setting prevents the owner and group being unexpectedly listed as the anonymous user or group
(nobody or nogroup) on NFS clients when the all_squash mount option has not been specified.
7. If you need to allow access through the firewall for NFSv4 clients only, use the following commands to
configure iptables to allow NFSv4 connections and save the change to the firewall configuration:
# iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 2049 -j ACCEPT
# service iptables save
This configuration assumes that rpc.nfsd listens for client requests on TCP port 2049.
8. If you need to allow access through the firewall for NFSv2 and NFSv3 clients as well as NFSv4 clients:
b. Edit /etc/sysconfig/nfs and create entries for the following port settings:
# TCP port rpc.lockd should listen on.
LOCKD_TCPPORT=32803
The port values shown in this example are the default settings that are commented-out in the file.
252
Configuring an NFS Server
c. To verify that none of the ports specified in /etc/sysconfig/nfs is in use, enter the following
commands:
# lsof -i tcp:32803
# lsof -i udp:32769
# lsof -i :892
# lsof -i :662
If any port is in use, use the lsof -i command to determine an unused port and amend the
setting in /etc/sysconfig/nfs.
NFS fails to start if one of the specified ports is in use, and reports an error in /var/log/
messages. Edit /etc/sysconfig/nfs to use a different port number for the service that could
not start, and attempt to restart the nfslock and nfs services. You can use the rpcinfo -p
command to confirm on which ports RPC services are listening.
e. Restart the firewall service, configure iptables to allow NFSv2 and NFSv3 connections, and save
the change to the firewall configuration:
# service iptables start
# iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 2049 -j ACCEPT
# iptables -I INPUT -p udp -m udp --dport 2049 -j ACCEPT
# iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 111 -j ACCEPT
# iptables -I INPUT -p udp -m udp --dport 111 -j ACCEPT
# iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 32803 -j ACCEPT
# iptables -I INPUT -p udp -m udp --dport 32769 -j ACCEPT
# iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 892 -j ACCEPT
# iptables -I INPUT -p udp -m udp --dport 892 -j ACCEPT
# iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 662 -j ACCEPT
# iptables -I INPUT -p udp -m udp --dport 662 -j ACCEPT
# service iptables save
The port values shown in this example assume that the default port settings in /etc/sysconfig/
nfs are available for use by RPC services. This configuration also assumes that rpc.nfsd and
rpcbind listen on ports 2049 and 111 respectively.
9. Use the showmount -e command to display a list of the exported file systems, for example:
# showmount -e
Export list for host01.mydom.com
/var/folder 192.0.2.102
/usr/local/apps *
/var/projects/proj1 192.168.1.0/24 mgmtpc
showmount -a lists the current clients and the file systems that they have mounted, for example:
# showmount -a
mgmtpc.mydom.com:/var/projects/proj1
Note
253
Mounting an NFS File System
If you want to export or unexport directories without editing /etc/exports and restarting the NFS
service, use the exportfs command. The following example makes /var/dev available with read and
write access by all clients, and ignores any existing entries in /etc/exports.
# exportfs -i -o ro *:/var/dev
For more information, see the exportfs(8), exports(5), and showmount(8) manual pages.
2. Use showmount -e to discover what file systems an NFS server exports, for example:
# showmount -e host01.mydom.com
Export list for host01.mydom.com
/var/folder 192.0.2.102
/usr/local/apps *
/var/projects/proj1 192.168.1.0/24 mgmtpc
3. Use the mount command to mount an exported NFS file system on an available mount point:
# mount -t nfs -o ro,nosuid host01.mydoc.com:/usr/local/apps /apps
By default, mount assumes NFS v4. To mount an NFS v3 volume (the default in Oracle Linux 5), use
the following mount options:
-o vers=3,mountproto=tcp
4. To configure the system to mount an NFS file system at boot time, add an entry for the file system to /
etc/fstab, for example:
host01.mydoc.com:/usr/local/apps /apps nfs ro,nosuid 0 0
For more information, see the mount(8), nfs(5), and showmount(8) manual pages.
254
Configuring a Samba Server
2. Edit /etc/samba/smb.conf and configure the sections to support the required services, for example:
[global]
security = ADS
realm = MYDOM.REALM
password server = krbsvr.mydom.com
load printers = yes
printing = cups
printcap name = cups
[printers]
comment = All Printers
path = /var/spool/samba
browseable = no
guest ok = yes
writable = no
printable = yes
printer admin = root, @ntadmins, @smbprintadm
[homes]
comment = User home directories
valid users = @smbusers
browsable = no
writable = yes
guest ok = no
[apps]
comment = Shared /usr/local/apps directory
path = /usr/local/apps
browsable = yes
writable = no
guest ok = yes
The [global] section contains settings for the Samba server. In this example, the server is assumed
to be a member of an Active Directory (AD) domain that is running in native mode. Samba relies on
tickets issued by the Kerberos server to authenticate clients who want to access local services.
For more information, see Section 21.3.2, About Samba Configuration for Windows Workgroups and
Domains.
The [printers] section specifies support for print services. The path parameter specifies the
location of a spooling directory that receives print jobs from Windows clients before submitting them to
the local print spooler. Samba advertises all locally configured printers on the server.
The [homes] section provide a personal share for each user in the smbusers group. The settings for
browsable and writable prevent other users from browsing home directories, while allowing full
access to valid users.
The [apps] section specifies a share named apps, which grants Windows users browsing and read-
only permission to the /usr/local/apps directory.
3. Allow incoming TCP connections to ports 139 and 445, and incoming UDP datagrams on ports 137 and
138 from the local network:
255
About Samba Configuration for Windows Workgroups and Domains
Add similar rules for other networks from which Samba clients can connect.
The nmdb daemon services NetBIOS Name Service requests on UDP port 137 and NetBIOS Datagram
Service requests on UDP port 138.
The smbd daemon services NetBIOS Session Service requests on TCP port 139 and Microsoft
Directory Service requests on TCP port 445.
4. Start the smb service, and configure the service to start following a system reboot:
If you change the /etc/samba/smb.conf file and any files that it references, the smb service will
reload its configuration automatically after a delay of up to one minute. You can force smb to reload its
configuration by sending a SIGHUP signal to the service daemon:
Making smb reload its configuration has no effect on established connections. You must restart the smb
service or the existing users of the service must disconnect and then reconnect.
For more information, see the smb.conf(5) and smbd(8) manual pages and http://www.samba.org/
samba/docs/.
Workgroups are usually only configured on networks that connect a small number of computers. A
workgroup environment is a peer-to-peer network where systems do not rely on each other for services
and there is no centralized management. User accounts, access control, and system resources are
configured independently on each system. Such systems can share resources only if configured to do so.
More typically, corporate networks configure domains to allow large numbers of networked systems to be
administered centrally. A domain is a group of trusted computers that share security and access control.
Systems known as domain controllers provides centralized management and security. Windows domains
are usually configured to use Active Directory (AD), which uses the Lightweight Directory Access Protocol
(LDAP) to implement versions of Kerberos and DNS providing authentication, access control to domain
resources, and name service. Some Windows domains use Windows NT4 security, which does not use
Kerberos to perform authentication.
A Samba server can be a member of an AD or NT4 security domain, but it cannot operate as a domain
controller. As domain member Samba server must authenticate itself with a domain controller and so is
controlled by the security rules of the domain. The domain controller authenticates clients, and the Samba
server controls access to printers and network shares.
256
About Samba Configuration for Windows Workgroups and Domains
The client provides only a password and not a user name to the server. Typically, each share is associated
with a valid users parameter and the server validates the password against the hashed passwords
stored in /etc/passwd, /etc/shadow, NIS, or LDAP for the listed users. Using share-level security is
discouraged in favor of user-level security, for example:
[global]
security = user
workgroup = workgroup_name
netbios name = netbios_name
In the user security model, a client must supply a valid user name and password. This model supports
encrypted passwords. If the server successfully validates the client's user name and password, the client
can mount multiple shares without being required to specify a password. Use the smbpasswd command to
create an entry for a user in the Samba password file, for example:
# smbpasswd -a guest
New SMB password: password
Retype new SMB password: password
Added user guest.
The user must already exist as a user on the system. If a user is permitted to log into the server, he or she
can use the smbpasswd command to change his or her password.
If a Windows user has a different user name from his or her user name on the Samba server, create a
mapping between the names in the /etc/samba/smbusers file, for example:
root = admin administrator root
nobody = guest nobody pcguest smbguest
eddie = ejones
fiona = fchau
The first entry on each line is the user name on the Samba server. The entries after the equals sign (=) are
the equivalent Windows user names.
Note
The server security model, where the Samba server relies on another server to authenticate user names
and passwords, is deprecated as it has numerous security and interoperability issues.
257
About Samba Configuration for Windows Workgroups and Domains
It might also be necessary to specify the password server explicitly if different servers support AD
services and Kerberos authentication:
password server = kerberos_server.your_domain
3. Create a Kerberos ticket for the Administrator account in the Kerberos domain, for example:
# kinit [email protected]
This command creates the Kerberos ticket that is required to join the server to the AD domain.
In this example, the AD server is winads.mydom.com and password is the password for the
Administrator account.
The command creates a machine account in Active Directory for the Samba server and allows it to join
the domain.
If the Samba server acts as a Primary or Backup Domain Controller, do not use
the domain security model. Configure the system as a standalone server that uses
the user security model instead. See Section 21.3.2.1, Configuring Samba as a
Standalone Server.
The domain security model is used with domains that implement Windows NT4 security. The Samba
server must have a machine account in the domain (a domain security trust account). Samba authenticates
user names and passwords with either a primary or a secondary domain controller.
1. On the primary domain controller, use the Server Manager to add a machine account for the Samba
server.
258
Accessing Samba Shares from a Windows Client
In this example, the primary domain controller is winpdc.mydom.com and password is the password
for the Administrator account.
5. Create an account for each user who is allowed access to shares or printers:
# useradd -s /sbin/nologin username
# passwd username
In this example, the account's login shell is set to /sbin/nologin to prevent direct logins.
If you enter \\server_name, Windows displays the directories and printers that the server is sharing. You
can also use the same syntax to map a network drive to a share name.
To be able to use the commands described in this section, use yum to install the
samba-client and cifs-utils packages.
You can use the findsmb command to query a subnet for Samba servers. The command displays the IP
address, NetBIOS name, workgroup, operating system and version for each server that it finds.
Alternatively, you can use the smbtree command, which is a text-based SMB network browser that
displays the hierarchy of known domains, servers in those domains, and shares on those servers.
The GNOME and KDE desktops provide browser-based file managers that you can use to view Windows
shares on the network. Enter smb: in the location bar of a file manager to browse network shares.
To connect to a Windows share from the command line, use the smbclient command:
$ smbclient //server_name/share_name [-U username]
After logging in, enter help at the smb:\> prompt to display a list of available commands.
where the credentials file contains settings for username, password, and domain, for example:
username=eddie
259
Accessing Samba Shares from an Oracle Linux Client
password=clydenw
domain=MYDOMWKG
Caution
If the Samba server is a domain member server in an AD domain and your current login session was
authenticated by the Kerberos server in the domain, you can use your existing session credentials by
specifying the sec=krb5 option instead of a credentials file:
# mount -t cifs //server_name/share_name mountpoint -o sec=krb5
For more information, see the findsmb(1), mount.cifs(8), smbclient(1), and smbtree(1)
manual pages.
260
Chapter 22 Oracle Cluster File System Version 2
Table of Contents
22.1 About OCFS2 ......................................................................................................................... 261
22.2 Installing and Configuring OCFS2 ............................................................................................ 262
22.2.1 Preparing a Cluster for OCFS2 ..................................................................................... 263
22.2.2 Configuring the Firewall ................................................................................................ 264
22.2.3 Configuring the Cluster Software .................................................................................. 264
22.2.4 Creating the Configuration File for the Cluster Stack ...................................................... 264
22.2.5 Configuring the Cluster Stack ....................................................................................... 267
22.2.6 Configuring the Kernel for Cluster Operation ................................................................. 268
22.2.7 Starting and Stopping the Cluster Stack ........................................................................ 269
22.2.8 Creating OCFS2 volumes ............................................................................................. 269
22.2.9 Mounting OCFS2 Volumes ........................................................................................... 271
22.2.10 Querying and Changing Volume Parameters ............................................................... 271
22.3 Troubleshooting OCFS2 .......................................................................................................... 272
22.3.1 Recommended Tools for Debugging ............................................................................. 272
22.3.2 Mounting the debugfs File System ................................................................................ 272
22.3.3 Configuring OCFS2 Tracing .......................................................................................... 272
22.3.4 Debugging File System Locks ....................................................................................... 273
22.3.5 Configuring the Behavior of Fenced Nodes ................................................................... 275
22.4 Use Cases for OCFS2 ............................................................................................................ 275
22.4.1 Load Balancing ............................................................................................................ 275
22.4.2 Oracle Real Application Cluster (RAC) .......................................................................... 275
22.4.3 Oracle Databases ........................................................................................................ 276
22.5 For More Information About OCFS2 ........................................................................................ 276
This chapter describes how to configure and use the Oracle Cluster File System Version 2 (OCFS2) file
system.
Although it might seem that there is no benefit in mounting ocfs2 locally as compared to alternative file
systems such as ext4 or btrfs, you can use the reflink command with OCFS2 to create copy-on-
write clones of individual files in a similar way to using the cp --reflink command with the btrfs file
system. Typically, such clones allow you to save disk space when storing multiple copies of very similar
files, such as VM images or Linux Containers. In addition, mounting a local OCFS2 file system allows you
to subsequently migrate it to a cluster file system without requiring any conversion. Note that when using
the reflink command, the resulting filesystem behaves like a clone of the original filesystem. This means
that their UUIDs are identical. When using reflink to create a clone, you must change the UUID using
the tunefs.ocfs2 command. See Section 22.2.10, Querying and Changing Volume Parameters for
more information.
Almost all applications can use OCFS2 as it provides local file-system semantics. Applications that are
cluster-aware can use cache-coherent parallel I/O from multiple cluster nodes to balance activity across
the cluster, or they can use of the available file-system functionality to fail over and run on another node in
the event that a node fails. The following examples typify some use cases for OCFS2:
261
Installing and Configuring OCFS2
Oracle VM and VirtualBox to allow Linux guest machines to share a file system.
OCFS2 has a large number of features that make it suitable for deployment in an enterprise-level
computing environment:
Support for ordered and write-back data journaling that provides file system consistency in the event of
power failure or system crash.
Block sizes ranging from 512 bytes to 4 KB, and file-system cluster sizes ranging from 4 KB to 1 MB
(both in increments of powers of 2). The maximum supported volume size is 16 TB, which corresponds
to a cluster size of 4 KB. A volume size as large as 4 PB is theoretically possible for a cluster size of 1
MB, although this limit has not been tested.
Optimized allocation support for sparse files, inline-data, unwritten extents, hole punching, reflinks, and
allocation reservation for high performance and efficient storage.
Indexing of directories to allow efficient access to a directory even if it contains millions of objects.
Extended attributes to allow an unlimited number of name:value pairs to be attached to file system
objects such as regular files, directories, and symbolic links.
Advanced security support for POSIX ACLs and SELinux in addition to the traditional file-access
permission model.
Support for heterogeneous clusters of nodes with a mixture of 32-bit and 64-bit, little-endian (x86,
x86_64, ia64) and big-endian (ppc64) architectures.
An easy-to-configure, in-kernel cluster-stack (O2CB) with a distributed lock manager (DLM), which
manages concurrent access from the cluster nodes.
A tool set that uses similar parameters to the ext3 file system.
Section 22.2.4, Creating the Configuration File for the Cluster Stack
262
Preparing a Cluster for OCFS2
Local heartbeat thread for each shared device. In this mode, a node starts a heartbeat thread when
it mounts an OCFS2 volume and stops the thread when it unmounts the volume. This is the default
heartbeat mode. There is a large CPU overhead on nodes that mount a large number of OCFS2
volumes as each mount requires a separate heartbeat thread. A large number of mounts also increases
the risk of a node fencing itself out of the cluster due to a heartbeat I/O timeout on a single mount.
Global heartbeat on specific shared devices. You can configure any OCFS2 volume as a global
heartbeat device provided that it occupies a whole disk device and not a partition. In this mode, the
heartbeat to the device starts when the cluster comes online and stops when the cluster goes offline.
This mode is recommended for clusters that mount a large number of OCFS2 volumes. A node fences
itself out of the cluster if a heartbeat I/O timeout occurs on more than half of the global heartbeat
devices. To provide redundancy against failure of one of the devices, you should therefore configure at
least three global heartbeat devices.
Figure 22.1 shows a cluster of four nodes connected via a network switch to a LAN and a network storage
server. The nodes and the storage server are also connected via a switch to a private network that they
use for the local cluster heartbeat.
263
Configuring the Firewall
It is possible to configure and use OCFS2 without using a private network but such a configuration
increases the probability of a node fencing itself out of the cluster due to an I/O heartbeat timeout.
To allow incoming TCP connections and UDP datagrams on port 7777 from the private network, use the
following commands:
# iptables -I INPUT -s subnet_addr/prefix_length -p tcp \
-m state --state NEW -m tcp --dport 7777 -j ACCEPT
# iptables -I INPUT -s subnet_addr/prefix_length -p udp \
-m udp --dport 7777 -j ACCEPT
# service iptables save
where subnet_addr/prefix_length specifies the network address of the private network, for example
10.0.1.0/24.
Use yum to install or upgrade the following packages to the same version on each node:
kernel-uek
ocfs2-tools
Note
If you want to use the global heartbeat feature, you must install ocfs2-
tools-1.8.0-11 or later.
For example, you would define a cluster named mycluster with four nodes as follows:
# o2cb add-cluster mycluster
The command creates the configuration file /etc/ocfs2/cluster.conf if it does not already exist.
2. For each node, use the following command to define the node.
# o2cb add-node cluster_name node_name --ip ip_address
264
Creating the Configuration File for the Cluster Stack
The name of the node must be same as the value of system's HOSTNAME that is configured in /etc/
sysconfig/network. The IP address is the one that the node will use for private communication in
the cluster.
For example, to define a node named node0 with the IP address 10.1.0.100 in the cluster mycluster:
3. If you want the cluster to use global heartbeat devices, use the following commands.
Note
You must configure global heartbeat to use whole disk devices. You cannot
configure a global heartbeat device on a disk partition.
For example, to use /dev/sdd, /dev/sdg, and /dev/sdj as global heartbeat devices:
4. Copy the cluster configuration file /etc/ocfs2/cluster.conf to each node in the cluster.
Note
Any changes that you make to the cluster configuration file do not take effect
until you restart the cluster stack.
The following sample configuration file /etc/ocfs2/cluster.conf defines a 4-node cluster named
mycluster with a local heartbeat.
node:
name = node0
cluster = mycluster
number = 0
ip_address = 10.1.0.100
ip_port = 7777
node:
name = node1
cluster = mycluster
number = 1
ip_address = 10.1.0.101
ip_port = 7777
node:
name = node2
cluster = mycluster
number = 2
ip_address = 10.1.0.102
ip_port = 7777
node:
name = node3
cluster = mycluster
265
Creating the Configuration File for the Cluster Stack
number = 3
ip_address = 10.1.0.103
ip_port = 7777
cluster:
name = mycluster
heartbeat_mode = local
node_count = 4
If you configure your cluster to use a global heartbeat, the file also include entries for the global heartbeat
devices.
node:
name = node0
cluster = mycluster
number = 0
ip_address = 10.1.0.100
ip_port = 7777
node:
name = node1
cluster = mycluster
number = 1
ip_address = 10.1.0.101
ip_port = 7777
node:
name = node2
cluster = mycluster
number = 2
ip_address = 10.1.0.102
ip_port = 7777
node:
name = node3
cluster = mycluster
number = 3
ip_address = 10.1.0.103
ip_port = 7777
cluster:
name = mycluster
heartbeat_mode = global
node_count = 4
heartbeat:
cluster = mycluster
region = 7DA5015346C245E6A41AA85E2E7EA3CF
heartbeat:
cluster = mycluster
region = 4F9FBB0D9B6341729F21A8891B9A05BD
heartbeat:
cluster = mycluster
region = B423C7EEE9FC426790FC411972C91CC3
The cluster heartbeat mode is now shown as global, and the heartbeat regions are represented by the
UUIDs of their block devices.
If you edit the configuration file manually, ensure that you use the following layout:
The cluster:, heartbeat:, and node: headings must start in the first column.
266
Configuring the Cluster Stack
A blank line must separate each section that defines the cluster, a heartbeat device, or a node.
The following table describes the values for which you are prompted.
Prompt Description
Load O2CB driver on boot (y/n) Whether the cluster stack driver should be loaded at boot
time. The default response is n.
Cluster stack backing O2CB The name of the cluster stack service. The default and
usual response is o2cb.
Cluster to start at boot (Enter Enter the name of your cluster that you defined in the
"none" to clear) cluster configuration file, /etc/ocfs2/cluster.conf.
Specify heartbeat dead The number of 2-second heartbeats that must elapse
threshold (>=7) without response before a node is considered dead. To
calculate the value to enter, divide the required threshold
time period by 2 and add 1. For example, to set the
threshold time period to 120 seconds, enter a value of 61.
The default value is 31, which corresponds to a threshold
time period of 60 seconds.
Note
Note
To verify the settings for the cluster stack, enter the service o2cb status command:
# service o2cb status
Driver for "configfs": Loaded
Filesystem "configfs": Mounted
Stack glue driver: Loaded
267
Configuring the Kernel for Cluster Operation
In this example, the cluster is online and is using local heartbeat mode. If no volumes have been
configured, the O2CB heartbeat is shown as Not active rather than Active.
The next example shows the command output for an online cluster that is using three global heartbeat
devices:
# service o2cb status
Driver for "configfs": Loaded
Filesystem "configfs": Mounted
Stack glue driver: Loaded
Stack plugin "o2cb": Loaded
Driver for "ocfs2_dlmfs": Loaded
Filesystem "ocfs2_dlmfs": Mounted
Checking O2CB cluster "mycluster": Online
Heartbeat dead threshold: 61
Network idle timeout: 30000
Network keepalive delay: 2000
Network reconnect delay: 2000
Heartbeat mode: Global
Checking O2CB heartbeat: Active
7DA5015346C245E6A41AA85E2E7EA3CF /dev/sdd
4F9FBB0D9B6341729F21A8891B9A05BD /dev/sdg
B423C7EEE9FC426790FC411972C91CC3 /dev/sdj
2. Configure the o2cb and ocfs2 services so that they start at boot time after networking is enabled:
# chkconfig o2cb on
# chkconfig ocfs2 on
These settings allow the node to mount OCFS2 volumes automatically when the system starts.
If the value is 0, the system hangs, which allows you to collect detailed information
about the panic for troubleshooting. This is the default value.
To enable automatic reset, set a non-zero value. If you require a memory image
(vmcore), allow enough time for Kdump to create this image. The suggested value is
30 seconds, although large systems will require a longer time.
panic_on_oops Specifies that a system must panic if a kernel oops occurs. If a kernel thread required
for cluster operation crashes, the system must reset itself. Otherwise, another node
might not be able to tell whether a node is slow to respond or unable to respond,
causing cluster operations to hang.
268
Starting and Stopping the Cluster Stack
On each node, enter the following commands to set the recommended values for panic and
panic_on_oops:
# sysctl kernel.panic = 30
# sysctl kernel.panic_on_oops = 1
To make the change persist across reboots, add the following entries to the /etc/sysctl.conf file:
Command Description
service o2cb status Check the status of the cluster stack.
service o2cb online Start the cluster stack.
service o2cb offline Stop the cluster stack.
service o2cb unload Unload the cluster stack.
269
Creating OCFS2 volumes
For example, create an OCFS2 volume on /dev/sdc1 labeled as myvol using all the default settings for
generic usage (4 KB block and cluster size, eight node slots, a 256 MB journal, and support for default file-
system features).
Create an OCFS2 volume on /dev/sdd2 labeled as dbvol for use with database files. In this case, the
cluster size is set to 128 KB and the journal size to 32 MB.
Create an OCFS2 volume on /dev/sde1 with a 16 KB cluster size, a 128 MB journal, 16 node slots, and
support enabled for all features except refcount trees.
270
Mounting OCFS2 Volumes
Note
Do not create an OCFS2 volume on an LVM logical volume. LVM is not cluster-
aware.
You cannot change the block and cluster size of an OCFS2 volume after it
has been created. You can use the tunefs.ocfs2 command to modify other
settings for the file system with certain restrictions. For more information, see the
tunefs.ocfs2(8) manual page.
If you intend the volume to store database files, do not specify a cluster size that is
smaller than the block size of the database.
The default cluster size of 4 KB is not suitable if the file system is larger than a few
gigabytes. The following table suggests minimum cluster size settings for different
file system size ranges:
Note
The file system will not mount unless you have enabled the o2cb and ocfs2
services to start after networking is started. See Section 22.2.5, Configuring the
Cluster Stack.
# tunefs.ocfs2 -U /dev/sda
271
Troubleshooting OCFS2
If you want to capture the DLM's network traffic between the nodes, you can use tcpdump. For example, to
capture TCP traffic on port 7777 for the private network interface eth1, you could use a command such as
the following:
You can use the debugfs.ocfs2 command, which is similar in behavior to the debugfs command for
the ext3 file system, and allows you to trace events in the OCFS2 driver, determine lock statuses, walk
directory structures, examine inodes, and so on.
The o2image command saves an OCFS2 file system's metadata (including information about inodes,
file names, and directory names) to an image file on another file system. As the image file contains only
metadata, it is much smaller than the original file system. You can use debugfs.ocfs2 to open the image
file, and analyze the file system layout to determine the cause of a file system corruption or performance
problem.
For example, the following command creates the image /tmp/sda2.img from the OCFS2 file system on
the device /dev/sda2:
To mount the debugfs file system, add the following line to /etc/fstab:
272
Debugging File System Locks
Command Description
debugfs.ocfs2 -l List all trace bits and their statuses.
debugfs.ocfs2 -l SUPER allow Enable tracing for the superblock.
debugfs.ocfs2 -l SUPER off Disable tracing for the superblock.
debugfs.ocfs2 -l SUPER deny Disallow tracing for the superblock, even if implicitly
enabled by another tracing mode setting.
debugfs.ocfs2 -l HEARTBEAT \ Enable heartbeat tracing.
One method for obtaining a trace its to enable the trace, sleep for a short while, and then disable the trace.
As shown in the following example, to avoid seeing unnecessary output, you should reset the trace bits to
their default settings after you have finished.
# debugfs.ocfs2 -l ENTRY EXIT NAMEI INODE allow && sleep 10 && \
debugfs.ocfs2 -l ENTRY EXIT deny NAMEI INODE off
To limit the amount of information displayed, enable only the trace bits that you believe are relevant to
understanding the problem.
If you believe a specific file system command, such as mv, is causing an error, the following example
shows the commands that you can use to help you trace the error.
# debugfs.ocfs2 -l ENTRY EXIT NAMEI INODE allow
# mv source destination & CMD_PID=$(jobs -p %-)
# echo $CMD_PID
# debugfs.ocfs2 -l ENTRY EXIT deny NAMEI INODE off
As the trace is enabled for all mounted OCFS2 volumes, knowing the correct process ID can help you to
interpret the trace.
273
Debugging File System Locks
2. Dump the lock statuses for the file system device (/dev/sdx1 in this example).
# echo "fs_locks" | debugfs.ocfs2 /dev/sdx1 >/tmp/fslocks 62
Lockres: M00000000000006672078b84822 Mode: Protected Read
Flags: Initialized Attached
RO Holders: 0 EX Holders: 0
Pending Action: None Pending Unlock Action: None
Requested Mode: Protected Read Blocking Mode: Invalid
The Lockres field is the lock name used by the DLM. The lock name is a combination of a lock-type
identifier, an inode number, and a generation number. The following table shows the possible lock
types.
3. Use the Lockres value to obtain the inode number and generation number for the lock.
# echo "stat <M00000000000006672078b84822>" | debugfs.ocfs2 -n /dev/sdx1
Inode: 419616 Mode: 0666 Generation: 2025343010 (0x78b84822)
...
4. Determine the file system object to which the inode number relates by using the following command.
# echo "locate <419616>" | debugfs.ocfs2 -n /dev/sdx1
419616 /linux-2.6.15/arch/i386/kernel/semaphore.c
5. Obtain the lock names that are associated with the file system object.
# echo "encode /linux-2.6.15/arch/i386/kernel/semaphore.c" | \
debugfs.ocfs2 -n /dev/sdx1
M00000000000006672078b84822 D00000000000006672078b84822 W00000000000006672078b84822
In this example, a metadata lock, a file data lock, and a read-write lock are associated with the file
system object.
7. Use the values of the DLM domain and the lock name with the following command, which enables
debugging for the DLM.
# echo R 82DA8137A49A47E4B187F74E09FBBB4B \
M00000000000006672078b84822 > /proc/fs/ocfs2_dlm/debug
274
Configuring the Behavior of Fenced Nodes
The DLM supports 3 lock modes: no lock (type=0), protected read (type=3), and exclusive (type=5).
In this example, the lock is mastered by node 1 (owner=1) and node 3 has been granted a protected-
read lock on the file-system resource.
9. Run the following command, and look for processes that are in an uninterruptable sleep state as shown
by the D flag in the STAT column.
# ps -e -o pid,stat,comm,wchan=WIDE-WCHAN-COLUMN
At least one of the processes that are in the uninterruptable sleep state will be responsible for the hang
on the other node.
If a process is waiting for I/O to complete, the problem could be anywhere in the I/O subsystem from
the block device layer through the drivers to the disk array. If the hang concerns a user lock (flock()),
the problem could lie in the application. If possible, kill the holder of the lock. If the hang is due to lack of
memory or fragmented memory, you can free up memory by killing non-essential processes. The most
immediate solution is to reset the node that is holding the lock. The DLM recovery process can then clear
all the locks that the dead node owned, so letting the cluster continue to operate.
where cluster_name is the name of the cluster. To set the value after each reboot of the system, add
this line to /etc/rc.local. To restore the default behavior, use the value reset instead of panic.
275
Oracle Databases
As both CSS and O2CB use the lowest node number as a tie breaker in quorum calculations, you should
ensure that the node numbers are the same in both clusters. If necessary, edit the O2CB configuration file
/etc/ocfs2/cluster.conf to make the node numbering consistent, and update this file on all nodes.
The change takes effect when the cluster is restarted.
Specify the nointr mount option to prevent signals interrupting I/O transactions that are in progress.
By default, the init.ora parameter filesystemio_options directs the database to perform direct I/O
to the Oracle datafiles, control files, and redo logs. You should also specify the datavolume mount option
for the volumes that contain the voting disk and OCR. Do not specify this option for volumes that host the
Oracle user's home directory or Oracle E-Business Suite.
To avoid database blocks becoming fragmented across a disk, ensure that the file system cluster size is at
least as big as the database block size, which is typically 8KB. If you specify the file system usage type as
datafiles to the mkfs.ocfs2 command, the file system cluster size is set to 128KB.
To allow multiple nodes to maximize throughput by concurrently streaming data to an Oracle datafile,
OCFS2 deviates from the POSIX standard by not updating the modification time (mtime) on the disk when
performing non-extending direct I/O writes. The value of mtime is updated in memory, but OCFS2 does
not write the value to disk unless an application extends or truncates the file, or performs a operation to
change the file metadata, such as using the touch command. This behavior leads to results in different
nodes reporting different time stamps for the same file. You can use the following command to view the on-
disk timestamp of a file:
# debugfs.ocfs2 -R "stat /file_path" device | grep "mtime:"
276
Part IV Authentication and Security
This section contains the following chapters:
Chapter 23, Authentication Configuration describes how to configure various authentication methods that Oracle
Linux can use, including NIS, LDAP, Kerberos, and Winbind, and how you can configure the System Security
Services Daemon feature to provide centralized identity and authentication management.
Chapter 24, Local Account Configuration describes how to configure and manage local user and group accounts.
Chapter 25, System Security Administration describes the subsystems that you can use to administer system
security, including SELinux, the Netfilter firewall, TCP Wrappers, chroot jails, auditing, system logging, and process
accounting.
Chapter 26, OpenSSH Configuration describes how to configure OpenSSH to support secure communication
between networked systems.
Table of Contents
23 Authentication Configuration ....................................................................................................... 281
23.1 About Authentication ....................................................................................................... 281
23.2 About Local Oracle Linux Authentication .......................................................................... 282
23.2.1 Configuring Local Access ..................................................................................... 283
23.2.2 Configuring Fingerprint Reader Authentication ....................................................... 285
23.2.3 Configuring Smart Card Authentication .................................................................. 285
23.3 About IPA ....................................................................................................................... 286
23.3.1 Configuring IPA .................................................................................................... 286
23.4 About LDAP Authentication ............................................................................................. 286
23.4.1 About LDAP Data Interchange Format .................................................................. 287
23.4.2 Configuring an LDAP Server ................................................................................. 287
23.4.3 Replacing the Default Certificates ......................................................................... 290
23.4.4 Creating and Distributing Self-signed CA Certificates ............................................. 291
23.4.5 Initializing an Organization in LDAP ...................................................................... 294
23.4.6 Adding an Automount Map to LDAP ..................................................................... 295
23.4.7 Adding a Group to LDAP ...................................................................................... 295
23.4.8 Adding a User to LDAP ........................................................................................ 296
23.4.9 Adding Users to a Group in LDAP ........................................................................ 298
23.4.10 Enabling LDAP Authentication ............................................................................ 299
23.5 About NIS Authentication ................................................................................................ 303
23.5.1 About NIS Maps .................................................................................................. 304
23.5.2 Configuring an NIS Server .................................................................................... 304
23.5.3 Adding User Accounts to NIS ............................................................................... 308
23.5.4 Enabling NIS Authentication ................................................................................. 309
23.6 About Kerberos Authentication ........................................................................................ 311
23.6.1 Configuring a Kerberos Server .............................................................................. 314
23.6.2 Configuring a Kerberos Client ............................................................................... 316
23.6.3 Enabling Kerberos Authentication .......................................................................... 317
23.7 About Pluggable Authentication Modules .......................................................................... 320
23.7.1 Configuring Pluggable Authentication Modules ....................................................... 320
23.8 About the System Security Services Daemon ................................................................... 321
23.8.1 Configuring an SSSD Server ................................................................................ 322
23.9 About Winbind Authentication .......................................................................................... 324
23.9.1 Enabling Winbind Authentication ........................................................................... 324
24 Local Account Configuration ....................................................................................................... 327
24.1 About User and Group Configuration ............................................................................... 327
24.2 Changing Default Settings for User Accounts ................................................................... 328
24.3 Creating User Accounts .................................................................................................. 328
24.3.1 About umask and the setgid and Restricted Deletion Bits ....................................... 329
24.4 Locking an Account ........................................................................................................ 329
24.5 Modifying or Deleting User Accounts ............................................................................... 329
24.6 Creating Groups ............................................................................................................. 330
24.7 Modifying or Deleting Groups .......................................................................................... 330
24.8 Configuring Password Ageing .......................................................................................... 330
24.9 Granting sudo Access to Users ....................................................................................... 331
25 System Security Administration .................................................................................................. 333
25.1 About System Security .................................................................................................... 333
25.2 Configuring and Using SELinux ....................................................................................... 334
25.2.1 About SELinux Administration ............................................................................... 335
25.2.2 About SELinux Modes .......................................................................................... 337
25.2.3 Setting SELinux Modes ........................................................................................ 337
279
25.2.4 About SELinux Policies ........................................................................................ 337
25.2.5 About SELinux Context ........................................................................................ 339
25.2.6 About SELinux Users ........................................................................................... 341
25.2.7 Troubleshooting Access-Denial Messages ............................................................. 342
25.3 About Packet-filtering Firewalls ........................................................................................ 343
25.3.1 Controlling the Firewall Service ............................................................................. 345
25.3.2 Listing Firewall Rules ........................................................................................... 345
25.3.3 Inserting and Replacing Rules in a Chain .............................................................. 346
25.3.4 Deleting Rules in a Chain ..................................................................................... 347
25.3.5 Saving Rules ....................................................................................................... 347
25.4 About TCP Wrappers ...................................................................................................... 347
25.5 About chroot Jails ........................................................................................................... 349
25.5.1 Running DNS and FTP Services in a Chroot Jail ................................................... 349
25.5.2 Creating a Chroot Jail .......................................................................................... 349
25.5.3 Using a Chroot Jail .............................................................................................. 350
25.6 About Auditing ................................................................................................................ 350
25.7 About System Logging .................................................................................................... 351
25.7.1 Configuring Logwatch ........................................................................................... 354
25.8 About Process Accounting .............................................................................................. 355
25.9 Security Guidelines ......................................................................................................... 355
25.9.1 Minimizing the Software Footprint ......................................................................... 355
25.9.2 Configuring System Logging ................................................................................. 357
25.9.3 Disabling Core Dumps ......................................................................................... 357
25.9.4 Minimizing Active Services ................................................................................... 357
25.9.5 Locking Down Network Services ........................................................................... 360
25.9.6 Configuring a Packet-filtering Firewall .................................................................... 361
25.9.7 Configuring TCP Wrappers ................................................................................... 361
25.9.8 Configuring Kernel Parameters ............................................................................. 361
25.9.9 Restricting Access to SSH Connections ................................................................ 362
25.9.10 Configuring File System Mounts, File Permissions, and File Ownerships ................ 362
25.9.11 Checking User Accounts and Privileges .............................................................. 364
26 OpenSSH Configuration ............................................................................................................. 367
26.1 About OpenSSH ............................................................................................................. 367
26.2 OpenSSH Configuration Files .......................................................................................... 367
26.2.1 OpenSSH User Configuration Files ....................................................................... 368
26.3 Configuring an OpenSSH Server ..................................................................................... 369
26.4 Installing the OpenSSH Client Packages .......................................................................... 369
26.5 Using the OpenSSH Utilities ............................................................................................ 369
26.5.1 Using ssh to Connect to Another System .............................................................. 370
26.5.2 Using scp and sftp to Copy Files Between Systems ............................................... 371
26.5.3 Using ssh-keygen to Generate Pairs of Authentication Keys ................................... 372
26.5.4 Enabling Remote System Access Without Requiring a Password ............................ 372
280
Chapter 23 Authentication Configuration
Table of Contents
23.1 About Authentication ............................................................................................................... 281
23.2 About Local Oracle Linux Authentication .................................................................................. 282
23.2.1 Configuring Local Access ............................................................................................. 283
23.2.2 Configuring Fingerprint Reader Authentication ............................................................... 285
23.2.3 Configuring Smart Card Authentication .......................................................................... 285
23.3 About IPA ............................................................................................................................... 286
23.3.1 Configuring IPA ............................................................................................................ 286
23.4 About LDAP Authentication ..................................................................................................... 286
23.4.1 About LDAP Data Interchange Format .......................................................................... 287
23.4.2 Configuring an LDAP Server ......................................................................................... 287
23.4.3 Replacing the Default Certificates ................................................................................. 290
23.4.4 Creating and Distributing Self-signed CA Certificates ..................................................... 291
23.4.5 Initializing an Organization in LDAP .............................................................................. 294
23.4.6 Adding an Automount Map to LDAP ............................................................................. 295
23.4.7 Adding a Group to LDAP .............................................................................................. 295
23.4.8 Adding a User to LDAP ................................................................................................ 296
23.4.9 Adding Users to a Group in LDAP ................................................................................ 298
23.4.10 Enabling LDAP Authentication .................................................................................... 299
23.5 About NIS Authentication ........................................................................................................ 303
23.5.1 About NIS Maps .......................................................................................................... 304
23.5.2 Configuring an NIS Server ............................................................................................ 304
23.5.3 Adding User Accounts to NIS ....................................................................................... 308
23.5.4 Enabling NIS Authentication ......................................................................................... 309
23.6 About Kerberos Authentication ................................................................................................ 311
23.6.1 Configuring a Kerberos Server ...................................................................................... 314
23.6.2 Configuring a Kerberos Client ....................................................................................... 316
23.6.3 Enabling Kerberos Authentication ................................................................................. 317
23.7 About Pluggable Authentication Modules ................................................................................. 320
23.7.1 Configuring Pluggable Authentication Modules ............................................................... 320
23.8 About the System Security Services Daemon ........................................................................... 321
23.8.1 Configuring an SSSD Server ........................................................................................ 322
23.9 About Winbind Authentication .................................................................................................. 324
23.9.1 Enabling Winbind Authentication ................................................................................... 324
This chapter describes how to configure various authentication methods that Oracle Linux can use,
including NIS, LDAP, Kerberos, and Winbind, and how you can configure the System Security Services
Daemon feature to provide centralized identity and authentication management.
The information that verifies a user's identity can either be located on the local system in the /etc/
passwd and /etc/shadow files, or on remote systems using Identity Policy Audit (IPA), the Lightweight
Directory Access Protocol (LDAP), the Network Information Service (NIS), or Winbind. In addition, IPSv2,
281
About Local Oracle Linux Authentication
LDAP, and NIS data files can use the Kerberos authentication protocol, which allows nodes communicating
over a non-secure network to prove their identity to one another in a secure manner.
You can use the Authentication Configuration GUI (system-config-authentication) to select the
authentication mechanism and to configure any associated authentication options. Alternatively, you can
use the authconfig command. Both the Authentication Configuration GUI and authconfig adjust
settings in the PAM configuration files that are located in the /etc/pam.d directory.
Figure 23.1 shows the Authentication Configuration GUI with Local accounts only selected.
The /etc/passwd file stores account information for each user such as his or her unique user ID (or UID,
which is an integer), user name, home directory, and login shell. A user logs in using his or her user name,
but the operating system uses the associated UID. When the user logs in, he or she is placed in his or her
home directory and his or her login shell runs.
The /etc/group file stores information about groups of users. A user also belongs to one or more
groups, and each group can contain one or more users. If you can grant access privileges to a group, all
282
Configuring Local Access
members of the group receive the same access privileges. Each group account has a unique group ID
(GID, again an integer) and an associated group name.
By default, Oracle Linux implements the user private group (UPG) scheme where adding a user account
also creates a corresponding UPG with the same name as the user, and of which the user is the only
member.
Only the root user can add, modify, or delete user and group accounts. By default, both users and groups
use shadow passwords, which are cryptographically hashed and stored in /etc/shadow and /etc/
gshadow respectively. These shadow password files are readable only by the root user. root can set a
group password that a user must enter to become a member of the group by using the newgrp command.
If a group does not have a password, a user can only join the group by root adding him or her as a
member.
The /etc/login.defs file defines parameters for password aging and related security policies.
For more information about the content of these files, see the group(5), gshadow(5), login.defs(5),
passwd(5), and shadow(5) manual pages.
To enable local access control, select the Enable local access control check box on the Advanced
Options tab of the Authentication Configuration GUI (system-config-authentication). The system
can then read the /etc/security/access.conf file for local user authorization rules that specify login
combinations that the system accepts or refuses.
Figure 23.2 shows the Authentication Configuration GUI with the Advanced Options tab selected.
283
Configuring Local Access
where:
users Specifies a space-separated list of user or group names or ALL for any user or group.
Enclose group names in parentheses to distinguish them from user names. You can use
the EXCEPT operator to exclude a list of users from the rule.
origins Specifies a space-separated list of host names, fully qualified domain names, network
addresses, terminal device names, ALL, or NONE. You can use the EXCEPT operator to
exclude a list of origins from the rule.
For example, the following rule denies login access by anyone except root from the network
192.168.2.0/24:
- : ALL except root : 192.168.2.0/24
284
Configuring Fingerprint Reader Authentication
For more information, see the access.conf(5) manual page and Chapter 24, Local Account
Configuration.
To enable fingerprint reader support, select the Enable fingerprint reader support check box on the
Advanced Options tab of the Authentication Configuration GUI (system-config-authentication).
2. Use the following command to install the root CA certificates in the NSS database:
# certutil -A -d /etc/pki/nssdb -t "TC,C,C" -n "Root CA certificates" -i CACert.pem
4. On the Advanced Options tab, select the Enable smart card support check box.
5. If you want to disable all other login authentication methods, select the Require smart card for login
check box.
Caution
Do not select this option until you have tested that can use a smart card to
authenticate with the system.
6. From the Card removal action menu, select the system's response if a user removes a smart card
while logged in to a session:
Ignore The system ignores card removal for the current session.
You can also use the following command to configure smart card authentication:
# authconfig --enablesmartcard --update
To specify the system's response if a user removes a smart card while logged in to a session:
285
About IPA
Specify a value of 0 to --smartcardaction to lock the system if a card is removed. To ignore card
removal, use a value of 1.
Once you have tested that you can use a smart card to authenticate with the system, you can disable all
other login authentication methods.
# authconfig --enablerequiresmartcard --update
If you use the Authentication Configuration GUI and select IPA v2 as the user account database, you are
prompted to enter the names of the IPA domain, realm, and server. You can also select to configure NTP
so that the system time is consistent with the IPA server. If you have initialized Kerberos, you can click
Join Domain to create a machine account on the IPA server and grant permission to join the domain.
Database entries are arranged in a hierarchical tree-like structure, where each directory can store
information such as names, addresses, telephone numbers, network service information, printer
information, and many other types of structured data. Systems can use LDAP for authentication, which
allows users to access their accounts from any machine on a network.
The smallest unit of information in an LDAP directory is an entry, which can have one or more attributes.
Each attribute of an entry has a name (also known as an attribute type or attribute description) and one
or more values. Examples of types are domain component (dc), common name (cn), organizational unit
(ou) and email address (mail). The objectClass attribute allows you to specify whether an attribute
is required or optional. An objectClass attribute's value specifies the schema rules that an entry must
obey.
A distinguished name (dn) uniquely identifies an entry in LDAP. The distinguished name consists of the
name of the entry (the relative distinguished name or RDN) concatenated with the names of its ancestor
entries in the LDAP directory hierarchy. For example, the distinguished name of a user with the RDN
uid=arc815 might be uid=arc815,ou=staff,dc=mydom,dc=com.
286
About LDAP Data Interchange Format
givenName: John
sn: Beck
uid: arc815
uidNumber: 5159
gidNumber: 626
homeDirectory: /nethome/arc815
loginShell: /bin/bash
mail: [email protected]
objectClass: top
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
userPassword: {SSHA}QYrFtKkqOrifgk8H4EYf68B0JxIIaLga
The optional id number is determined by the application that you use to edit the entry. Each attribute type
for an entry contains either a value or a comma-separated list of attribute and value pairs as defined in the
LDAP directory schema.
There must be a blank line between each dn definition section or include: line. There must not be any
other blank lines or any white space at the ends of lines. White space at the start of a line indicates a
continuation of the previous line.
287
Configuring an LDAP Server
Note
2. If you want configure slapd to listen on port 636 for connections over an SSL tunnel (ldaps://), edit
/etc/sysconfig/ldap, and change the value of SLAPD_LDAPS to yes:
SLAPD_LDAPS=yes
If required, you can prevent slapd listening on port 389 for ldap:// connections, by changing the
value of SLAPD_LDAP to no:
SLAPD_LDAP=no
3. Allow incoming TCP connections on port 389 from the local network:
# iptables -I INPUT -s subnet_addr/prefix_length -p tcp \
-m state --state NEW -m tcp -dport 389 -j ACCEPT
# service iptables save
The primary TCP port for LDAP is 389. If you configure LDAP to use an SSL tunnel (ldaps), substitute
the port number that the tunnel uses, which is usually 636, for example:
# iptables -I INPUT -s subnet_addr/prefix_length -p tcp \
-m state --state NEW -m tcp --dport 636 -j ACCEPT
# service iptables save
Add similar rules for other networks from which LDAP clients can connect.
4. Change the user and group ownership of /var/lib/ldap and any files that it contains to ldap:
# cd /var/lib/ldap
# chown ldap:ldap ./*
5. Start the slapd service and configure it to start following system reboots:
# service slapd start
# chkconfig slapd on
6. Generate a hash of the LDAP password that you will use with the olcRootPW entry in the configuration
file for your domain database, for example:
# slappasswd -h {SSHA}
New password: password
Re-enter new password: password
{SSHA}lkMShz73MZBic19Q4pfOaXNxpLN3wLRy
7. Create an LDIF file with a name such as config-mydom-com.ldif that contains configuration
entries for your domain database based on the following example:
# Load the schema files required for accounts
288
Configuring an LDAP Server
include file:///etc/ldap/schema/cosine.ldif
include file:///etc/ldap/schema/nis.ldif
include file:///etc/ldap/schema/inetorgperson.ldif
Note
This configuration file allows you to reconfigure slapd while it is running. If you
use a slapd.conf configuration file, you can also update slapd dynamically,
but such changes do not persist if you restart the server.
289
Replacing the Default Certificates
For more information about configuring OpenLDAP, see the slapadd(8C), slapd(8C), slapd-
config(5), and slappasswd(8C) manual pages, the OpenLDAP Administrators Guide (/usr/share/
doc/openldap-servers-version/guide.html), and the latest OpenLDAP documentation at http://
www.openldap.org/doc/.
Once you have a server certificate, its corresponding private key file, and a root CA certificate, you can
replace the default certificates that are installed in /etc/openldap/certs.
To display the existing certificate entries that slapd uses with TLS, use the ldapsearch command:
1. Create an LDIF file that defines how to modify the attributes, for example:
dn: cn=config
changetype: modify
delete: olcTLSCACertificatePath
dn: cn=config
changetype: modify
replace: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ssl/certs/server-cert.pem
dn: cn=config
changetype: modify
replace: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ssl/certs/server-key.pem
dn: cn=config
changetype: modify
add: olcTLSCipherSuite
olcTLSCipherSuite: TLSv1+RSA:!NULL
dn: cn=config
changetype: modify
add: olcTLSVerifyClient
olcTLSVerifyClient: never
290
Creating and Distributing Self-signed CA Certificates
If you generate only a self-signed certificate and its corresponding key file, you do not need to specify a
root CA certificate.
For more information, see the ldapmodify(1), ldapsearch(1) and openssl(1) manual pages.
Create a self-signed root CA certificate and private key file, and use the CA certificate and its key file to
sign a separate server certificate for each server.
The following procedure describes how to use openssl to create a self-signed CA certificate and private
key file, and then use these files to sign server certificates.
291
Creating and Distributing Self-signed CA Certificates
e is 65537 (0x10001)
Note
If you intend to generate server certificates for several servers, name the
certificate, its key file, and the certificate request so that you can easily
identify both the server and the service, for example, ldap_host02-
cert.pem, ldap_host02-key.pem, and ldap_host02-cert.csr.
b. Change the mode on the key file to 0400, and change its user and group ownership to ldap:
# chmod 0400 server-key.pem
# chown ldap:ldap server-key.pem
292
Creating and Distributing Self-signed CA Certificates
Note
For the Common Name, specify the Fully Qualified Domain Name (FQDN)
of the server. If the FQDN of the server does not match the common name
specified in the certificate, clients cannot obtain a connection to the server.
d. Use the CA certificate and its corresponding key file to sign the certificate request and generate the
server certificate:
# openssl x509 -req -days 1095 -CAcreateserial \
-in server-cert.csr -CA CAcert.pem -CAkey CAcert-key.pem \
-out server-cert.pem
Signature ok
subject=/C=US/ST=California/L=Redwood City/O=Mydom
Inc/OU=Org/CN=ldap.mydom.com/[email protected]
Getting CA Private Key
7. If you generate server certificates for other LDAP servers, copy the appropriate server certificate, its
corresponding key file, and the CA certificate to /etc/openldap/certs on those servers.
8. Set up a web server to host the CA certificate for access by clients. The following steps assume that
the LDAP server performs this function. You can use any suitable, alternative server instead.
Caution
d. Edit the HTTP server configuration file, /etc/httpd/conf/httpd.conf, and specify the
resolvable domain name of the server in the argument to ServerName.
ServerName server_addr:80
293
Initializing an Organization in LDAP
If the server does not have a resolvable domain name, enter its IP address instead.
Verify that the setting of the Options directive in the <Directory "/var/www/html"> section
specifies Indexes and FollowSymLinks to allow you to browse the directory hierarchy, for
example:
Options Indexes FollowSymLinks
e. Start the Apache HTTP server, and configure it to start after a reboot.
# service httpd start
# chkconfig httpd on
f. If you have enabled a firewall on your system, configure it to allow incoming HTTP connection
requests on TCP port 80.
For example, the following command configures iptables to allow incoming HTTP connection
requests and saves the change to the firewall configuration:
# iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
# service iptables save
1. Create an LDIF file that defines the organization, for example mydom-com-organization.ldif:
# Organization mydom.com
dn: dc=mydom,dc=com
dc: mydom
objectclass: dcObject
objectclass: organizationalUnit
ou: mydom.com
# Users
dn: ou=People,dc=mydom,dc=com
objectClass: organizationalUnit
ou: people
# Groups
dn: ou=Groups,dc=mydom,dc=com
objectClass: organizationalUnit
ou: groups
2. If you have configured LDAP authentication, use the ldapadd command to add the organization to
LDAP:
# ldapadd -cxWD "cn=admin,dc=mydom,dc=com" -f mydom-com-organization.ldif
Enter LDAP Password: admin_password
adding new entry "dc=mydom,dc=com"
If you have configured Kerberos authentication, use kinit to obtain a ticket granting ticket (TGT) for
the admin principal, and use this form of the ldapadd command:
294
Adding an Automount Map to LDAP
# ldapadd -f mydom-com-organization.ldif
1. Create an LDIF file that defines entries for the map's name and its contents, for example auto-
home.ldif:
dn: nisMapName=auto.home,dc=mydom,dc=com
objectClass: top
objectClass: nisMap
nisMapName: auto.home
dn: cn=*,nisMapName=auto.home,dc=mydom,dc=com
objectClass: nisObject
cn: *
nisMapEntry: -rw,sync nfssvr:/nethome/&
nisMapName: auto.home
where nfssvr is the host name or IP address of the NFS server that exports the users' home
directories.
2. If you have configured LDAP authentication, use the following command to add the map to LDAP:
# ldapadd -xcWD "cn=admin,dc=mydom,dc=com" \
-f auto-home.ldif
Enter LDAP Password: user_password
adding new entry "nisMapName=auto.home,dc=mydom,dc=com"
If you have configured Kerberos authentication, use kinit to obtain a ticket granting ticket (TGT) for
the admin principal, and use this form of the command:
# ldapmodify -f auto-home.ldif
dn: cn=*,nisMapName=auto.home,dc=mydom,dc=com
objectClass: nisObject
cn: *
nisMapEntry: -rw,sync nfssvr.mydom.com:/nethome/&
nisMapName: auto.home
295
Adding a User to LDAP
1. Create an LDIF file that defines the group, for example employees-group.ldif:
# Group employees
dn: cn=employees,ou=Groups,dc=mydom,dc=com
cn: employees
gidNumber: 626
objectClass: top
objectclass: posixGroup
2. If you have configured LDAP authentication, use the following command to add the group to LDAP:
# ldapadd -cxWD "cn=admin,dc=mydom,dc=com" -f employees-group.ldif
Enter LDAP Password: admin_password
adding new entry "cn=employees,ou=Groups,dc=mydom,dc=com"
If you have configured Kerberos authentication, use kinit to obtain a ticket granting ticket (TGT) for
the admin principal, and use this form of the ldapadd command:
# ldapadd -f employees-group.ldif
For more information, see the ldapadd(1) and ldapsearch(1) manual pages.
The LDAP server uses NFS to export the users' home directories. See
Section 21.2.2, Mounting an NFS File System
1. If the LDAP server does not already export the base directory of the users' home directories, perform
the following steps on the LDAP server:
a. Create the base directory for user directories, for example /nethome:
# mkdir /nethome
You might prefer to restrict which clients can mount the file system. For example, the following entry
allows only clients in the 192.168.1.0/24 subnet to mount /nethome:
/nethome 192.168.1.0/24(rw,sync)
296
Adding a User to LDAP
For example:
# useradd -b /nethome -s /sbin/nologin -u 5159 -U arc815
The command updates the /etc/passwd file and creates a home directory under /nethome on the
LDAP server.
The user's login shell will be overridden by the LoginShell value set in LDAP.
3. Use the id command to list the user and group IDs that have been assigned to the user, for example:
# id arc815
uid=5159(arc815) gid=5159(arc815) groups=5159(arc815)
4. Create an LDIF file that defines the user, for example arc815-user.ldif:
# UPG arc815
dn: cn=arc815,ou=Groups,dc=mydom,dc=com
cn: arc815
gidNumber: 5159
objectclass: top
objectclass: posixGroup
# User arc815
dn: uid=arc815,ou=People,dc=mydom,dc=com
cn: John Beck
givenName: John
sn: Beck
uid: arc815
uidNumber: 5159
gidNumber: 5159
homeDirectory: /nethome/arc815
loginShell: /bin/bash
mail: [email protected]
objectClass: top
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
userPassword: {SSHA}x
In this example, the user belongs to a user private group (UPG), which is defined in the same file.
The users login shell attribute LoginShell is set to /bin/bash. The user's password attribute
userPassword is set to a placeholder value. If you use Kerberos authentication with LDAP, this
attribute is not used.
5. If you have configured LDAP authentication, use the following command to add the user to LDAP:
# ldapadd -cxWD cn=admin,dc=mydom,dc=com -f arc815-user.ldif
Enter LDAP Password: admin_password
adding new entry "cn=arc815,ou=Groups,dc=mydom,dc=com"
If you have configured Kerberos authentication, use kinit to obtain a ticket granting ticket (TGT) for
the admin principal, and use this form of the ldapadd command:
# ldapadd -f arc815-user.ldif
297
Adding Users to a Group in LDAP
6. Verify that you can locate the user and his or her UPG in LDAP:
dn: uid=arc815,ou=People,dc=mydom,dc=com
cn: John Beck
givenName: John
sn: Beck
uid: arc815
uidNumber: 5159
gidNumber: 5159
homeDirectory: /home/arc815
loginShell: /bin/bash
mail: [email protected]
objectClass: top
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
7. If you have configured LDAP authentication, set the user password in LDAP:
If you have configured Kerberos authentication, use kinit to obtain a ticket granting ticket (TGT) for
the admin principal, and use the kadmin command to add the user (principal) and password to the
database for the Kerberos domain, for example:
For more information, see the kadmin(1), ldapadd(1), ldappasswd(1), and ldapsearch(1)
manual pages.
1. Create an LDIF file that defines the users that should be added to the memberuid attribute for the
group, for example employees-add-users.ldif:
dn: cn=employees,ou=Groups,dc=mydom,dc=com
changetype: modify
add: memberUid
memberUid: arc815
dn: cn=employees,ou=Groups,dc=mydom,dc=com
changetype: modify
add: memberUid
memberUid: arc891
...
2. If you have configured LDAP authentication, use the following command to add the group to LDAP:
298
Enabling LDAP Authentication
-f employees-add-users.ldif
Enter LDAP Password: user_password
modifying entry "cn=employees,ou=Groups,dc=mydom,dc=com"
...
If you have configured Kerberos authentication, use kinit to obtain a ticket granting ticket (TGT) for
the admin principal, and use this form of the command:
# ldapmodify -f employees-add-users.ldif
# system-config-authentication
3. Select LDAP as the user account database and enter values for:
LDAP Search Base DN The LDAP Search Base DN for the database. For example:
dc=mydom,dc=com.
LDAP Server The URL of the LDAP server including the port number. For example,
ldap://ldap.mydom.com:389 or ldaps://ldap.mydom.com:636.
LDAP authentication requires that you use either LDAP over SSL (ldaps) or Transport Layer Security
(TLS) to secure the connection to the LDAP server.
4. If you use TLS, click Download CA Certificate and enter the URL from which to download the CA
certificate that provides the basis for authentication within the domain.
KDCs A comma-separated list of Key Distribution Center (KDC) servers that can issue
Kerberos ticket granting tickets and service tickets.
299
Enabling LDAP Authentication
Select the Use DNS to resolve hosts to realms check box to look up the name of the realm defined
as a TXT record in DNS, for example:
_kerberos.mydom.com IN TXT "MYDOM.COM"
Select the Use DNS to locate KDCs for realms check box to look up the KDCs and administration
servers defined as SVR records in DNS, for example:
_kerberos._tcp.mydom.com IN SVR 1 0 88 krbsvr.mydom.com
_kerberos._udp.mydom.com IN SVR 1 0 88 krbsvr.mydom.com
_kpasswd._udp.mydom.com IN SVR 1 0 464 krbsvr.mydom.com
_kerberos-adm._tcp.mydom.com IN SVR 1 0 749 krbsvr.mydom.com
Figure 23.3 shows the Authentication Configuration GUI with LDAP selected for the user account database
and for authentication.
To use LDAP as the authentication source, specify the --enableldapauth option together with the full
LDAP server URL including the port number and the LDAP Search Base DN, as shown in the following
example:.
300
Enabling LDAP Authentication
If you want to use TLS, additionally specify the --enableldaptls option and the download URL of the
CA certificate, for example:
# authconfig --enableldap --enableldapauth \
--ldapserver=ldap://ldap.mydom.com:389 \
--ldapbasedn="ou=people,dc=mydom,dc=com" \
--enableldaptls \
--ldaploadcacert=https://ca-server.mydom.com/CAcert.pem \
--update
The --enableldap option configures /etc/nsswitch.conf to enable the system to use LDAP
and SSSD for information services. The --enableldapauth option enables LDAP authentication by
modifying the PAM configuration files in /etc/pam.d to use the pam_ldap.so module.
For more information, see the authconfig(8), pam_ldap(5), and nsswitch.conf(5) manual pages.
For information about using Kerberos authentication with LDAP, see Section 23.6.3, Enabling Kerberos
Authentication.
Note
You must also configure SSSD to be able to access information in LDAP. See
Section 23.4.10.1, Configuring an LDAP Client to use SSSD.
If your client uses automount maps stored in LDAP, you must configure autofs
to work with LDAP. See Section 23.4.10.2, Configuring an LDAP Client to Use
Automount Maps.
2. Edit the /etc/sssd/sssd.conf configuration file and configure the sections to support the required
services, for example:
[sssd]
config_file_version = 2
domains = default
services = nss, pam
[domain/default]
id_provider = ldap
ldap_uri = ldap://ldap.mydom.com
ldap_id_use_start_tls = true
ldap_search_base = dc=mydom,dc=com
ldap_tls_cacertdir = /etc/openldap/cacerts
auth_provider = krb5
chpass_provider = krb5
krb5_realm = MYDOM.COM
301
Enabling LDAP Authentication
krb5_server = krbsvr.mydom.com
krb5_kpasswd = krbsvr.mydom.com
cache_credentials = true
[domain/LDAP]
id_provider = ldap
ldap_uri = ldap://ldap.mydom.com
ldap_search_base = dc=mydom,dc=com
auth_provider = krb5
krb5_realm = MYDOM.COM
krb5_server = kdcsvr.mydom.com
cache_credentials = true
min_id = 5000
max_id = 25000
enumerate = false
[nss]
filter_groups = root
filter_users = root
reconnection_retries = 3
entry_cache_timeout = 300
[pam]
reconnection_retries = 3
offline_credentials_expiration = 2
offline_failed_login_attempts = 3
offline_failed_login_delay = 5
For more information, see the sssd.conf(5) manual page and Section 23.8, About the System Security
Services Daemon.
dn: cn=*,nisMapName=auto.home,dc=mydom,dc=com
objectClass: nisObject
cn: *
nisMapEntry: -rw,sync nfssvr.mydom.com:/nethome/&
nisMapName: auto.home
302
About NIS Authentication
In this example, the map is available. For details of how to make this map available, see Section 23.4.6,
Adding an Automount Map to LDAP.
3. If the auto.home map is available, edit /etc/auto.master and create an entry that tells autofs
where to find the auto.home map in LDAP, for example:
/nethome ldap:nisMapName=auto.home,dc=mydom,dc=com
4. Edit /etc/autofs_ldap_auth.conf and configure the authentication settings for autofs with
LDAP, for example:
<autofs_ldap_sasl_conf
usetls="yes"
tlsrequired="no"
authrequired="autodetect"
authtype="GSSAPI"
clientprinc="host/[email protected]"
/>
This example assumes that Kerberos authentication with the LDAP server uses TLS for the connection.
The principal for the client system must exist in the Kerberos database. You can use the klist -k
command to verify this. If the principal for the client does not exist, use kadmin to add the principal.
5. If you use Kerberos Authentication, use kadmin to add a principal for the LDAP service on the LDAP
server, for example:
# kadmin -q "addprinc ldap/[email protected]
6. Restart the autofs service, and configure the service to start following a system reboot:
# service autofs restart
# chkconfig autofs on
The autofs service creates the directory /nethome. When a user logs in, the automounter mounts
his or her home directory under /nethome.
If the owner and group for the user's files are unexpectedly listed as the anonymous user or group
(nobody or nogroup) and all_squash has not been specified as a mount option, verify that the
Domain setting in /etc/idmapd.conf on the NFS server is set to the DNS domain name. Restart the
NFS services on the NFS server if you change this file.
For more information, see the auto.master(5) and autofs_ldap_auth.conf(5) manual pages.
A network of NIS systems is an NIS domain. Each system within the domain has the same NIS domain
name, which is different from a DNS domain name. The DNS domain is used throughout the Internet to
refer to a group of systems. an NIS domain is used to identify systems that use files on an NIS server. an
NIS domain must have exactly one master server but can have multiple slave servers.
303
About NIS Maps
The /var/yp/nicknames file contains a list of commonly used short names for maps such as passwd
for passwd.byname and group for group.byname.
You can use the ypcat command to display the contents of an NIS map, for example:
# ypcat - passwd | grep 500
guest:$6$gMIxsr3W$LaAo...6EE6sdsFPI2mdm7/NEm0:500:500::/nethome/guest:/bin/bash
Note
As the ypcat command displays password hashes to any user, this example
demonstrates that NIS authentication is inherently insecure against password-hash
cracking programs. If you use Kerberos authentication, you can configure password
hashes not to appear in NIS maps, although other information that ypcat displays
could also be useful to an attacker.
2. Edit /etc/sysconfig/network and add an entry to define the NIS domain, for example:
NISDOMAIN=mynisdom
3. Edit /etc/ypserv.conf to configure NIS options and to add rules for which hosts and domains can
access which NIS maps.
For example, the following entries allow access only to NIS clients in the mynisdom domain on the
192.168.1 subnet:
192.168.1.0/24: mynisdom : * : none
* : * : * : deny
For more information, see the ypserv.conf(5) manual page and the comments in /etc/
ypserv.conf.
4. Create the file /var/yp/securenets and add entries for the networks for which the server should
respond to requests, for example:
304
Configuring an NIS Server
In this example, the server accepts requests from the local loopback interface and the 192.168.1
subnet.
5. Edit /var/yp/Makefile:
a. Set any required map options and specify which NIS maps to create using the all target, for
example:
all:
passwd group auto.home
# hosts rpc services netid protocols mail \
# netgrp shadow publickey networks ethers bootparams printcap \
# amd.home auto.local. passwd.adjunct \
# timezone locale netmasks
This example allows NIS to create maps for the /etc/passwd, /etc/group, and /etc/
auto.home files. By default, the information from the /etc/shadow file is merged with the
passwd maps, and the information from the /etc/gshadow file is merged with the group maps.
b. If you intend to use Kerberos authentication instead of NIS authentication, change the values of
MERGE_PASSWD and MERGE_GROUP to false:
MERGE_PASSWD=false
MERGE_GROUP=false
Note
These settings prevent password hashes from appearing in the NIS maps.
c. If you configure any NIS slave servers in the domain, set the value of NOPUSH to false:
NOPUSH=false
If you update the maps, this setting allows the master server to automatically push the maps to the
slave servers.
a. Start the ypserv service and configure it to start after system reboots:
# service ypserv start
# chkconfig ypserv on
The ypserv service runs on the NIS master server and any slave servers.
b. If the server will act as the master NIS server and there will be at least one slave NIS server, start
the ypxfrd service and configure it to start after system reboots:
# service ypxfrd start
# chkconfig ypxfrd on
305
Configuring an NIS Server
The ypxfrd service speeds up the distribution of very large NIS maps from an NIS master to any
NIS slave servers. The service runs on the master server only, and not on any slave servers. You
do not need to start this service if there are no slave servers.
c. Start the yppasswdd service and configure it to start after system reboots:
# service yppasswdd start
# chkconfig yppasswdd on
The yppasswdd service allows NIS users to change their password in the shadow map. The
service runs on the NIS master server and any slave servers.
a. Edit /etc/sysconfig/network and add the following entries that define the ports on which the
ypserv and ypxfrd services listen:
YPSERV_ARGS="-p 834"
YPXFRD_ARGS="-p 835"
These entries fix the ports on which ypserv and ypxfrd listen.
b. Allow incoming TCP connections to ports 111 and 834 and incoming UDP datagrams on ports 111
and 834 from the local network:
# iptables -I INPUT -s subnet_addr/prefix_length -p tcp \
-m state --state NEW -m tcp --dport 111 -j ACCEPT
# iptables -I INPUT -s subnet_addr/prefix_length -p tcp \
-m state --state NEW -m tcp --dport 834 -j ACCEPT
# iptables -I INPUT -s subnet_addr/prefix_length -p udp \
-m udp --dport 111 -j ACCEPT
# iptables -I INPUT -s subnet_addr/prefix_length -p udp \
-m udp --dport 834 -j ACCEPT
# service iptables save
portmapper services requests on TCP port 111 and UDP port 111, and ypserv services requests
on TCP port 834 and UDP port 834.
c. On the master server, if you run the ypxfrd service to support transfers to slave servers, allow
incoming TCP connections to port 835 and incoming UDP datagrams on port 835 from the local
network:
# iptables -I INPUT -s subnet_addr/prefix_length -p tcp \
-m state --state NEW -m tcp --dport 835 -j ACCEPT
# iptables -I INPUT -s subnet_addr/prefix_length -p udp \
-m udp --dport 835 -j ACCEPT
# service iptables save
d. Allow incoming UDP datagrams from the local network on the port on which yppasswdd listens:
# iptables -I INPUT -s subnet_addr/prefix_length -p udp \
-m udp --dport `rpcinfo -p | gawk '/yppasswdd/ {print $4}'` -j ACCEPT
Note
Do not save this rule. The UDP port number that yppasswdd uses is
different every time that it restarts.
306
Configuring an NIS Server
This entry creates a firewall rule for the yppasswdd service when the system reboots. If you
restart yppasswdd, you must correct the iptables rules manually unless you modify the /etc/
init.d/yppasswdd script.
8. After you have started all the servers, create the NIS maps on the master NIS server:
# /usr/lib64/yp/ypinit -m
At this point, we have to construct a list of the hosts which will run NIS
servers. nismaster is in the list of NIS server hosts. Please continue to add
the names for the other hosts, one per line. When you are done with the
list, type a <control D>."
next host to add: nismaster
next host to add: nisslave1
next host to add: nisslave2
next host to add: ^D
nismaster
nisslave1
nisslave2
Enter the host names of the NIS slave servers (if any), type Ctrl-D to finish, and enter y to confirm the
list of NIS servers. The host names must be resolvable to IP addresses in DNS or by entries in /etc/
hosts.
The ypinit utility builds the domain subdirectory in /var/yp and makes the NIS maps that are
defined for the all target in /var/yp/Makefile. If you have configured NOPUSH=false in /var/
yp/Makefile and the names of the slave servers in /var/yp/ypservers, the command also
pushes the updated maps to the slave servers.
9. On each NIS slave server, run the following command to initialize the server:
# /usr/lib64/yp/ypinit -s nismaster
where nismaster is the host name or IP address of the NIS master server.
Note
If you update any of the source files on the master NIS server that are used to build
the maps, use the following command on the master NIS server to remake the map
and push the changes out to the slave servers:
# make -C /var/yp
307
Adding User Accounts to NIS
The NIS master server uses NFS to export the users' home directories. See
Section 21.2.2, Mounting an NFS File System
Warning
1. If the NIS master server does not already export the base directory of the users' home directories,
perform the following steps on the NIS master server:
a. Create the base directory for user directories, for example /nethome:
# mkdir /nethome
You might prefer to restrict which clients can mount the file system. For example, the following entry
allows only clients in the 192.168.1.0/24 subnet to mount /nethome:
/nethome 192.168.1.0/24(rw,sync)
d. If you have configured /var/yp/Makfile to make the auto.home map available to NIS clients,
create the following entry in /etc/auto.home:
* -rw,sync nissvr:/nethome/&
The command updates the /etc/passwd file and creates a home directory on the NIS server.
For Kerberos authentication, on the Kerberos server or a client system with kadmin access, use
kadmin to create a principal for the user in the Kerberos domain, for example:
# kadmin -q "addprinc username@KRBDOMAIN"
The command prompts you to set a password for the user, and adds the principal to the Kerberos
database.
308
Enabling NIS Authentication
The command updates the /etc/shadow file with the hashed password.
This command makes the NIS maps that are defined for the all target in /var/yp/Makefile. If you
have configured NOPUSH=false in /var/yp/Makefile and the names of the slave servers in /var/
yp/ypservers, the command also pushes the updated maps to the slave servers.
Note
3. Select NIS as the user account database and enter values for:
NIS Domain The name of the NIS domain. For example: mynisdom.
NIS Server The domain name or IP address of the NIS server. For example, nissvr.mydom.com.
KDCs A comma-separated list of Key Distribution Center (KDC) servers that can issue
Kerberos ticket granting tickets and service tickets.
Select the Use DNS to resolve hosts to realms check box to look up the name of the realm defined
as a TXT record in DNS, for example:
_kerberos.mydom.com IN TXT "MYDOM.COM"
Select the Use DNS to locate KDCs for realms check box to look up the KDCs and administration
servers defined as SVR records in DNS, for example:
309
Enabling NIS Authentication
Warning
Figure 23.4 shows the Authentication Configuration GUI with NIS selected as the user account database
and Kerberos selected for authentication.
You can also enable and configure NIS or Kerberos authentication by using the authconfig command.
310
About Kerberos Authentication
For example, to use NIS authentication, specify the --enablenis option together with the NIS domain
name and the host name or IP address of the master server, as shown in the following example:.
# authconfig --enablenis --nisdomain mynisdom \
--nisserver nissvr.mydom.com --update
The --enablenis option configures /etc/nsswitch.conf to enable the system to use NIS for
information services. The --nisdomain and --nisserver settings are added to /etc/yp.conf.
For more information, see the authconfig(8), nsswitch.conf(5), and yp.conf(5) manual pages.
For information about using Kerberos authentication with NIS, see Section 23.6.3, Enabling Kerberos
Authentication.
In this example, the map is available. For details of how to make this map available, see Section 23.5.3,
Adding User Accounts to NIS.
4. If the auto.home map is available, edit the file /etc/auto.home to contain the following entry:
+auto.home
5. Restart the autofs service, and configure the service to start following a system reboot:
# service autofs restart
# chkconfig autofs on
The autofs service creates the directory /nethome. When a user logs in, the automounter mounts
his or her home directory under /nethome.
If the owner and group for the user's files are unexpectedly listed as the anonymous user or group
(nobody or nogroup) and all_squash has not been specified as a mount option, verify that the
Domain setting in /etc/idmapd.conf on the NFS server is set to the DNS domain name. Restart the
NFS services on the NFS server if you change this file.
311
About Kerberos Authentication
Figure 23.5 illustrates how a Kerberos Key Distribution Center (KDC) authenticates a principal, which can
be a user or a host, and grants a Ticket Granting Ticket (TGT) that the principal can use to gain access to
a service.
2. The client sends the principal name and a request for a TGT to the KDC.
The KDC generates a session key and a TGT that contains a copy of the session key, and uses the
Ticket Granting Service (TGS) key to encrypt the TGT. It then uses the principal's key to encrypt both
the already encrypted TGT and another copy of the session key.
312
About Kerberos Authentication
3. The KDC sends the encrypted combination of the session key and the encrypted TGT to the client.
The client uses the principal's key to extract the session key and the encrypted TGT.
4. When the client want to use a service, usually to obtain access to a local or remote host system, it uses
the session key to encrypt a copy of the encrypted TGT, the clients IP address, a time stamp, and a
service ticket request, and it sends this item to the KDC.
The KDC uses its copies of the session key and the TGS key to extract the TGT, IP address, and
time stamp, which allow it to validate the client. Provided that both the client and its service request
are valid, the KDC generates a service session key and a service ticket that contains the clients IP
address, a time stamp, and a copy of the service session key, and it uses the service key to encrypt the
service ticket. It then uses the session key to encrypt both the service ticket and another copy of the
service session key.
The service key is usually the host principal's key for the system on which the service provider runs.
5. The KDC sends the encrypted combination of the service session key and the encrypted service ticket
to the client.
The client uses its copy of the session key to extract the encrypted service ticket and the service
session key.
6. The client sends the encrypted service ticket to the service provider together with the principal name
and a time stamp encrypted with the service session key.
The service provider uses the service key to extract the data in the service session ticket, including the
service session key.
7. The service provider enables the service for the client, which is usually to grant access to its host
system.
If the client and service provider are hosted on different systems, they can each use their own copy of
the service session key to secure network communication for the service session.
Steps 1 through 3 correspond to using the kinit command to obtain and cache a TGT.
Keys are never sent in the clear over any communications channel between the client, the KDC, and the
service provider.
At the start of the authentication process, the client and the KDC share the principal's key, and the KDC
and the service provider share the service key. Neither the principal nor the service provider know the
TGS key.
At the end of the process, both the client and the service provider share a service session key that they
can use to secure the service session. The client does not know the service key and the service provider
does not know the principal's key.
The client can use the TGT to request access to other service providers for the lifetime of the ticket,
which is usually one day. The session manager renews the TGT if it expires while the session is active.
313
Configuring a Kerberos Server
Note
Keep any system that you configure as a Kerberos server very secure, and do not
configure it to perform any other service function.
To configure a Kerberos server that can act as a key distribution center (KDC) and a Kerberos
administration server:
1. Configure the server to use DNS and that both direct and reverse name lookups of the server's domain
name and IP address work.
For more information about configuring DNS, see Chapter 13, Name Service Configuration.
2. Configure the server to use network time synchronization mechanism such as the Network Time
Protocol (NTP) or Precision Time Protocol (PTP). Kerberos requires that the system time on Kerberos
servers and clients are synchronized as closely as possible. If the system times of the server and a
client differ by more than 300 seconds (by default), authentication fails.
4. Edit /etc/krb5.conf and configure settings for the Kerberos realm, for example:
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
default_realm = MYDOM.COM
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
[realms]
MYDOM.COM = {
kdc = krbsvr.mydom.com
admin_server = krbsvr.mydom.com
}
[domain_realm]
.mydom.com = MYDOM.COM
mydom.com = MYDOM.COM
[appdefaults]
pam = {
debug = true
validate = false
}
314
Configuring a Kerberos Server
In this example, the Kerberos realm is MYDOM.COM in the DNS domain mydom.com and
krbsvr.mydom.com (the local system) acts as both a KDC and an administration server. The
[appdefaults] section configures options for the pam_krb5.so module.
For more information, see the krb5.conf(5) and pam_krb5(5) manual pages.
5. Edit /var/kerberos/krb5kdc/kdc.conf and configure settings for the key distribution center, for
example:
kdcdefaults]
kdc_ports = 88
kdc_tcp_ports = 88
[realms]
MYDOM.COM = {
#master_key_type = aes256-cts
master_key_type = des-hmac-sha1
default_principal_flags = +preauth
acl_file = /var/kerberos/krb5kdc/kadm5.acl
dict_file = /usr/share/dict/words
admin_keytab = /etc/kadm5.keytab
supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal \
arcfour-hmac:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal
}
6. Create the Kerberos database and store the database password in a stash file:
# /usr/sbin/kdb5_util create -s
In this example, any principal who has an instance of admin, such as alice/[email protected],
has full administrative control of the Kerberos database for the MYDOM.COM domain. Ordinary users
in the database usually have an empty instance, for example [email protected]. These users have no
administrative control other than being able to change their password, which is stored in the database.
8. Create a principal for each user who should have the admin instance, for example:
# kadmin.local -q "addprinc alice/admin"
9. Cache the keys that kadmind uses to decrypt administration Kerberos tickets in /etc/
kadm5.keytab:
# kadmin.local -q "ktadd -k /etc/kadm5.keytab kadmin/admin"
# kadmin.local -q "ktadd -k /etc/kadm5.keytab kadmin/changepw"
10. Start the KDC and administration services and configure them to start following system reboots:
# service krb5kdc start
# service kadmin start
# chkconfig krb5kdc on
# chkconfig kadmin on
11. Add principals for users and the Kerberos server and cache the key for the server's host principal in /
etc/kadm5.keytab by using either kadmin.local or kadmin, for example:
# kadmin.local -q "addprinc bob"
315
Configuring a Kerberos Client
12. Allow incoming TCP connections to ports 88, 464, and 749 and UDP datagrams on UDP port 88, 464,
and 749:
# iptables -I INPUT -s subnet_addr/prefix_length -p tcp \
-m state --state NEW -m tcp --dport 88 -j ACCEPT
# iptables -I INPUT -s subnet_addr/prefix_length -p tcp \
-m state --state NEW -m tcp --dport 464 -j ACCEPT
# iptables -I INPUT -s subnet_addr/prefix_length -p tcp \
-m state --state NEW -m tcp --dport 749 -j ACCEPT
# iptables -I INPUT -s subnet_addr/prefix_length -p udp \
-m udp --dport 88 -j ACCEPT
# iptables -I INPUT -s subnet_addr/prefix_length -p udp \
-m udp --dport 464 -j ACCEPT
# iptables -I INPUT -s subnet_addr/prefix_length -p udp \
-m udp --dport 749 -j ACCEPT
# service iptables save
krb5kdc services requests on TCP port 88 and UDP port 88, and kadmind services requests on TCP
ports 464 and 749 and UDP ports 464 and 749.
In addition, you might need to allow TCP and UDP access on different ports for other applications.
1. Configure the client system to use DNS and that both direct and reverse name lookups of the domain
name and IP address for both the client and the Kerberos server work.
For more information about configuring DNS, see Chapter 13, Name Service Configuration.
2. Configure the system to use a network time synchronization protocol such as the Network Time
Protocol (NTP). Kerberos requires that the system time on Kerberos servers and clients are
synchronized as closely as possible. If the system times of the server and a client differ by more than
300 seconds (by default), authentication fails.
b. Edit /etc/ntp.conf and configure the settings as required. See the ntp.conf(5) manual page
and http://www.ntp.org.
c. Start the ntpd service and configure it to start following system reboots.
# service ntpd start
316
Enabling Kerberos Authentication
# chkconfig ntpd on
4. Copy the /etc/krb5.conf file to the system from the Kerberos server.
5. Use the Authentication Configuration GUI or authconfig to set up the system to use Kerberos with
either NIS or LDAP, for example:
# authconfig --enablenis --enablekrb5 --krb5realm=MYDOM.COM \
--krb5adminserver=krbsvr.mydom.com --krb5kdc=krbsvr.mydom.com \
--update
6. On the Kerberos KDC, use either kadmin or kadmin.local to add a host principal for the client, for
example:
# kadmin.local -q "addprinc -randkey host/client.mydom.com"
7. On the client system, use kadmin to cache the key for its host principal in /etc/kadm5.keytab, for
example:
# kadmin -q "ktadd -k /etc/kadm5.keytab host/client.mydom.com"
8. To use ssh and related OpenSSH commands to connect from Kerberos client system to another
Kerberos client system:
a. On the remote Kerberos client system, verify that GSSAPIAuthentication is enabled in /etc/
ssh/sshd_config:
GSSAPIAuthentication yes
c. Test that the principal can obtain a ticket and connect to the remote system, for example:
$ kinit [email protected]
$ ssh [email protected]
To allow use of the Kerberos versions of rlogin, rsh, and telnet, which are provided in the krb5-
appl-clients package, you must enable the corresponding services on the remote client.
If you use the Authentication Configuration GUI (system-config-authentication) and select LDAP
or NIS as the user account database, select Kerberos password as the authentication method and enter
values for:
317
Enabling Kerberos Authentication
KDCs A comma-separated list of Key Distribution Center (KDC) servers that can issue
Kerberos ticket granting tickets and service tickets.
Select the Use DNS to resolve hosts to realms check box to look up the name of the realm defined as
a TXT record in DNS, for example:
Select the Use DNS to locate KDCs for realms check box to look up the KDCs and administration
servers defined as SVR records in DNS, for example:
Figure 23.6 shows the Authentication Configuration GUI with LDAP selected as the user account database
and Kerberos selected for authentication.
318
Enabling Kerberos Authentication
Alternatively, you can use the authconfig command to configure Kerberos authentication with LDAP, for
example:
# authconfig --enableldap \
--ldapbasedn="dc=mydom,dc=com" --ldapserver=ldap://ldap.mydom.com:389 \
[--enableldaptls --ldaploadcacert=https://ca-server.mydom.com/CAcert.pem] \
--enablekrb5 \
--krb5realm=MYDOM.COM | --enablekrb5realmdns \
--krb5kdc=krbsvr.mydom.com --krb5adminserver=krbsvr.mydom.com | --enablekrb5kdcdns \
--update
319
About Pluggable Authentication Modules
or with NIS:
# authconfig --enablenis \
--enablekrb5 \
--krb5realm=MYDOM.COM | --enablekrb5realmdns \
--krb5kdc=krbsvr.mydom.com --krb5adminserver=krbsvr.mydom.com | --enablekrb5kdcdns \
--update
The --enablekrb5 option enables Kerberos authentication by modifying the PAM configuration files in /
etc/pam.d to use the pam_krb5.so module. The --enableldap and --enablenis options configure
/etc/nsswitch.conf to enable the system to use LDAP or NIS for information services.
For more information, see the authconfig(8), nsswitch.conf(5), and pam_krb5(5) manual pages.
#%PAM-1.0
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
auth include system-auth
account required pam_nologin.so
account include system-auth
password include system-auth
# pam_selinux.so close should be the first session rule
session required pam_selinux.so close
session required pam_loginuid.so
session optional pam_console.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session required pam_selinux.so open
session required pam_namespace.so
session optional pam_keyinit.so force revoke
session include system-auth
-session optional pam_ck_connector.so
Comments in the file start with a # character. The remaining lines each define an operation type, a control
flag, the name of a module such as pam_rootok.so or the name of an included configuration file such as
system-auth, and any arguments to the module. PAM provides authentication modules as 32 and 64-bit
shared libraries in /lib/security and /lib64/security respectively.
For a particular operation type, PAM reads the stack from top to bottom and calls the modules listed in the
configuration file. Each module generates a success or failure result when called.
auth The module tests whether a user is authenticated or authorized to use a service or
application. For example, the module might request and verify a password. Such modules can
also set credentials, such as a group membership or a Kerberos ticket.
320
About the System Security Services Daemon
account The module tests whether an authenticated user is allowed access to a service or application.
For example, the module might check if a user account has expired or if a user is allowed to
use a service at a given time.
session The module configures and manages user sessions, performing tasks such as mounting or
unmounting a user's home directory.
If the operation type is preceded with a dash (-), PAM does not add an create a system log entry if the
module is missing.
With the exception of include, the control flags tell PAM what to do with the result of running a module.
The following control flags are defined for use:
optional The module is required for authentication if it is the only module listed for a service.
required The module must succeed for access to be granted. PAM continues to execute the
remaining modules in the stack whether the module succeeds or fails. PAM does not
immediately inform the user of the failure.
requisite The module must succeed for access to be granted. If the module succeeds, PAM
continues to execute the remaining modules in the stack. However, if the module fails,
PAM notifies the user immediately and does not continue to execute the remaining
modules in the stack.
sufficient If the module succeeds, PAM does not process any remaining modules of the same
operation type. If the module fails, PAM processes the remaining modules of the same
operation type to determine overall success or failure.
The control flag field can also define one or more rules that specify the action that PAM should take
depending on the value that a module returns. Each rule takes the form value=action, and the rules are
enclosed in square brackets, for example:
If the result returned by a module matches a value, PAM uses the corresponding action, or, if there is no
match, it uses the default action.
The include flag specifies that PAM must also consult the PAM configuration file specified as the
argument.
Most authentication modules and PAM configuration files have their own manual pages. In addition, the
/usr/share/doc/pam-version directory contains the PAM System Administrators Guide (html/
Linux-PAM_SAG.html or Linux-PAM_SAG.txt) and a copy of the PAM standard (rfc86.0.txt).
For more information, see the pam(8) manual page. In addition, each PAM module has its own manual
page, for example pam_unix(8).
321
Configuring an SSSD Server
Offline authentication
You can configure SSSD to maintain a cache of user identities and credentials.
If you configure SSSD to store network credentials, users need only authenticate once per session with
the local system to access network resources.
For more information, see the authconfig(8), pam_sss(8), sssd(8), and sssd.conf(5) manual
pages and https://fedorahosted.org/sssd/.
2. Edit the /etc/sssd/sssd.conf configuration file and configure the sections to support the required
services, for example:
[sssd]
config_file_version = 2
domains = LDAP
services = nss, pam
[domain/LDAP]
id_provider = ldap
ldap_uri = ldap://ldap.mydom.com
ldap_search_base = dc=mydom,dc=com
auth_provider = krb5
krb5_server = krbsvr.mydom.com
krb5_realm = MYDOM.COM
cache_credentials = true
min_id = 5000
max_id = 25000
enumerate = false
[nss]
filter_groups = root
filter_users = root
reconnection_retries = 3
entry_cache_timeout = 300
[pam]
reconnection_retries = 3
offline_credentials_expiration = 2
offline_failed_login_attempts = 3
offline_failed_login_delay = 5
The [sssd] section contains configuration settings for SSSD monitor options, domains, and services.
The SSSD monitor service manages the services that SSSD provides.
The services entry defines the supported services, which should include nss for the Name Service
Switch and pam for Pluggable Authentication Modules.
322
Configuring an SSSD Server
The domains entry specifies the name of the sections that define authentication domains.
The [domain/LDAP] section defines a domain for an LDAP identity provider that uses Kerberos
authentication. Each domain defines where user information is stored, the authentication method, and
any configuration options. SSSD can work with LDAP identity providers such as OpenLDAP, Red Hat
Directory Server, IPA, and Microsoft Active Directory, and it can use either native LDAP or Kerberos
authentication.
The id_provider entry specifies the type of provider (in this example, LDAP). ldap_uri specifies
a comma-separated list of the Universal Resource Identifiers (URIs) of the LDAP servers, in order of
preference, to which SSSD can connect. ldap_search_base specifies the base distinguished name
(dn) that SSSD should use when performing LDAP user operations on a relative distinguished name
(RDN) such as a common name (cn).
The auth_provider entry specifies the authentication provider (in this example, Kerberos).
krb5_server specifies a comma-separated list of Kerberos servers, in order of preference, to which
SSSD can connect. krb5_realm specifies the Kerberos realm. cache_credentials specifies
if SSSD caches user credentials such as tickets, session keys, and other identifying information to
support offline authentication and single sign-on.
Note
To allow SSSD to use Kerberos authentication with an LDAP server, you must
configure the LDAP server to use both Simple Authentication and Security
Layer (SASL) and the Generic Security Services API (GSSAPI). For more
information about configuring SASL and GSSAPI for OpenLDAP, see http://
www.openldap.org/doc/admin24/sasl.html.
The min_id and max_id entries specify upper and lower limits on the values of user and group IDs.
enumerate specifies whether SSSD caches the complete list of users and groups that are available
on the provider. The recommended setting is False unless a domain contains relatively few users or
groups.
The [nss] section configures the Name Service Switch (NSS) module that integrates the SSS
database with NSS. The filter_users and filter_groups entries prevent NSS retrieving
information about the specified users and groups being retrieved from SSS. reconnection_retries
specifies the number of times that SSSD should attempt to reconnect if a data provider crashes.
enum_cache_timeout specifies the number of seconds for which SSSD caches user information
requests.
The [pam] section configures the PAM module that integrates SSS with PAM. The
offline_credentials_expiration entry specifies the number of days for which to allow
cached logins if the authentication provider is offline. offline_failed_login_attempts
specifies how many failed login attempts are allowed if the authentication provider
is offline. offline_failed_login_delay specifies how many minutes after
offline_failed_login_attempts failed login attempts that a new login attempt is permitted.
323
About Winbind Authentication
Note
ads In the Activity Directory Server (ADS) security model, Samba acts as a domain member in
an ADS realm, and clients use Kerberos tickets for Active Directory authentication. You must
configure Kerberos and join the server to the domain, which creates a machine account for your
server on the domain controller.
domain In the domain security model, the local Samba server has a machine account (a domain security
trust account) and Samba authenticates user names and passwords with a domain controller in
a domain that implements Windows NT4 security.
Warning
server In the server security model, the local Samba server authenticates user names and passwords
with another server, such as a Windows NT server.
Warning
user In the user security model, a client must log in with a valid user name and password. This model
supports encrypted passwords. If the server successfully validates the client's user name and
password, the client can mount multiple shares without being required to specify a password.
Depending on the security model that you choose, you might also need to specify the following information:
The name of the ADS realm that the Samba server is to join (ADS security model only).
The names of the domain controllers. If there are several domain controllers, separate the names with
spaces.
324
Enabling Winbind Authentication
The login template shell to use for the Windows NT user account (ADS and domain security models
only).
Whether to allow user authentication using information that has been cached by the System Security
Services Daemon (SSSD) if the domain controllers are offline.
Your selection updates the security directive in the [global] section of the /etc/samba/smb.conf
configuration file.
If you have initialized Kerberos, you can click Join Domain to create a machine account on the Active
Directory server and grant permission for the Samba domain member server to join the domain.
You can also use the authconfig command to configure Winbind authentication. To use the user-
level security models, specify the name of the domain or workgroup and the host names of the domain
controllers. for example:
# authconfig --enablewinbind --enablewinbindauth --smbsecurity user \
[--enablewinbindoffline] --smbservers="ad1.mydomain.com ad2.mydomain.com" \
--smbworkgroup=MYDOMAIN --update
To allow user authentication using information that has been cached by the System Security Services
Daemon (SSSD) if the domain controllers are offline, specify the --enablewinbindoffline option.
For the domain security model, additionally specify the template shell, for example:
For the ADS security model, additionally specify the ADS realm and template shell, for example:
325
326
Chapter 24 Local Account Configuration
Table of Contents
24.1 About User and Group Configuration ....................................................................................... 327
24.2 Changing Default Settings for User Accounts ........................................................................... 328
24.3 Creating User Accounts .......................................................................................................... 328
24.3.1 About umask and the setgid and Restricted Deletion Bits ............................................... 329
24.4 Locking an Account ................................................................................................................ 329
24.5 Modifying or Deleting User Accounts ....................................................................................... 329
24.6 Creating Groups ..................................................................................................................... 330
24.7 Modifying or Deleting Groups .................................................................................................. 330
24.8 Configuring Password Ageing .................................................................................................. 330
24.9 Granting sudo Access to Users ............................................................................................... 331
This chapter describes how to configure and manage local user and group accounts.
Figure 24.1 shows the User Manager GUI with the Users tab selected.
327
Changing Default Settings for User Accounts
In an enterprise environment that might have hundreds of servers and thousands of users, user and group
account information is more likely to be held in a central repository rather than in files on individual servers.
You can configure user and group information on a central server and retrieve this information by using
services such as Lightweight Directory Access Protocol (LDAP) or Network Information Service (NIS). You
can also create users home directories on a central server and automatically mount, or access, these
remote file systems when a user logs in to a system.
INACTIVE specifies after how many days the system locks an account if a user's password expires. If set
to 0, the system locks the account immediately. If set to -1, the system does not lock the account.
SKEL defines a template directory, whose contents are copied to a newly created users home directory.
The contents of this directory should match the default shell defined by SHELL.
You can specify options to useradd -D to change the default settings for user accounts. For example, to
change the defaults for INACTIVE, HOME and SHELL:
# useradd -D -f 3 -b /home2 -s /bin/sh
Note
If you change the default login shell, you would usually also create a new SKEL
template directory with contents that are appropriate to the new shell.
If you specify /sbin/nologin for a user's SHELL, that user cannot log into the
system directly but processes can run with that user's ID. This setting is typically
used for services that run as users other than root.
For more information, see Section 24.8, Configuring Password Ageing and the useradd(8) manual
page.
You can specify options to change the account's settings from the default ones.
By default, if you specify a user name argument but do not specify any options, useradd creates a
locked user account using the next available UID and assigns a user private group (UPG) rather than
the value defined for GROUP as the user's group.
328
About umask and the setgid and Restricted Deletion Bits
If you want to change the password non-interactively (for example, from a script), use the chpasswd
command instead:
echo "username:password" | chpasswd
Alternatively, you can use the newusers command to create a number of user accounts at the same time.
For more information, see the chpasswd(8), newusers(8), passwd(1), and useradd(8) manual
pages.
24.3.1 About umask and the setgid and Restricted Deletion Bits
Users whose primary group is not a UPG have a umask of 0022 set by /etc/profile or /etc/bashrc,
which prevents other users, including other members of the primary group, from modifying any file that the
user owns.
A user whose primary group is a UPG has a umask of 0002. It is assumed that no other user has the same
group.
To grant users in the same group write access to files within the same directory, change the group
ownership on the directory to the group, and set the setgid bit on the directory:
# chgrp groupname directory
# chmod g+s directory
Files created in such a directory have their group set to that of the directory rather than the primary group
of the user who creates the file.
The restricted deletion bit prevents unprivileged users from removing or renaming a file in the directory
unless they own either the file or the directory.
329
Creating Groups
For example, to add a user to a supplementary group (other than his or her login group):
# usermod -aG groupname username
You can use the groups command to display the groups to which a user belongs, for example:
# groups root
root : root bin daemon sys adm disk wheel
For more information, see the groups(1), userdel(8) and usermod(8) manual pages.
Typically, you might want to use the -g option to specify the group ID (GID). For example:
# groupadd -g 1000 devgrp
For more information, see the groupdel(8) and groupmod(8) manual pages.
Setting Description
PASS_MAX_DAYS Maximum number of days for which a password can be used before it must be
changed. The default value is 99,999 days.
PASS_MIN_DAYS Minimum number of days that is allowed between password changes. The
default value is 0 days.
PASS_WARN_AGE Number of days warning that is given before a password expires. The default
value is 7 days.
To change how long a user's account can be inactive before it is locked, use the usermod command. For
example, to set the inactivity period to 30 days:
330
Granting sudo Access to Users
# usermod -f 30 username
To change the default inactivity period for new user accounts, use the useradd command:
# useradd -D -f 30
A value of -1 specifies that user accounts are not locked due to inactivity.
For more information, see the useradd(8) and usermod(8) manual pages.
For example, the following entry grants the user erin the same privileges as root when using sudo, but
defines a limited set of privileges to frank so that he can run commands such as chkconfig, service,
rpm, and yum:
erin ALL=(ALL) ALL
frank ALL= SERVICES, SOFTWARE
For more information, see the su(1), sudo(8), sudoers(5), and visudo(8) manual pages.
331
332
Chapter 25 System Security Administration
Table of Contents
25.1 About System Security ............................................................................................................ 333
25.2 Configuring and Using SELinux ............................................................................................... 334
25.2.1 About SELinux Administration ....................................................................................... 335
25.2.2 About SELinux Modes .................................................................................................. 337
25.2.3 Setting SELinux Modes ................................................................................................ 337
25.2.4 About SELinux Policies ................................................................................................ 337
25.2.5 About SELinux Context ................................................................................................ 339
25.2.6 About SELinux Users ................................................................................................... 341
25.2.7 Troubleshooting Access-Denial Messages ..................................................................... 342
25.3 About Packet-filtering Firewalls ................................................................................................ 343
25.3.1 Controlling the Firewall Service ..................................................................................... 345
25.3.2 Listing Firewall Rules ................................................................................................... 345
25.3.3 Inserting and Replacing Rules in a Chain ...................................................................... 346
25.3.4 Deleting Rules in a Chain ............................................................................................. 347
25.3.5 Saving Rules ............................................................................................................... 347
25.4 About TCP Wrappers .............................................................................................................. 347
25.5 About chroot Jails ................................................................................................................... 349
25.5.1 Running DNS and FTP Services in a Chroot Jail ........................................................... 349
25.5.2 Creating a Chroot Jail .................................................................................................. 349
25.5.3 Using a Chroot Jail ...................................................................................................... 350
25.6 About Auditing ........................................................................................................................ 350
25.7 About System Logging ............................................................................................................ 351
25.7.1 Configuring Logwatch ................................................................................................... 354
25.8 About Process Accounting ...................................................................................................... 355
25.9 Security Guidelines ................................................................................................................. 355
25.9.1 Minimizing the Software Footprint ................................................................................. 355
25.9.2 Configuring System Logging ......................................................................................... 357
25.9.3 Disabling Core Dumps ................................................................................................. 357
25.9.4 Minimizing Active Services ........................................................................................... 357
25.9.5 Locking Down Network Services ................................................................................... 360
25.9.6 Configuring a Packet-filtering Firewall ............................................................................ 361
25.9.7 Configuring TCP Wrappers ........................................................................................... 361
25.9.8 Configuring Kernel Parameters ..................................................................................... 361
25.9.9 Restricting Access to SSH Connections ........................................................................ 362
25.9.10 Configuring File System Mounts, File Permissions, and File Ownerships ....................... 362
25.9.11 Checking User Accounts and Privileges ...................................................................... 364
This chapter describes the subsystems that you can use to administer system security, including SELinux,
the Netfilter firewall, TCP Wrappers, chroot jails, auditing, system logging, and process accounting.
Traditional Linux security is based on a Discretionary Access Control (DAC) policy, which provides minimal
protection from broken software or from malware that is running as a normal user or as root. The SELinux
enhancement to the Linux kernel implements the Mandatory Access Control (MAC) policy, which allows
333
Configuring and Using SELinux
you to define a security policy that provides granular permissions for all users, programs, processes,
files, and devices. The kernel's access control decisions are based on all the security relevant information
available, and not solely on the authenticated user identity. By default, SELinux is enabled when you install
an Oracle Linux system.
Oracle Linux has evolved into a secure enterprise-class operating system that can provide the
performance, data integrity, and application uptime necessary for business-critical production
environments.
Thousands of production systems at Oracle run Oracle Linux and numerous internal developers use it
as their development platform. Oracle Linux is also at the heart of several Oracle engineered systems,
including the Oracle Exadata Database Machine, Oracle Exalytics In-Memory Machine, Oracle Exalogic
Elastic Cloud, and Oracle Database Appliance.
Oracle On Demand services, which deliver software as a service (SaaS) at a customer's site, via an Oracle
data center, or at a partner site, use Oracle Linux at the foundation of their solution architectures. Backed
by Oracle support, these mission-critical systems and deployments depend fundamentally on the built-in
security and reliability features of the Oracle Linux operating system.
Released under an open-source license, Oracle Linux includes the Unbreakable Enterprise Kernel that
provides the latest Linux innovations while offering tested performance and stability. Oracle has been
a key participant in the Linux community, contributing code enhancements such as Oracle Cluster File
System and the Btrfs file system. From a security perspective, having roots in open source is a significant
advantage. The Linux community, which includes many experienced developers and security experts,
reviews posted Linux code extensively prior to its testing and release. The open-source Linux community
has supplied many security improvements over time, including access control lists (ACLs), cryptographic
libraries, and trusted utilities.
The National Security Agency created Security Enhanced Linux (SELinux) to provide a finer-grained
level of control over files, processes, users and applications in the Linux operating system. The SELinux
enhancement to the Linux kernel implements the Mandatory Access Control (MAC) policy, which allows
you to define a security policy that provides granular permissions for all users, programs, processes,
files, and devices. The kernel's access control decisions are based on all the security relevant information
available, and not solely on the authenticated user identity.
When security-relevant access occurs, such as when a process attempts to open a file, SELinux intercepts
the operation in the kernel. If a MAC policy rule allows the operation, it continues; otherwise, SELinux
blocks the operation and returns an error to the process. The kernel checks and enforces DAC policy rules
before MAC rules, so it does not check SELinux policy rules if DAC rules have already denied access to a
resource.
The following table describes the SELinux packages that are installed by default with Oracle Linux:
Package Description
policycoreutils Provides utilities such as load_policy, restorecon, secon, setfiles,
semodule, sestatus, and setsebool for operating and managing
SELinux.
334
About SELinux Administration
Package Description
libselinux Provides the API that SELinux applications use to get and set process and
file security contexts, and to obtain security policy decisions.
selinux-policy Provides the SELinux Reference Policy, which is used as the basis for other
policies, such as the SELinux targeted policy.
selinux-policy- Provides support for the SELinux targeted policy, where objects outside the
targeted targeted domains run under DAC.
libselinux-python Contains Python bindings for developing SELinux applications.
libselinux-utils Provides the avcstat, getenforce, getsebool, matchpathcon,
selinuxconlist, selinuxdefcon, selinuxenabled, setenforce,
and togglesebool utilities.
The following table describes a selection of useful SELinux packages that are not installed by default:
Package Description
mcstrans Translates SELinux levels, such as s0-s0:c0.c1023, to an easier-to-read
form, such as SystemLow-SystemHigh.
policycoreutils-gui Provides a GUI (system-config-selinux) that you can use to manage
SELinux. For example, you can use the GUI to set the system default
enforcing mode and policy type.
policycoreutils- Provides additional Python utilities for operating SELinux, such as
python audit2allow, audit2why, chcat, and semanage.
selinux-policy-mls Provides support for the strict Multilevel Security (MLS) policy as an
alternative to the SELinux targeted policy.
setroubleshoot Provides the GUI that allows you to view setroubleshoot-server
messages using the sealert command.
setroubleshoot- Translates access-denial messages from SELinux into detailed descriptions
server that you can view on the command line using the sealert command.
setools-console Provides the Tresys Technology SETools distribution of tools and libraries,
which you can use to analyze and query policies, monitor and report audit
logs, and manage file context.
Use yum or another suitable package manager to install the SELinux packages that you require on your
system.
For more information about SELinux, refer to the SELinux Project Wiki, the selinux(8) manual page,
and the manual pages for the SELinux commands.
335
About SELinux Administration
336
About SELinux Modes
Disabled The kernel uses only DAC rules for access control. SELinux does not enforce any security
policy because no policy is loaded into the kernel.
Enforcing The kernel denies access to users and programs unless permitted by SELinux security
policy rules. All denial messages are logged as AVC (Access Vector Cache) denials. This
is the default mode that enforces SELinux security policy.
Permissive The kernel does not enforce security policy rules but SELinux sends denial messages to
a log file. This allows you to see what actions would have been denied if SELinux were
running in enforcing mode. This mode is intended to used for diagnosing the behavior of
SELinux.
# getenforce
Enforcing
# setenforce Enforcing
# setenforce Permissive
The current value that you set for a mode using setenforce does not persist across reboots. To
configure the default SELinux mode, edit the configuration file for SELinux, /etc/selinux/config, and
set the value of the SELINUX directive to disabled, enabled, or permissive.
337
About SELinux Policies
Domain Description
initrc_t init and processes executed by init
kernel_t Kernel processes
unconfined_t Processes executed by Oracle Linux users run in the unconfined
domain
Note
You can set the default policy type in the Status view of the SELinux Administration GUI.
Alternatively, to configure the default policy type, edit /etc/selinux/config and set the value of the
SELINUXTYPE directive to targeted or mls.
338
About SELinux Context
You can set the boolean values in the Boolean view of the SELinux Administration GUI.
Alternatively, to display all boolean values together with a short description, use the following command:
# semanage boolean -l
SELinux boolean State Default Description
ftp_home_dir (off , off) Allow ftp to read and write files in the user home ...
smartmon_3ware (off , off) Enable additional permissions needed to support dev...
xdm_sysadm_login (off , off) Allow xdm logins as sysadm
.
.
.
You can use the getsebool and setsebool commands to display and set the value of a specific
boolean.
# getsebool boolean
# setsebool boolean on|off
For example, to display and set the value of the ftp_home_dir boolean:
# getsebool ftp_home_dir
ftp_home_dir --> off
# setsebool ftp_home_dir on
# getsebool ftp_home_dir
ftp_home_dir --> on
To toggle the value of a boolean, use the togglesebool command as shown in this example:
# togglesebool ftp_home_dir
ftp_home_dir: inactive
To make the value of a boolean persist across reboots, specify the -P option to setsebool, for example:
# setsebool -P ftp_home_dir on
# getsebool ftp_home_dir
ftp_home_dir --> on
You can specify the -Z option to certain commands (ls, ps, and id) to display the SELinux context with
the following syntax:
SELinux user:Role:Type:Level
SELinux user An SELinux user account compliments a regular Linux user account. SELinux maps
every Linux user to an SELinux user identity that is used in the SELinux context for the
processes in a user session.
Role In the Role-Based Access Control (RBAC) security model, a role acts as an intermediary
abstraction layer between SELinux process domains or file types and an SELinux
user. Processes run in specific SELinux domains, and file system objects are assigned
SELinux file types. SELinux users are authorized to perform specified roles, and roles
339
About SELinux Context
are authorized for specified SELinux domains and file types. A user's role determines
which process domains and file types he or she can access, and hence, which
processes and files, he or she can access.
Type A type defines an SELinux file type or an SELinux process domain. Processes are
separated from each other by running in their own domains. This separation prevents
processes from accessing files that other processes use, and prevents processes from
accessing other processes. The SELinux policy rules define the access that process
domains have to file types and to other process domains.
Level A level is an attribute of Multilevel Security (MLS) and Multicategory Security (MCS).
An MLS range is a pair of sensitivity levels, written as low_level-high_level. The
range can be abbreviated as low_level if the levels are identical. For example, s0
is the same as s0-s0. Each level has an optional set of security categories to which it
applies. If the set is contiguous, it can be abbreviated. For example, s0:c0.c3 is the
same as s0:c0,c1,c2,c3.
By default, SELinux maps Linux users other than root and the default system-level user, system_u, to
the Linux __default__ user, and in turn to the SELinux unconfined_u user. The MLS/MCS Range is
the security level used by Multilevel Security (MLS) and Multicategory Security (MCS).
To display the context information that is associated with a specified file or directory:
# ls -Z /etc/selinux/config
-rw-r--r--. root root system_u:object_r:selinux_config_t:s0 /etc/selinux/config
To display the context information that is associated with processes, use the ps -Z command:
# ps -Z
LABEL PID TTY TIME CMD
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 3038 pts/0 00:00:00 su
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 3044 pts/0 00:00:00 bash
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 3322 pts/0 00:00:00 ps
To display the context information that is associated with the current user, use the id -Z command:
340
About SELinux Users
# id -Z
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
To change the default file type of the directory hierarchy /var/webcontent to httpd_sys_content_t:
1. Use the semanage command to define the file type httpd_sys_content_t for the directory
hierarchy:
2. Use the restorecon command to apply the new file type to the entire directory hierarchy.
# /sbin/restorecon -R -v /var/webcontent
1. Use the semanage command to delete the file type definition for the directory hierarchy from the file /
etc/selinux/targeted/contexts/files/file_contexts.local:
2. Use the restorecon command to apply the default file type to the entire directory hierarchy.
# /sbin/restorecon -R -v /var/webcontent
In the Status view of the SELinux Administration GUI, select the Relabel on next reboot option.
SELinux users form part of a SELinux policy that is authorized for a specific set of roles and for a specific
MLS (Multi-Level Security) range, and each Oracle Linux user is mapped to an SELinux user as part of
341
Troubleshooting Access-Denial Messages
the policy. As a result, Linux users inherit the restrictions and security rules and mechanisms placed on
SELinux users. To define the roles and levels of users, the mapped SELinux user identity is used in the
SELinux context for processes in a session. You can display user mapping in the User Mapping view of
the SELinux Administration GUI. You can also view the mapping between SELinux and Oracle Linux user
accounts from the command line:
# semanage login -l
Login Name SELinux User MLS/MCS Range
_default_ unconfined_u s0-s0:c0.c1023
root unconfined_u s0-s0:c0.c1023
system_u system_u s0-s0:c0.c1023
The MLS/MCS Range column displays the level used by MLS and MCS.
By default, Oracle Linux users are mapped to the SELinux user unconfined_u.
You can configure SELinux to confine Oracle Linux users by mapping them to SELinux users in confined
domains, which have predefined security rules and mechanisms as listed in the following table.
SELinux User SELinux Permit Permit Network Permit Logging Permit Executing
Domain Running Access? in Using Applications in
su? X Window $HOME and /tmp?
System?
guest_u guest_t No No No No
staff_u staff_t Yes Yes Yes Yes
user_u user_t No Yes Yes Yes
xguest_x xguest_t No Firefox only Yes No
To allow Oracle Linux users in the guest_t and xguest_t domains to execute applications in directories
to which they have write access:
# setsebool -P allow_guest_exec_content on
# setsebool -P allow_xguest_exec_content on
To prevent Linux users in the staff_t and user_t domains from executing applications in directories to
which they have write access:
# setsebool -P allow_staff_exec_content off
# setsebool -P allow_user_exec_content off
342
About Packet-filtering Firewalls
If you have installed the setroubleshoot and setroubleshoot-server packages, the auditd
and setroubleshoot services are running, and you are using the X Window System, you can use the
sealert -b command to run the SELinux Alert Browser, which displays information about SELinux AVC
denials. To view the details of the alert, click Show. To view a recommended solution, click Troubleshoot.
If you do not use the SELinux Alert Browser, you can search in /var/log/audit/audit.log for
messages containing the string denied, and in /var/log/messages for messages containing the string
SELinux is preventing. For example:
# grep denied /var/log/audit/audit.log
type=AVC msg=audit(1364486257.632:26178): avc: denied { read } for
pid=5177 comm="httpd" name="index.html" dev=dm-0 ino=396075
scontext=unconfined_u:system_r:httpd_t:s0
tcontext=unconfined_u:object_r:acct_data_t:s0 tclass=file
A solution might be to change the default file type of the directory hierarchy. For example, change the
default file type from /var/webcontent to httpd_sys_content_t:
# /usr/sbin/semanage fcontext -a -t httpd_sys_content_t "/var/webcontent(/.*)?"
# /sbin/restorecon -R -v /var/webcontent
A solution might be to change the value of a Boolean. For example, allow users' home directories to be
browsable by turning on httpd_enable_homedirs:
# setsebool -P httpd_enable_homedirs on
A service attempts to access a port to which a security policy does not allow access.
If the service's use of the port is valid, a solution is to use semanage to add the port to the policy
configuration. For example, allow the Apache HTTP server to listen on port 8000:
# semanage port -a -t http_port_t -p tcp 8000
An update to a package causes an application to behave in a way that breaks an existing security policy.
You can use the audit2allow -w -a command to view the reason why an access denial occurred.
If you then run the audit2allow -a -M module command, it creates a type enforcement (.te)
file and a policy package (.pp) file. You can use the policy package file with the semodule -i
module.pp command to stop the error from reoccurring. This procedure is usually intended to allow
package updates to function until an amended policy is available. If used incorrectly, it can create
potential security holes on your system.
343
About Packet-filtering Firewalls
A packet filtering firewall filters incoming and outgoing network packets based on the packet header
information. You can create packet filter rules that determine whether packets are accepted or rejected.
For example, if you create a rule to block a port, any request is made to that port that is blocked by the
firewall, and the request is ignored. Any service that is listening on a blocked port is effectively disabled.
The Oracle Linux kernel uses the Netfilter feature to provide packet filtering functionality for IPv4 and IPv6
packets respectively.
A netfilter kernel component consisting of a set of tables in memory for the rules that the kernel
uses to control network packet filtering.
The iptables and ip6tables utilities to create, maintain, and display the rules that netfilter
stores.
To implement a simple, general-purpose firewall, you can use the Firewall Configuration GUI (system-
config-firewall) to create basic Netfilter rules.
To create a more complex firewall configuration, use the iptables and ip6tables utilities to configure
the packet filtering rules.
Netfilter records the packet filtering rules in the /etc/sysconfig/iptables and /etc/sysconfig/
ip6tables files, which netfilter reads when it is initialized.
Filter The default table, which is mainly used to drop or accept packets based on their content.
344
Controlling the Firewall Service
NAT The Network Address Translation table is used to route packets that create new connections.
The kernel uses the rules stored in these tables to make decisions about network packet filtering. Each
rule consists of one or more criteria and a single action. If a criterion in a rule matches the information in a
network packet header, the kernel applies the action to the packet. Examples of actions include:
REJECT As DROP, and additionally notify the sending system that the packet was blocked.
Rules are stored in chains, where each chain is composed of a default policy plus zero or more rules. The
kernel applies each rule in a chain to a packet until a match is found. If there is no matching rule, the kernel
applies the chains default action (policy) to the packet.
Each netfilter table has several predefined chains. The filter table contains the following chains:
FORWARD Packets that are not addressed to the local system pass through this chain.
INPUT Inbound packets to the local system pass through this chain.
The chains are permanent and you cannot delete them. However, you can create additional chains in the
filter table.
For more information, see the iptables(8) and ip6tables(8) manual pages.
To save any changes that you have made to the firewall rules to /etc/sysconfig/iptables and /
etc/sysconfig/ip6tables, so that the service loads them when it next starts:
# service iptables save
To restart the service so that it re-reads its rules from /etc/sysconfig/iptables and /etc/
sysconfig/ip6tables:
# service iptables restart
345
Inserting and Replacing Rules in a Chain
In this example, the default policy for each chain is ACCEPT. A more secure system could have a default
policy of DROP, and the additional rules would only allow specific packets on a case-by-case basis.
If you want to modify the chains, specify the --line-numbers option to see how the rules are numbered.
# iptables -L --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
2 ACCEPT icmp -- anywhere anywhere
3 ACCEPT all -- anywhere anywhere
4 ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
5 ACCEPT udp -- anywhere anywhere state NEW udp dpt:ipp
6 ACCEPT udp -- anywhere 224.0.0.251 state NEW udp dpt:mdns
7 ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ipp
8 ACCEPT udp -- anywhere anywhere state NEW udp dpt:ipp
9 REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
346
Deleting Rules in a Chain
The output from iptables -L shows that the new entry has been inserted as rule 4, and the old rules
4 through 9 are pushed down to positions 5 through 10. The TCP destination port of 80 is represented as
http, which corresponds to the following definition in the /etc/services file (the HTTP daemon listens
for client requests on port 80):
http 80/tcp www www-http # WorldWideWeb HTTP
To replace the rule in a chain, use the iptables -R command. For example, the following command
replaces rule 4 in the INPUT chain to allow access by TCP on port 443:
# iptables -I INPUT 4 -p tcp -m tcp --dport 443 -j ACCEPT
# iptables -L --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
2 ACCEPT icmp -- anywhere anywhere
3 ACCEPT all -- anywhere anywhere
4 ACCEPT tcp -- anywhere anywhere tcp dpt:https
...
The TCP destination port of 443 is represented as https, which corresponds to the following definition in
the /etc/services file for secure HTTP on port 443:
https 443/tcp # http protocol over TLS/SSL
347
About TCP Wrappers
When a remote client attempts to connect to a network service on the system, the wrapper consults the
rules in the configuration files /etc/hosts.allow and /etc/hosts.deny files to determine if access is
permitted.
The wrapper for a service first reads /etc/hosts.allow from top to bottom. If the daemon and client
combination matches an entry in the file, access is allowed. If the wrapper does not find a match in /etc/
hosts.allow, it reads /etc/hosts.deny from top to bottom. If the daemon and client combination
matches and entry in the file, access is denied. If no rules for the daemon and client combination are found
in either file, or if neither file exists, access to the service is allowed.
The wrapper first applies the rules specified in /etc/hosts.allow, so these rules take precedence over
the rules specified in /etc/hosts.deny. If a rule defined in /etc/hosts.allow permits access to a
service, any rule in /etc/hosts.deny that forbids access to the same service is ignored.
where daemon_list and client_list are comma-separated lists of daemons and clients, and
the optional command is run when a client tries to access a daemon. You can use the keyword ALL to
represent all daemons or all clients. Subnets can be represented by using the * wildcard, for example
192.168.2.*. Domains can be represented by prefixing the domain name with a period (.), for example
.mydomain.com. The optional deny keyword causes a connection to be denied even for rules specified in
the /etc/hosts.allow file.
Match all clients for scp, sftp, and ssh access (sshd).
sshd : ALL
Match all clients on the 192.168.2 subnet for FTP access (vsftpd).
vsftpd : 192.168.2.*
Match all clients in the mydomain.com domain for access to all wrapped services.
ALL : .mydomain.com
Match all clients for FTP access, and displays the contents of the banner file /etc/banners/vsftpd (the
banner file must have the same name as the daemon).
vsftpd : ALL : banners /etc/banners/
Match all clients on the 200.182.68 subnet for all wrapped services, and logs all such events. The %c and
%d tokens are expanded to the names of the client and the daemon.
ALL : 200.182.68.* : spawn /bin/echo `date` Attempt by %c to connect to %d" >> /var/log/tcpwr.log
Match all clients for scp, sftp, and ssh access, and logs the event as an emerg message, which is
displayed on the console.
sshd : ALL : severity emerg
Match all clients in the forbid.com domain for scp, sftp, and ssh access, logs the event, and deny
access (even if the rule appears in /etc/hosts.allow).
sshd : .forbid.com : spawn /bin/echo `date` "sshd access denied for %c" >>/var/log/sshd.log : deny
348
About chroot Jails
Note
For a chroot process to be able to start successfully, you must populate the chroot directory with all
required program files, configuration files, device nodes, and shared libraries at their expected locations
relative to the level of the chroot directory.
You can configure the vsftpd FTP server to automatically start chroot jails for clients. By default,
anonymous users are placed in a chroot jail. However, local users that access an vsftpd FTP server
are placed in their home directory. Specify the chroot_local_user=YES option in the /etc/vsftpd/
vsftpd.conf file to place local users in a chroot jail based on their home directory.
1. Create the directory that will become the root directory of the chroot jail, for example:
# mkdir /home/oracle/jail
2. Use the ldd command to find out which libraries are required by the command that you intend to run in
the chroot jail, for example /bin/bash:
# ldd /bin/bash
linux-vdso.so.1 => (0x00007fff56fcc000)
libtinfo.so.5 => /lib64/libtinfo.so.5 (0x0000003ad1200000)
libdl.so.2 => /lib64/libdl.so.2 (0x0000003abe600000)
libc.so.6 => /lib64/libc.so.6 (0x0000003abe200000)
/lib64/ld-linux-x86-64.so.2 (0x0000003abde00000)
3. Create subdirectories of the chroot jail's root directory that have the same relative paths as the
command binary and its required libraries have to the real root directory, for example:
# mkdir /home/oracle/jail/bin
# mkdir /home/oracle/jail/lib64
349
Using a Chroot Jail
4. Copy the binary and the shared libraries to the directories under the chroot jail's root directory, for
example:
# cp /bin/bash /home/oracle/jail/bin
# cp /lib64/{libtinfo.so.5,libdl.so.2,libc.so.6,ld-linux-x86-64.so.2} \
/home/oracle/jail/lib64
If you do not specify a command argument, chroot runs the value of the SHELL environment variable or /
bin/sh if SHELL is not set.
For example, to run /bin/bash in a chroot jail (having previously set it up as described in Section 25.5.2,
Creating a Chroot Jail):
# chroot /home/oracle/jail
bash-4.1# pwd
/
bash-4.1# ls
bash: ls: command not found
bash-4.1# exit
exit
#
You can run built-in shell commands such as pwd in this shell, but not other commands unless you have
copied their binaries and any required shared libraries to the chroot jail.
The audit configuration file, /etc/audit/auditd.conf, defines the data retention policy, the maximum
size of the audit volume, the action to take if the capacity of the audit volume is exceeded, and the
locations of local and remote audit trail volumes. The default audit trail volume is /var/log/audit/
audit.log. For more information, see the auditd.conf(5) manual page.
By default, auditing captures specific events such as system logins, modifications to accounts, and sudo
actions. You can also configure auditing to capture detailed system call activity or modifications to certain
files. The kernel audit daemon (auditd) records the events that you configure, including the event type, a
time stamp, the associated user ID, and success or failure of the system call.
The entries in the audit rules file, /etc/audit/audit.rules, determine which events are audited. Each
rule is a command-line option that is passed to the auditctl command. You should typically configure
this file to match your site's security policy.
The following are examples of rules that you might set in the /etc/audit/audit.rules file.
Record all unsuccessful exits from open and truncate system calls for files in the /etc directory
hierarchy.
-a exit,always -S open -S truncate -F /etc -F success=0
350
About System Logging
Record all files that have been written to or that have their attributes changed by any user who originally
logged in with a UID of 500 or greater.
-a exit,always -S open -F auid>=500 -F perm=wa
Record requests for write or file attribute change access to /etc/sudoers, and tag such record with the
string sudoers-change.
-w /etc/sudoers -p wa -k sudoers-change
Record requests for write and file attribute change access to the /etc directory hierarchy.
-w /etc/ -p wa
Require a reboot after changing the audit configuration. If specified, this rule should appear at the end of
the /etc/audit/audit.rules file.
-e 2
Stringent auditing requirements can impose a significant performance overhead and generate large
amounts of audit data. Some site security policies stipulate that a system must shut down if events cannot
be recorded because the audit volumes have exceeded their capacity. As a general rule, you should direct
audit data to separate file systems in rotation to prevent overspill and to facilitate backups.
You can use the -k option to tag audit records so that you can locate them more easily in an audit volume
with the ausearch command. For example, to examine records tagged with the string sudoers-change,
you would enter:
# ausearch -k sudoers-change
The aureport command generates summaries of audit data. You can set up cron jobs that run
aureport periodically to generate reports of interest. For example, the following command generates a
reports that shows every login event from 1 second after midnight on the previous day until the current
time:
For more information, see the ausearch(8) and aureport(8) manual pages.
Global directives specify configuration options that apply to the rsyslogd daemon. All configuration
directives must start with a dollar sign ($) and only one directive can be specified on each line. The
following example specifies the maximum size of the rsyslog message queue:
$MainMsgQueueSize 50000
351
About System Logging
The design of rsyslog allows its functionality to be dynamically loaded from modules, which provide
configuration directives. To load a module, specify the following directive:
$ModLoad MODULE_name
Input modules gather messages from various sources. Input module names always start with the im
prefix (examples include imfile and imrelp).
Filter modules allow rsyslogd to filter messages according to specified rules. The name of a filter
module always starts with the fm prefix.
Library modules provide functionality for other loadable modules. rsyslogd loads library modules
automatically when required. You cannot configure the loading of library modules.
Output modules provide the facility to store messages in a database or on other servers in a network, or
to encrypt them. Output module names always starts with the om prefix (examples include omsnmp and
omrelp).
Parser modules allow rsyslogd to parse the message content of messages that it receives. The name
of a parser module always starts with the pm prefix.
String generator modules generate strings based on the content of messages in cooperation with
rsyslog's template feature. The name of a string generator module always starts with the sm prefix.
Input modules receive messages, which pass them to one or more parser modules. A parser module
creates a representation of a message in memory, possibly modifying the message, and passes the
internal representation to output modules, which can also modify the content before outputting the
message.
An rsyslog rule consists of a filter part, which selects a subset of messages, and an action part,
which specifies what to do with the selected messages. To define a rule in the /etc/rsyslog.conf
configuration file, specify a filter and an action on a single line, separated by one or more tabs or spaces.
You can configure rsyslog to filter messages according to various properties. The most commonly used
filters are:
Expression-based filters, written in the rsyslog scripting language, select messages according to
arithmetic, boolean, or string values.
Facility/priority-based filters filter messages based on facility and priority values that take the form
facility.priority.
The following table lists the available facility keywords for facility/priority-based filters:
352
About System Logging
The following table lists the available priority keywords for facility/priority-based filters, in ascending order
of importance:
All messages of the specified priority and higher are logged according to the specified action. An asterisk
(*) wildcard specifies all facilities or priorities. Separate the names of multiple facilities and priorities on a
line with commas (,). Separate multiple filters on one line with semicolons (;). Precede a priority with an
exclamation mark (!) to select all messages except those with that priority.
Select all daemon and kern messages with warning or err priority.
daemon,kern.warning,err
Select all cron messages except those with info or debug priority.
cron.!info,!debug
353
Configuring Logwatch
*.info;mail.none;authpriv.none;cron.none /var/log/messages
You can send the logs to a central log server over TCP by adding the following entry to the forwarding
rules section of /etc/rsyslog.conf on each log client:
*.* @@logsvr:port
where logsvr is the domain name or IP address of the log server and port is the port number (usually,
514).
On the log server, add the following entry to the MODULES section of /etc/rsyslog.conf:
$ModLoad imtcp
$InputTCPServerRun port
where port corresponds to the port number that you set on the log clients.
To manage the rotation and archival of the correct logs, edit /etc/logrotate.d/syslog so that it
references each of the log files that are defined in the RULES section of /etc/rsyslog.conf. You can
configure how often the logs are rotated and how many past copies of the logs are archived by editing /
etc/logrotate.conf.
It is recommended that you configure Logwatch on your log server to monitor the logs for suspicious
messages, and disable Logwatch on log clients. However, if you do use Logwatch, disable high precision
timestamps by adding the following entry to the GLOBAL DIRECTIVES section of /etc/rsyslog.conf
on each system:
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
For more information, see the logrotate(8), logwatch(8), rsyslogd(8) and rsyslog.conf(5)
manual pages, the HTML documentation in the /usr/share/doc/rsyslog-5.8.10 directory, and the
documentation at http://www.rsyslog.com/doc/manual.html.
Log files to monitor, including log files that are stored for other hosts.
354
About Process Accounting
You can also run logwatch directly from the command line.
ac Displays connection times in hours for a user as recorded in the wtmp file (by default, /var/
log/wtmp).
accton Turns on process accounting to the specified file. If you do not specify a file name argument,
process accounting is stopped. The default system accounting file is /var/account/pacct.
lastcomm Displays information about previously executed commands as recorded in the system
accounting file.
Note
As for any logging activity, ensure that the file system has enough space to
store the system accounting and wtmp files. Monitor the size of the files and, if
necessary, truncate them.
For more information, see the ac(1), accton(8), lastcomm(1), and sa(8) manual pages.
To discover which package provides a given command or file, use the yum provides command as
shown in the following example:
# yum provides /usr/sbin/sestatus
...
policycoreutils-2.0.83-19.24.0.1.el6.x86_64 : SELinux policy core utilities
Repo : installed
Matched from:
Other : Provides-match: /usr/sbin/sestatus
To display the files that a package provides, use the repoquery utility, which is included in the yum-
utils package. For example, the following command lists the files that the btrfs-progs package
provides.
# repoquery -l btrfs-progs
/sbin/btrfs
/sbin/btrfs-convert
355
Minimizing the Software Footprint
/sbin/btrfs-debug-tree
.
.
.
To uninstall a package, use the yum remove command, as shown in this example:
# yum remove xinetd
Loaded plugins: refresh-packagekit, security
Setting up Remove Process
Resolving Dependencies
--> Running transaction check
---> Package xinetd.x86_64 2:2.3.14-35.el6_3 will be erased
--> Finished Dependency Resolution
Dependencies Resolved
================================================================================
Package Arch Version Repository Size
================================================================================
Removing:
xinetd x86_64 2:2.3.14-35.el6_3 @ol6_latest 259 k
Transaction Summary
================================================================================
Remove 1 Package(s)
Removed:
xinetd.x86_64 2:2.3.14-35.el6_3
Complete!
The following table lists packages that you should not install or that you should remove using yum remove
if they are already installed.
Package Description
krb5-appl-clients Kerberos versions of ftp, rcp, rlogin, rsh and telnet. If
possible, use SSH instead.
rsh, rsh-server rcp, rlogin, and rsh use unencrypted communication that
can be snooped. Use SSH instead.
samba Network services used by Samba. Remove this package if the
system is not acting as an Active Directory server, a domain
controller, or as a domain member, and it does not provide
Microsoft Windows file and print sharing functionality.
talk, talk-server talk is considered obsolete.
telnet, telnet-server telnet uses unencrypted communication that can be
snooped. Use SSH instead.
tftp, tftp-server TFTP uses unencrypted communication that can be snooped.
Use only if required to support legacy hardware. If possible,
use SSH or other secure protocol instead.
356
Configuring System Logging
Package Description
xinetd The security model used by the Internet listener daemon is
deprecated.
ypbind, ypserv The security model used by NIS is inherently flawed. Use an
alternative such as LDAP or Kerberos instead.
If the service is not running, start it and enable it to start when the system is rebooted:
# service rsyslog start
# chkconfig rsyslog on
Ensure that each log file referenced in /etc/rsyslog.conf exists and is owned and only readable by
root:
# touch logfile
# chown root:root logfile
# chmod 0600 logfile
It is also recommended that you use a central log server and that you configure Logwatch on that server.
See Section 25.7, About System Logging.
You can restrict access to core dumps to certain users or groups, as described in the limits.conf(5)
manual page.
By default, the system prevents setuid and setgid programs, programs that have changed credentials,
and programs whose binaries do not have read permission from dumping core. To ensure that the setting
is permanently recorded, add the following lines to /etc/sysctl.conf:
# Disallow core dumping by setuid and setgid programs
fs.suid_dumpable = 0
Note
A value of 1 permits core dumps that are readable by the owner of the dumping
process. A value of 2 permits core dumps that are readable only by root for
debugging purposes.
357
Minimizing Active Services
If possible, configure one type of service per physical machine, virtual machine, or Linux Container. This
technique limits exposure if a system is compromised.
If a service is not used, remove the software packages that are associated with the service. If it is not
possible to remove a service because of software dependencies, use the chkconfig and service
commands to disable the service.
For services that are in use, apply the latest Oracle support patches and security updates to keep software
packages up to date. To protect against unauthorized changes, ensure that the /etc/services file is
owned by root and writable only by root.
# ls -Z /etc/services
-rw-r--r--. root root system_u:object_r:etc_t:SystemLow /etc/services
Unless specifically stated otherwise, consider disabling the services in the following table if they are not
used on your system:
Service Description
anacron Executes commands periodically. Primarily intended for use on laptop and user
desktop machines that do not run continuously.
apmd (Advanced Power Management Daemon) Provides information on power
management and battery status, and allows programmed response to power
management events. Primarily intended for use on laptop machines.
automount Manages mount points for the automatic file-system mounter. Disable this
service on servers that do not require automounter functionality.
bluetooth Supports the connections of Bluetooth devices. Primarily intended for use on
laptop and user desktop machines. Bluetooth provides an additional potential
attack surface. Disable this service on servers that do not require Bluetooth
functionality.
firstboot Configures a system when you first log in after installation. Controlled by the
/etc/rc.d/init.d/firstboot script. firstboot does not run unless
RUN_FIRSTBOOT=YES is set in /etc/sysconfig/firstboot. If /etc/
reconfigSys exists or if you specify reconfig in the kernel boot arguments,
firstboot runs in reconfiguration mode. Disable this service on servers
following successful installation.
gpm (General Purpose Mouse) Provides support for the mouse pointer in a text
console.
haldaemon (Hardware Abstraction Layer Daemon) Maintains a real-time database of the
devices that are connected to a system. Applications can use the HAL API to
discover and interact with newly attached devices. Primarily intended for use
on laptop and user desktop machines to support hot-plug devices.
Caution
358
Minimizing Active Services
Service Description
laptop and user desktop machines. Bluetooth provides an additional potential
attack surface. Disable this service on servers that do not require Bluetooth
functionality.
irqbalance Distributes hardware interrupts across processors on a multiprocessor system.
Disable this service on servers that do not require this functionality.
iscsi Controls logging in to iSCSI targets and scanning of iSCSI devices. Disable this
service on servers that do not access iSCSI devices.
iscsid Implements control and management for the iSCSI protocol. Disable this
service on servers that do not access iSCSI devices.
kdump Allows a kdump kernel to be loaded into memory at boot time or a kernel dump
to be saved if the system panics. Disable this service on servers that you do
not use for debugging or testing.
mcstrans Controls the SELinux Context Translation System service.
mdmonitor Checks the status of all software RAID arrays on the system. Disable this
service on servers that do not use software RAID.
messagebus Broadcasts notifications of system events and other messages relating to
hardware events via the system-wide D-BUS message bus.
Caution
You should consider disabling the following network services if they are not used on your system:
Service Description
avahi-daemon Implements Apple's Zero configuration networking (also known as Rendezvous
or Bonjour). Primarily intended for use on laptop and user desktop machines
to support music and file sharing. Disable this service on servers that do not
require this functionality.
359
Locking Down Network Services
Service Description
cups Implements the Common UNIX Printing System. Disable this service on
servers that do not need to provide this functionality.
hplip Implements HP Linux Imaging and Printing to support faxing, printing, and
scanning operations on HP inkjet and laser printers. Disable this service on
servers that do not require this functionality.
isdn (Integrated Services Digital Network) Provides support for network connections
over ISDN devices. Disable this service on servers that do not directly control
ISDN devices.
netfs Mounts and unmounts network file systems, including NCP, NFS, and SMB.
Disable this service on servers that do not require this functionality.
network Activates all network interfaces that are configured to start at boot time.
NetworkManager Switches network connections automatically to use the best connection that is
available.
nfslock Implements the Network Status Monitor (NSM) used by NFS. Disable this
service on servers that do not require this functionality.
nmb Provides NetBIOS name services used by Samba. Disable this service and
remove the samba package if the system is not acting as an Active Directory
server, a domain controller, or as a domain member, and it does not provide
Microsoft Windows file and print sharing functionality.
portmap Implements Remote Procedure Call (RPC) support for NFS. Disable this
service on servers that do not require this functionality.
rhnsd Queries the Unbreakable Linux Network (ULN) for updates and information.
rpcgssd Used by NFS. Disable this service on servers that do not require this
functionality.
rpcidmapd Used by NFS. Disable this service on servers that do not require this
functionality.
smb Provides SMB network services used by Samba. Disable this service and
remove the samba package if the system is not acting as an Active Directory
server, a domain controller, or as a domain member, and it does not provide
Microsoft Windows file and print sharing functionality.
To stop a service and prevent it from starting when you reboot the system, used the following commands:
# service service_name stop
# chkconfig service_name off
It is recommended that you do not install the xinetd Internet listener daemon.
If you do not need this service, remove the package altogether by using the yum
remove xinetd command.
If you must enable xinetd on your system, minimize the network services that xinetd can launch by
disabling those services that are defined in the configuration files in /etc/xinetd.d and which are not
needed.
360
Configuring a Packet-filtering Firewall
To counter potential Denial of Service (DoS) attacks, you can configure the resource limits for such
services by editing /etc/xinetd.conf and related configuration files. For example, you can set limits for
the connection rate, the number of connection instances to a service, and the number of connections from
an IP address:
# Maximum number of connections per second and
# number of seconds for which a service is disabled
# if the maximum number of connections is exceeded
cps = 50 10
For more information, see the xinetd(8) and /etc/xinetd.conf(5) manual pages.
The primary interfaces for configuring the packet-filter rules are the iptables and ip6tables utilities
and the Firewall Configuration Tool GUI (system-config-firewall). By default, the rules should drop
any packets that are not destined for a service that the server hosts or that originate from networks other
than those to which you want to allow access.
In addition, Netfilter provides Network Address Translation (NAT) to hide IP addresses behind a public IP
address, and IP masquerading to alter IP header information for routed packets. You can also set rule-
based packet logging and define a dedicated log file in /etc/syslog.conf.
kernel.randomize_va_space controls Address Space Layout Randomization (ASLR), which can help
defeat certain types of buffer overflow attacks. A value of 0 disables ASLR, 1 randomizes the positions of
the stack, virtual dynamic shared object (VDSO) page, and shared memory regions, and 2 randomizes
the positions of the stack, VDSO page, shared memory regions, and the data segment. The default and
recommended setting is 2.
361
Restricting Access to SSH Connections
To change the value of a kernel parameter, add the setting to /etc/sysctl.conf, for example:
kernel.randomize_va_space = 1
For example, the following setting does not allow root to log in using SSH:
PermitRootLogin no
You can restrict remote access to certain users and groups by specifying the AllowUsers,
AllowGroups, DenyUsers, and DenyGroups settings, for example:
DenyUsers carol dan
AllowUsers alice bob
The ClientAliveInterval and ClientAliveCountMax settings cause the SSH client to time out
automatically after a period of inactivity, for example:
# Disconnect client after 300 seconds of inactivity
ClientAliveCountMax 0
ClientAliveInterval 300
After making changes to the configuration file, restart the sshd service for your changes to take effect.
Establish disk quotas to prevent a user from accidentally or intentionally filling up a file system and denying
access to other users.
362
Configuring File System Mounts, File Permissions, and File Ownerships
To prevent the operating system files and utilities from being altered during an attack, mount the /usr file
system read-only. If you need to update any RPMs on the file system, use the -o remount,rw option
with the mount command to remount /usr for both read and write access. After performing the update,
use the -o remount,ro option to return the /usr file system to read-only mode.
To limit user access to non-root local file systems such as /tmp or removable storage partitions, specify
the -o noexec, nosuid, nodev options to mount. These option prevent the execution of binaries (but
not scripts), prevent the setuid bit from having any effect, and prevent the use of device files.
Use the find command to check for unowned files and directories on each file system, for example:
# find mount_point -mount -type f -nouser -o -nogroup -exec ls -l {} \;
# find mount_point -mount -type d -nouser -o -nogroup -exec ls -l {} \;
Unowned files and directories might be associated with a deleted user account, they might indicate an
error with software installation or deleting, or they might a sign of an intrusion on the system. Correct
the permissions and ownership of the files and directories that you find, or remove them. If possible,
investigate and correct the problem that led to their creation.
Use the find command to check for world-writable directories on each file system, for example:
# find mount_point -mount -type d -perm /o+w -exec ls -l {} \;
Investigate any world-writable directory that is owned by a user other than a system user. The user can
remove or change any file that other users write to the directory. Correct the permissions and ownership of
the directories that you find, or remove them.
You can also use find to check for setuid and setgid executables.
# find path -type f \( -perm -4000 -o -perm -2000 \) -exec ls -l {} \;
If the setuid and setgid bits are set, an executable can perform a task that requires other rights, such
as root privileges. However, buffer overrun attacks can exploit such executables to run unauthorized code
with the rights of the exploited process.
If you want to stop a setuid and setgid executable from being used by non-root users, you can use
the following commands to unset the setuid or setgid bit:
# chmod u-s file
# chmod g-s file
For example, you could use the chmod command to unset the setuid bit for the /bin/ping6 command:
# ls -al /bin/ping6
-rwsr-xr-x. 1 root root 36488 May 20 2011 /bin/ping6
# chmod u-s /bin/ping6
# ls -al /bin/ping6
-rwxr-xr-x. 1 root root 36488 May 20 2011 /bin/ping6
The following table lists programs for which you might want to consider unsetting setuid and setgid:
363
Checking User Accounts and Privileges
/sbin/mount.nfs4, /sbin/
umount.nfs, and /sbin/
umount.nfs4 are symbolic links to this
file.
/sbin/netreport setgid Requests notification of changes to network interfaces.
/usr/bin/chage setuid Finds out password aging information (via the -l option).
/usr/bin/chfn setuid Changes finger information.
/usr/bin/chsh setuid Changes the login shell.
/usr/bin/crontab setuid Edits, lists, or removes a crontab file.
/usr/bin/wall setgid Sends a system-wide message.
/usr/bin/write setgid Sends a message to another user.
/usr/bin/Xorg setuid Invokes the X Windows server.
/usr/libexec/openssh/ setuid Runs the SSH helper program for host-based authentication.
ssh-keysign
/usr/sbin/suexec setuid Switches user before executing external CGI and SSI
programs. This program is intended to be used by the
Apache HTTP server. For more information, see http://
httpd.apache.org/docs/2.2/suexec.html.
/usr/sbin/usernetctl setuid Controls network interfaces. Permission for a user to alter the
state of a network inerface also requires USERCTL=yes to be
set in the interface file. You can also grant users and groups
the privilege to run the ip command by creating a suitable
entry in the /etc/sudoers file.
Note
This list is not exhaustive as many optional packages contain setuid and setgid
programs.
In the output from this command, the second field shows if a user account is locked (LK), does not have a
password (NP), or has a valid password (PS). The third field shows the date on which the user last changed
their password. The remaining fields show the minimum age, maximum age, warning period, and inactivity
period for the password and additional information about the password's status. The unit of time is days.
Use the passwd command to set passwords on any accounts that are not protected.
364
Checking User Accounts and Privileges
Use passwd -l to lock unused accounts. Alternatively, use userdel to remove the accounts entirely.
For more information, see the passwd(1) and userdel(8) manual pages.
To specify how users' passwords are aged, edit the following settings in the /etc/login.defs file:
Setting Description
PASS_MAX_DAYS Maximum number of days for which a password can be used before it must be
changed. The default value is 99,999 days.
PASS_MIN_DAYS Minimum number of days that is allowed between password changes. The
default value is 0 days.
PASS_WARN_AGE Number of days warning that is given before a password expires. The default
value is 7 days.
To change how long a user's account can be inactive before it is locked, use the usermod command. For
example, to set the inactivity period to 30 days:
# usermod -f 30 username
To change the default inactivity period for new user accounts, use the useradd command:
# useradd -D -f 30
A value of -1 specifies that user accounts are not locked due to inactivity.
For more information, see the useradd(8) and usermod(8) manual pages.
If you install software that creates a default user account and password, change the vendor's default
password immediately. Centralized user authentication using an LDAP implementation such as OpenLDAP
can help to simplify user authentication and management tasks, and also reduces the risk arising from
unused accounts or accounts without a password.
By default, an Oracle Linux system is configured so that you cannot log in directly as root. You must log
in as a named user before using either su or sudo to perform tasks as root. This configuration allows
system accounting to trace the original login name of any user who performs a privileged administrative
action. If you want to grant certain users authority to be able to perform specific administrative tasks via
sudo, use the visudo command to modify the /etc/sudoers file. For example, the following entry
grants the user erin the same privileges as root when using sudo, but defines a limited set of privileges
to frank so that he can run commands such as chkconfig, service, rpm, and yum:
erin ALL=(ALL) ALL
frank ALL= SERVICES, SOFTWARE
365
Checking User Accounts and Privileges
PAM is highly customizable by its use of different modules with customisable parameters. For example,
the default password integrity checking module pam_cracklib.so tests password strength. The PAM
configuration file (/etc/pam.d/system-auth) contains the following default entries for testing a
password's strength:
password requisite pam_cracklib.so try_first_pass retry=3 type=
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password required pam_deny.so
The line for pam_cracklib.so defines that a user gets three attempts to choose a good password.
From the module's default settings, the password length must a minimum of six characters, of which three
characters must be different from the previous password.
The line for pam_unix.so specifies that the module is not to perform password checking (pam_cracklib
will already have performed such checks), to use SHA-512 password hashing, to allow access if the
existing password is null, and to use the /etc/shadow file.
You can modify the control flags and module parameters to change the checking that is performed when a
user changes his or her password, for example:
password required pam_cracklib.so retry=3 minlen=8 difok=5 minclass=-1
password required pam_unix.so use_authtok sha512 shadow remember=5
password required pam_deny.so
The line for pam_cracklib.so defines that a user gets three attempts to choose a good password with
a minimum of eight characters, of which five characters must be different from the previous password, and
which must contain at least one upper case letter, one lower case letter, one numeric digit, and one non-
alphanumeric character.
The line for pam_unix.so specifies that the module is not to perform password checking, to use
SHA-512 password hashing, to use the /etc/shadow file, and to save information about the previous five
passwords for each user in the /etc/security/opasswd file. As nullok is not specified, a user cannot
change his or her password if the existing password is null.
The omission of the try_first_pass keyword means that the user is always asked for their existing
password, even if he or she entered it for the same module or for a previous module in the stack.
For more information, see Section 23.7, About Pluggable Authentication Modules and the
pam_cracklib(8), pam_deny(8), pam_passwdqc(8), and pam_unix(8) manual pages.
366
Chapter 26 OpenSSH Configuration
Table of Contents
26.1 About OpenSSH ..................................................................................................................... 367
26.2 OpenSSH Configuration Files .................................................................................................. 367
26.2.1 OpenSSH User Configuration Files ............................................................................... 368
26.3 Configuring an OpenSSH Server ............................................................................................. 369
26.4 Installing the OpenSSH Client Packages .................................................................................. 369
26.5 Using the OpenSSH Utilities .................................................................................................... 369
26.5.1 Using ssh to Connect to Another System ...................................................................... 370
26.5.2 Using scp and sftp to Copy Files Between Systems ....................................................... 371
26.5.3 Using ssh-keygen to Generate Pairs of Authentication Keys ........................................... 372
26.5.4 Enabling Remote System Access Without Requiring a Password .................................... 372
This chapter describes how to configure OpenSSH to support secure communication between networked
systems.
Unlike utilities such as rcp, ftp, telnet, rsh, and rlogin, the OpenSSH tools encrypt all network
packets between the client and server, including password authentication.
OpenSSH supports SSH protocol version 1 (SSH1) and version 2 (SSH2). In addition, OpenSSH provides
a secure way of using graphical applications over a network by using X11 forwarding. It also provides a
way to secure otherwise insecure TCP/IP protocols by using port forwarding.
ssh_config Contains default client configuration settings that can be overridden by the
settings in a users ~/.ssh/config file.
367
OpenSSH User Configuration Files
Other files can be configured in this directory. For details, see the sshd(8) manual page.
For more information, see the ssh_config(5), sshd(8), and sshd_config(5) manual pages.
User configuration files are located in the .ssh directory in a user's home directory (~/.ssh) on both the
client and server. OpenSSH creates this directory and the known_hosts file when the user first uses an
OpenSSH utility to connect to a remote system.
In addition, the ~/.ssh directory usually contains one of the following pairs of key files:
id_dsa and id_dsa.pub Contain a user's SSH2 DSA private and public keys.
id_rsa and id_rsa.pub Contains a user's SSH2 RSA private and public keys. SSH2 RSA is
most commonly used key-pair type.
identity and identity.pub Contains a user's SSH1 RSA private and public keys.
Caution
The private key file can be readable and writable by the user but must not be
accessible to other users.
Caution
A config file can be readable and writable by the user but must not be accessible
to other users.
For more information, see the ssh(1) and ssh-keygen(1) manual pages.
authorized_keys Contains your authorized public keys. The server uses the signed public key in this
file to authenticate a client.
368
Configuring an OpenSSH Server
Caution
rc Contains commands that ssh executes when a user logs in, before the users shell
or command runs. This file is optional.
For more information, see the ssh(1) and ssh_config(5) manual pages.
The default Oracle Linux installation includes the openssh and openssh-server
packages, but does not enable the sshd service.
2. Start the sshd service and configure it to start following a system reboot:
# service sshd start
# chkconfig sshd on
You can set sshd configuration options for features such as Kerberos authentication, X11 forwarding, and
port forwarding in the /etc/ssh/sshd_config file.
For more information, see the sshd(8) and sshd_config(5) manual pages.
The default Oracle Linux installation includes the openssh and openssh-client
packages.
To configure an OpenSSH client, install or update the openssh and openssh-client packages:
# yum install openssh openssh-client
369
Using ssh to Connect to Another System
When you enter yes to accept the connection to the server, the client adds the servers public host key to
the your ~/.ssh/known_hosts file. When you next connect to the remote server, the client compares the
key in this file to the one that the server supplies. If the keys do not match, you see a warning such as the
following:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: POSSIBLE DNS SPOOFING DETECTED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
The RSA host key for host has changed,
and the key for the according IP address IP_address
is unchanged. This could either mean that
DNS SPOOFING is happening or the IP address for the host
and its host key have changed at the same time.
Offending key for IP in /home/user/.ssh/known_hosts:10
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is fingerprint
Please contact your system administrator.
Add correct host key in /home/user/.ssh/known_hosts to get rid of this message.
Offending key in /home/user/.ssh/known_hosts:53
RSA host key for host has changed and you have requested strict checking.
Host key verification failed.
Unless there is a reason for the remote servers host key to have changed, such as an upgrade of either
the SSH software or the server, you should not try to connect to that machine until you have contacted its
administrator about the situation.
host is the name of the remote OpenSSH server to which you want to connect.
For example, to log in to host04 with the same user name as on the local system, enter:
$ ssh host04
The remote system prompts you for your password on that system.
To connect as a different user, specify the user name and @ symbol before the remote host name, for
example:
$ ssh joe@host04
To execute a command on the remote system, specify the command as an argument, for example:
370
Using scp and sftp to Copy Files Between Systems
ssh logs you in, executes the command, and then closes the connection.
Copy testfile to the same directory but change its name to new_testfile:
The -r option allows you to recursively copy the contents of directories. For example, copy the directory
remdir and its contents from your home directory on remote host04 to your local home directory:
$ scp -r host04:~/remdir ~
The sftp command is a secure alternative to ftp for file transfer between systems. Unlike scp, sftp
allows you to browse the file system on the remote server before you copy any files.
For example:
$ sftp host04
Connecting to host04...
guest@host04s password: password
sftp>
Enter sftp commands at the sftp> prompt. For example, use put to upload the file newfile from the
local system to the remote system and ls to list it:
Enter help or ? to display a list of available commands. Enter bye, exit, or quit to close the connection
and exit sftp.
For more information, see the ssh(1) and sftp(1) manual pages.
371
Using ssh-keygen to Generate Pairs of Authentication Keys
To generate an SSH1 RSA or SSH2 DSA key pair, specify the -t rsa1 or -t dsa options.
For security, in case an attacker gains access to your private key, you can specify an passphrase to
encrypt your private key. If you encrypt your private key, you must enter this passphrase each time that
you use the key. If you do not specify a passphrase, you are not prompted.
ssh-keygen generates a private key file and a public key file in ~/.ssh (unless you specify an alternate
directory for the private key file):
$ ls -l ~/.ssh
total 8
-rw-------. 1 guest guest 1743 Apr 13 12:07 id_rsa
-rw-r--r--. 1 guest guest 397 Apr 13 12:07 id_rsa.pub
1. Use ssh-keygen to generate a public and private key pair, for example:
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa): <Enter>
Created directory '/home/user/.ssh'.
Enter passphrase (empty for no passphrase): <Enter>
Enter same passphrase again: <Enter>
372
Enabling Remote System Access Without Requiring a Password
...
Press Enter each time that the command prompts you to enter a passphrase.
2. Use the ssh-copy-id script to append the public key in the local ~/.ssh/id_rsa.pub file to the
~/.ssh/authorized_keys file on the remote system, for example:
$ ssh-copy-id remote_user@host
remote_user@host's password: remote_password
Now try logging into the machine, with "ssh 'remote_user@host'", and check in:
.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
The script also changes the permissions of ~/.ssh and ~/.ssh/authorized_keys on the remote
system to disallow access by your group.
You can now use the OpenSSH utilities to access the remote system without supplying a password.
As the script suggests, you should use ssh to log into the remote system to verify that the ~/.ssh/
authorized_keys file contains only the keys for the systems from which you expect to connect. For
example:
$ ssh remote_user@host
Last login: Thu Jun 13 08:33:58 2013 from local_host
host$ cat .ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6OabJhWABsZ4F3mcjEPT3sxnXx1OoUcvuCiM6fg5s/ER
... FF488hBOk2ebpo38fHPPK1/rsOEKX9Kp9QWH+IfASI8q09xQ== local_user@local_host
host$ logout
Connection to host closed.
$
3. Verify that the permissions on the remote ~/.ssh directory and ~/.ssh/authorized_keys file allow
access only by you:
$ ssh remote_user@host ls -al .ssh
total 4
drwx------+ 2 remote_user group 5 Jun 12 08:33 .
drwxr-xr-x+ 3 remote_user group 9 Jun 12 08:32 ..
-rw-------+ 1 remote_user group 397 Jun 12 08:33 authorized_keys
$ ssh remote_user@host getfacl .ssh
# file: .ssh
# owner: remote_user
# group: group
user::rwx
group::---
mask::rwx
other::---
373
Enabling Remote System Access Without Requiring a Password
Note
If your user names are the same on the client and the server systems, you do
not need to specify your remote user name and the @ symbol.
4. If your user names are different on the client and the server systems, create a ~/.ssh/config file
with permissions 600 on the remote system that defines your local user name, for example:
$ ssh remote_user@host echo -e "Host *\\\nUser local_user" '>>' .ssh/config
$ ssh remote_user@host cat .ssh/config
Host *
User local_user
$ ssh remote_user@host 'umask 077; /sbin/restorecon .ssh/config'
You should now be able to access the remote system without needing to specify your remote user
name, for example:
$ ssh host ls -l .ssh/config
-rw-------+ 1 remote_user group 37 Jun 12 08:34 .ssh/config
$ ssh host getfacl .ssh/config
# file: .ssh/config
# owner: remote_user
# group: group
user::rw-
group::---
mask::rwx
other::---
For more information, see the ssh-copy-id(1), ssh-keygen(1), and ssh_config(5) manual pages.
374