table of contents · vi unix and linux system administration handbook suggested background ..... 7...

35
v Tribute to Evi xl Preface xlii Foreword xliv Acknowledgments xlvi SECTION ONE: BASIC ADMINISTRATION Chapter 1 Where to Start 3 Essential duties of a system administrator ................................. 4 Controlling access .................................................. 4 Adding hardware ................................................... 4 Automating tasks ................................................... 4 Overseeing backups ................................................ 4 Installing and upgrading soſtware .................................... 5 Monitoring ........................................................ 5 Troubleshooting ................................................... 5 Maintaining local documentation .................................... 5 Vigilantly monitoring security ....................................... 6 Tuning performance ................................................ 6 Developing site policies ............................................. 6 Working with vendors .............................................. 6 Fire fighting ...................................................... 6 Table of Contents

Upload: others

Post on 27-Mar-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Table of Contents · vi UNIX and Linux System Administration Handbook Suggested background ..... 7 Linux distributions ..... 8

v

Tribute to Evi xlPreface xliiForeword xlivAcknowledgments xlvi

SECTION ONE: BASIC ADMINISTRATION

Chapter 1 Where to Start 3Essential duties of a system administrator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

Controlling access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4Adding hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4Automating tasks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4Overseeing backups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4Installing and upgrading software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5Monitoring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5Troubleshooting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5Maintaining local documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5Vigilantly monitoring security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6Tuning performance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6Developing site policies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6Working with vendors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6Fire fighting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

Table of Contents

Page 2: Table of Contents · vi UNIX and Linux System Administration Handbook Suggested background ..... 7 Linux distributions ..... 8

vi UNIX and Linux System Administration Handbook

Suggested background . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7Linux distributions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8Example systems used in this book . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

Example Linux distributions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10Example UNIX distribution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

Notation and typographical conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12Units . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13Man pages and other on-line documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

Organization of the man pages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14man: read man pages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15Storage of man pages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

Other authoritative documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16System-specific guides . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16Package-specific documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16Books . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17RFC publications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

Other sources of information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18Keeping current. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18HowTos and reference sites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19Conferences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

Ways to find and install software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19Determining if software is already installed . . . . . . . . . . . . . . . . . . . . . . . . . . . 21Adding new software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22Building software from source code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23Installing from a web script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

Where to host . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25Specialization and adjacent disciplines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

DevOps. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26Site reliability engineers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27Security operations engineers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27Network administrators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27Database administrators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27Network operations center (NOC) engineers . . . . . . . . . . . . . . . . . . . . . . . . . . 27Data center technicians . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28Architects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

Recommended reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28System administration and DevOps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28Essential tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

Page 3: Table of Contents · vi UNIX and Linux System Administration Handbook Suggested background ..... 7 Linux distributions ..... 8

Table of Contents vii

Chapter 2 Booting and System Management Daemons 30Boot process overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30System firmware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

BIOS vs. UEFI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32Legacy BIOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33UEFI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

Boot loaders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35GRUB: the GRand Unified Boot loader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

GRUB configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36The GRUB command line . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37Linux kernel options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

The FreeBSD boot process . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39The BIOS path: boot0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39The UEFI path . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39loader configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40loader commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

System management daemons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41Responsibilities of init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41Implementations of init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42Traditional init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43systemd vs. the world. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43inits judged and assigned their proper punishments . . . . . . . . . . . . . . . . . . . 44

systemd in detail. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44Units and unit files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45systemctl: manage systemd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46Unit statuses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47Targets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49Dependencies among units . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50Execution order . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51A more complex unit file example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52Local services and customizations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53Service and startup control caveats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54systemd logging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

FreeBSD init and startup scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57Reboot and shutdown procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

Shutting down physical systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59Shutting down cloud systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

Stratagems for a nonbooting system . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60Single-user mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61Single-user mode on FreeBSD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62Single-user mode with GRUB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62Recovery of cloud systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

Page 4: Table of Contents · vi UNIX and Linux System Administration Handbook Suggested background ..... 7 Linux distributions ..... 8

viii UNIX and Linux System Administration Handbook

Chapter 3 Access Control and Rootly Powers 65Standard UNIX access control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

Filesystem access control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66Process ownership . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67The root account . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67Setuid and setgid execution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

Management of the root account . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69Root account login . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69su: substitute user identity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70sudo: limited su . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

Example configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71sudo pros and cons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72sudo vs. advanced access control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73Typical setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74Environment management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74sudo without passwords . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75Precedence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75sudo without a control terminal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76Site-wide sudo configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76

Disabling the root account . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78System accounts other than root . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78

Extensions to the standard access control model . . . . . . . . . . . . . . . . . . . . . . . . . . . 79Drawbacks of the standard model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80PAM: Pluggable Authentication Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80Kerberos: network cryptographic authentication . . . . . . . . . . . . . . . . . . . . . . 81Filesystem access control lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81Linux capabilities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82Linux namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82

Modern access control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83Separate ecosystems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84Mandatory access control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84Role-based access control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85SELinux: Security-Enhanced Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85AppArmor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

Recommended reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89

Chapter 4 Process Control 90Components of a process . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90

PID: process ID number . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91PPID: parent PID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91UID and EUID: real and effective user ID . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92GID and EGID: real and effective group ID . . . . . . . . . . . . . . . . . . . . . . . . . . . 92Niceness . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93Control terminal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

Page 5: Table of Contents · vi UNIX and Linux System Administration Handbook Suggested background ..... 7 Linux distributions ..... 8

Table of Contents ix

The life cycle of a process . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94kill: send signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97Process and thread states . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97

ps: monitor processes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98Interactive monitoring with top . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101nice and renice: influence scheduling priority . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102The /proc filesystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104strace and truss: trace signals and system calls . . . . . . . . . . . . . . . . . . . . . . . . . . 105Runaway processes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107Periodic processes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

cron: schedule commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109The format of crontab files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110Crontab management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112Other crontabs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112cron access control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113

systemd timers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113Structure of systemd timers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114systemd timer example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114systemd time expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116Transient timers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117

Common uses for scheduled tasks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118Sending mail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118Cleaning up a filesystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118Rotating a log file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118Running batch jobs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118Backing up and mirroring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119

Chapter 5 The Filesystem 120Pathnames . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122Filesystem mounting and unmounting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122Organization of the file tree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125File types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126

