描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787111627043
如果不亲自动手实践,你就学不到任何知识,Linux也不例外。所有认真的用户,包括开发人员、管理人员以及DevOps专业人员,都需要具备诸如保护文件、文件夹以及服务器、安装补丁与应用以及网络管理等技能。通过学习本书中的实践教程,你就可以卷起袖子,一个项目接一个项目地进行学习。
本书中共有12个实际项目,包括自动备份与恢复系统、建立一个私有的Dtropbox风格的文件云以及构建你自己的MediaWiki服务器等。当你开展诸如虚拟化、灾难恢复、安全、备份、DevOps以及系统故障诊断等核心实践时,你将会接触到一些有趣的例子。每章都以回顾主要名词、安全*实践、命令行以及习题结束。
本书主要内容
·构建一个安全的Linux环境
·管理安全远程连接
·构建系统恢复设备
·对系统打补丁以及升级
不需要之前有Linux管理经验。
第1章是概述性的内容,帮助读者熟悉或回顾Linux的基本知识。
第2章阐述Linux虚拟化技术以及Linux工作环境的基本构建方法,这也是后续章节的基础性技术知识。
第3章关注如何用密钥保护远程连接,实现对联网计算机的安全访问。
第4章讨论文件归档管理的目的和典型方法。有效保护数据也是安全性的重要方面之一。
第5章是前一章的递进,主要关注如何配置并实现自动的异地备份。自动化管理可以大大提高备份的效率和可靠性。
第6章关注如何从损坏的Linux系统中进行有效的恢复,这种技能对于每一位Linux管理员而言都是必需的。
第7章展示如何用Apache、SQL及MediaWiki等软件包搭建一个支持知识管理及自由协作的MediaWiki服务器。
第8章列举建立一个Nextcloud文件共享服务器的步骤,并给出基于云的存储部署方法。
第9章将保护Web服务器作为实践项目,循序渐进地阐述如何使用访问控制、加密传输、强化认证等方式系统地达成增强安全性的目标。
第10章着重讨论如何通过创建VPN或DMZ来保护网络,这对于全球化部署的大型企业尤为重要。
第11章围绕对系统运行进行监视的需求,讨论如何使用、管理和处理系统日志,以及如何使用工具建立入侵检测系统。
第12章阐述如何在私有网络上通过网络文件系统进行数据共享,以及如何保证其安全性。
第13章聚焦于系统性能的优化,阐述测量和解决CPU、内存、存储、网络等不同方面性能问题的方案,以及可用的工具。
第14章列举与网络连通性相关的各种故障,并给出解决方案及工具的使用方法。
第15章以具体的实例说明如何通过对Linux内核模块、引导参数、驱动程序等的管理来解决遇到的设备故障。
第16章讨论如何使用DevOps工具构建和部署一个脚本化的服务器环境,从而实现自动化的资源及安全性管理等。
总结部分对本书的内容进行梳理和重新组织,并为读者给出下一步学习的建议。
附录部分对每章的命令行进行了集中回顾,这些内容也存在于每章的末尾,如此安排是为了便于读者快速查阅。
译者序
前言
第1章 欢迎使用Linux1
1.1 是什么让Linux与其他操作系统不同2
1.2 基本的实践技能3
1.2.1 Linux文件系统4
1.2.2 探索:Linux导航工具5
1.2.3 完成任务:Linux文件管理工具9
1.2.4 键盘技巧13
1.2.5 伪文件系统13
1.2.6 向他们展示谁才是老大:sudo14
1.3 获取帮助15
1.3.1 man文件15
1.3.2 info命令16
1.3.3 互联网17
1.4 小结18
第2章 Linux虚拟化:构建Linux工作环境21
2.1 什么是虚拟化22
2.2 使用VirtualBox25
2.2.1 使用Linux包管理器25
2.2.2 定义虚拟机32
2.2.3 安装操作系统35
2.2.4 克隆和共享VirtualBox虚拟机38
2.3 使用Linux容器40
2.3.1 LXC入门40
2.3.2 创建第一个容器41
2.4 小结44
第3章 远程连接:安全访问联网的计算机48
3.1 加密的重要性48
3.2 OpenSSH入门49
3.3 使用SSH登录一台远程服务器52
3.4 免密码SSH访问53
3.4.1 生成新的密钥对54
3.4.2 在网络上复制公钥55
3.4.3 使用多个加密密钥57
3.5 使用SCP安全地拷贝文件57
3.6 使用SSH连接上的远程图形程序58
3.7 Linux进程管理59
3.7.1 用ps命令查看进程60
3.7.2 使用systemd62
3.8 小结63
第4章 归档管理:备份或拷贝整个文件系统66
4.1 为什么要归档66
4.1.1 压缩67
4.1.2 归档文件:一些重要注意事项68
4.2 将什么归档69
4.3 备份到何处71
4.4 使用tar命令归档文件和文件系统71
4.4.1 几个简单的归档和压缩示例72
4.4.2 流式传输文件系统的归档文件73
4.4.3 使用find命令聚合文件75
4.4.4 保护权限与所有权并展开归档文件76
4.5 使用dd命令归档分区80
4.5.1 dd操作80
4.5.2 使用dd擦除硬盘81
4.6 使用rsync命令同步归档文件81
4.7 规划注意事项83
4.8 小结84
第5章 自动化管理:自动异地备份的配置87
5.1 用Bash编写脚本88
5.1.1 备份系统文件的脚本示例88
5.1.2 用于更改文件名的示例脚本92
5.2 将数据备份至AWS S393
5.2.1 安装AWS命令行接口94
5.2.2 配置你的AWS账户94
5.2.3 建立你的第一个bucket96
5.3 使用cron调度定期备份96
5.4 使用anacron预定非正常备份99
5.5 利用系统计时器设定常规备份100
5.6 小结102
第6章 应急工具:构建一个系统恢复设备105
6.1 在恢复/救援模式下工作106
6.1.1 GRUB引导加载程序107
6.1.2 在Ubuntu环境下使用恢复模式108
6.1.3 在CentOS下使用救援模式108
6.1.4 找到命令行救援工具109
6.2 创建一个原生系统引导恢复设备110
6.2.1 系统救援映像110
6.2.2 将原生系统引导映像写入USB驱动112
6.3 让你的原生系统引导设备运行115
6.3.1 检测系统存储区115
6.3.2 受损的分区117
6.3.3 从损坏的文件系统中恢复文件119
6.4 密码恢复:使用chroot安装文件系统120
6.5 小结122
第7章 Web服务器:建立MediaWiki服务器125
7.1 建立LAMP服务器126
7.2 手动设置Apache Web服务器127
7.2.1 在Ubuntu上安装Apache Web服务器127
7.2.2 填充你的网站文档root128
7.3 安装SQL数据库129
7.3.1 强化SQL131
7.3.2 SQL管理131
7.4 安装PHP134
7.4.1 在Ubuntu中安装PHP134
7.4.2 测试你的PHP安装134
7.5 安装和配置MediaWiki135
7.5.1 缺少扩展的故障排除136
7.5.2 将MediaWiki连接到数据库138
7.6 在CentOS上安装Apache Web服务器140
7.6.1 了解网络端口141
7.6.2 网络流量控制142
7.6.3 在CentOS上安装MariaDB142
7.6.4 在CentOS上安装PHP143
7.7 小结145
第8章 网络文件共享:构建Nextcloud文件共享服务器148
8.1 企业文件共享和Nextcloud149
8.2 使用snaps安装Nextcloud149
8.3 手动安装Nextcloud152
8.3.1 硬件预备知识152
8.3.2 建立LAMP服务器153
8.3.3 配置Apache154
8.3.4 下载和解压缩Nextcloud156
8.4 Nextcloud管理158
8.5 将AWS S3作为Nextcloud的主存储介质161
8.6 小结163
第9章 保护Web服务器166
9.1 显而易见的事情167
9.2 控制网络访问168
9.2.1 配置防火墙168
9.2.2 使用非标准端口175
9.3 加密传输中的数据177
9.3.1 准备你的网站域178
9.3.2 用Let抯 Encrypt生成证书179
9.4 强化认证过程180
9.4.1 使用SELinux控制文件系统对象181
9.4.2 安装并激活SELinux182
9.4.3 应用SELinux策略184
9.4.4 系统组与最少特权原则185
9.4.5 隔离容器中的进程187
9.4.6 扫描危险的用户ID值187
9.5 审计系统资源188
9.5.1 扫描打开的端口188
9.5.2 扫描激活的服务189
9.5.3 搜索已安装的软件190
9.6 小结190
第10章 保护网络连接:创建VPN或DMZ194
10.1 构建OpenVPN隧道195
10.1.1 配置OpenVPN服务器196
10.1.2 配置OpenVPN客户端202
10.1.3 测试你的VPN203
10.2 构建抗入侵网络205
10.2.1 非军事区205
10.2.2 使用iptables207
10.2.3 使用iptables创建DMZ208
10.2.4 使用shorewall创建DMZ210
10.3 为基础设施测试构建虚拟网络213
10.4 小结215
第11章 系统监控:使用日志文件218
11.1 使用系统日志219
11.1.1 使用journald记录日志220
11.1.2 使用syslogd记录日志222
11.2 管理日志文件224
11.2.1 journald 方法224
11.2.2 syslogd方法224
11.3 处理大文件226
11.3.1 使用grep226
11.3.2 使用awk227
11.3.3 使用sed228
11.4 使用入侵检测进行监控229
11.4.1 搭建邮件服务器229
11.4.2 安装Tripwire230
11.4.3 配置Tripwire232
11.4.4 生成Tripwire测试报告235
11.5 小结235
第12章 在私有网络上共享数据239
12.1 通过网络文件系统共享文件240
12.1.1 设置NFS服务器241
12.1.2 建立客户端242
12.1.3 在引导时挂载NFS共享243
12.1.4 NFS安全性245
12.2 使用Samba与Windows用户共享文件247
12.2.1 测试你的Samba配置248
12.2.2 从Windows访问Samba服务器249
12.3 使用符号链接与自己共享文件250
12.4 小结251
第13章 解决系统性能问题255
13.1 CPU负载问题256
13.1.1 测量CPU负载256
13.1.2 管理CPU负载257
13.1.3 制造麻烦(模拟CPU负载)260
13.2 内存问题260
13.2.1 评估内存状态260
13.2.2 评估交换状态261
13.3 存储可用性问题261
13.3.1 索引节点的限制262
13.3.2 解决方案264
13.4 网络负载问题265
13.4.1 测量带宽265
13.4.2 解决方案266
13.4.3 与tc形成网络流量267
13.5 监控工具268
13.5.1 收集监测数据268
13.5.2 将数据进行可视化269
13.6 小结270
第14章 排除网络故障274
14.1 理解TCP/IP寻址275
14.1.1 什么是NAT寻址275
14.1.2 使用NAT寻址275
14.2 建立网络连接278
14.3 排除传出连通性故障278
14.3.1 跟踪网络状态280
14.3.2 分配IP地址281
14.3.3 配置DNS服务284
14.3.4 管道286
14.4 排除传入连通性故障286
14.4.1 内部连通性扫描:netstat 287
14.4.2 外部连通性扫描:netcat287
14.5 小结288
第15章 排除外围设备故障292
15.1 识别连接的设备292
15.2 用Linux内核模块管理外设294
15.2.1 查找内核模块295
15.2.2 手动加载内核模块297
15.3 引导时手动管理内核参数298
15.3.1 引导时传递参数298
15.3.2 通过文件系统传递参数299
15.4 管理打印机300
15.4.1 lp基础301
15.4.2 使用CUPS管理打印机301
15.5 小结303
第16章 DevOps工具:使用Ansible部署一个脚本化的服务器环境305
16.1 部署协调器可以为你做什么306
16.2 Ansible:安装和设置308
16.2.1 设置对宿主机的无密码访问309
16.2.2 组织Ansible的宿主机309
16.2.3 测试连接性310
16.3 认证311
16.4 Ansible playbook312
16.4.1 编写一个简单的playbook313
16.4.2 创建多层、角色驱动的playbook314
16.4.3 用Ansible管理密码316
16.5 小结317
总结320
附录 每章命令行回顾324
不论你在IT领域或者编程世界中从事什么工作或者已经从事了多久,如果你不学习新东西,就会遇到新问题。这不仅仅是因为平台和范例在持续发生变化,因为新的业务需求需要新的思想,或者因为那些不怀好意的家伙正在不断想出新的办法来攻击你的服务器。原因远远不只这些。停止学习的代价你根本承担不起。关键是要找到一种方法来学习高优先级的技能,而不是守着经验兜圈子。
我的意图和期望在于,通过阅读本书,哪怕是只读了一章,你也能有足够的信心去承担具有挑战性和创造性的工作,也就是那些你之前没有考虑过的事情。如果能一直坚持读到最后,你将学会使用那些支持虚拟化、灾难恢复、基础设施安全、数据备份、Web服务器、DevOps以及排除系统故障等关键和流行的技术。
但为什么使用Linux呢?因为Linux支持大部分的互联网、科学研究以及商业运营—实际上,支持世界上大部分的服务器。那些服务器需要被聪明且接受过良好训练的人员有效地进行配置、启动、保障和管理。聪明是你的天赋,而我能做的是帮助你得到良好的训练。
不确信自己是否拥有足够的Linux知识来开始这样一个雄心勃勃的计划吗?第1章将很快回答这个问题。之后,请系好你的安全带并准备好面对一段严肃的学习旅程吧。
致谢
撰写一本书时,必须仔细考虑方方面面的情况,否则就不可能度过漫长且时而令人受尽折磨的写作时光并完成写作。就本书来说,如同我写作《Learn Amazon Web Services in a Month of Lunches》时一样,完成这项工作需要Manning团队每个环节的工作人员的才华和奉献精神。
再一次说明,Frances Lefkowitz作为一名策划编辑,为每一章设立了清晰的定位和目标,坚持不懈地让我专注其中并走上正轨。Reka Horvath和John Guthrie耐心地测试了本书中的所有项目并在此过程中给出了有价值的操作建议。文字编辑Frances Buran似乎从未遇到过她能认可的副词,至少在我这里如此。但是,目前的书中,字里行间的准确性和优雅度清楚地说明了她的工作质量。
作为项目主管,Deirdre Hiam有效地指导我们走完最后一英里,并成功地让各个部分同步运转。本书的每一位同行评审人员也都做出了重要贡献。他们可能没有意识到,但是他们所有的宝贵建议都被仔细地分析和权衡,而且,只要可能,就都会被采纳。因此,非常感谢Angelo Costo、Christopher Phillips、Dario Victor Duran、Flayol Frederic、Foster Haines、George L. Gaines、Gustavo Patino、Javier Collado、Jens Christian B. Madsen、Jonas Medina de los Reyes、Maciej Jurkowski、Mayer Patil、Mohsen Mostafa Jokar和Tim Kane。
相较Linux管理技能而言,本书的内容更为丰富。要想成为一名成功的管理员,面对自己负责的服务器和系统,应当具备更强的责任感。我非常幸运能在担任Linux系统管理员的职业生涯之初,就从一位伟大的导师那里受益良多。Peter Fedorow对良好运营的细节以及全局大势的关注让他成为一名特别高效的管理员。他把我带进Linux虚拟化的世界,甚至没等那些容器冷却下来,它们就把我吸引住了。虽然一切都说完了、做完了,但毋庸置疑,Peter对我的影响力依然还在。
最后,如果没有我的妻子愉快的参与和帮助,我的任何专业(或私人)项目都不会顺利完成。我们充分分担着这项艰苦的工作,但成功主要归功于她。
关于本书
你正在期望学习管理Linux计算机吗?这是一个很好的选择。虽然Linux常常驻留于消费者的桌面计算机上,但它同时也是服务器领域的绝对主宰,特别是虚拟服务器和云服务器。鉴于现在大多数严格的服务器管理都是远程实施的,通过某个这样或那样的GUI进行工作只会增加无谓的开销。如果你打算管理当前引人关注的服务器和网络体系架构,你将不得不围绕Linux的命令行展开学习。
一个好消息是,核心Linux命令集可以实现跨地域和跨公司的运行,你可以仅关注计算机与业务相交的那些地方。一个更好的消息是,相对而言,Linux技能具有持久性。因为它是一个特别成熟和稳定的操作系统,25年前使用的大多数工具至今仍然在使用,而且,当今使用的大量工具在25年后也将可能继续发挥作用。换句话说,学习Linux将是一生的投资。
但是你非常繁忙,工作堆积如山。好吧,我不能保证掌握Linux与学会系鞋带一样简单。但是我可以帮助你像激光一样进行聚焦,从而将那些不需要的东西都扔到公路上去,让它们窒息在你开车驶过后留下的尾气中(当然,得假设你驾驶的不是一辆特斯拉,因为特斯拉是纯电动汽车)。
我将如何实现这一点呢?本书不采用技术培训的讲授方式。也就是说,虽然其他的书籍、课程及在线资源都围绕常规主题来组织内容(好了,孩子们,拿出你们的尺和笔,今天我们将学习Linux文件系统),但我却将基于现实生活中的一组项目来进行讲授。
例如,我本可以基于Linux文件系统构建完整的一章(或两章)。但本书并未按照这种方式处理,相反,你将学习如何构建企业文件服务器、系统恢复盘以及用来复制关键数据归档文件的脚本等。在这个过程中,你将会顺带学习文件系统的知识,这是本书提供的免费红利。
请不要认为我会覆盖Linux管理的所有工具。那是不可能的,毫不夸张地说,这样的工具有成千上万个。但也不用担心。本书将涵盖Linux管理员职业生涯早期所需掌握的核心技能,并且只有当实际的关键项目需要某些技能时,才会做有针对性的介绍。读完本书后,你能学到的将比基于传统资源所能学到的更多。你将学会如何掌控十几个主要的管理项目,而且能够轻松地处理更多的项目。
现在你有所了解了吗?我想是的。
读者对象
本书的目的是让你获得一系列可靠的Linux管理技能。也许你是一位开发者,更希望直接在驻留应用程序的服务器环境工作。或者,也许你已经准备好在服务器管理或DevOps领域开展工作。不论怎样,你就是我们中的一员。
你应该拥有什么基础知识呢?你至少应该能轻松地使用文件、网络及现代操作系统资源来进行工作。系统管理、网络管理与编程语言方面的经验肯定没有坏处,但不是必需的。最为重要的是,你应该不畏惧探索新的环境,并有试用新工具的热情。另一件事情是,期望你知道如何进行简单、直接的Linux操作系统的安装。
内容组织
这里简要给出本书的组织方式。除了第1章之外,本书的每一章都包括一个或两个实际项目。鉴于第1章的内容主要用来填补你的Linux知识体系中可能存在的基础知识空白,因此其组织形式与其他章节有所不同。不需要这些基础知识吗?我敢肯定你在第2章就能找到很多有趣的新玩具。
伴随本书中的这些项目,我还将介绍你需要掌握的技能和工具。另外,每章中的项目通常都是基于之前章节所学习的技能来构建的。为了清楚地表述我的意思,这里给出一个非常完整的列表,其中分章列出了你将在本书中碰到的技能范畴及工具。
章 节 技 能 范 畴 工 具
第1章 Shell、分区及文件系统 Bash、man
第2章 虚拟化、文件系统 VirtualBox、LXC、apt、yum/dnf
第3章 安全性、远程连接 ssh、scp、systemctl、ps、grep
第4章 分区、文件系统及文本流 tar、dd、redirects、rsync、locate、split、chmod、chown
第5章 脚本、系统进程管理与安全性 脚本、cron、anacron、systemd 定时器
第6章 分区、文件系统及设备管理 parted、GRUB、mount、chroot
第7章 数据库、网络、包管理 PHP、MySQL(MariaDB)、Apache Web服务器、包依赖性
第8章 包管理、网络及安全性 snapd、文件系统、加密
第9章 网络、安全性、系统监控 Apache、iptables、/etc/group、SELinux、apt、yum/dnf、chmod、chown、Let抯 Encrypt
第10章 网络与安全性 firewalls、ssh、Apache、OpenVPN、sysctl、easy-rsa
第11章 系统监控、文本流及安全性 grep、sed、journalctl、rsyslogd、/var/log/、Tripwire
第12章 网络、分区及文件系统 nfs、smb、ln、/etc/fstab
第13章 系统监控、系统进程管理与网络 top、free、nice、nmon、tc、iftop、df、kill、killall、uptime
第14章 网络 ip、dhclient、dmesg、ping、nmap、traceroute、netstat、netcat (nc)
第15章 设备管理 lshw、lspci、lsusb、, modprobe、CUPS
第16章 脚本、虚拟化 Ansible、YAML、apt
关于代码
本书中,代码清单和普通文本行中包括大量的源代码示例。在这两种情况下,源代码都被设置为代码体,以区别于常规的文本内容。
很多情况下,我调整了原有源代码的格式,增加了换行符并重置了缩进符以适应可用的页面空间。在极少数情况下这种方法还不够用,代码中还会包括续行符标记()。另外,当在文字中描述一段源代码时,通常会从清单中移除该段代码的注释。很多清单中都有代码注释,以突出一些重要的概念。
Linux发行版本
当前在有效维护的Linux发行版本有很多。对于所有Linux发行版本而言,大多数的基础都是相同的,但总有一些版本是能够在“这里”运行而不能够在“那里”运行的。出于实践性的目的,我将主要聚焦于两个版本:Ubuntu和CentOS。为什么是这两个版本呢?因为这两个版本代表了不同的版本系列。Ubuntu与Debian、Mint、Kali Linux及其他版本是同源的,而CentOS则与红帽(Red Hat)企业Linux和Fedora同源。
这并不是说我不重视Arch Linux、SUSE以及Gentoo等其他发行版本,或者说你在本书中学到的东西对在其他版本的环境中开展工作没有帮助。但是,对Ubuntu和CentOS的完全覆盖意味着抓住了Linux馅饼中最大的那一块,我仅使用这两个版本就可以达到这个目标。
本书的论坛
欢迎访问Manning出版公司运营的网络论坛,在该论坛中你可以对本书进行评论、提出技术问题并获得来自作者和其他用户的帮助等。你可以通过链接https://forums.manning.com/forums/linux-in-action访问该论坛。你也可以通过链接https://forums.manning.com/forums/about了解Manning论坛及其管理规则。
Manning对广大读者的承诺是,在读者之间以及读者与作者之间提供一个进行有意义对话的平台。这并非对作者具体参与度的任何承诺,他们对论坛的贡献是自愿的(而且是免费的)。我们建议大家向作者咨询一些有挑战性的问题,以免他丧失了兴趣!只要本书还在发行,你就可以在出版商的网站上访问该论坛以及之前讨论的内容。
其他在线资源
遇到问题了吗?网络搜索是你最好的朋友,因为它可以快速地将你与现有的Linux指南、排除故障的专业知识关联到一起。但是,你不该忘记StackExchange系列网站,特别是serverfault.com。如果某个系统配置出现了错误或者网络已经丢失,那么其他人已经遇到过相同问题的概率会很高,可能有人已经在ServerFault上问过这个问题并得到了答案。找不到任何答案吗?那么请自己留言提问。LinuxQuestions.org和ubuntuforums.org也会很有帮助。
同时,喜欢视频培训的用户将在Pluralsight.com上找到范围非常广泛的Linux课程,其中包括了十多门我自己的课程。
“这本书是理解Linux的必备指南,书中提供了大量的实际项目案例。”
——Dario Victor
Durán, HiQ 斯德哥尔摩
“讲授各种各样的Linux特性,使你的生活更加轻松、实用。”
——Jens Christian
B. Madsen, IT Relation
“Linux系统管理的*书籍。”
——Gustavo
Patino, 奥克兰大学威廉博蒙特医学院
“着手维护Linux时所需的一切知识和技能。它不是关于如何使用Linux的书,而是关于如何管理Linux。”
——Maciej
Jurkowski, Grupa Pracuj
评论
还没有评论。