Regular files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129Directories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129Hard links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129Character and block device files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130Local domain sockets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131Named pipes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131Symbolic links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131

Page 6: Table of Contents · vi UNIX and Linux System Administration Handbook Suggested background ..... 7 Linux distributions ..... 8

x UNIX and Linux System Administration Handbook

File attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132The permission bits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132The setuid and setgid bits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133The sticky bit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134ls: list and inspect files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134chmod: change permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136chown and chgrp: change ownership and group . . . . . . . . . . . . . . . . . . . . . . 137umask: assign default permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138Linux bonus flags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139

Access control lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140A cautionary note . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141ACL types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141Implementation of ACLs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142Linux ACL support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142FreeBSD ACL support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143POSIX ACLs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143

Interaction between traditional modes and ACLs . . . . . . . . . . . . . . . . . 144POSIX access determination . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146POSIX ACL inheritance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146

NFSv4 ACLs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147NFSv4 entities for which permissions can be specified . . . . . . . . . . . . . 148NFSv4 access determination . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149ACL inheritance in NFSv4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149NFSv4 ACL viewing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150Interactions between ACLs and modes . . . . . . . . . . . . . . . . . . . . . . . . . . 151NFSv4 ACL setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151

Chapter 6 Software Installation and Management 153Operating system installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154

Installing from the network . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154Setting up PXE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155Using kickstart, the automated installer for Red Hat and CentOS . . . . . . . 156

Setting up a kickstart configuration file . . . . . . . . . . . . . . . . . . . . . . . . . . 156Building a kickstart server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158Pointing kickstart at your config file . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158

Automating installation for Debian and Ubuntu . . . . . . . . . . . . . . . . . . . . . . 159Netbooting with Cobbler, the open source Linux provisioning server . . . . 161Automating FreeBSD installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161

Managing packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162Linux package management systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164

rpm: manage RPM packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164dpkg: manage .deb packages. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166

Page 7: Table of Contents · vi UNIX and Linux System Administration Handbook Suggested background ..... 7 Linux distributions ..... 8

Table of Contents xi

High-level Linux package management systems . . . . . . . . . . . . . . . . . . . . . . . . . . 166Package repositories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167RHN: the Red Hat Network . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169APT: the Advanced Package Tool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169Repository configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170An example /etc/apt/sources.list file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171Creation of a local repository mirror . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172APT automation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173yum: release management for RPM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174

FreeBSD software management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175The base system . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175pkg: the FreeBSD package manager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176The ports collection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177

Software localization and configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178Organizing your localization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179Structuring updates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179Limiting the field of play . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180Testing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180

Recommended reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181

Chapter 7 Scripting and the Shell 182Scripting philosophy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183

Write microscripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183Learn a few tools well . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184Automate all the things . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184Don’t optimize prematurely. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185Pick the right scripting language . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186Follow best practices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187

Shell basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189Command editing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190Pipes and redirection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190Variables and quoting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192Environment variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193Common filter commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194

cut: separate lines into fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194sort: sort lines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194uniq: print unique lines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195wc: count lines, words, and characters . . . . . . . . . . . . . . . . . . . . . . . . . . . 196tee: copy input to two places . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196head and tail: read the beginning or end of a file . . . . . . . . . . . . . . . . . 196grep: search text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197

Page 8: Table of Contents · vi UNIX and Linux System Administration Handbook Suggested background ..... 7 Linux distributions ..... 8

xii UNIX and Linux System Administration Handbook

sh scripting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198Execution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198From commands to scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199Input and output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201Spaces in filenames . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202Command-line arguments and functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203Control flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207Arithmetic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209

Regular expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209The matching process . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210Literal characters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210Special characters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210Example regular expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211Captures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213Greediness, laziness, and catastrophic backtracking . . . . . . . . . . . . . . . . . . . 213

Python programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215The passion of Python 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215Python 2 or Python 3? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216Python quick start . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216Objects, strings, numbers, lists, dictionaries, tuples, and files . . . . . . . . . . . 218Input validation example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221

Ruby programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223Ruby quick start . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224Blocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225Symbols and option hashes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227Regular expressions in Ruby . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227Ruby as a filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229

Library and environment management for Python and Ruby . . . . . . . . . . . . . . . 229Finding and installing packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229Creating reproducible environments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230Multiple environments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231

virtualenv: virtual environments for Python . . . . . . . . . . . . . . . . . . . . . 232RVM: the Ruby enVironment Manager . . . . . . . . . . . . . . . . . . . . . . . . . . 232

Revision control with Git . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235A simple Git example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236Git caveats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239Social coding with Git . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239

Recommended reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241Shells and shell scripting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241Regular expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242Ruby . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242

Page 9: Table of Contents · vi UNIX and Linux System Administration Handbook Suggested background ..... 7 Linux distributions ..... 8

Table of Contents xiii

Chapter 8 User Management 243Account mechanics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244The /etc/passwd file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245

Login name . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245Encrypted password . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246UID (user ID) number . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248Default GID (group ID) number . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249GECOS field . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249Home directory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250Login shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250

The Linux /etc/shadow file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250FreeBSD's /etc/master.passwd and /etc/login.conf files . . . . . . . . . . . . . . . . . . . 252

The /etc/master.passwd file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252The /etc/login.conf file. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253

The /etc/group file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254Manual steps for adding users . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255

Editing the passwd and group files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256Setting a password . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257Creating the home directory and installing startup files . . . . . . . . . . . . . . . . 257Setting home directory permissions and ownerships . . . . . . . . . . . . . . . . . . 259Configuring roles and administrative privileges . . . . . . . . . . . . . . . . . . . . . . 259Finishing up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260

Scripts for adding users: useradd, adduser, and newusers . . . . . . . . . . . . . . . . . 260useradd on Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261adduser on Debian and Ubuntu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262adduser on FreeBSD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262newusers on Linux: adding in bulk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263

Safe removal of a user’s account and files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264User login lockout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265Risk reduction with PAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266Centralized account management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266

LDAP and Active Directory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267Application-level single sign-on systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267Identity management systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268

Chapter 9 Cloud Computing 270The cloud in context . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271Cloud platform choices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273

Public, private, and hybrid clouds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273Amazon Web Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274Google Cloud Platform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275DigitalOcean . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275

Page 10: Table of Contents · vi UNIX and Linux System Administration Handbook Suggested background ..... 7 Linux distributions ..... 8

xiv UNIX and Linux System Administration Handbook

Cloud service fundamentals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276Access to the cloud . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277Regions and availability zones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278Virtual private servers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279Networking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280Storage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281Identity and authorization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281Automation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282Serverless functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282

Clouds: VPS quick start by platform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283Amazon Web Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283

aws: control AWS subsystems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284Creating an EC2 instance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284Viewing the console log . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286Stopping and terminating instances . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287

Google Cloud Platform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288Setting up gcloud . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288Running an instance on GCE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288

DigitalOcean . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289Cost control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291Recommended Reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293

Chapter 10 Logging 294Log locations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296

Files not to manage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298How to view logs in the systemd journal . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298

The systemd journal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299Configuring the systemd journal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300Adding more filtering options for journalctl . . . . . . . . . . . . . . . . . . . . . . . . . 301Coexisting with syslog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301

Syslog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302Reading syslog messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303Rsyslog architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304Rsyslog versions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304Rsyslog configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305

Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306sysklogd syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307Legacy directives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311RainerScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312

Config file examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314Basic rsyslog configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314Network logging client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315Central logging host . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316

Syslog message security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317Syslog configuration debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318

Page 11: Table of Contents · vi UNIX and Linux System Administration Handbook Suggested background ..... 7 Linux distributions ..... 8

Table of Contents xv

Kernel and boot-time logging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318Management and rotation of log files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319

logrotate: cross-platform log management . . . . . . . . . . . . . . . . . . . . . . . . . . 319newsyslog: log management on FreeBSD . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321

Management of logs at scale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321The ELK stack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321Graylog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322Logging as a service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323

Logging policies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323

Chapter 11 Drivers and the Kernel 325Kernel chores for system administrators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326Kernel version numbering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327

Linux kernel versions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327FreeBSD kernel versions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328

Devices and their drivers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328Device files and device numbers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329Challenges of device file management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330Manual creation of device files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331Modern device file management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331Linux device management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331

Sysfs: a window into the souls of devices . . . . . . . . . . . . . . . . . . . . . . . . . 332udevadm: explore devices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333Rules and persistent names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334

FreeBSD device management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337Devfs: automatic device file configuration . . . . . . . . . . . . . . . . . . . . . . . 337devd: higher-level device management . . . . . . . . . . . . . . . . . . . . . . . . . . 338

Linux kernel configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339Tuning Linux kernel parameters. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339Building a custom kernel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341

If it ain’t broke, don’t fix it . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341Setting up to build the Linux kernel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341Configuring kernel options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342Building the kernel binary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343

Adding a Linux device driver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344FreeBSD kernel configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344

Tuning FreeBSD kernel parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344Building a FreeBSD kernel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345

Loadable kernel modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346Loadable kernel modules in Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346Loadable kernel modules in FreeBSD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348

Booting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348Linux boot messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349FreeBSD boot messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353

Page 12: Table of Contents · vi UNIX and Linux System Administration Handbook Suggested background ..... 7 Linux distributions ..... 8

xvi UNIX and Linux System Administration Handbook

Booting alternate kernels in the cloud . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355Kernel errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356

Linux kernel errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356FreeBSD kernel panics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359

Recommended reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359

Chapter 12 Printing 360CUPS printing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361

Interfaces to the printing system . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361The print queue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362Multiple printers and queues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363Printer instances . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363Network printer browsing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363Filters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364

CUPS server administration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365Network print server setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365Printer autoconfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366Network printer configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367Printer configuration examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367Service shutoff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368Other configuration tasks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368

Troubleshooting tips . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369Print daemon restart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369Log files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369Direct printing connections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370Network printing problems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370

Recommended reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371

SECTION TWO: NETWORKING

Chapter 13 TCP/IP Networking 375TCP/IP and its relationship to the Internet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375

Who runs the Internet? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376Network standards and documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376

Networking basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378IPv4 and IPv6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379Packets and encapsulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381Ethernet framing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382Maximum transfer unit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382

Page 13: Table of Contents · vi UNIX and Linux System Administration Handbook Suggested background ..... 7 Linux distributions ..... 8

Table of Contents xvii

Packet addressing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384Hardware (MAC) addressing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384IP addressing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385Hostname “addressing” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385Ports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385Address types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386

IP addresses: the gory details . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387IPv4 address classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387IPv4 subnetting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388Tricks and tools for subnet arithmetic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390CIDR: Classless Inter-Domain Routing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391Address allocation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392Private addresses and network address translation (NAT) . . . . . . . . . . . . . . 392IPv6 addressing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394

IPv6 address notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395IPv6 prefixes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396Automatic host numbering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397Stateless address autoconfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397IPv6 tunneling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398IPv6 information sources. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398

Routing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398Routing tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399ICMP redirects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401

IPv4 ARP and IPv6 neighbor discovery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401DHCP: the Dynamic Host Configuration Protocol . . . . . . . . . . . . . . . . . . . . . . . . 402

DHCP software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403DHCP behavior . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404ISC’s DHCP software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404

Security issues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406IP forwarding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406ICMP redirects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407Source routing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407Broadcast pings and other directed broadcasts . . . . . . . . . . . . . . . . . . . . . . . 407IP spoofing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408Host-based firewalls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408Virtual private networks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409

Basic network configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410Hostname and IP address assignment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411Network interface and IP configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412Routing configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414DNS configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415System-specific network configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416

Page 14: Table of Contents · vi UNIX and Linux System Administration Handbook Suggested background ..... 7 Linux distributions ..... 8

xviii UNIX and Linux System Administration Handbook

Linux networking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417NetworkManager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417ip: manually configure a network . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418Debian and Ubuntu network configuration . . . . . . . . . . . . . . . . . . . . . . . . . . 419Red Hat and CentOS network configuration . . . . . . . . . . . . . . . . . . . . . . . . . 419Linux network hardware options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421Linux TCP/IP options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422Security-related kernel variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424

FreeBSD networking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425ifconfig: configure network interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425FreeBSD network hardware configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . 426FreeBSD boot-time network configuration. . . . . . . . . . . . . . . . . . . . . . . . . . . 426FreeBSD TCP/IP configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427

Network troubleshooting. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428ping: check to see if a host is alive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429traceroute: trace IP packets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431Packet sniffers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434

tcpdump: command-line packet sniffer . . . . . . . . . . . . . . . . . . . . . . . . . 435Wireshark and TShark: tcpdump on steroids . . . . . . . . . . . . . . . . . . . . . 436

Network monitoring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437SmokePing: gather ping statistics over time . . . . . . . . . . . . . . . . . . . . . . . . . . 437iPerf: track network performance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437Cacti: collect and graph data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438

Firewalls and NAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440Linux iptables: rules, chains, and tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440

iptables rule targets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441iptables firewall setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442A complete example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442Linux NAT and packet filtering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444

IPFilter for UNIX systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445Cloud networking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 448

AWS’s virtual private cloud (VPC) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 448Subnets and routing tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449Security groups and NACLs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450A sample VPC architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451Creating a VPC with Terraform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452

Google Cloud Platform networking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455DigitalOcean networking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456

Recommended reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457History . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457Classics and bibles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 458Protocols . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 458

Page 15: Table of Contents · vi UNIX and Linux System Administration Handbook Suggested background ..... 7 Linux distributions ..... 8

Table of Contents xix

Chapter 14 Physical Networking 459Ethernet: the Swiss Army knife of networking . . . . . . . . . . . . . . . . . . . . . . . . . . . . 460

Ethernet signaling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 460Ethernet topology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461Unshielded twisted-pair cabling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462Optical fiber . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 464Ethernet connection and expansion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465

Hubs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465Switches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465VLAN-capable switches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466Routers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467

Autonegotiation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467Power over Ethernet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468Jumbo frames . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468

Wireless: Ethernet for nomads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469Wireless standards . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469Wireless client access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470Wireless infrastructure and WAPs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470

Wireless topology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471Small money wireless . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 472Big money wireless . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 472

Wireless security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473SDN: software-defined networking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473Network testing and debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474Building wiring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475

UTP cabling options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475Connections to offices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475Wiring standards . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475

Network design issues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 476Network architecture vs. building architecture . . . . . . . . . . . . . . . . . . . . . . . 477Expansion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 477Congestion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 478Maintenance and documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 478

Management issues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 478Recommended vendors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479

Cables and connectors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479Test equipment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480Routers/switches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480

Recommended reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480

Page 16: Table of Contents · vi UNIX and Linux System Administration Handbook Suggested background ..... 7 Linux distributions ..... 8

xx UNIX and Linux System Administration Handbook

Chapter 15 IP Routing 481Packet forwarding: a closer look . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 482Routing daemons and routing protocols . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485

Distance-vector protocols . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486Link-state protocols . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487Cost metrics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487Interior and exterior protocols . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 488

Protocols on parade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 488RIP and RIPng: Routing Information Protocol . . . . . . . . . . . . . . . . . . . . . . . 488OSPF: Open Shortest Path First . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489EIGRP: Enhanced Interior Gateway Routing Protocol . . . . . . . . . . . . . . . . . 490BGP: Border Gateway Protocol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490

Routing protocol multicast coordination . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490Routing strategy selection criteria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490Routing daemons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492

routed: obsolete RIP implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492Quagga: mainstream routing daemon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493XORP: router in a box . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494

Cisco routers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494Recommended reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496

Chapter 16 DNS: The Domain Name System 498DNS architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499

Queries and responses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499DNS service providers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 500

DNS for lookups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 500resolv.conf: client resolver configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . 500nsswitch.conf: who do I ask for a name? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 501

The DNS namespace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502Registering a domain name . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503Creating your own subdomains . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503

How DNS works . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503Name servers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504Authoritative and caching-only servers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 505Recursive and nonrecursive servers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 505Resource records . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 506Delegation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 506Caching and efficiency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 508Multiple answers and round robin DNS load balancing . . . . . . . . . . . . . . . . 508Debugging with query tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 509

The DNS database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 512Parser commands in zone files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 512Resource records . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513The SOA record . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 516

Page 17: Table of Contents · vi UNIX and Linux System Administration Handbook Suggested background ..... 7 Linux distributions ..... 8

Table of Contents xxi

NS records . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518A records . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 519AAAA records . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 519PTR records . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 520MX records . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521CNAME records . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 522SRV records . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523TXT records . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 524SPF, DKIM, and DMARC records . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 525DNSSEC records . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 525

The BIND software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 525Components of BIND . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 525Configuration files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 526The include statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 527The options statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 528The acl statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 534The (TSIG) key statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 534The server statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535The masters statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535The logging statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 536The statistics-channels statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 536The zone statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 536

Configuring the master server for a zone . . . . . . . . . . . . . . . . . . . . . . . . 537Configuring a slave server for a zone . . . . . . . . . . . . . . . . . . . . . . . . . . . . 538Setting up the root server hints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 539Setting up a forwarding zone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 539

The controls statement for rndc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 540Split DNS and the view statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541BIND configuration examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 543

The localhost zone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 543A small security company . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 544

Zone file updating . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 547Zone transfers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 548Dynamic updates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 549

DNS security issues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 551Access control lists in BIND, revisited . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 552Open resolvers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 553Running in a chrooted jail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554Secure server-to-server communication with TSIG and TKEY . . . . . . . . . 554Setting up TSIG for BIND . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555DNSSEC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 557DNSSEC policy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 558DNSSEC resource records . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 558Turning on DNSSEC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 560Key pair generation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 560

Page 18: Table of Contents · vi UNIX and Linux System Administration Handbook Suggested background ..... 7 Linux distributions ..... 8

xxii UNIX and Linux System Administration Handbook

Zone signing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 562The DNSSEC chain of trust . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 564DNSSEC key rollover . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 565DNSSEC tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 566

ldns tools, nlnetlabs.nl/projects/ldns . . . . . . . . . . . . . . . . . . . . . . . . . . . . 566dnssec-tools.org . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 566RIPE tools, ripe.net . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567OpenDNSSEC, opendnssec.org . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567

Debugging DNSSEC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567BIND debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 568

Logging in BIND . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 568Channels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 569Categories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 570Log messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 570Sample BIND logging configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573Debug levels in BIND . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573

Name server control with rndc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 574Command-line querying for lame delegations . . . . . . . . . . . . . . . . . . . . . . . . 575

Recommended reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576Books and other documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 577On-line resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 577The RFCs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 577

Chapter 17 Single Sign-On 578Core SSO elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 579LDAP: “lightweight” directory services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 580

Uses for LDAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 580The structure of LDAP data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 581OpenLDAP: the traditional open source LDAP server . . . . . . . . . . . . . . . . . 582389 Directory Server: alternative open source LDAP server . . . . . . . . . . . . 583LDAP Querying . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 584Conversion of passwd and group files to LDAP . . . . . . . . . . . . . . . . . . . . . . 585

Using directory services for login . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 586Kerberos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 586

Linux Kerberos configuration for AD integration . . . . . . . . . . . . . . . . . 587FreeBSD Kerberos configuration for AD integration . . . . . . . . . . . . . . 587

sssd: the System Security Services Daemon . . . . . . . . . . . . . . . . . . . . . . . . . . 589nsswitch.conf: the name service switch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 590PAM: cooking spray or authentication wonder? . . . . . . . . . . . . . . . . . . . . . . 590

PAM configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 591PAM example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 592

Alternative approaches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594NIS: the Network Information Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594rsync: transfer files securely . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594

Recommended reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 595

Page 19: Table of Contents · vi UNIX and Linux System Administration Handbook Suggested background ..... 7 Linux distributions ..... 8

Table of Contents xxiii

Chapter 18 Electronic Mail 596Mail system architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 597

User agents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 597Submission agents. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 598Transport agents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 598Local delivery agents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 599Message stores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 599Access agents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 599

Anatomy of a mail message . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 600The SMTP protocol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 603

You had me at EHLO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 604SMTP error codes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 604SMTP authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 604

Spam and malware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 605Forgeries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 606SPF and Sender ID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 606DKIM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 607

Message privacy and encryption . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 607Mail aliases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 608

Getting aliases from files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 610Mailing to files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 611Mailing to programs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 611Building the hashed alias database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612

Email configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612sendmail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 613

The switch file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 614Starting sendmail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 615Mail queues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 616sendmail configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 617The m4 preprocessor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 617The sendmail configuration pieces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 618A configuration file built from a sample .mc file . . . . . . . . . . . . . . . . . . . . . . 619Configuration primitives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 620Tables and databases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 620Generic macros and features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 621

OSTYPE macro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 621DOMAIN macro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 621MAILER macro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 622FEATURE macro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 622use_cw_file feature . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 622redirect feature . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 623always_add_domain feature. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 623access_db feature . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 623virtusertable feature . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 624

Page 20: Table of Contents · vi UNIX and Linux System Administration Handbook Suggested background ..... 7 Linux distributions ..... 8

xxiv UNIX and Linux System Administration Handbook

ldap_routing feature . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 624Masquerading features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 625MAIL_HUB and SMART_HOST macros . . . . . . . . . . . . . . . . . . . . . . . . . . . . 626

Client configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 626m4 configuration options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 627Spam-related features in sendmail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 628

Relay control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 629User or site blacklisting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 630Throttles, rates, and connection limits . . . . . . . . . . . . . . . . . . . . . . . . . . . 631

Security and sendmail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 632Ownerships . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 633Permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 634Safer mail to files and programs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 634Privacy options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 635Running a chrooted sendmail (for the truly paranoid) . . . . . . . . . . . . 636Denial of service attacks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 636TLS: Transport Layer Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 637

sendmail testing and debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 638Queue monitoring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 638Logging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 639

Exim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 640Exim installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 640Exim startup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 642Exim utilities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 642Exim configuration language . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 643Exim configuration file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 644Global options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 645

Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 645Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 646Macros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 647

Access control lists (ACLs) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 647Content scanning at ACL time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 650Authenticators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 651Routers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 652

The accept router . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 653The dnslookup router . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 653The manualroute router . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 653The redirect router . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 654Per-user filtering through .forward files . . . . . . . . . . . . . . . . . . . . . . . . . 655

Transports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 655The appendfile transport . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 655The smtp transport . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 656

Retry configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 656Rewriting configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 657Local scan function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 657

Page 21: Table of Contents · vi UNIX and Linux System Administration Handbook Suggested background ..... 7 Linux distributions ..... 8

Table of Contents xxv

Logging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 657Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 658

Postfix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 658Postfix architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 659

Receiving mail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 659Managing mail-waiting queues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 660Sending mail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 660

Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 661Postfix commands and documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 661Postfix configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 661

What to put in main.cf. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 662Basic settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 662Null client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 662Use of postconf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 663Lookup tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 663Local delivery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 664

Virtual domains . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 665Virtual alias domains . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 666Virtual mailbox domains . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 667

Access control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 667Access tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 669Authentication of clients and encryption . . . . . . . . . . . . . . . . . . . . . . . . 670

Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 670Looking at the queue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 671Soft-bouncing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 671

Recommended reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 672sendmail references . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 672Exim references . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 672Postfix references . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 672RFCs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 673

Chapter 19 Web Hosting 674HTTP: the Hypertext Transfer Protocol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 674

Uniform Resource Locators (URLs) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 675Structure of an HTTP transaction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 676

HTTP requests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 677HTTP responses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 677Headers and the message body . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 678

curl: HTTP from the command line . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 679TCP connection reuse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 680HTTP over TLS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 681Virtual hosts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 681

Page 22: Table of Contents · vi UNIX and Linux System Administration Handbook Suggested background ..... 7 Linux distributions ..... 8

xxvi UNIX and Linux System Administration Handbook

Web software basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 682Web servers and HTTP proxy software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 683Load balancers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 684Caches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 686

Browser caches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 687Proxy cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 688Reverse proxy cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 688Cache problems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 688Cache software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 689

Content delivery networks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 689Languages of the web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 691

Ruby . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 691Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 691Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 691Node.js . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 691PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 692Go . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 692

Application programming interfaces (APIs) . . . . . . . . . . . . . . . . . . . . . . . . . . 692Web hosting in the cloud . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 694

Build versus buy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 694Platform-as-a-Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 695Static content hosting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 695Serverless web applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 696

Apache httpd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 696httpd in use . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 697httpd configuration logistics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 698Virtual host configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 699

HTTP basic authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 701Configuring TLS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 702Running web applications within Apache . . . . . . . . . . . . . . . . . . . . . . . . 702

Logging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 703NGINX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 704

Installing and running NGINX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 704Configuring NGINX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 705Configuring TLS for NGINX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 708Load balancing with NGINX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 708

HAProxy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 710Health checks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 711Server statistics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 712Sticky sessions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 712TLS termination . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 713

Recommended reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 714

Page 23: Table of Contents · vi UNIX and Linux System Administration Handbook Suggested background ..... 7 Linux distributions ..... 8

Table of Contents xxvii

SECTION THREE: STORAGE

Chapter 20 Storage 717I just want to add a disk! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 718

Linux recipe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 719FreeBSD recipe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 720

Storage hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 721Hard disks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 722

Hard disk reliability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 723Failure modes and metrics. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 723Drive types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 724Warranties and retirement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 725

Solid state disks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 725Rewritability limits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 726Flash memory and controller types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 726Page clusters and pre-erasing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 727SSD reliability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 727

Hybrid drives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 728Advanced Format and 4KiB blocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 729

Storage hardware interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 730The SATA interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 730The PCI Express interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 730The SAS interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 731USB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 732

Attachment and low-level management of drives . . . . . . . . . . . . . . . . . . . . . . . . . 733Installation verification at the hardware level . . . . . . . . . . . . . . . . . . . . . . . . . 733Disk device files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 734Ephemeral device names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 735Formatting and bad block management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 735ATA secure erase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 737hdparm and camcontrol: set disk and interface parameters . . . . . . . . . . . . 738Hard disk monitoring with SMART . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 738

The software side of storage: peeling the onion . . . . . . . . . . . . . . . . . . . . . . . . . . . 739Elements of a storage system . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 740The Linux device mapper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 742

Disk partitioning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 742Traditional partitioning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 744MBR partitioning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 745GPT: GUID partition tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 746Linux partitioning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 746FreeBSD partitioning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 747

Page 24: Table of Contents · vi UNIX and Linux System Administration Handbook Suggested background ..... 7 Linux distributions ..... 8

xxviii UNIX and Linux System Administration Handbook

Logical volume management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 747Linux logical volume management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 748

Volume snapshots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 750Filesystem resizing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 751

FreeBSD logical volume management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 753RAID: redundant arrays of inexpensive disks . . . . . . . . . . . . . . . . . . . . . . . . . . . . 753

Software vs. hardware RAID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 753RAID levels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 754Disk failure recovery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 756Drawbacks of RAID 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 757mdadm: Linux software RAID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 758

Creating an array. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 758mdadm.conf: document array configuration . . . . . . . . . . . . . . . . . . . . . 760Simulating a failure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 761

Filesystems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 762Traditional filesystems: UFS, ext4, and XFS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 763

Filesystem terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 764Filesystem polymorphism . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 765Filesystem formatting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 766fsck: check and repair filesystems. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 766Filesystem mounting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 767Setup for automatic mounting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 768USB drive mounting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 770Swapping recommendations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 770

Next-generation filesystems: ZFS and Btrfs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 772Copy-on-write . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 772Error detection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 772Performance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 773

ZFS: all your storage problems solved . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 773ZFS on Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 774ZFS architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 774Example: disk addition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 775Filesystems and properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 776Property inheritance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 777One filesystem per user . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 778Snapshots and clones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 779Raw volumes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 780Storage pool management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 781

Btrfs: “ZFS lite” for Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 783Btrfs vs. ZFS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 783Setup and storage conversion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 784Volumes and subvolumes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 786Volume snapshots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 787Shallow copies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 788

Page 25: Table of Contents · vi UNIX and Linux System Administration Handbook Suggested background ..... 7 Linux distributions ..... 8

Table of Contents xxix

Data backup strategy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 788Recommended reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 790

Chapter 21 The Network File System 791Meet network file services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 791

The competition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 792Issues of state . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 792Performance concerns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 793Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 793

The NFS approach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 794Protocol versions and history . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 794Remote procedure calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 795Transport protocols . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 795State . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 796Filesystem exports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 796File locking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 797Security concerns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 798Identity mapping in version 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 799Root access and the nobody account . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 800Performance considerations in version 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 801

Server-side NFS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 801Linux exports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 802FreeBSD exports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 804nfsd: serve files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 806

Client-side NFS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 807Mounting remote filesystems at boot time . . . . . . . . . . . . . . . . . . . . . . . . . . . 810Restricting exports to privileged ports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 810

Identity mapping for NFS version 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 810nfsstat: dump NFS statistics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 811Dedicated NFS file servers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 812Automatic mounting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 812

Indirect maps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 814Direct maps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 814Master maps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 815Executable maps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 815Automount visibility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 816Replicated filesystems and automount . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 816Automatic automounts (V3; all but Linux) . . . . . . . . . . . . . . . . . . . . . . . . . . . 817Specifics for Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 817

Recommended reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 818

Page 26: Table of Contents · vi UNIX and Linux System Administration Handbook Suggested background ..... 7 Linux distributions ..... 8

xxx UNIX and Linux System Administration Handbook

Chapter 22 SMB 819Samba: SMB server for UNIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 820Installing and configuring Samba . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 821

File sharing with local authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 822File sharing with accounts authenticated by Active Directory . . . . . . . . . . . 822Configuring shares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 823

Sharing home directories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 823Sharing project directories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 824

Mounting SMB file shares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 825Browsing SMB file shares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 826Ensuring Samba security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 826Debugging Samba . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 827

Querying Samba’s state with smbstatus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 827Configuring Samba logging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 828Managing character sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 829

Recommended reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 829

SECTION FOUR: OPERATIONS

Chapter 23 Configuration Management 833Configuration management in a nutshell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 834Dangers of configuration management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 834Elements of configuration management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 835

Operations and parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 835Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 837Facts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 838Change handlers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 838Bindings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 838Bundles and bundle repositories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 839Environments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 839Client inventory and registration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 840

Popular CM systems compared . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 841Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 842Business models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 842Architectural options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 843Language options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 845Dependency management options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 846General comments on Chef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 848General comments on Puppet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 849General comments on Ansible and Salt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 850YAML: a rant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 850

Page 27: Table of Contents · vi UNIX and Linux System Administration Handbook Suggested background ..... 7 Linux distributions ..... 8

Table of Contents xxxi

Introduction to Ansible . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 852Ansible example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 853Client setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 855Client groups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 857Variable assignments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 858Dynamic and computed client groups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 859Task lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 860state parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 862Iteration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 862Interaction with Jinja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 863Template rendering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 863Bindings: plays and playbooks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 864Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 866Recommendations for structuring the configuration base . . . . . . . . . . . . . . 868Ansible access options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 869

Introduction to Salt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 871Minion setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 873Variable value binding for minions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 874Minion matching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 876Salt states . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 877Salt and Jinja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 878State IDs and dependencies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 880State and execution functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 882Parameters and names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 883State binding to minions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 886Highstates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 886Salt formulas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 887Environments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 888Documentation roadmap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 892

Ansible and Salt compared . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 893Deployment flexibility and scalability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 893Built-in modules and extensibility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 894Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 894Miscellaneous . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 895

Best practices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 895Recommended reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 899

Chapter 24 Virtualization 900Virtual vernacular . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 901

Hypervisors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 901Full virtualization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 901Paravirtualization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 902Hardware-assisted virtualization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 902Paravirtualized drivers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 902

Page 28: Table of Contents · vi UNIX and Linux System Administration Handbook Suggested background ..... 7 Linux distributions ..... 8

xxxii UNIX and Linux System Administration Handbook

Modern virtualization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 903Type 1 vs. type 2 hypervisors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 903

Live migration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 904Virtual machine images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 904Containerization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 904

Virtualization with Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 905Xen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 906Xen guest installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 907KVM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 908KVM guest installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 909

FreeBSD bhyve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 910VMware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 910VirtualBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 911Packer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 911Vagrant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 913Recommended reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 914

Chapter 25 Containers 915Background and core concepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 916

Kernel support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 917Images. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 917Networking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 918

Docker: the open source container engine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 919Basic architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 919Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 921Client setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 921The container experience . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 922Volumes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 926Data volume containers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 927Docker networks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 927

Namespaces and the bridge network . . . . . . . . . . . . . . . . . . . . . . . . . . . . 928Network overlays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 930

Storage drivers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 930dockerd option editing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 930Image building . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 932

Choosing a base image . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 933Building from a Dockerfile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 933Composing a derived Dockerfile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 934

Registries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 936

Page 29: Table of Contents · vi UNIX and Linux System Administration Handbook Suggested background ..... 7 Linux distributions ..... 8

Table of Contents xxxiii

Containers in practice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 937Logging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 938Security advice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 939

Restrict access to the daemon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 939Use TLS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 940Run processes as unprivileged users . . . . . . . . . . . . . . . . . . . . . . . . . . . . 940Use a read-only root filesystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 941Limit capabilities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 941Secure images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 941

Debugging and troubleshooting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 942Container clustering and management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 942

A synopsis of container management software . . . . . . . . . . . . . . . . . . . . . . . . 944Kubernetes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 944Mesos and Marathon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 946Docker Swarm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 947AWS EC2 Container Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 947

Recommended reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 948

Chapter 26 Continuous Integration and Delivery 949CI/CD essentials . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 951

Principles and practices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 951Use revision control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 952Build once, deploy often . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 952Automate end-to-end . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 952Build every integration commit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 952Share responsibility. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 953Build fast, fix fast . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 953Audit and verify . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 953

Environments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 953Feature flags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 955

Pipelines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 955The build process. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 956Testing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 957Deployment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 959Zero-downtime deployment techniques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 960

Jenkins: the open source automation server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 961Basic Jenkins concepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 962Distributed builds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 963Pipeline as code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 963

Page 30: Table of Contents · vi UNIX and Linux System Administration Handbook Suggested background ..... 7 Linux distributions ..... 8

xxxiv UNIX and Linux System Administration Handbook

CI/CD in practice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 964UlsahGo, a trivial web application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 966Unit testing UlsahGo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 966Taking first steps with the Jenkins Pipeline . . . . . . . . . . . . . . . . . . . . . . . . . . . 968Building a DigitalOcean image . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 970Provisioning a single system for testing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 972Testing the droplet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 975Deploying UlsahGo to a pair of droplets and a load balancer . . . . . . . . . . . 976Concluding the demonstration pipeline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 977

Containers and CI/CD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 978Containers as a build environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 979Container images as build artifacts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 979

Recommended reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 980

Chapter 27 Security 981Elements of security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 983How security is compromised . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 983

Social engineering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 983Software vulnerabilities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 984Distributed denial-of-service attacks (DDoS) . . . . . . . . . . . . . . . . . . . . . . . . 985Insider abuse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 986Network, system, or application configuration errors . . . . . . . . . . . . . . . . . . 986

Basic security measures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 987Software updates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 987Unnecessary services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 988Remote event logging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 989Backups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 989Viruses and worms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 989Root kits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 990Packet filtering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 991Passwords and multifactor authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . 991Vigilance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 991Application penetration testing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 992

Passwords and user accounts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 992Password changes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 993Password vaults and password escrow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 993Password aging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 995Group logins and shared logins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 996User shells . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 996Rootly entries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 996

Page 31: Table of Contents · vi UNIX and Linux System Administration Handbook Suggested background ..... 7 Linux distributions ..... 8

Table of Contents xxxv

Security power tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 996Nmap: network port scanner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 996Nessus: next-generation network scanner . . . . . . . . . . . . . . . . . . . . . . . . . . . . 998Metasploit: penetration testing software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 999Lynis: on-box security auditing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 999John the Ripper: finder of insecure passwords . . . . . . . . . . . . . . . . . . . . . . .1000Bro: the programmable network intrusion detection system . . . . . . . . . . .1000Snort: the popular network intrusion detection system . . . . . . . . . . . . . . . 1001OSSEC: host-based intrusion detection . . . . . . . . . . . . . . . . . . . . . . . . . . . .1002

OSSEC basic concepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1002OSSEC installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1003OSSEC configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1004

Fail2Ban: brute-force attack response system . . . . . . . . . . . . . . . . . . . . . . . .1004Cryptography primer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1005

Symmetric key cryptography . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1005Public key cryptography . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1006Public key infrastructure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1007Transport Layer Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1009Cryptographic hash functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1009Random number generation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1011Cryptographic software selection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1012The openssl command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1012

Preparing keys and certificates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1013Debugging TLS servers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1014

PGP: Pretty Good Privacy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1014Kerberos: a unified approach to network security . . . . . . . . . . . . . . . . . . . 1015

SSH, the Secure SHell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1016OpenSSH essentials . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1016The ssh client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1018Public key authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1019The ssh-agent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1020Host aliases in ~/.ssh/config . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1022Connection multiplexing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1023Port forwarding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1023sshd: the OpenSSH server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1024Host key verification with SSHFP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1026File transfers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1027Alternatives for secure logins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1027

Firewalls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1027Packet-filtering firewalls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1028Filtering of services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1028Stateful inspection firewalls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1029Firewalls: safe? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1029

Page 32: Table of Contents · vi UNIX and Linux System Administration Handbook Suggested background ..... 7 Linux distributions ..... 8

xxxvi UNIX and Linux System Administration Handbook

Virtual private networks (VPNs) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1030IPsec tunnels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1030All I need is a VPN, right? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1031

Certifications and standards . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1031Certifications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1031Security standards . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1032

ISO 27001:2013 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1032PCI DSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1033NIST 800 series . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1033The Common Criteria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1034OWASP: the Open Web Application Security Project . . . . . . . . . . . . .1034CIS: the Center for Internet Security . . . . . . . . . . . . . . . . . . . . . . . . . . .1034

Sources of security information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1034SecurityFocus.com, the BugTraq mailing list, and the OSS mailing list . . 1035Schneier on Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1035The Verizon Data Breach Investigations Report . . . . . . . . . . . . . . . . . . . . . . 1035The SANS Institute . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1035Distribution-specific security resources . . . . . . . . . . . . . . . . . . . . . . . . . . . .1036Other mailing lists and web sites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1036

When your site has been attacked . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1037Recommended reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1038

Chapter 28 Monitoring 1040An overview of monitoring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1041

Instrumentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1042Data types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1042Intake and processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1043Notifications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1043Dashboards and UIs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1044

The monitoring culture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1044The monitoring platforms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1045

Open source real-time platforms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1046Nagios and Icinga . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1046Sensu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1047

Open source time-series platforms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1047Graphite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1047Prometheus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1048InfluxDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1049Munin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1049

Open source charting platforms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1049Commercial monitoring platforms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1050Hosted monitoring platforms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1051

Page 33: Table of Contents · vi UNIX and Linux System Administration Handbook Suggested background ..... 7 Linux distributions ..... 8

Table of Contents xxxvii

Data collection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1051StatsD: generic data submission protocol . . . . . . . . . . . . . . . . . . . . . . . . . . .1052Data harvesting from command output . . . . . . . . . . . . . . . . . . . . . . . . . . . .1054

Network monitoring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1055Systems monitoring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1056

Commands for systems monitoring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1057collectd: generalized system data harvester . . . . . . . . . . . . . . . . . . . . . . . . . 1057sysdig and dtrace: execution tracers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1058

Application monitoring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1059Log monitoring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1059Supervisor + Munin: a simple option for limited domains . . . . . . . . . . . .1060Commercial application monitoring tools . . . . . . . . . . . . . . . . . . . . . . . . . .1060

Security monitoring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1061System integrity verification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1061Intrusion detection monitoring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1062

SNMP: the Simple Network Management Protocol . . . . . . . . . . . . . . . . . . . . . . 1063SNMP organization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1064SNMP protocol operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1065Net-SNMP: tools for servers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1065

Tips and tricks for monitoring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1068Recommended reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1069

Chapter 29 Performance Analysis 1070Performance tuning philosophy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1071Ways to improve performance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1073Factors that affect performance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1074Stolen CPU cycles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1075Analysis of performance problems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1076System performance checkup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1077

Taking stock of your equipment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1077Gathering performance data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1079Analyzing CPU usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1079Understanding how the system manages memory . . . . . . . . . . . . . . . . . . . 1081Analyzing memory usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1082Analyzing disk I/O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1084fio: testing storage subsystem performance . . . . . . . . . . . . . . . . . . . . . . . . . 1085sar: collecting and reporting statistics over time . . . . . . . . . . . . . . . . . . . . .1086Choosing a Linux I/O scheduler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1086perf: profiling Linux systems in detail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1087

Help! My server just got really slow! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1088Recommended reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1090

Page 34: Table of Contents · vi UNIX and Linux System Administration Handbook Suggested background ..... 7 Linux distributions ..... 8

xxxviii UNIX and Linux System Administration Handbook

Chapter 30 Data Center Basics 1091Racks. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1092Power . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1092

Rack power requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1093kVA vs. kW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1094Energy efficiency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1095Metering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1095Cost . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1096Remote control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1096

Cooling and environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1096Cooling load estimation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1097

Roof, walls, and windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1097Electronic gear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1097Light fixtures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1098Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1098Total heat load . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1098

Hot aisles and cold aisles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1098Humidity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1100Environmental monitoring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1100

Data center reliability tiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1101Data center security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1102

Location . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1102Perimeter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1102Facility access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1102Rack access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1103

Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1103Recommended reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1104

Chapter 31 Methodology, Policy, and Politics 1105The grand unified theory: DevOps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1106

DevOps is CLAMS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1107Culture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1107Lean . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1108Automation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1109Measurement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1110Sharing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1110

System administration in a DevOps world . . . . . . . . . . . . . . . . . . . . . . . . . .1110Ticketing and task management systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1111

Common functions of ticketing systems . . . . . . . . . . . . . . . . . . . . . . . . . . . .1112Ticket ownership . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1112User acceptance of ticketing systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1113Sample ticketing systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1114Ticket dispatching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1114

Page 35: Table of Contents · vi UNIX and Linux System Administration Handbook Suggested background ..... 7 Linux distributions ..... 8

Table of Contents xxxix

Local documentation maintenance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1115Infrastructure as code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1116Documentation standards . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1116

Environment separation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1118Disaster management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1119

Risk assessment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1119Recovery planning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1120Staffing for a disaster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1121Security incidents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1122

IT policies and procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1122The difference between policies and procedures . . . . . . . . . . . . . . . . . . . . . 1123Policy best practices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1124Procedures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1124

Service level agreements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1125Scope and descriptions of services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1125Queue prioritization policies. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1126Conformance measurements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1127

Compliance: regulations and standards . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1127Legal issues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1131

Privacy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1131Policy enforcement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1132Control = liability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1132Software licenses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1133

Organizations, conferences, and other resources . . . . . . . . . . . . . . . . . . . . . . . . . 1133Recommended reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1135

Index 1136A Brief History of System Administration 1166Colophon 1176About the Contributors 1178About the Authors 1179