├── assets ├── figs │ ├── Thumbs.db │ ├── covor.jpg │ ├── io-fd.png │ ├── lvm.png │ ├── vim.png │ ├── GPT_Scheme.png │ ├── MBR_Scheme.png │ ├── find-mtime.png │ ├── linux-cmd.png │ ├── io-redirect.png │ ├── monunt-point.png │ ├── packet_flow9.png │ ├── passwd-chage.png │ ├── pipe-teepipe.png │ ├── git-cheat-sheet.png │ ├── nfk-traversal.pdf │ ├── tables_traverse.jpg │ ├── Cloud-Management.png │ └── file-manage-command.png ├── TeachingOutline.doc └── exercises │ ├── The-DevOps-Handbook.txt │ └── The-DevOps-Handbook.md ├── overview ├── assignments.md ├── centos7book.md ├── learning_environment.md ├── README.md ├── technical_document_writing.md └── references.md ├── ch12 ├── assignments.md ├── README.md ├── experiment_12-01.md └── guidelines.md ├── ch16 ├── assignments.md ├── experiment_16-01.md ├── README.md └── guidelines.md ├── ch03 ├── assignments.md ├── README.md ├── experiment_03-01.md ├── experiment_03-02.md └── guidelines.md ├── ch06 ├── assignments.md ├── README.md ├── guidelines.md └── experiment_06-01.md ├── book.json ├── ch02 ├── assignments.md ├── README.md └── guidelines.md ├── ch11 ├── README.md ├── assignments.md ├── experiment_11-01.md └── guidelines.md ├── ch04 ├── README.md ├── assignments.md ├── guidelines.md └── experiment_04-01.md ├── ch13 ├── README.md ├── assignments.md ├── guidelines.md └── experiment_13-01.md ├── ch10 ├── README.md ├── assignments.md ├── guidelines.md ├── experiment_10-01.md └── lecture_notes_10-01.md ├── ch07 ├── README.md ├── assignments.md ├── experiment_07-01.md └── guidelines.md ├── ch05 ├── README.md ├── assignments.md └── guidelines.md ├── ch09 ├── experiment_09-02.md ├── assignments.md ├── README.md ├── guidelines.md └── experiment_09-01.md ├── ch14 ├── assignments.md ├── README.md └── guidelines.md ├── ch15 ├── experiment_15-02.md ├── README.md ├── assignments.md └── guidelines.md ├── ch08 ├── assignments.md ├── README.md ├── guidelines.md └── experiment_08-01.md ├── .gitignore ├── ch01 ├── README.md ├── experiment_01-01.md ├── guidelines.md ├── assignments.md ├── lecture_notes_01-02.md ├── lecture_notes_01-03.md └── experiment_01-02.md ├── words_in_middle_of_course.md ├── README.md └── SUMMARY.md /assets/figs/Thumbs.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxbooks/c7lg/HEAD/assets/figs/Thumbs.db -------------------------------------------------------------------------------- /assets/figs/covor.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxbooks/c7lg/HEAD/assets/figs/covor.jpg -------------------------------------------------------------------------------- /assets/figs/io-fd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxbooks/c7lg/HEAD/assets/figs/io-fd.png -------------------------------------------------------------------------------- /assets/figs/lvm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxbooks/c7lg/HEAD/assets/figs/lvm.png -------------------------------------------------------------------------------- /assets/figs/vim.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxbooks/c7lg/HEAD/assets/figs/vim.png -------------------------------------------------------------------------------- /assets/TeachingOutline.doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxbooks/c7lg/HEAD/assets/TeachingOutline.doc -------------------------------------------------------------------------------- /assets/figs/GPT_Scheme.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxbooks/c7lg/HEAD/assets/figs/GPT_Scheme.png -------------------------------------------------------------------------------- /assets/figs/MBR_Scheme.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxbooks/c7lg/HEAD/assets/figs/MBR_Scheme.png -------------------------------------------------------------------------------- /assets/figs/find-mtime.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxbooks/c7lg/HEAD/assets/figs/find-mtime.png -------------------------------------------------------------------------------- /assets/figs/linux-cmd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxbooks/c7lg/HEAD/assets/figs/linux-cmd.png -------------------------------------------------------------------------------- /assets/figs/io-redirect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxbooks/c7lg/HEAD/assets/figs/io-redirect.png -------------------------------------------------------------------------------- /assets/figs/monunt-point.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxbooks/c7lg/HEAD/assets/figs/monunt-point.png -------------------------------------------------------------------------------- /assets/figs/packet_flow9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxbooks/c7lg/HEAD/assets/figs/packet_flow9.png -------------------------------------------------------------------------------- /assets/figs/passwd-chage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxbooks/c7lg/HEAD/assets/figs/passwd-chage.png -------------------------------------------------------------------------------- /assets/figs/pipe-teepipe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxbooks/c7lg/HEAD/assets/figs/pipe-teepipe.png -------------------------------------------------------------------------------- /overview/assignments.md: -------------------------------------------------------------------------------- 1 | # CH00 - 家庭作业 2 | 3 | * 安装 Windows 环境下的常用工具 4 | * 掌握一种文档标语言 5 | * 学习 git 版本控制工具的使用 -------------------------------------------------------------------------------- /assets/figs/git-cheat-sheet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxbooks/c7lg/HEAD/assets/figs/git-cheat-sheet.png -------------------------------------------------------------------------------- /assets/figs/nfk-traversal.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxbooks/c7lg/HEAD/assets/figs/nfk-traversal.pdf -------------------------------------------------------------------------------- /assets/figs/tables_traverse.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxbooks/c7lg/HEAD/assets/figs/tables_traverse.jpg -------------------------------------------------------------------------------- /assets/figs/Cloud-Management.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxbooks/c7lg/HEAD/assets/figs/Cloud-Management.png -------------------------------------------------------------------------------- /assets/figs/file-manage-command.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linuxbooks/c7lg/HEAD/assets/figs/file-manage-command.png -------------------------------------------------------------------------------- /ch12/assignments.md: -------------------------------------------------------------------------------- 1 | # CH12 - 家庭作业 2 | 3 | * 了解、学习另一种Linux下常用的FTP服务器pure-ftpd的配置方法 4 | * 学习 autofs 守护进程的功能和用途,学会配置 autofs 自动挂装NFS文件系统 5 | * 学习基于 Kerberos 认证的 NFS 服务器配置 6 | * 学习使用跨平台的FTP客户工具 [Filezilla](http://filezilla-project.org/) 7 | * 学习基于块设备的 iSCSI 共享和使用。 8 | 9 | -------------------------------------------------------------------------------- /ch16/assignments.md: -------------------------------------------------------------------------------- 1 | # CH16 - 家庭作业 2 | 3 | ## 进一步学习 4 | 5 | 通过安装 [iRedMail](https://www.iredmail.org/),研究学习 6 | * Postfix+MySQL+Dovecot 实现的虚拟用户邮件服务器的配置 7 | * Postfix+LDAP+Dovecot 实现的虚拟用户邮件服务器的配置 8 | * Anti-Spam 和 Anti-Virus 的相关概念及技术 9 | * Postfix+Clamav+Amavisd 病毒扫描的相关概念及实现 10 | -------------------------------------------------------------------------------- /ch03/assignments.md: -------------------------------------------------------------------------------- 1 | # CH03 - 家庭作业 2 | 3 | ## 集中式的账户管理系统 4 | 5 | * [OpenLDAP](http://www.openldap.org) -- LDAP 协议的开源实现 6 | * [**FreeIPA**](https://www.freeipa.org/) -- Red Hat 背后支持的开源项目,IDM 的开源版本 7 | * [NIS](http://www.linux-nis.org) -- SUN 初始创建的 Network Information Service (NIS) 8 | 9 | 10 | -------------------------------------------------------------------------------- /ch06/assignments.md: -------------------------------------------------------------------------------- 1 | # CH06 - 家庭作业 2 | 3 | * [Awesome SSH](https://github.com/moul/awesome-ssh#readme) 4 | * 学习配置基于rsyslog+loganalyzer的集中日志服务器并监视服务器日志。 5 | * 学习时间同步服务(ntpdate、ntpd和chronyd)的配置和使用。 6 | * 学习使用 `denyhost` 或 `fail2ban` 保护ssh服务。 7 | * 学习 git 和 github 的使用。 8 | * 学习使用 `etckeeper`(EPEL仓库有提供)以git方式管理系统的 /etc目录。 9 | 10 | -------------------------------------------------------------------------------- /book.json: -------------------------------------------------------------------------------- 1 | { 2 | "language": "zh-cn", 3 | "plugins": [ 4 | "github", 5 | "page-toc-button" 6 | ], 7 | "pluginsConfig": { 8 | "github": { 9 | "url": "https://github.com/linuxbooks/c7lg" 10 | }, 11 | "page-toc-button": { 12 | "maxTocDepth": 2, 13 | "minTocSize": 2 14 | } 15 | } 16 | } 17 | 18 | -------------------------------------------------------------------------------- /ch02/assignments.md: -------------------------------------------------------------------------------- 1 | # CH02 - 家庭作业 2 | 3 | 1. 学习使用 [Vundle](https://github.com/VundleVim/Vundle.vim) 管理vim插件。 4 | 2. 参考 管理用户自己的 dotfiles。 5 | 3. 学习使用 [Linux 终端录制工具](https://www.jianshu.com/p/6e8fb918a55c) 。 6 | 4. 学习使用 tmux 和/或 screen。 7 | 8 | 9 | >##### 参考 10 | >* http://blog.jobbole.com/tag/tmux/ 11 | >* [Linux终端复用神器-Tmux使用梳理](https://www.cnblogs.com/kevingrace/p/6496899.html) 12 | 13 | -------------------------------------------------------------------------------- /ch11/README.md: -------------------------------------------------------------------------------- 1 | # CH11 DHCP 服务和 DNS 服务 2 | 3 | 本章讲述 DHCP 服务和 DNS 服务的配置。 4 | 5 | * DHCP 服务 6 | * 安装和启动 DHCP 服务 7 | * 配置基本的 DHCP 服务 8 | * 配置 DHCP 中继服务 9 | * 配置使用 DHCP 服务的客户机网络接口 10 | * 使用 `dhclient` 命令释放并获取 IP 11 | * DNS 服务 12 | * DNS 系统的组成 13 | * DNS 域名服务器的类型 14 | * 安装和启动 BIND 15 | * 使用 `rndc` 命令管理 BIND 16 | * 配置 BIND 作为唯高速缓存器 17 | * 配置 BIND 作为主域名服务器 18 | * 配置 BIND 作为辅助域名服务器 19 | * 配置 BIND 作为域名转发器 20 | * 使用 `dig`/`nslookup`/`host` 检测域名解析 21 | 22 | 23 | >* [CH11 - 教学指导](guidelines.md) 24 | >* [CH11 - 实验指导](experiment_11-01.md) 25 | >* [CH11 - 家庭作业](assignments.md) -------------------------------------------------------------------------------- /ch04/README.md: -------------------------------------------------------------------------------- 1 | # CH04 本地存储管理 2 | 3 | 本章讲解 磁盘分区、逻辑卷管理 和 文件系统 的管理。 4 | 5 | * 磁盘分区 6 | * MBR 和 GPT 分区表 7 | * `fdisk` 和 `gdisk` 分区工具 8 | * LVM 9 | * 物理卷、卷组、逻辑卷 10 | * 创建 物理卷、卷组、逻辑卷 11 | * 查看 物理卷、卷组、逻辑卷 12 | * 扩展和收缩 卷组、逻辑卷 13 | * 文件系统 14 | * 使用文件系统的一般方法 15 | * 创建文件系统 16 | * 挂装/卸装 文件系统 17 | * 在系统启动时挂装文件系统 18 | * 挂装和使用移动存储介质 19 | * 挂装和使用映像文件 20 | * 文件系统的检查和修复 21 | * 文件系统的扩展和收缩 22 | * 使用交换分区和交换文件 23 | * 设置磁盘限额 24 | 25 | >* [CH04 - 教学指导](guidelines.md) 26 | >* [CH04 - 课堂笔记](lecture_notes_04-01.md) 27 | >* [CH04 - 实验指导](experiment_04-01.md) 28 | >* [CH04 - 家庭作业](assignments.md) -------------------------------------------------------------------------------- /ch06/README.md: -------------------------------------------------------------------------------- 1 | # CH06 服务管理与基础服务 2 | 3 | 本章讲解服务的管理、以及三种系统基础服务。 4 | 5 | * 守护进程和服务管理 6 | * 守护进程的相关概念 7 | * 使用 `systemctl` 显示、启动和停止服务 8 | * 使用 `systemctl` 配置在启动时的 启用/禁用 9 | * 周期性任务服务 10 | * 周期性任务与 crond 服务 11 | * 修改配置文件安排 cron 任务 12 | * 使用 `crontab` 命令安排 cron 任务 13 | * 系统日志服务 14 | * rsyslogd 日志服务 15 | * 配置和查看各种系统日志 16 | * 配置中央日志服务器 17 | * 日志工具 `LogRotate` 和 `LogWatch` 的配置和使用 18 | * 安全Shell服务 19 | * SSH 协议和 SSH 服务 20 | * 配置 SSH 服务提高安全性 21 | * 主机密钥管理 22 | * 用户密钥管理 23 | 24 | 25 | >* [CH06 - 教学指导](guidelines.md) 26 | >* [CH06 - 实验指导](experiment_06-01.md) 27 | >* [CH06 - 家庭作业](assignments.md) -------------------------------------------------------------------------------- /ch12/README.md: -------------------------------------------------------------------------------- 1 | # CH12 FTP 服务和 NFS 服务 2 | 3 | 本章讲述 FTP 服务和 NFS 服务的配置方法。 4 | 5 | * FTP 服务 6 | * FTP 协议和传输模式 7 | * 安装并启动 vsftpd 8 | * 配置高安全级别的匿名服务 9 | * 配置允许匿名用户上传的 FTP 服务 10 | * 配置基于本地用户的访问控制 11 | * 为不同的本地用户实施不同的配置 12 | * 配置使用虚拟用户的 FTP 服务 13 | * 配置基于 SSL/TLS 协议的 FTP 服务 14 | * NFS 服务 15 | * NFS 协议模型和协议版本 16 | * RPC 和 NFS v3 17 | * 安装和启动 NFS 的相关组件 18 | * 修改 `/etc/exports` 配置 NFS 服务端 19 | * 使用 `exportfs` 命令维护 NFS 服务共享 20 | * 配置 NFS 服务的防火墙 21 | * 在客户端使用 `showmount` 查看服务器共享 22 | * 在客户端挂装 NFS 文件系统 23 | 24 | 25 | >* [CH12 - 教学指导](guidelines.md) 26 | >* [CH12 - 实验指导](experiment_12-01.md) 27 | >* [CH12 - 家庭作业](assignments.md) -------------------------------------------------------------------------------- /ch11/assignments.md: -------------------------------------------------------------------------------- 1 | # CH11 - 家庭作业 2 | 3 | ## DHCP 服务器 4 | 5 | * 学习 DHCP 超级作用域的配置 6 | * 学习 DHCP 中继服务的配置 7 | 8 | ## DNS 服务器 9 | 10 | * 学习配置 DNS 的区域委派 11 | * 学习使用 view 语句配置分离式(Split)DNS 12 | * 安装 bind-chroot 包,学习将 BIND 运行在 chroot jail 环境下 13 | * 学习 BIND 的基于公钥技术的签名技术 14 | * 学习使用 dnsmasq 配置DHCP服务、TFTP服务和 DNS 转发器的方法 15 | 16 | 17 | ## PXE 自动安装服务器 18 | 19 | * [使用PXE服务器和Kickstart文件自动安装多个RHEL / CentOS 7分发](https://www.howtoing.com/multiple-centos-installations-using-kickstart) 20 | * [通过PXE网络引导服务器安装Debian 9(Stretch)](https://www.howtoing.com/install-debian-9-stretch-via-pxe-network-boot-server) 21 | * 使用 [Cobbler](https://fedorahosted.org/cobbler/) 配置 PXE 服务器 -------------------------------------------------------------------------------- /ch03/README.md: -------------------------------------------------------------------------------- 1 | # CH03 多用户多任务管理 2 | 3 | 本章通过账户管理、权限管理、进程管理三部分熟悉 Linux 这个多用户多任务操作系统。 4 | 5 | * 账户管理 6 | * 超级用户、系统用户、普通用户 7 | * 私有组和标准组、主组和附加组 8 | * 系统账户配置文件 9 | * 用户和组管理命令 10 | * 用户/组 的 查看/切换 命令 11 | * 口令管理和口令时效 12 | * 权限管理 13 | * 三种基本权限 14 | * 三种特殊权限 15 | * 文件/目录的权限设置命令 16 | * 文件/目录的默认权限设置命令 17 | * 更改 文件/目录 的属主或组 18 | * FACL 权限 19 | * 查看/设置 FACL 权限 20 | * 进程管理 21 | * 进程的概念 22 | * 查看进程 23 | * 更改进程优先级 24 | * 进程信号、杀死进程 25 | * 注销后继续进程的执行 26 | * 作业控制及其实现 27 | 28 | 29 | >* [CH03 - 教学指导](guidelines.md) 30 | >* [CH03 - 实验指导 3.1](experiment_03-01.md) 31 | >* [CH03 - 实验指导 3.2](experiment_03-02.md) 32 | >* [CH03 - 家庭作业](assignments.md) -------------------------------------------------------------------------------- /ch13/README.md: -------------------------------------------------------------------------------- 1 | # CH13 Samba 服务 2 | 3 | 本章讲述与 Windows 系统实现文件互访的 Sabma 服务。 4 | 5 | 6 | * SMB 与 Samba 7 | * SMB/CIFS 协议 8 | * Samba 的版本及功能 9 | * Samba 提供的服务 10 | * Samba 的应用场景 11 | * Samba 的基本配置 12 | * 安装和启动 Samba 服务 13 | * Samba 的默认配置 14 | * Samba 的服务器角色和安全等级 15 | * Samba 的相关工具 16 | * 基于工作组的文件共享配置 17 | * 使用 `smbpasswd` 命令管理 Samba 账户数据库 18 | * 配置匿名访问的共享资源 19 | * 为所有用户配置 只读/读写 共享 20 | * 为指定用户配置 只读/读写 共享 21 | * 为指定组配置 只读/读写 共享 22 | * 在客户端使用 Samba 共享 23 | * 在 Linux 下访问 Windows/Samba 共享 24 | * 在 Linux 下挂装 Windows/Samba 共享 25 | 26 | 27 | >* [CH13 - 教学指导](guidelines.md) 28 | >* [CH13 - 实验指导](experiment_13-01.md) 29 | >* [CH13 - 家庭作业](assignments.md) -------------------------------------------------------------------------------- /ch04/assignments.md: -------------------------------------------------------------------------------- 1 | # CH04 - 家庭作业 2 | 3 | ## 挂装和使用 U 盘 (Windows 文件系统) 4 | 5 | * NTFS 6 | * * **ntfs-3g** 【EPEL仓库】 7 | * exFAT 8 | * **exfat-utils** 和 **fuse-exfat** 【Nux Dextop 仓库】 9 | 10 | > **提示** 11 | > 12 | > * 可以在 https://centos.pkgs.org/ 以包名搜索 13 | 14 | 15 | 16 | ## 文件系统与存储 17 | 18 | * [BtrFS](http://btrfs.wiki.kernel.org/) 19 | * [Rockstor](http://rockstor.com/) 开源 NAS 发行,默认支持 BtrFS 20 | * [ZFS](http://zfsonlinux.org/) 21 | * [Proxmox Virtual Environment](https://pve.proxmox.com/) 虚拟化平台默认支持 ZFS 22 | * [Ceph](http://ceph.com) 23 | * 较新版的 Linux 内核内置支持的分布式文件系统 24 | * [Proxmox Virtual Environment](https://pve.proxmox.com/) 虚拟化平台默认支持 Ceph 25 | * http://ceph.org.cn/ 26 | * [《**大话存储**》](https://item.jd.com/11586843.html) 27 | -------------------------------------------------------------------------------- /ch16/experiment_16-01.md: -------------------------------------------------------------------------------- 1 | # 实验指导 16 - 邮件服务 2 | 3 | >#### 学习目标 4 | >* 配置基于系统用户的邮件服务器 5 | >* 使用 swaks/mail 进行邮件测试 6 | >* 安装配置 WebMail 7 | 8 | 9 | ## 任务1:安装配置邮件服务 10 | 11 | * 基于 Linux 系统用户实现邮件服务 12 | * 允许 Postfix 为本地服务器及本地域投递邮件 13 | * 通过 Postfix 的映射表配置将发往 root 的邮件同时发给 tonny 用户 14 | * 基于 SASL 配置 SMTP 身份认证 15 | * 配置 Postfix 支持 ESMTPS (25/tcp) 16 | * 配置 Dovecot 支持 POP3S (995/tcp)、IMAPS (993/tcp) 17 | * 安装一款 WebMail 18 | 19 | >* **常见的 Webmail** 20 | > * RoundCube - http://roundcube.net 21 | > * SquirrelMail - http://squirrelmail.org 22 | > * RainLoop - http://www.rainloop.net 23 | >* [Top 9 Best Email Clients for Linux](https://itsfoss.com/best-email-clients-linux/) 24 | 25 | ## 任务2*:安装 iRedMail 26 | 27 | * 在新建的 虚拟机/容器 里安装 [iRedMail](http://www.iredmail.org) 28 | 29 | -------------------------------------------------------------------------------- /ch10/README.md: -------------------------------------------------------------------------------- 1 | # CH10 Shell 脚本编程 2 | 3 | 本章讲述 bash 编程的相关知识。 4 | 5 | * 简介 6 | * Shell 脚本的编码规范 7 | * shell 脚本的组成 8 | * Shell 脚本的执行 9 | * Shell 脚本的调试 10 | * 变量 11 | * 变量赋值(=)、交互读取变量值(`read`) 12 | * 变量替换和变量输出 (`echo`) 13 | * 变量替换扩展 14 | * 变量的间接引用 15 | * 变量的字符串操作 16 | * 变量的整数运算 17 | * 命令行参数/位置参数、`shift` 18 | * 条件测试 19 | * `test` 20 | * [] 、[[]]、(()) 21 | * 使用条件测试和命令组合实现判断逻辑 22 | * 分支结构 23 | * `if` 24 | * `case` 25 | * 循环结构 26 | * `while` 27 | * `until` 28 | * `for` 29 | * `select` 30 | * 流程控制语句 31 | * `break` 32 | * `continue` 33 | * 函数 34 | * 函数的定义 35 | * 传递函数的返回值 36 | * 函数的调用 37 | 38 | 39 | >* [CH10 - 教学指导](guidelines.md) 40 | >* [CH10 - 课堂笔记](lecture_notes_10-01.md) 41 | >* [CH10 - 实验指导](experiment_10-01.md) 42 | >* [CH10 - 家庭作业](assignments.md) -------------------------------------------------------------------------------- /ch07/README.md: -------------------------------------------------------------------------------- 1 | # CH07 系统日常维护 2 | 3 | 本章讲解 系统监视、内核管理、启动过程、系统备份、故障排查等系统日常维护内容。 4 | 5 | * 系统监视 6 | * 影响系统性能的因素 7 | * 性能分析标准的经验准则 8 | * 使用系统监视工具 9 | * 内核管理 10 | * 管理内核模块 11 | * 内核升级 12 | * 调整内核参数(/proc 和 sysctl) 13 | * 系统启动过程 14 | * GRUB2 的操作界面 15 | * 使用 `grub2-mkconfig` 工具生成 GRUB2 的配置文件 16 | * Systemd 的目标管理与运行级别 17 | * 使用 `systemd-analyze` 分析启动过程性能 18 | * 备份与恢复 19 | * 备份类型 20 | * 使用 `cp`、`tar`、`dd`、`rsync` 等命令实施备份 21 | * 使用 `rsnapshot` 工具实现快照型备份 22 | * 使用 `lsyncd` 实现实时同步 23 | * 故障排查 24 | * 使用 安装光盘/LiveCD 援救环境修复系统启动故障和其他故障 25 | * 进入 Systemd 的 `rescue`/`emergency` 目标 26 | * 为内核传递 `rd.break` 参数中断 systemd 的执行并修复故障 27 | * 修复 root 口令丢失、分区、文件系统、LVM、软件包、网络等故障 28 | 29 | 30 | >* [CH07 - 教学指导](guidelines.md) 31 | >* [CH07 - 实验指导](experiment_07-01.md) 32 | >* [CH07 - 家庭作业](assignments.md) -------------------------------------------------------------------------------- /ch05/README.md: -------------------------------------------------------------------------------- 1 | # CH05 网络配置与包管理 2 | 3 | 本章讲述 网络配置和网络工具、软件包管理和系统更新。 4 | 5 | * 网络配置 6 | * TCP/IP 网络模型和协议族 7 | * Linux 网络接口和内核模块 8 | * 内核网络接口设备名 和 一致的网络设备名 9 | * 使用 `ip` /`ifconfig` 命令显示网络接口 10 | * 使用 `ip` /`ifconfig` 命令设置网络参数 11 | * NetworkManager 服务 和 `nmcli` 管理工具 12 | * CentOS 中的 TCP/IP 配置文件族 13 | * 修改配置文件配置网络相关参数 14 | * 网络工具 15 | * 网络测试工具 `ping`、`ss`、`ip route`、`traceroute` 16 | * 网络客户工具 `wget`、`lftp`、`elinks`、`mail` 17 | * SSH 客户 `ssh`、`scp`、`sftp` 18 | * RPM 包管理 19 | * RPM 包 20 | * 使用 `rpm` 命令 查询软件包 21 | * 使用 `rpm` 命令 安装/卸载/升级/校验软件包 22 | * YUM 系统 23 | * YUM 及其组件 24 | * 使用 `yum` 命令 安装/卸载/升级/查询 软件包 25 | * 使用 `rpm --import` 命令导入 YUM 仓库的 GPG 签名 26 | * 配置远程 YUM 仓库(包括非官方仓库) 27 | * 使用安装光盘配置本地 YUM 仓库 28 | 29 | 30 | >* [CH05 - 教学指导](guidelines.md) 31 | >* [CH05 - 实验指导](experiment_05-01.md) 32 | >* [CH05 - 家庭作业](assignments.md) -------------------------------------------------------------------------------- /ch09/experiment_09-02.md: -------------------------------------------------------------------------------- 1 | # 实验指导 9.2 - 代理服务 与 VPN(选做) 2 | 3 | >#### 学习目标 4 | > * 使用 Squid 实现 HTTP/FTP 缓存代理 5 | > * 使用 Shadowsocks 实现 Socks 代理 6 | > * 使用 pptpd 实现基于 PPTP 协议的 VPN 7 | > * 使用 libreswan 实现基于 IPSec 协议的 VPN 8 | > * 使用 openvpn 实现基于 SSL 协议的 VPN 9 | 10 | 11 | ## 任务1:缓存代理 12 | 13 | >参考 14 | >* Squid - http://www.squid-cache.org 15 | >* Varnish - https://www.varnish-cache.org 16 | 17 | ## 任务2:Socks 代理 18 | 19 | >参考 20 | >* https://shadowsocks.org (需科学上网) 21 | >* https://github.com/xuxiaodong/selfhosted-server (基于 Ansible 的部署) 22 | 23 | ## 任务3:PPTP 协议的 VPN 24 | 25 | >参考 26 | >* https://github.com/drewsymo/VPN 27 | 28 | ## 任务4:IPSec 协议的 VPN 29 | 30 | > 参考 31 | >* https://github.com/BoizZ/PPTP-L2TP-IPSec-VPN-auto-installation-script-for-CentOS-7 32 | >* https://github.com/thefangbear/oneclickVPN 33 | 34 | ## 任务5:SSL 协议的 VPN 35 | 36 | >参考 37 | >* https://github.com/Nyr/openvpn-install 38 | >* https://github.com/Angristan/OpenVPN-install 39 | -------------------------------------------------------------------------------- /ch14/assignments.md: -------------------------------------------------------------------------------- 1 | # CH14 - 家庭作业 2 | 3 | ## 扩展学习 4 | 5 | * 学习 Apache 模块的配置 6 | * * 学习使用 `expires_module` 模块配置静态文件缓存 7 | * * 学习使用 `mod_deflate` 模块配置压缩数据传输 8 | * * 学习使用 `mod_setenvif` 模块配置防盗链 9 | * * 学习使用 `mod_rewrite` 模块配置防盗链 10 | * * 学习使用 `mod_rewrite` 模块配置伪静态访问 11 | * 学习使用 `.htaccess` 文件实现 Appache 基于目录的访问控制 12 | * * [A collection of useful .htaccess snippets.](https://github.com/phanan/htaccess) 13 | * [HTML5 Boilerplate](https://html5boilerplate.com/) 14 | * * https://github.com/h5bp/html5-boilerplate 15 | * https://github.com/h5bp/server-configs-apache 16 | * https://github.com/h5bp/server-configs-nginx 17 | 18 | ## 进一步阅读 19 | 20 | * [《深入浅出 HTTPS:从原理到实战》](https://item.jd.com/12382462.html) 21 | * [《Web开发的身份和数据安全》](https://item.jd.com/12298765.html) 22 | * [十大抢手的网站压力测试工具](http://blog.163.com/weiwenjuan_bj/blog/static/1403503362010621111052355/) 23 | * [Certbot:自动部署 Let's Encrypt 证书](https://linuxtoy.org/archives/certbot.html) 24 | * https://freessl.org/ 25 | -------------------------------------------------------------------------------- /ch15/experiment_15-02.md: -------------------------------------------------------------------------------- 1 | # 实验指导 15.2 - Tomcat & Apache 2 | 3 | >#### 学习目标 4 | * 安装配置 OpenJDK 或 Java SE Development Kit(Oracle) 5 | * 安装配置独立运行的 Tomcat 6 | * 配置 Tomcat 第二实例 7 | * 配置 Apache 反向代理 Tomcat 8 | * 配置 Apache 反向代理 usermin 9 | 10 | ## 任务1:安装 OpenJDK 和 Tomcat 11 | 12 | **要求** 13 | * 安装 java-1.8.0-openjdk 和 tomcat 14 | * 配置独立运行的 Tomcat 15 | * 测试独立运行的 Tomcat 16 | * 安装 Tomcat 的默认 Web应用、管理应用和文档 17 | * 配置 Tomcat 的管理应用 18 | * 用户 fanny 只能访问 manager 界面 19 | * 用户 tonny 既可以访问 manager 也可以访问 admin 界面 20 | * 分别以不同用户测试管理界面访问 21 | 22 | >**参考** 23 | >* [Install JDK 9](https://www.server-world.info/en/note?os=CentOS_7&p=jdk9&f=1) 24 | >* [Install JDK 8](https://www.server-world.info/en/note?os=CentOS_7&p=jdk8&f=1) 25 | >* [Install OpenJDK 8](https://www.server-world.info/en/note?os=CentOS_7&p=jdk8&f=2) 26 | 27 | 28 | ## 任务2:配置 Tomcat 第二个实例 29 | 30 | **要求** 31 | * 配置可由 systemd 管理的第二个 Tomcat 实例 32 | 33 | 34 | ## 任务3:Apache 反向代理 35 | 36 | **要求** 37 | * 配置 Apache 反向代理 Tomcat 默认实例 38 | * 不对 /docs 的URI访问进行反向代理 39 | * 使用 AJP 协议反向代理 Tomcat 的默认实例 40 | * 配置 Apache 反向代理 Tomcat 第二个实例 41 | * 配置 Apache 反向代理 usermin (https://localhost:20000) -------------------------------------------------------------------------------- /ch14/README.md: -------------------------------------------------------------------------------- 1 | # CH14 Apache 基础 2 | 3 | 本章讲解基于 Apache 的 Web 服务配置。 4 | 5 | * Web 相关组件 6 | * 统一资源标识符 URI 7 | * Web 客户和 Web 服务器 8 | * 超文本传输协议 HTTP 9 | * Web 缓存和 Web代理 10 | * Cookie 和 Session 机制 11 | * Web 内容的构建组件 12 | * HTTP 协议 13 | * HTTP 协议特点 14 | * HTTP 协议版本 15 | * HTTP 的连接方式 16 | * HTTP 的请求方法 17 | * HTTP 的协议头 18 | * HTTP 的响应代码 19 | * Apache 简介 20 | * Apache 的特性 21 | * Apache 的结构 22 | * Apache 的运行模式 23 | * 多进程模型 **Profork MPM** 24 | * 多进程多线程混合模型 **Worker MPM** 和 **Event MPM** 25 | * 管理 Apache 26 | * 安装和启动 Apache 2.4 27 | * 使用 `apachectl` 管理 Apache 服务 28 | * 使用 `Include` 指令分割配置 29 | * 使用基于目录的 `.htaccess` 文件分割配置 30 | * 使用 `ab` 工具实现 Web 性能测试 31 | * Apache 的基本配置 32 | * 使用 `Alias` 指令设置“虚拟目录” 33 | * 配置基于主机的访问控制 34 | * 配置基于用户的认证和授权 35 | * 管理认证口令文件/认证组文件 36 | * 配置每个用户的 Web 站点 37 | * 重定向和重写 38 | * Apache 虚拟主机 39 | * 配置基于 IP 和/或 端口的虚拟主机 40 | * 配置基于域名的虚拟主机 41 | * 配置虚拟主机的分离日志及其日志滚动 42 | * Apache 的安全配置 43 | * 安装配置 `mod-ssl` 模块实现 HTTPS 协议的 Apache 虚拟主机 44 | * 安装配置 `mod-evasive` 模块防止 DoS 攻击 45 | 46 | 47 | >* [CH14 - 教学指导](guidelines.md) 48 | >* [CH14 - 实验指导](experiment_14-01.md) 49 | >* [CH14 - 家庭作业](assignments.md) -------------------------------------------------------------------------------- /ch16/README.md: -------------------------------------------------------------------------------- 1 | # CH16 E-mail 服务 2 | 3 | 本章讲述基本的电子邮件系统的配置。 4 | 5 | * 基本概念 6 | * 电子邮件系统的组成 7 | * 电子邮件协议 8 | * 邮件中继 9 | * MTA 与 DNS 10 | * LDA 与 用户邮箱 11 | * 邮件传输过程 12 | * Postfix 13 | * Postfix 及其特性 14 | * Postfix 的体系结构 15 | * Postfix 的多进程协作 16 | * Postfix 的邮件队列及其管理器 17 | * Postfix 映射表的功能及类型 18 | * Postfix 的 UCE 控制功能 19 | * 配置 SMTP 服务实现 MTA 20 | * 安装和启动 Postfix 21 | * Postfix 的配置文件 22 | * 使用 `postfix` 管理服务 23 | * 使用 `postconf` 工具显示配置或更新配置文件 24 | * Postfix 的默认配置 25 | * 使用 `swaks` 测试 Postfix 26 | * 配置基本功能的 SMTP 服务 27 | * 使用 access 映射表实现中继控制 28 | * 使用 aliases 映射表实现别名映射 29 | * 使用 virtual 映射表实现虚拟别名机制 30 | * Docecot 31 | * Docecot 及其特性 32 | * Docecot 的体系结构 33 | * Docecot 的多进程协作 34 | * 配置 POP/IMAP 服务实现 MAA 35 | * 安装和启动 Docecot 36 | * Docecot 的配置文件 37 | * 使用 `doveadm` 管理服务 38 | * 使用 `doveconf` 显示 Dovecot 配置 39 | * 配置基本功能的 POP3/IMAP 服务 40 | * SASL 与 TLS 41 | * SASL 与 SMTP 认证 42 | * 配置支持 SMTP 认证的 SMTP 服务 43 | * 配置基于 STARTTLS 的 SMTP 服务 44 | * 配置基于 SSL/TLS 的 SMTPs 服务 45 | * 配置基于 SSL/TLS 的 POP3s/IMAPs 服务 46 | 47 | 48 | >* [CH16 - 教学指导](guidelines.md) 49 | >* [CH16 - 实验指导](experiment_16-01.md) 50 | >* [CH16 - 家庭作业](assignments.md) -------------------------------------------------------------------------------- /ch13/assignments.md: -------------------------------------------------------------------------------- 1 | # CH13 - 家庭作业 2 | 3 | ## 扩展阅读 4 | 5 | * [应该在Linux上使用的10种云存储解决方案](http://cloud.51cto.com/art/201606/512417.htm) 6 | * [华云数据IT课堂:创新型企业级私有云存储是如何炼成的?](http://www.chinastor.org/GuoNeiXinWen/9402.html) 7 | * Resilio/BTsync 8 | * [被称为同步神器的 BTSync,你可以怎么用?](http://www.ifanr.com/app/584716) 9 | * [玩转 BTSync 的技巧](https://linuxtoy.org/archives/tips-while-playing-btsync.html) 10 | * [BT Sync——不仅是同步利器,而且是【分布式】网盘](http://www.tuicool.com/articles/myEBBj3) 11 | * https://www.v2ex.com/go/btsync 12 | * https://hub.docker.com/r/resilio/sync/ -- Ubuntu 13 | * https://hub.docker.com/r/nimmis/resilio-sync/ -- Alpine 14 | * Syncthing 15 | * [让Syncthing将桌面变成移动设备的本地云](http://cloud.51cto.com/art/201601/503594.htm) 16 | * [带版本控制的点对点文件同步工具](http://zhangdl.blog.51cto.com/11050780/1881853) 17 | * https://syncthing.net 18 | * https://github.com/syncthing/syncthing 19 | * [7 Awesome Open Source Cloud Storage Software For Your Privacy and Security](https://www.cyberciti.biz/cloud-computing/7-awesome-open-source-cloud-storage-software-for-your-privacy-and-security/) 20 | * [GnuBee: Personal blobfree NAS/Cloud server for hackers](https://www.cyberciti.biz/hardware/gnubee-personal-blobfree-nascloud-server-for-hackers/) -------------------------------------------------------------------------------- /ch15/README.md: -------------------------------------------------------------------------------- 1 | # CH15 Apache 进阶 2 | 3 | 本章讲述基于 Apache 的动态站点的架设与配置。 4 | 5 | * Web 编程语言 6 | * `Perl`、`Python`、`PHP`、`Ruby`、`Go` 7 | * 使用各种语言提供的模块管理工具 8 | * 了解各种语言的 Web 编程框架 9 | * 关系数据库 10 | * MySQL/MariaDB 数据库简介 11 | * MyISAM/InnoDB/Maria 等存储引擎的特点及选择 12 | * 安装和启动 MySQL/MariaDB 服务 13 | * 单实例 MySQL/MariaDB 服务的配置 14 | * 使用 mysql 的 CLI/GUI/WUI 客户工具 15 | * MySQL/MariaDB 数据库的备份与恢复 16 | * 键值缓存系统 17 | * 安装、配置和启动 Memcached 18 | * Memcached 的管理工具 `memcached-tool` 19 | * 安装、配置和启动 Redis 20 | * Redis 的管理工具 `redis-cli` 21 | * Apache 与 CGI 22 | * CGI 技术及其特点 23 | * 使用 ScriptAlias/AddHandler 配置 CGI 24 | * AWStats 日志统计分析工具的安装配置 25 | * LAMP (Linux+Apache+MySQL+PHP) 26 | * 安装配置 PHP 27 | * 配置基于 **prefork** MPM 的 `mod_php` 28 | * 配置基于 **event** MPM 的 `mod_proxy_fcgi` 和 **PHP-FPM** 29 | * 安装管理工具 (如:phpMyAdmin/LogAnalyzer 等) 30 | * 安装 BLOG/WIKI/FORUM/CMS/LMS 等典型应用 31 | * 安装配置基于 laravel/symfony 框架的应用 32 | * Apache 与 Tomcat 33 | * 安装配置 JDK 34 | * 安装和配置单实例 Tomcat 35 | * 安装和配置多实例 Tomcat 36 | * 配置基于 Tomcat 的虚拟主机 37 | * 配置 Apache 反向代理 Tomcat 38 | 39 | 40 | 41 | >* [CH15 - 教学指导](guidelines.md) 42 | >* [CH15 - 实验指导 15.1](experiment_15-01.md) 43 | >* [CH15 - 实验指导 15.2](experiment_15-02.md) 44 | >* [CH15 - 家庭作业](assignments.md) -------------------------------------------------------------------------------- /ch02/README.md: -------------------------------------------------------------------------------- 1 | # CH02 Linux 操作基础 2 | 3 | 本章通过基本概念、Shell 功能操作和常用命令三方面学习 Linux 的基础操作。 4 | 5 | * 基本概念 6 | * bash 的功能 7 | * Linux 目录层次结构标准 8 | * 文件命名规则 9 | * “一切皆文件”、设备文件的使用 10 | * 文件内容类型(`file`) 11 | * 文件属性(`stat`) 12 | * 硬链接与符号链接 13 | * 正则表达式(BRE、ERE) 14 | * Bash 特性/功能 15 | * 通配符 16 | * 命令行补全、命令别名 17 | * 命令历史、命令行编辑 18 | * `~` 扩展、`{}` 扩展、命令替换 19 | * 重定向、管道 20 | * Shell 变量的定义和变量命名规则 21 | * 变量替换、强引用和弱引用、避免扩展 22 | * 命令执行状态、命令组合 23 | * 当前Shell和子Shell 24 | * Shell 环境变量与变量作用域 25 | * 登录 Shell 和 非登录 Shell 26 | * Shell 环境配置文件 27 | * bash 的算数运算符 28 | * 常用命令 29 | * 文件/目录操作命令 30 | * `ls`、`cd`、`pwd`、`tree`、`mkdir`、`rmdir` 31 | * `touch`、`cp`、`mv`、`rm`、`ln` 32 | * 文本显示命令 33 | * `cat`、`tac/rev`、`more/less` 34 | * 文本处理命令 35 | * 文本截取 :`head/tail`、`cut`、`grep`、`awk` 36 | * 文本合并 :`cat`、`paste` 37 | * 文本替换 :`tr`、`sed` 38 | * 文本统计 :`wc` 39 | * 文本排序 :`sort`、`uniq`、`shuf` 40 | * “三剑客” :`grep`、`sed`、`awk` 41 | * 信息显示命令 42 | * 文本编辑器 vim 43 | 44 | 45 | >* [CH02 - 教学指导](guidelines.md) 46 | >* [CH02 - 课堂笔记 2.1](lecture_notes_02-01.md) 47 | >* [CH02 - 课堂笔记 2.2](lecture_notes_02-02.md) 48 | >* [CH02 - 实验指导 2.1](experiment_02-01.md) 49 | >* [CH02 - 实验指导 2.2](experiment_02-02.md) 50 | >* [CH02 - 家庭作业](assignments.md) -------------------------------------------------------------------------------- /ch07/assignments.md: -------------------------------------------------------------------------------- 1 | # CH07 - 家庭作业 2 | 3 | ## 扩展学习 4 | 5 | * SysVinit 系统的系统过程。 6 | 7 | ## 扩展阅读 8 | 9 | * [Common administrative commands in Red Hat Enterprise Linux 5, 6, and 7](https://access.redhat.com/articles/1189123) 10 | * [18 commands to monitor network bandwidth on Linux server](http://www.binarytides.com/linux-commands-monitor-network/) -- [中文版](http://os.51cto.com/art/201404/435279.htm) 11 | * [netdata](https://github.com/firehol/netdata) 12 | * [netdata:实时监视 Linux 系统性能](https://linuxtoy.org/archives/netdata.html) 13 | * [Monitor Linux CPU temperature, frequency, power in a graphical way](https://www.cyberciti.biz/python-tutorials/monitor-linux-cpu-temperature-frequency-power-in-a-graphical-way/) 14 | * [rsyslog+loganalyzer+mysql](http://www.cnblogs.com/mchina/p/linux-centos-rsyslog-loganalyzer-mysql-log-server.html) 15 | * [日志分析平台 ELK](https://my.oschina.net/itblog/blog/547250) 16 | 17 | 18 | * https://en.wikipedia.org/wiki/GNU_GRUB 19 | * https://wiki.archlinux.org/index.php/GRUB 20 | 21 | 22 | * https://www.linuxtrainingacademy.com/linux-commands-cheat-sheet/ 23 | * http://www.commandlinefu.com/ 24 | 25 | 26 | * [你应该知道的LINUX技巧](http://coolshell.cn/articles/8883.html) 27 | * [你可能不知道的SHELL](http://coolshell.cn/articles/8619.html) 28 | 29 | 30 | -------------------------------------------------------------------------------- /ch09/assignments.md: -------------------------------------------------------------------------------- 1 | # CH09 - 家庭作业 2 | 3 | ## 扩展阅读 4 | 5 | * 进一步学习firewall-cmd 命令的复杂规则配置和直接模式配置规则 6 | * https://fedoraproject.org/wiki/FirewallD 7 | * https://oracle-base.com/articles/linux/linux-firewall-firewalld 8 | * 进一步学习 iptables 命令 9 | * [Iptables-tutorial](http://www.frozentux.net/documents/iptables-tutorial/) 10 | * [LHW: Linux Firewalls Using iptables](www.linuxhomenetworking.com/wiki/index.php/Quick_HOWTO_:_Ch14_:_Linux_Firewalls_Using_iptables) 11 | * [Guide to IP Layer Network Administration with Linux](http://linux-ip.net/linux-ip/) 12 | * [Linux Advanced Routing and TC](http://www.lartc.org) 13 | * [Towards the perfect ruleset (PDF)](http://inai.de/documents/Perfect_Ruleset.pdf) 14 | * 学习使用第三方防火墙配置工具的使用 15 | * [Shorewall](http://www.shorewall.net/) 16 | * [homeLANsecurity](http://homelansecurity.sf.net/) 17 | * [Firewall Builder](http://www.fwbuilder.org/) 18 | * 了解和使用专用的防火墙发行版本 19 | * * [List of router and firewall distributions](https://en.wikipedia.org/wiki/List_of_router_and_firewall_distributions) 20 | * 学习 Squid 代理服务(应用层防火墙)的安装和配置 21 | * 学习本书未涉及 SELinux 方面的内容 22 | * [NSA SELinux 网站主页](http://www.nsa.gov/selinux/) 23 | * [Red Hat官方文档《SELinux User's and Administrator's Guide》](https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/SELinux_Users_and_Administrators_Guide/] 24 | -------------------------------------------------------------------------------- /ch08/assignments.md: -------------------------------------------------------------------------------- 1 | # CH08 - 家庭作业 2 | 3 | ## 扩展阅读 4 | 5 | * [25个Linux服务器安全TIPs](http://os.51cto.com/art/201703/536074.htm) 6 | * https://github.com/ryran/pyrite 7 | [OpenSSL web front-end](https://dennis.silvrback.com/openssl-web-front-end) 8 | * [a7crypt - GUI frontend for symmetric encryption/decryption](https://github.com/ryran/a7crypt) 9 | * [使用GnuPG(PGP)加密信息及数字签名教程](http://www.williamlong.info/archives/3439.html) 10 | * http://www.techrepublic.com/article/how-to-install-advanced-intrusion-detection-environment-on-centos/ 11 | * http://www.techrepublic.com/article/how-to-quickly-audit-a-linux-system-from-the-command-line/ 12 | * http://www.techrepublic.com/blog/10-things/10-outstanding-open-source-server-tools/ 13 | * [RHEL7 Security Guide - Chapter 7. Compliance and Vulnerability Scanning with OpenSCAP](https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Security_Guide/chap-Compliance_and_Vulnerability_Scanning.html) 14 | * [Red Hat Product Security Security Data](https://www.redhat.com/security/data/metrics/) 15 | * [hardened-centos7-kickstart](https://github.com/fcaviggia/hardened-centos7-kickstart) 16 | * [使用OpenScap对CentOS6进行安全检查](http://blog.csdn.net/liuyuansheng6911/article/details/54380333) 17 | 18 | * [A curated list of awesome malware analysis tools and resources.](https://github.com/rshipp/awesome-malware-analysis) 19 | 20 | * [LastPass或KeePass](http://www.williamlong.info/archives/4315.html) 21 | 22 | 23 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Book build output 2 | _book 3 | 4 | ## Dependency directory 5 | ## Commenting this out is preferred by some people, see 6 | ## https://docs.npmjs.com/misc/faq#should-i-check-my-node_modules-folder-into-git 7 | node_modules 8 | 9 | # eBook build output 10 | # *.epub 11 | # *.mobi 12 | # *.pdf 13 | 14 | # Node rules: 15 | ## Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 16 | .grunt 17 | 18 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion 19 | #*.iml 20 | 21 | ## Directory-based project format: 22 | # .idea/ 23 | # if you remove the above rule, at least ignore the following: 24 | 25 | # User-specific stuff: 26 | # .idea/workspace.xml 27 | # .idea/tasks.xml 28 | # .idea/dictionaries 29 | 30 | # Sensitive or high-churn files: 31 | # .idea/dataSources.ids 32 | # .idea/dataSources.xml 33 | # .idea/sqlDataSources.xml 34 | # .idea/dynamic.xml 35 | # .idea/uiDesigner.xml 36 | 37 | # Gradle: 38 | # .idea/gradle.xml 39 | # .idea/libraries 40 | 41 | # Mongo Explorer plugin: 42 | # .idea/mongoSettings.xml 43 | 44 | ## File-based project format: 45 | # *.ipr 46 | # *.iws 47 | 48 | ## Plugin-specific files: 49 | 50 | # IntelliJ 51 | # /out/ 52 | 53 | # mpeltonen/sbt-idea plugin 54 | # .idea_modules/ 55 | 56 | # JIRA plugin 57 | # atlassian-ide-plugin.xml 58 | 59 | # Crashlytics plugin (for Android Studio and IntelliJ) 60 | # com_crashlytics_export_strings.xml 61 | # crashlytics.properties 62 | # crashlytics-build.properties 63 | -------------------------------------------------------------------------------- /ch09/README.md: -------------------------------------------------------------------------------- 1 | # CH09 Linux 防火墙 2 | 3 | 本章讲解 Linux 防火墙的相关概念及其配置方法。 4 | 5 | * 防火墙 6 | * 防火墙的概念及分类 7 | * 包过滤防火墙 8 | * NAT 的概念及分类 9 | * Linux 防火墙 10 | * Linux 防火墙组成 11 | * 内核空间:Netfilter 12 | * 链:`PREROUTING`、`INPUT`、`FORWARD`、`OUTPUT`、`POSTROUTING` 13 | * 表:**`filter`**、**`nat`**、`mangle`、`raw`、`security` 14 | * `filter` 表中的**自主访问控制(DAC)**过滤 15 | * `security` 表用以配合 SELinux 实现**强制访问控制(MAC)**过滤 16 | * 用户空间配置工具:`iptables`,... 17 | * 连接跟踪与状态防火墙 18 | * 内核模块:`nf_conntrack.ko`, `nf_conntrack_*.ko` 19 | * 表: `/proc/net/nf_conntrack` (内核自动维护,一般无需认为干预) 20 | * 用户空间状态:**NEW**,**ESTABLISHED**,**RELATED** 、**INVALID**、**UNTRACKED** 21 | * 数据包在 Netfilter 多表/链中的穿越流程 22 | * 入站包(目标地址为防火墙):`PREROUTING` -> `INPUT` 23 | * 出站包(源地址为防火墙):OUTPUT -> POSTROUTING 24 | * 转发包(目标地址和源地址均不是防火墙):`PREROUTING` -> `FORWARD` -> `POSTROUTING` 25 | * firewalld 守护进程 26 | * 使用 firewall-cmd 工具配置基于 firewalld 的防火墙 27 | * `/etc/firewalld/firewalld.conf` 28 | * `/etc/firewalld/` 29 | * `/usr/lib/firewalld/` 30 | * iptables 服务 31 | * 使用 lokkit 工具配置基于 iptables 服务的防火墙 32 | * `iptables-restore` 和 `iptables-save` 33 | * `/etc/sysconfig/iptables-config` 34 | * `/etc/sysconfig/iptables` 35 | * iptables 命令 36 | * iptables 命令语法 37 | * 编写基于 iptables 命令的防火墙脚本 38 | * 编写基于 iptables 规则集文件(`iptables-save`输出格式)的防火墙脚本 39 | 40 | 41 | >* [CH09 - 教学指导](guidelines.md) 42 | >* [CH09 - 实验指导 9.1](experiment_09-01.md) 43 | >* [CH09 - 实验指导 9.2](experiment_09-02.md) 44 | >* [CH09 - 家庭作业](assignments.md) 45 | -------------------------------------------------------------------------------- /ch11/experiment_11-01.md: -------------------------------------------------------------------------------- 1 | # 实验指导 11 - DHCP 和 DNS 服务 2 | 3 | >#### 学习目标 4 | >* 配置 DHCP 服务器 5 | >* 配置唯高速缓存 DNS 服务器和转发器 6 | >* 配置主 DNS 服务器 7 | >* 配置辅助 DNS 服务器 8 | >* 使用 `rndc` 命令管理 BIND 9 | >* 使用 `dig`/`nslookup`/`host` 命令测试 DNS 10 | 11 | 12 | ## 任务1:DHCP 服务器 13 | 14 | **要求** 15 | * DHCP 服务只监听在 Host-Only 网卡 16 | * 默认租约时间为18000秒;最大租约时间为36000秒 17 | * 局域网内所有主机的域名为 `olabs.lan` 18 | * 客户机使用的 DNS 服务器的 IP 地址是 DHCP 服务器的 Host-Only 网卡 IP 地址 19 | * 动态分配的 IP 地址范围从 192.168.56.100/24~192.168.56.199/24,默认网关地址是 DHCP 服务器的 Host-Only 网卡 IP 地址 20 | * 子网中有名为 cent7h2 的主机,需要固定分配 IP 地址 192.168.56.72,其他配置内容使用所在子网的配置 21 | * 配置防火墙允许 192.168.56.0/24 访问 DHCP 服务器 22 | * 配置 cent7h2 主机使用 DHCP 分配网络参数 23 | 24 | ## 任务2:唯高速缓存 DNS 服务器和转发器 25 | 26 | **要求** 27 | * DNS 服务只监听在 Host-Only 网卡 28 | * 配置惟高速缓存 DNS 服务 29 | * 设置仅允许 192.168.56.0/24 的主机查询 30 | * 设置转发地址为 114.114.114.114 8.8.8.8 31 | * 配置防火墙允许 192.168.56.0/24 查询 DNS 服务器 32 | * 使用 DNS 查询工具检测配置 33 | * 修改使用本 DNS 服务器的客户机的 DNS 配置 34 | 35 | ## 任务3:主 DNS 服务器 36 | 37 | 38 | **要求** 39 | * 配置 `olabs.lan` 的正向区域文件 40 | * 配置 `56.168.192.in-addr.arpa` 的反向区域文件 41 | * 配置正向区数据库文件和相应的 SOA/NS/MX/A/CNAME RR 42 | * 配置反向区数据库文件和相应的 SOA/NS/PTR RR 43 | 44 | 45 | ## 任务4:辅助 DNS 服务器 46 | 47 | 48 | **要求** 49 | * 主 DNS 服务器 50 | * 配置仅允许辅助 DNS 进行区域传输 51 | * 配置防火墙仅允许辅助 DNS 服务器进行区域传输 52 | * 辅助 DNS 服务器 53 | * 配置 `olabs.lan` 的正向区域文件指定主 DNS 服务器 54 | * 配置 `56.168.192.in-addr.arpa` 的反向区域文件指定主 DNS 服务器 55 | * 配置防火墙允许 DNS 查询 56 | * 测试辅助 DNS 服务器查询 57 | 58 | ## 任务5*:配置 Dnsmasq 服务器 59 | 60 | **要求** 61 | * 服务只监听在 Host-Only 网卡 62 | * 本地域 DNS 服务器 63 | * 非本地域的 DNS 转发器 64 | * DHCP 服务器 -------------------------------------------------------------------------------- /ch01/README.md: -------------------------------------------------------------------------------- 1 | # CH01 Linux 简介与安装 2 | 3 | 本章通过 Linux 简介、安装、初入三部分将用户引入 Linux 世界。 4 | 5 | * Linux 简介 6 | * 自由软件与开源软件 7 | * GNU 与 Linux 8 | * **Richard M. Stallman** 和 **Linus Benedict Torvalds** 9 | * Linux 的特点、组成 10 | * Linux 内核版本与发行版本 11 | * Debian 系列与 Fedora 系列发型 12 | * Fedora、RHEL、CentOS 的关系 13 | * Linux 的应用领域 14 | * Linux 安装 15 | * 安装前的准备(下载并校验 ISO 文件的正确性) 16 | * 安装必备知识(磁盘分区、挂装点、LVM) 17 | * 安装方式(本地/远程、手动/自动) 18 | * CentOS/RHEL/Fedora 的安装程序 `Anaconda` 19 | * 为服务器最小化安装 CentOS 7 20 | * Linux 初入 21 | * 操作界面 22 | * CLI、GUI、WUI 23 | * 用户登录与注销 24 | * root 和 普通用户 25 | * SSH 远程登录 26 | * 获取 root 权限执行命令 27 | * `su -` 28 | * `sudo` 29 | * 命令格式和命令帮助 30 | * `type` 31 | * `--help` 命令选项 32 | * `help <内置命令>` 33 | * `man <外置命令>` / `info <外置命令>` 34 | * 几个基本命令 35 | * `tty`、`whoami`、`passwd` 36 | * `ls`、`pwd`、`echo`、`cat` / `less` 37 | * `date`、`cal` 38 | * `which`、`whereis` 39 | * `whatis`、`apropos` / `man -k` 40 | * `yum install` / `yum update` 41 | * 查看系统基本信息 42 | * 发行版本、内核版本、系统启动信息 43 | * CPU、内存 44 | * 块设备、挂装点、磁盘分区、磁盘剩余容量、硬盘容量 45 | * 主机名、IP地址、路由表 46 | * 本地化(语言和键盘布局、日期、时间和时区) 47 | * 安装后的基本配置 48 | * 本地化(语言和键盘布局、日期、时间和时区) 49 | * 为实验环境关闭 防火墙和 SELinux 50 | * 关机与重启 51 | 52 | 53 | >* [CH01 - 教学指导](guidelines.md) 54 | >* [CH01 - 课堂笔记 1.1](lecture_notes_01-01.md) 55 | >* [CH01 - 课堂笔记 1.2](lecture_notes_01-02.md) 56 | >* [CH01 - 课堂笔记 1.3](lecture_notes_01-03.md) 57 | >* [CH01 - 实验指导 1.1](experiment_01-01.md) 58 | >* [CH01 - 实验指导 1.2](experiment_01-02.md) 59 | >* [CH01 - 家庭作业](assignments.md) -------------------------------------------------------------------------------- /ch08/README.md: -------------------------------------------------------------------------------- 1 | # CH08 服务器安全基础 2 | 3 | 本章讲解 Linux 物理安全、登录安全、口令安全、软件安全、服务安全、系统安全、信息安全、访问控制等内容。 4 | 5 | * 物理安全 6 | * 禁止 BIOS/UEFI 的附加存储介质启动系统 7 | * 设置 BIOS/UEFI 修改口令 8 | * 设置 GRUB 的修改口令 9 | * 禁用 `++` 重启功能 10 | * 登录安全 11 | * 禁用非必要的登录设备 12 | * 在离开终端时使用 `vlock` 锁屏 13 | * 为 BASH 设置超时自动注销 14 | * 为 OpenSSH 设置超时自动注销 15 | * 限制 root 用户 bash 命令历史的记录条目数量 16 | * 配置 sudo 并禁止 root 用户登录 17 | * 配置所有用户使用用户密钥而非用户口令登录 SSH 服务 18 | * 口令安全 19 | * 使用 `pam_unix.so` 模块限制用户使用旧口令 20 | * 使用 `pam_pwquality.so` 模块实现口令复杂性检查 21 | * 使用 `pam_tally2.so` 模块实现登录失败的账户锁定 22 | * 软件安全 23 | * 安装和运行最少的软件 24 | * 保持软件更新 25 | * 获取安全更新通知或直接进行安全更新 26 | * 服务安全 27 | * 关闭不必要的服务 28 | * 使用安全服务替代不安全的服务(如使用 ssh 替代 telnet 服务;使用 sftp 替代 ftp 服务等) 29 | * 在不同的系统或虚拟机上运行不同的网络服务 30 | * 使用 `fail2ban`/`denyhosts` 工具保护 SSH 服务及其他基于用户认证的服务 31 | * 优化内核参数防止 DoS/DDoS 攻击 32 | * 系统安全 33 | * 使用合理的磁盘布局将系统数据与用户数据分离 34 | * 使用挂装选项(`nodev`, `nosuid`, `noexec`)提高文件系统的安全性 35 | * 为用户和软件执行任务赋予所必需的最低权限 36 | * 使用 `aide` 工具实现重要文件的完整性检查 37 | * 使用 `rkhunter`/`chkrootkit` 工具实现 rootkit 检查 38 | * 制定灾难恢复计划并检测备份的有效性 39 | * 启用远程系统日志服务器防止入侵者篡改本地日志 40 | * 信息安全 41 | * PKI 体系 42 | * 文件加密与解密 43 | * 数字签名与验证 44 | * SSL/TLS 协议 - 数据保密性、数据完整性、不可抵赖性 45 | * 创建主机私钥和自签名证书 46 | * 访问控制 47 | * 使用 `pam_access.so` 实现登录访问控制 48 | * 使用 `pam_wheel.so` 实现 对 su/sudo 的访问控制 49 | * 使用 `pam_listfile.so` 实现基于 用户/组 的访问控制 50 | * 使用 `pam_limits.so` 实现 用户/组 对系统资源的访问控制 51 | * 使用 TCP Wrappers 实现基于 主机/网络 的访问控制 52 | * 使用防火墙实现访问控制(见下一章) 53 | 54 | >* [CH08 - 教学指导](guidelines.md) 55 | >* [CH08 - 实验指导](experiment_08-01.md) 56 | >* [CH08 - 家庭作业](assignments.md) -------------------------------------------------------------------------------- /ch10/assignments.md: -------------------------------------------------------------------------------- 1 | # CH10 - 家庭作业 2 | 3 | ## Shell 资源 4 | 5 | * [Awesome Shell](https://github.com/alebcay/awesome-shell) 6 | * [pure bash bible](https://github.com/dylanaraps/pure-bash-bible) 7 | 8 | ## 阅读脚本 9 | 10 | * 系统中的 11 | * /etc/profile、/etc/bashrc 12 | * 在 /etc /bin /sbin /usr/bin /usr/sbin 目录下所有 shell 脚本 13 | * Boxcutter 14 | * https://github.com/boxcutter/centos 15 | * packagecloud 16 | * https://packagecloud.io/install/repositories/phalcon/stable/script.rpm.sh 17 | * https://packagecloud.io/install/repositories/phalcon/stable/script.deb.sh 18 | * [TurnKey GNU/Linux](https://www.turnkeylinux.org/) - [TurnKey LXC LinuX Containers](https://www.turnkeylinux.org/lxc) 19 | * [Template for TurnKey GNU/Linux appliances](https://github.com/turnkeylinux-apps/lxc/blob/master/overlay/usr/share/lxc/templates/lxc-turnkey) 20 | * [NAT containers services - iptables-nat](https://github.com/turnkeylinux-apps/lxc/blob/master/overlay/usr/local/bin/iptables-nat) 21 | * [NAT containers services - nginx-proxy](https://github.com/turnkeylinux-apps/lxc/blob/master/overlay/usr/local/bin/nginx-proxy) 22 | * DVD embedded Kickstart for CentOS 7 utilizing SCAP Security Guide (SSG) as a hardening script. 23 | * https://github.com/fcaviggia/hardened-centos7-kickstart/blob/master/createiso.sh 24 | * https://github.com/fcaviggia/hardened-centos7-kickstart/blob/master/config/hardening/iptables.sh 25 | 26 | ## 学习配置管理工具 27 | 28 | * [Ansible](https://www.ansible.com/) 29 | * [現代 IT 人一定要知道的 Ansible 自動化組態技巧](https://chusiang.gitbooks.io/automate-with-ansible/content/) 30 | * [Ansible 快速上手](https://linuxtoy.org/archives/hands-on-with-ansible.html) 31 | * [Training Course for Ansible Network Automation](https://github.com/network-automation/linklight) 32 | * http://www.ansible.com.cn 33 | 34 | -------------------------------------------------------------------------------- /ch10/guidelines.md: -------------------------------------------------------------------------------- 1 | # CH10 - 教学指导 2 | 3 | ## 教学模块和知识点 4 | 5 | > 1. 可以作为教师教学和考试出题的依据。 6 | > 2. 可以作为学生学习的依据。 7 | 8 | 9 | ### 模块215 - Shell 编程 10 | 11 | | 编号 | 知识点 | 掌握程度 | 上机操作 | 12 | | ------ | --------------------------------------------- | -------- | -------- | 13 | | 215-01 | Shell 脚本的编码规范 | 了解 | | 14 | | 215-02 | Shell 脚本的执行和调试方法 | 掌握 | 是 | 15 | | 215-03 | Shell 自定义变量的赋值、交互读取 read | 掌握 | 是 | 16 | | 215-04 | 变量替换、变量替换扩展、变量间接引用 | 掌握 | 是 | 17 | | 215-05 | 变量的字符串操作 和 数值运算 | 掌握 | 是 | 18 | | 215-06 | 数组 | 了解 | | 19 | | 215-07 | 命令行参数/位置参数、`shift` | 掌握 | 是 | 20 | | 215-08 | 条件测试 [] 、[[]]、(()) | 掌握 | 是 | 21 | | 215-09 | `if`、`case` 分支语句 | 掌握 | 是 | 22 | | 215-10 | `for`、`while`、`until` 循环语句 | 掌握 | 是 | 23 | | 215-11 | 使用 `select` 循环实现菜单选择 | 掌握 | 是 | 24 | | 215-12 | 流程控制语句 `break`、`continue` | 掌握 | 是 | 25 | | 215-13 | 函数的定义、调用 | 掌握 | 是 | 26 | | 215-14 | 传递函数的返回值 | 掌握 | 是 | 27 | | 215-15 | 使用 `getopts` 处理命令行参数 | 了解 | 是* | 28 | | 215-16 | 使用 `whiptail` 创建基于 TUI 的对话框 | 了解 | 是* | 29 | 30 | 31 | ## 本章学习材料 32 | 33 | * **教材和课件 第10章** 34 | * linux.vbird.org 35 | * [學習 Shell Scripts](http://linux.vbird.org/linux_basic/0340bashshell-scripts.php) 36 | * 视频 37 | * 胡帅 - [Linux shell脚本编程入门](http://edu.51cto.com/course/course_id-6068.html) 38 | * 51cto - [shell脚本编程](http://edu.51cto.com/index.php?do=search&m=course&q=shell) 39 | -------------------------------------------------------------------------------- /overview/centos7book.md: -------------------------------------------------------------------------------- 1 | # 教材及勘误 2 | 3 | ![《Linux 基础及应用教程 (基于CentOS7)》](/assets/figs/covor.jpg) 4 | 5 | > To buy 6 | > 7 | >* 8 | >* 9 | 10 | ## 勘误表 (第1次印刷) 11 | 12 | ### 1、表 6-11 (Page 158) 13 | 14 | 将表格第五行: 15 | 16 | |  |  | | | | 17 | | ------ | ----------------------------- | --------- | ----- | ------------------------ | 18 | | 服务器 | 使用UDP协议接收发到本机的日志 | rsyslog | imudp | $ModLoad imtcp | 19 | |   |   |   |   | $InputTCPServerRun 514 | 20 | 21 | 改为: 22 | 23 | |  |  | | | | 24 | | ------ | ----------------------------- | --------- | ----- | ------------------------ | 25 | | 服务器 | 使用UDP协议接收发到本机的日志 | rsyslog | imudp | **$ModLoad imudp** | 26 | |   |   |   |   | **$UDPServerRun 514** | 27 | 28 | 29 | ### 2、表10-11下的提示框(Page 281) 30 | 31 | 将如下行: 32 | 33 | 大括号表达式能生成逆序序列,而seq不能 34 | 35 | 改为: 36 | 37 | 大括号表达式能生成逆序序列,seq若生成逆序数字序列需指定负数步长 38 | 39 | ### 3、操作步骤11.1(Page 294) 40 | 41 | 将最后的如下行: 42 | 43 | // 6. 在使用此DHCP服务的 CentOS 客户端执行 dhclient -r 获取IP 44 | # dhclient -r eno16777736 45 | 46 | 改为: 47 | 48 | // 6. 在使用此DHCP服务的 CentOS 客户端执行 dhclient 命令释放并获取IP 49 | # dhclient -r eno16777736 ; dhclient eno16777736 50 | 51 | ### 4、表12-11 (Page 336) 52 | 53 | 将续表第三行: 54 | 55 | no_root_squash 将root用户或其所属组映射成匿名用户或组,这样设置很不安全不建议使用 56 | 57 | 改为: 58 | 59 | no_root_squash 不将root用户或其所属组映射成匿名用户或组,这样设置很不安全不建议使用 60 | 61 | ### 5、操作步骤16.11 (Page 466) 62 | 63 | 将第五行: 64 | 65 | // 使用操作步骤 16.9 创建的服务器自签名证书和私钥文件 66 | 67 | 改为: 68 | 69 | // 使用操作步骤 **16.10** 创建的服务器自签名证书和私钥文件 70 | -------------------------------------------------------------------------------- /ch13/guidelines.md: -------------------------------------------------------------------------------- 1 | # CH13 - 教学指导 2 | 3 | ## 教学模块和知识点 4 | 5 | > 1. 可以作为教师教学和考试出题的依据。 6 | > 2. 可以作为学生学习的依据。 7 | 8 | 9 | ### 模块405 - Samba 服务 10 | 11 | | 编号 | 知识点 | 掌握程度 | 上机操作 | 12 | | ------ | -------------------------------------------- | -------- | -------- | 13 | | 405-01 | SMB/CIFS 协议 | 理解 | | 14 | | 405-02 | Samba 的版本及功能 | 理解 | | 15 | | 405-03 | Samba 提供的服务 | 理解 | | 16 | | 405-04 | Samba 的应用场景 | 理解 | | 17 | | 405-05 | 安装和启动 Samba 服务 | 掌握 | 是 | 18 | | 405-06 | Samba 的默认配置 | 掌握 | | 19 | | 405-07 | Samba 的服务器角色和安全等级 | 理解 | | 20 | | 405-08 | 使用 `smbpasswd` 命令管理 Samba 账户数据库 | 掌握 | 是 | 21 | | 405-09 | Samba 的配置文件 | 理解 | | 22 | | 405-10 | Samba 全局参数的设置 | 掌握 | 是 | 23 | | 405-11 | Samba 共享资源设置 | 掌握 | 是 | 24 | | 405-12 | Samba 打印资源设置 | 掌握 | 是 | 25 | | 405-13 | 配置匿名访问的共享资源 | 掌握 | 是 | 26 | | 405-14 | 为所有用户配置 只读/读写 共享 | 掌握 | 是 | 27 | | 405-15 | 为指定用户配置 只读/读写 共享 | 掌握 | 是 | 28 | | 405-16 | 为指定组配置 只读/读写 共享 | 掌握 | 是 | 29 | | 405-17 | Samba 的相关工具 | 了解 | | 30 | | 405-18 | 在 Linux 下访问 Windows/Samba 共享 | 掌握 | 是 | 31 | | 405-19 | 在 Linux 下挂装 Windows/Samba 共享 | 掌握 | 是 | 32 | 33 | 34 | ## 本章学习材料 35 | 36 | * **教材和课件 第13章** 37 | * linux.vbird.org 38 | * [SAMBA 伺服器](http://linux.vbird.org/linux_server/0370samba.php) 39 | 40 | -------------------------------------------------------------------------------- /ch13/experiment_13-01.md: -------------------------------------------------------------------------------- 1 | # 实验指导 13 - Samba 服务 2 | 3 | >#### 学习目标 4 | >* 配置任何人均可读写的共享 5 | >* 配置认证用户或组可读写的共享 6 | >* 使用 `smbpasswd` 命令管理 Samba 账户数据库 7 | >* 使用 `testparm` 命令检查配置文件的正确性 8 | >* 在 Linux 系统上使用 `smbclient` 命令访问 Samba 共享 9 | >* 在 Linux 系统上挂装 Samba 共享 10 | 11 | ## 任务1:配置任何人均可读写的共享 12 | 13 | **要求** 14 | * 全局配置 15 | * 无需用户认证(将不存在用户访问视为Guest账号访问) 16 | * 将工作组设置为 Windows 默认的 `WORKGROUP` 17 | * 仅允许本地回环网络和 192.168.56.0/24 访问 18 | * 指定客户端支持的最高协议版本为 `SMB3` 19 | * 共享名 `[share]` 20 | * 共享目录 `/srv/samba/share` 21 | * 任何人均可读写 22 | * 共享名 `[ftp]` 23 | * 共享目录 `/var/ftp/upload` 24 | * 任何人均可读写 25 | * 对共享目录写入的文件具有 ftp 的属主及组 26 | * 使用 `testparm` 命令检查配置文件的正确性 27 | * 开启防火墙对 samba 服务的访问 28 | * 测试 29 | * 在 Windows 系统上测试 30 | * 在 Linux 系统上使用 `smbclient` 命令测试 31 | * 在 Linux 系统上挂装 Samba 共享进行测试 32 | 33 | >**提示** 注意 `map to guest = Bad User` 和 `map to guest = Never` (默认值)的区别。 34 | 35 | ## 任务2:配置认证 用户/组 可读/写 的共享 36 | 37 | **要求** 38 | * 全局配置 39 | * 需用户认证(用户必须输入正确的口令方可访问) 40 | * 将工作组设置为 Windows 默认的 `WORKGROUP` 41 | * 仅允许本地回环网络和 192.168.56.0/24 访问 42 | * 指定客户端支持的最高协议版本为 `SMB3` 43 | * 共享名 `[homes]` 44 | * 共享用户自家目录 45 | * 仅用户自己可读写 46 | * 仅用户自己可以看到 47 | * 共享名 `[cdrom]` 48 | * 共享目录 `/media/cdrom` 49 | * 任何认证用户均可读 50 | * 共享名 `[tmp]` 51 | * 共享目录 `/tmp` 52 | * 任何认证用户均可读写 53 | * 共享名 `[staff]` 54 | * 共享目录 `/srv/samba/staff` 55 | * `staff` 组成员均可读写 56 | * 新建的文件或目录的组为 `staff` 57 | * 其他人没有任何权限 58 | * 共享名 `[staff2]` 59 | * 共享目录 `/srv/samba/staff2` 60 | * `staff` 组成员均可读 61 | * `staff` 组成员 tony 可读写 62 | * 新建的文件或目录的组为 `staff` 63 | * 用户 osmond(不是 `staff` 组成员)可读写 64 | * 其他人没有任何权限 65 | * 使用 `smbpasswd` 命令创建 Samba 用户 66 | * 使用 `testparm` 命令检查配置文件的正确性 67 | * 开启防火墙对 samba 服务的访问 68 | * 测试 69 | * 在 Windows 系统上测试 70 | * 在 Linux 系统上使用 `smbclient` 命令测试 71 | * 在 Linux 系统上挂装 Samba 共享进行测试 72 | 73 | 74 | >**参考** 75 | >* http://www.techrepublic.com/article/how-to-manage-user-security-in-samba/ 76 | -------------------------------------------------------------------------------- /ch01/experiment_01-01.md: -------------------------------------------------------------------------------- 1 | # 实验指导 1.1 - 安装 Linux 虚拟机 2 | 3 | >#### 学习目标 4 | > * 安装和使用 VirtualBox 5 | > * 最小化安装 CentOS 7 6 | 7 | 8 | ## 任务1:下载并安装 VirtualBox 9 | 10 | 1. 从 下载 11 | * VirtualBox platform packages 12 | * Oracle VM VirtualBox Extension Pack 13 | 2. 双击下载文件安装 14 | 15 | ## 任务2:下载并校验 CentOS 7 ISO 16 | 17 | 1. 从 下载 18 | * CentOS-7-x86_64-Minimal-1708.iso 19 | * sha256sum.txt 20 | 2. 从 下载 Git for Win 并双击安装 21 | 3. 校验 CentOS 7 ISO 22 | 1. 在文件管理器中进入 ISO文件和 sha256sum.txt 所在目录 23 | 2. 鼠标右键点击空白处,在菜单中运行 “Git Bash Here” 24 | 3. 执行命令进行校验 25 | $ grep 'Minimal' sha256sum.txt | sha256sum -c 26 | 或 27 | $ sha256sum -c sha256sum.txt 2>&1 | grep OK 28 | 29 | ## 任务3:创建并运行 VirtualBox 虚拟机 30 | 31 | 1. 运行 VirtualBox,单击 “新建” 按钮 32 | 1. 虚拟电脑名称和类型 33 | * 名称:cent7h1 34 | * 类型:Linux 35 | * 版本:Red Hat (64-bit) 36 | 2. 内存大小 1024M 37 | 3. 虚拟硬盘 38 | * 虚拟硬盘文件类型:VMDK 39 | * 分配类型:动态分配 40 | * 大小:20G 41 | 2. 单击 “设置” 按钮 42 | 1. 存储:为虚拟光驱分配 ISO 文件 43 | 2. 网络: 44 | * **网卡1:NAT** 45 | * **网卡2:Host-only** 46 | 3. 单击 “启动” 按钮运行虚拟机 47 | 48 | ## 任务4:最小化安装 CentOS 7 49 | 50 | 1. 进入安装引导界面,选择 “Install CentOS 7” 并回车 51 | 2. 选择安装过程使用的语言 “中文” 52 | 3. 安装配置 53 | 1. 配置键盘布局 —— 英语(美国) 54 | 2. 安装设备并分区 —— 自动配置分区(使用 LVM 方式) 55 | * 修改自动分区布局,将 / 文件系统所在的逻辑卷调整为 8GiB 56 | 3. 配置网络和主机名 57 | 1. 对于被 VirtualBox 设置了 NAT 类型的网卡使(由 VirtualBox 自动分配网络参数),并设置开机启用此网卡 58 | 2. 对于被 VirtualBox 设置了 Host-only 类型的网卡设置静态网络参数 192.168.56.71/24,并设置开机启用此网卡 59 | 4. 用户设置 60 | - 设置root用户口令 61 | - 创建名为 student 的的普通用户、设置其口令,并将其加入 wheel 组 62 | 5. 安装完毕,重新启动 63 | 64 | 65 | ## 参考资源 66 | 67 | * https://access.redhat.com/documentation/zh_cn/red-hat-enterprise-linux/ 68 | * https://access.redhat.com/documentation/zh-CN/Red_Hat_Enterprise_Linux/7/html/Installation_Guide/ -------------------------------------------------------------------------------- /ch04/guidelines.md: -------------------------------------------------------------------------------- 1 | # CH04 - 教学指导 2 | 3 | ## 教学模块和知识点 4 | 5 | > 1. 可以作为教师教学和考试出题的依据。 6 | > 2. 可以作为学生学习的依据。 7 | 8 | ### 模块204 - 本地存储管理 9 | 10 | | 编号 | 知识点 | 掌握程度 | 上机操作 | 11 | | ------ | --------------------------------- | -------- | -------- | 12 | | 204-01 | 磁盘及其类型 | 理解 | | 13 | | 204-02 | MBR 和 GPT 分区表 | 理解 | | 14 | | 204-03 | 使用 `fdisk/gdisk` 进行磁盘分区 | 掌握 | 是 | 15 | | 204-04 | 静态存储与动态存储 | 理解 | | 16 | | 204-05 | LVM 的相关概念 | 理解 | | 17 | | 204-06 | 使用 LVM 命令管理逻辑卷 | 掌握 | 是 | 18 | | 204-07 | Linux 常见的文件系统类型 | 理解 | | 19 | | 204-08 | 非日志文件系统和日志文件系统 | 理解 | | 20 | | 204-09 | 使用文件系统的一般方法 | 理解 | | 21 | | 204-10 | 创建文件系统 | 掌握 | 是 | 22 | | 204-11 | 挂装和卸装文件系统 | 掌握 | 是 | 23 | | 204-12 | 使用移动存储介质和镜像文件 | 掌握 | 是 | 24 | | 204-13 | 文件系统的检查和修复 | 掌握 | 是 | 25 | | 204-14 | 文件系统的扩展和收缩 | 掌握 | 是 | 26 | | 204-15 | 在系统启动时自动挂装文件系统 | 掌握 | 是 | 27 | | 204-16 | 使用交换分区和交换文件 | 掌握 | 是 | 28 | | 204-17 | 磁盘限额的相关概念 | 理解 | | 29 | | 204-18 | 设置 ext4 和 xfs 的磁盘限额 | 掌握 | 是 | 30 | | 204-19 | 磁盘操作命令 `du`、`df`、`dd`、`find` | 掌握 | 是 | 31 | 32 | ## 本章学习材料 33 | 34 | * **教材和课件 第4章** 35 | * linux.vbird.org 36 | * [Linux 磁碟與檔案系統管理](http://linux.vbird.org/linux_basic/0230filesystem.php) 37 | * [磁碟配額與進階檔案系統管理](http://linux.vbird.org/linux_basic/0420quota.php) 38 | * 马哥教育 视频 39 | * [Linux培训教程--Linux磁盘及文件系统管理](http://edu.51cto.com/course/course_id-1455.html) 40 | * [Linux培训教程--LVM动态磁盘逻辑卷](http://edu.51cto.com/course/course_id-858.html) 41 | * LinuxCast 每日播客 -- Linux简单系统操作技巧 42 | * [Agedu分析磁盘空间使用信息](https://wenku.baidu.com/course/study/91bbef06eff9aef8941e0689) -------------------------------------------------------------------------------- /ch14/guidelines.md: -------------------------------------------------------------------------------- 1 | # CH14 - 教学指导 2 | 3 | ## 教学模块和知识点 4 | 5 | > 1. 可以作为教师教学和考试出题的依据。 6 | > 2. 可以作为学生学习的依据。 7 | 8 | 9 | ### 模块406 - Apache 10 | 11 | | 编号 | 知识点 | 掌握程度 | 上机操作 | 12 | | ------ | -------------------------------------- | -------- | -------- | 13 | | 406-01 | WWW 服务和 HTTP 协议 | 理解 | | 14 | | 406-02 | Apache 的特性、结构和运行机制 | 理解 | | 15 | | 406-03 | 安装和启动 Apache 2.4 | 掌握 | 是 | 16 | | 406-04 | 使用 `apachectl` 管理 Apache 服务 | 掌握 | 是 | 17 | | 406-05 | CentOS 7 中 Apache 的默认配置 | 理解 | | 18 | | 406-06 | 使用 Include 指令分割配置 | 掌握 | 是 | 19 | | 406-07 | 使用基于目录的 .htaccess 文件分割配置 | 掌握 | 是 | 20 | | 406-08 | Apache 的基本配置指令 | 掌握 | | 21 | | 406-09 | 使用符号链接组织站点内容 | 掌握 | 是 | 22 | | 406-10 | 使用 `Alias` 指令组织站点内容 | 掌握 | 是 | 23 | | 406-11 | 配置每个用户的 Web 站点 | 了解 | 是* | 24 | | 406-12 | 重定向和重写 | 了解 | 是* | 25 | | 406-13 | 配置基于主机的访问控制 | 掌握 | 是 | 26 | | 406-14 | 配置基于用户的认证和授权 | 掌握 | 是 | 27 | | 406-15 | 管理认证口令文件/认证组文件 | 掌握 | 是 | 28 | | 406-16 | Apache 的虚拟主机简介 | 理解 | | 29 | | 406-17 | 基于 IP 和/或 端口的虚拟主机配置 | 掌握 | 是 | 30 | | 406-18 | 基于域名的虚拟主机配置 | 掌握 | 是 | 31 | | 406-19 | 配置虚拟主机的分离日志及其日志滚动 | 掌握 | 是 | 32 | | 406-20 | 配置基于 SSL 协议的 Apache 虚拟主机 | 掌握 | 是 | 33 | | 406-21 | 安装配置 mod-evasive 模块防止 DoS 攻击 | 掌握 | 是 | 34 | | 406-22 | 使用 `ab` 进行压力测试 | 掌握 | 是 | 35 | | 406-23 | 使用静态网站生成工具创建站点 | 了解 | 是* | 36 | 37 | 38 | ## 本章学习材料 39 | 40 | * **教材和课件 第14章** 41 | * linux.vbird.org 42 | * [WWW 伺服器](http://linux.vbird.org/linux_server/0360apache.php) 43 | * 马哥教育 视频 44 | * [Linux运维视频课程-Web服务基础](http://edu.51cto.com/course/course_id-5546.html) 45 | -------------------------------------------------------------------------------- /ch03/experiment_03-01.md: -------------------------------------------------------------------------------- 1 | # 实验指导 3.1 - 账户管理与口令管理 2 | 3 | >#### 学习目标 4 | > * 使用 `useradd`/`usermod`/`userdel` 命令 添加/修改/删除 用户 5 | > * 使用 `groupadd`/`groupmod`/`groupdel` 命令 添加/修改/删除 组 6 | > * 使用 `id` / `group`命令显示 用户/组 信息 7 | > * 使用 `su` / `sg` 或`newgrp` 命令切换 用户/组 8 | > * 使用 `passwd` 命令管理用户口令 9 | > * 使用 `gpasswd` 命令管理组口令和组成员 10 | > * 使用 `chage` 命令设置已存在用户的口令时效策略 11 | > * 修改 `/etc/login.defs` 文件为新建用户设置口令时效策略 12 | 13 | 14 | ## 任务1:显示用户和组管理的相关信息 15 | 16 | * 显示当前用户的用户和组信息 17 | * 查看添加用户时读取的默认(范围)值 18 | * 查看使用 useradd 命令添加用户时的默认值 19 | * 列表显示默认系统账户数据库文件及其权限 20 | * 查看 shadows 手册明确每一列的含义 21 | 22 | ## 任务2:创建用户并为其设置登录口令 23 | 24 | * 若当前不是 root 用户,请切换到 root 用户环境 25 | * 查看 useradd 的命令帮助 26 | * 添加名为 toni 的用户并为其设置口令 27 | * 查看 /home/toni 目录自身的权限 28 | * 显示 /home/toni 目录下的所有文件(包括隐含文件) 29 | * 显示指定用户 toni 的用户和组信息 30 | * 显示4个账户文件最后一行的内容,熟悉各个字段的含义 31 | 32 | ## 任务3:修改用户名和组名 33 | 34 | * 将 toni 用户的名字改为 tony,同时将其主目录移动到 /home/tony 35 | * 将 toni 组的名字改为 tony 36 | * 检验更改结果 37 | 38 | ## 任务4:组成员管理 39 | 40 | * 添加名为 leader 的组 41 | * 添加用户 emily(同时会创建同名主组),并指定其附加组为 leader 42 | * 添加用户 jacob,并指定其主组为 leader 43 | * 将用户 tony 的附加组设置为 leader 44 | * 查看 leader 组中的成员 45 | * 添加名为 designer 的组 46 | * 将 tony 用户加入 designer 组,并确保其还是 leader 的组成员 47 | 48 | 49 | * 创建 assistant 组 50 | * 创建 5 个用户 51 | * 设置 5 个均为 assistant 组的成员 52 | * 查看 assistant 组中的成员 53 | * 为 assistant 组添加1个新成员 54 | * 从 assistant 组剔除1个成员 55 | 56 | 57 | >**选择你喜欢的用户名** 58 | >* **!m!** austin victor charles richard alexander jacob michael matthew 59 | >* **!m!** nicholas christopher joshua jason tyler joseph 60 | >* **!f!** alexis amanda tina stella christina hannah alina gloria bella emily 61 | >* **!f!** brianna samantha hailey ashley kaitlyn madison brandon sarah 62 | 63 | 64 | ## 任务5: 删除用户和组 65 | 66 | * 删除所有你新创建的用户和组(除了 tony) 67 | 68 | ## 任务6: 口令管理与口令时效 69 | 70 | * 以 tony 用户登录并重新设置其口令 71 | * 使用非交互模式将 student 用户的口令设置为 5iCent0S (使用 su - -c) 72 | * 锁定用户 student,显示其口令状态,并尝试以 student 用户身份登录 73 | * 解除对 student 用户的锁定,并尝试以 student 用户身份登录 74 | * 设置新建用户的口令策略,至少每隔90天修改一次自己的口令 75 | * 设置对 student 用户的口令策略,至少每隔60天修改一次自己的口令 76 | * 设置 tony 用户 180 天后到期,并提前7天预警 77 | * 强制用户 student 在首次登录时修改其口令 78 | * 以 student 用户身份登录,并修改其口令 79 | 80 | -------------------------------------------------------------------------------- /ch09/guidelines.md: -------------------------------------------------------------------------------- 1 | # CH09 - 教学指导 2 | 3 | ## 教学模块和知识点 4 | 5 | > 1. 可以作为教师教学和考试出题的依据。 6 | > 2. 可以作为学生学习的依据。 7 | 8 | ### 模块304 - Linux 防火墙 9 | 10 | | 编号 | 知识点 | 掌握程度 | 上机操作 | 11 | | ------ | ------------------------------------------------- | -------- | -------- | 12 | | 304-01 | 包过滤防火墙和 NAT 的相关概念 | 理解 | | 13 | | 304-02 | Netfilter/iptables 防火墙的组成 | 理解 | | 14 | | 304-03 | 连接跟踪与状态防火墙 | 理解 | | 15 | | 304-04 | 数据包在 Netfilter 多表中的穿越流程 | 理解 | | 16 | | 304-05 | firewalld 守护进程 | 理解 | | 17 | | 304-06 | 使用 firewall-cmd 工具配置基于 firewalld 的防火墙 | 掌握 | 是 | 18 | | 304-07 | 向下兼容的 iptables 服务 | 了解 | | 19 | | 304-08 | 使用 lokkit 工具配置基于 iptables 服务的防火墙 | 了解 | | 20 | | 304-09 | 使用 iptabls 命令配置包过滤 和 NAT | 了解 | | 21 | | 304-10 | 编写基于 iptabls 命令的防火墙脚本 | 了解 | 是* | 22 | | 304-11 | 使用专用的路由与防火墙发行版本 | 了解 | | 23 | 24 | 25 | ### 模块305 - 隧道与 VPN 26 | 27 | | 编号 | 知识点 | 掌握程度 | 上机操作 | 28 | | ------ | ------------------------------------------------- | -------- | -------- | 29 | | 305-01 | SSH 隧道 | 理解 | | 30 | | 305-02 | 使用 ssh 命令实现 SSH 隧道 | 掌握 | 是 | 31 | | 305-03 | VPN 的相关概念 | 理解 | | 32 | | 305-04 | VPN 的分类 | 理解 | | 33 | | 305-05 | 使用 pptpd 实现基于 PPTP 协议的 VPN | 了解 | 是* | 34 | | 305-06 | 使用 libreswan 实现基于 IPSec 协议的 VPN | 了解 | 是* | 35 | | 305-07 | 使用 openvpn 实现基于 SSL 协议的 VPN | 了解 | 是* | 36 | 37 | 38 | ## 本章学习材料 39 | 40 | * **教材和课件 第9章** 41 | * linux.vbird.org 42 | * [防火牆與 NAT 伺服器](http://linux.vbird.org/linux_server/0250simple_firewall.php) 43 | * 马哥教育 视频 44 | * [Linux培训教程--Linux系统防火墙之iptables](http://edu.51cto.com/course/course_id-5549.html) 45 | -------------------------------------------------------------------------------- /ch03/experiment_03-02.md: -------------------------------------------------------------------------------- 1 | # 实验指导 3.2 - 权限管理和进程管理 2 | 3 | >#### 学习目标 4 | > * 使用 `chmod` 命令设置文件/目录的 基本/特殊 权限 5 | > * 使用 `chown`/`chgrp` 更改文件/目录的 属主/同组人 6 | > * 使用 `umask` 设置文件和目录的生成掩码 7 | > * 使用 `getfacl`/`setfacl` 显示/设置 文件/目录的 FACL 权限 8 | >* 进程管理 9 | > * 进程查看、显示命令的执行时间 10 | > * 杀死、调整运行优先级 11 | > * 在后台执行进程,注销后保证进程继续执行 12 | > * 实施作业控制 13 | 14 | ## 任务1:权限管理 15 | 16 | > 请将所有新创建用户的初始口令设置为:5L0ve!iNUx 17 | 18 | 1. 准备用户、组和目录 19 | * 添加组 admin,指定其 GID 为 6000 20 | * 添加用户 tom,其附加组为 admin,且其用户主目录为 /home/tommy 21 | * 添加用户 tyler,其主组为 admin 22 | * 添加用户 nicholas,其 UID 为 888,不允许该用户登录系统 23 | * 添加用户 sarah,该账户第一次登录系统时即被系统要求修改密码 24 | * 添加用户 amanda,该账户会在 14 天后被禁用,其 umask 值为 0022 25 | * 创建目录 /admin/{ventes,devel,formation,other,default} 26 | 2. 分配对不同目录的访问权限 27 | * 目录 /admin/ventes 的所有者为 root, 所属组为 admin,隶属于admin 组的所有用户均可在此目录下创建文件,但新建文件和目录的所属组自动是 admin, 属主是创建者自身,其它用户无任何权限 28 | * 目录 /admin/devel 的属主和属组为 root,所有人均可在此目录下创建文件,但不能删除别的用户创建的文件 29 | * 目录 /admin/formation 的属主和属组均为 root, 用户 root 拥有所有权限, 30 | root 组只能读和执行,其他人无任何权限,但是用户 tyler 对此目录具有一切权限, 而用户 tom 可以读取该目录下的文件 31 | * 在目录 /admin/default 下的文件(已经存在的和将来要创建的)对于 sarah 用户都具有一切权限 32 | * 所有人在目录 /admin/other 下均可创建和删除文件,但以 root 身份创建文件的 /admin/other/notice 文件不能被任何人(包括 root)删除和重命名 33 | 34 | 35 | ## 任务2:进程管理 36 | 37 | * 显示进程 38 | * 显示出当前用户在shell下所运行的进程的信息 39 | * 只查看用户 student 的进程的信息 40 | * 列出系统中正在运行的所有进程的详细信息 41 | * 列出系统中正在运行的所有进程的详细信息,并想看清所运行的进程的完整命令行 42 | * 列出系统中正在运行的所有进程的详细信息,对 -pcpu 输出列进行排序 43 | * 显示系统进程树 44 | * 列出 sshd 进程的详细信息 45 | * 列出 sshd 进程的 PID (请先远程登录几次,再查看) 46 | * 列出 root 用户运行的 sshd 进程的 PID 47 | * 列出 student 组运行的所有进程的PID 48 | * 列出 root 用户或 daemon 用户运行的所有进程的PID 49 | * 作业/进程控制 50 | * 在前台运行第1个 sleep 进程(1小时),然后以交互方式挂起之 51 | * 在后台运行第2个 sleep 进程(2小时) 52 | * 列出所有正在运行的作业状态 53 | * 列出所有正在运行的作业状态,同时列出进程PID 54 | * 将第1个 sleep 进程调度到后台继续执行 55 | * 列出所有正在运行的作业状态,同时列出进程PID 56 | * 显示所有名为 sleep 进程的 pid 和 nice 值 57 | * 尝试调高第1个 sleep 进程的优先级 58 | * 尝试调低第1个 sleep 进程的优先级 59 | * 尝试再次调高第1个 sleep 进程的优先级 60 | * 将第1个 sleep 进程调度到前台 61 | * 终止第1个 sleep 进程的执行 62 | * 杀死第2个 sleep 进程 63 | * 强行杀死名为 bash 的进程,发生了什么?为什么? 64 | 65 | >**提示** 请使用 student 和 root 身份分别执行上面的作业控制,找出不同之处 66 | 67 | ## 参考资源 68 | 69 | * http://people.cs.pitt.edu/~alanjawi/cs449/code/shell/UnixSignals.htm 70 | 71 | 72 | 73 | 74 | -------------------------------------------------------------------------------- /ch12/experiment_12-01.md: -------------------------------------------------------------------------------- 1 | # 实验指导 12 - FTP 服务和 NFS 服务 2 | 3 | >#### 学习目标 4 | >* 配置匿名 FTP 服务 5 | >* 配置本地用户 FTP 服务 6 | >* 配置虚拟用户 FTP 服务 7 | >* 配置基于 SSL/TLS 的 FTP 服务 8 | >* 配置 NFS 服务和远程挂载 9 | 10 | 11 | ## 任务1:配置匿名 FTP 服务 12 | 13 | **要求** 14 | * 关闭本地用户访问 15 | * 设置用户登录后提示为 “Welcome to our anonymous FTP service.” 16 | * 匿名用户不能离开匿名服务器目录 /var/ftp,且只能下载不能上传 17 | * 允许匿名用户上传到目录 /var/ftp/upload 18 | * 允许匿名用户在 /var/ftp/upload 目录中创建目录、文件更名、删除文件 19 | * 设置所有客户机的最大连接数为 100 20 | * 设置每个客户机的最大连接数为 2 21 | * 设置最大传输速率为 500KB/s 22 | * 设置数据被动连接端口范围:10100~10200 23 | * 开启防火墙允许访问 ftp 服务 24 | * 自定义 firewalld 的配置文件 ftp.xml 添加被动连接端口范围 25 | 26 | ## 任务2:配置本地用户 FTP 服务 27 | 28 | **要求** 29 | * 关闭匿名用户访问 30 | * 设置用户登录后提示为 “Welcome to our FTP service.” 31 | * 本地用户可以上传、下载、创建目录、文件更名、删除文件 32 | * 将本地用户限制在其自家目录中 33 | * 禁止 fany 用户访问 FTP 服务 34 | * 设置所有客户机的最大连接数为 200 35 | * 设置每个客户机的最大连接数为 2 36 | * 设置最大传输速率为 500KB/s 37 | * 设置 tony 用户的最大传输速率为 1MB/s 38 | * 设置数据被动连接端口范围:10100~10300 39 | * 禁止 192.168.122.0/24 访问 FTP 服务 40 | * 开启防火墙允许访问 ftp 服务 41 | * 自定义 firewalld 的配置文件 ftp.xml 添加被动连接端口范围 42 | 43 | 44 | ## 任务3:配置基于 SSL/TLS 的 FTP 服务 45 | 46 | **要求** 47 | * 匿名用户无需SSL支持 48 | * 本地用户的登录和数据传输均启用SSL/TLS 49 | * 使用 第8章 任务10 创建的证书和私钥文件 50 | * ftp.olabs.lan.{crt,key} 51 | 52 | 53 | ## 任务4:配置虚拟用户 FTP 服务 54 | 55 | **要求** 56 | * 关闭匿名和本地用户访问 57 | * 设置用户登录后提示为 “Welcome to our FTP service.” 58 | * 虚拟用户可以上传、下载、创建目录、文件更名、删除文件 59 | * 将虚拟用户限制在其登录目录中 60 | * 开启防火墙允许访问 ftp 服务 61 | 62 | ``` 63 | # cat /etc/vsftp/vusers.txt 64 | virtual-username1 65 | password1 66 | virtual-username2 67 | password2 68 | virtual-username3 69 | password3 70 | # useradd -d /srv/vftp -s /sbin/nologin vftp 71 | # for u in `sed -n 1~2p /etc/vsftp/vusers.txt`;do 72 | mkdir -p /srv/vftp/$u 73 | chown vftp: /srv/vftp/$u 74 | done 75 | # db_load -T -t hash -f /etc/vsftp/vusers.txt /etc/vsftp/vusers.db 76 | # chmod 600 /etc/vsftp/vusers.* 77 | ``` 78 | 79 | ## 任务5:配置 NFS 服务和远程挂载 80 | 81 | **要求** 82 | * 在服务器端设置共享 83 | * 所有网络客户可只读访问 /var/ftp/pub 84 | * 为 192.168.56.0/24 和 192.168.122.0/24 可只读访问 /var/ftp/yum ,但是 192.168.56.100/24 可读写 85 | * 为 192.168.56.30 设置对 /backup 的读写共享,且 root 可以以 root 权限访问而不是默认的 nfsnobody 用户权限 86 | * 为 192.168.56.0/24 设置对 /var/ftp/update 的读写共享,且全部访问者均映射为服务器本地的ftp用户和ftp组 87 | * 开启防火墙对 NFS 服务的访问 88 | * 使用 `exportfs` 重新导出全部共享 89 | * 在客户端挂载共享 90 | * 使用 `showmount` 查看 NFS 服务器的共享目录 91 | * 编辑 `/etc/fstab` 设置远程挂载 92 | 93 | 94 | 95 | 96 | -------------------------------------------------------------------------------- /ch12/guidelines.md: -------------------------------------------------------------------------------- 1 | # CH12 - 教学指导 2 | 3 | ## 教学模块和知识点 4 | 5 | > 1. 可以作为教师教学和考试出题的依据。 6 | > 2. 可以作为学生学习的依据。 7 | 8 | 9 | ### 模块403 - FTP 服务 10 | 11 | | 编号 | 知识点 | 掌握程度 | 上机操作 | 12 | | ------ | --------------------------------- | -------- | -------- | 13 | | 403-01 | FTP 模型和 FTP 协议 | 理解 | | 14 | | 403-02 | FTP 的数据传输模式 | 理解 | | 15 | | 403-03 | FTP 服务的使用者 | 理解 | | 16 | | 403-04 | 安装并启动 vsftpd | 掌握 | 是 | 17 | | 403-05 | CentOS 7 中 vsftpd 的默认配置 | 掌握 | | 18 | | 403-06 | vsftpd 的主配置文件的常用参数 | 掌握 | | 19 | | 403-07 | 配置高安全级别的匿名服务 | 掌握 | 是 | 20 | | 403-08 | 配置允许匿名用户上传的 FTP 服务 | 掌握 | 是 | 21 | | 403-09 | 配置本地用户限制在其自家目录中 | 掌握 | 是 | 22 | | 403-10 | 为不同的本地用户实施不同的配置 | 掌握 | 是 | 23 | | 403-11 | 配置基于本地用户的访问控制 | 掌握 | 是 | 24 | | 403-12 | 配置基于主机的访问控制 | 掌握 | 是 | 25 | | 403-13 | 配置使用虚拟用户的 FTP 服务 | 掌握 | 是 | 26 | | 403-14 | 配置基于 SSL/TLS 协议的 FTP 服务 | 掌握 | 是 | 27 | | 403-15 | 配置基于 prue-ftpd 的 FTP 服务 | 了解 | 是* | 28 | 29 | 30 | ### 模块404 - NFS 服务 31 | 32 | | 编号 | 知识点 | 掌握程度 | 上机操作 | 33 | | ------ | --------------------------------------- | -------- | -------- | 34 | | 404-01 | NFS 的协议模型 | 理解 | | 35 | | 404-02 | NFS 的协议版本 | 理解 | | 36 | | 404-03 | RPC 和 XDR | 理解 | | 37 | | 404-04 | RPC 和 NFS v3 | 理解 | | 38 | | 404-05 | 安装和启动 NFS 的相关组件 | 掌握 | 是 | 39 | | 404-06 | 修改 `/etc/exports` 配置 NFS 服务端 | 掌握 | 是 | 40 | | 404-07 | 使用 `exportfs` 命令维护 NFS 服务共享 | 掌握 | 是 | 41 | | 404-08 | 配置 NFS 服务的防火墙 | 掌握 | 是 | 42 | | 404-09 | 在客户端使用 `showmount` 查看服务器共享 | 掌握 | 是 | 43 | | 404-10 | 在客户端挂装 NFS 文件系统 | 掌握 | 是 | 44 | 45 | 46 | ## 本章学习材料 47 | 48 | * **教材和课件 第12章** 49 | * linux.vbird.org 50 | * [FTP 伺服器](http://linux.vbird.org/linux_server/0410vsftpd.php) 51 | * [NFS 伺服器](http://linux.vbird.org/linux_server/0330nfs.php) 52 | * 马哥教育 视频 53 | * [Linux文件共享FTP入门和进阶](http://edu.51cto.com/course/course_id-855.html) 54 | * [Linux网络文件共享机制-NFS高级功能](http://edu.51cto.com/course/course_id-856.html) 55 | -------------------------------------------------------------------------------- /ch06/guidelines.md: -------------------------------------------------------------------------------- 1 | # CH06 - 教学指导 2 | 3 | ## 教学模块和知识点 4 | 5 | > 1. 可以作为教师教学和考试出题的依据。 6 | > 2. 可以作为学生学习的依据。 7 | 8 | ### 模块208 - 守护进程与基础服务 9 | 10 | | 编号 | 知识点 | 掌握程度 | 上机操作 | 11 | | ------ | --------------------------------------------------- | -------- | -------- | 12 | | 208-01 | 守护进程的相关概念 | 理解 | | 13 | | 208-02 | 三种系统初始化系统 sysVinit/upstart/**systemd** | 掌握 | | 14 | | 208-03 | 使用 `systemctl` 显示、启动和停止服务 | 掌握 | 是 | 15 | | 208-04 | 使用 `systemctl` 实现服务的持久化管理 | 掌握 | 是 | 16 | | 208-05 | 使用 `service` 和 `chkconfig/update-rc.d` 管理服务 | 了解 | 是* | 17 | | 208-06 | 周期性任务服务 | 理解 | | 18 | | 208-07 | cron 的相关配置文件 | 掌握 | | 19 | | 208-08 | 控制安排 crontab 任务的人员 | 掌握 | 是 | 20 | | 208-09 | 修改配置文件安排 crontab 任务 | 掌握 | 是 | 21 | | 208-10 | 使用 crontab 命令安排用户各自的 crontab 任务 | 掌握 | 是 | 22 | | 208-11 | 系统日志服务 | 理解 | | 23 | | 208-12 | rsyslogd 的配置文件 | 掌握 | | 24 | | 208-13 | 配置和查看各种系统日志 | 掌握 | 是 | 25 | | 208-14 | 配置中央日志服务器 | 掌握 | 是 | 26 | | 208-15 | 日志滚动及其必要性 | 理解 | | 27 | | 208-16 | 日志滚动处理程序 logrotate | 理解 | | 28 | | 208-17 | 配置日志文件的日志滚动 | 掌握 | 是 | 29 | | 208-18 | SSH 协议和 SSH 服务 | 理解 | | 30 | | 208-19 | OpenSSH 服务器的配置文件 | 掌握 | | 31 | | 208-20 | 配置仅支持用户密钥登录的 SSH 服务器 | 掌握 | 是 | 32 | | 208-21 | 配置支持 sftp+chroot 的 SFTP 服务器 | 掌握 | 是 | 33 | | 208-22 | 使用 `ssh-keyscan` 命令搜集可信任主机公钥 | 掌握 | 是 | 34 | | 208-23 | 使用 `ssh-keygen` 命令生成用户密钥对 | 掌握 | 是 | 35 | | 208-24 | 使用 `ssh-copy-id` 将用户公钥上传至目标服务器 | 掌握 | 是 | 36 | | 208-25 | 使用 `ssh-agent` 和 `ssh-add` 管理用户私钥 | 掌握 | 是 | 37 | 38 | 39 | ## 本章学习材料 40 | 41 | * **教材和课件 第6章** 42 | * linux.vbird.org 43 | * [例行性工作排程](http://linux.vbird.org/linux_basic/0430cron.php) 44 | * [認識與分析登錄檔](http://linux.vbird.org/linux_basic/0570syslog.php) 45 | * [遠端連線伺服器SSH](http://linux.vbird.org/linux_server/0310telnetssh.php) 46 | -------------------------------------------------------------------------------- /words_in_middle_of_course.md: -------------------------------------------------------------------------------- 1 | # 写在配置网络服务之前 2 | 3 | ## 本课程与其他理论课程的关系 4 | 5 | * 计算机网络技术 6 | * TCP/IP 网络 7 | * 应用层协议 8 | * 网络与信息安全 9 | * PKI 10 | * TLS/SSL 11 | * 操作系统原理 12 | * 关系数据库原理 13 | 14 | >###国外经典教材 15 | >* 计算机网络 16 | > * [计算机网络:自顶向下方法(原书第6版)](https://item.jd.com/11556873.html) 17 | > * [计算机网络(第5版)](https://item.jd.com/10927233.html) 18 | >* 网络与安全 19 | > * [密码编码学与网络安全:原理与实践(第六版)](https://item.jd.com/11670334.html) 20 | > * [计算机安全:原理与实践(原书第3版) ](https://item.jd.com/11888616.html) 21 | >* 操作系统 22 | > * [现代操作系统(原书第4版)](https://item.jd.com/12139635.html) 23 | > * [操作系统――精髓与设计原理(第八版)](https://item.jd.com/12140626.html) 24 | * 数据库 25 | > * [数据库系统概念(原书第6版](https://item.jd.com/10954261.html) 26 | > * [数据库系统:设计、实现与管理(基础篇)(原书第6版)](https://item.jd.com/11928293.html) 27 | 28 | ## 本课程与各个专业的关系 29 | 30 | * 网络相关专业 31 | * 虚拟化与云平台技术 32 | * DevOps 与大规模应用部署 33 | * Python 语言编程 34 | * 软件相关专业 35 | * DevOps 与软件工程 36 | * Web/APP 应用开发 37 | * 硬件相关专业 38 | * 嵌入式开发 39 | * 基于微控制器 40 | * [Arduino](https://www.arduino.cc/) 41 | * 基于 ARM 平台的 Linux 操作系统 42 | * [LEDE Project](https://lede-project.org/start) 43 | * [Alpine Linux](https://alpinelinux.org/) 44 | * Debian 45 | * 物联网 46 | 47 | 48 | >###参考 49 | >* **Python 教材** 50 | > * [Python编程快速上手 让繁琐工作自动化](https://item.jd.com/11943853.html) 51 | > * [数据结构 Python语言描述](https://item.jd.com/12273412.html) 52 | > * [Python算法教程](https://item.jd.com/11841674.html) 53 | > * [Python极客项目编程](https://item.jd.com/12063813.html) 54 | >* **Arduino 与物联网** 55 | > * [Arduino程序设计基础(第2版)](https://item.jd.com/11661917.html) 56 | > * [图解物联网](https://item.jd.com/12177484.html) 57 | > * [完美图解物联网IoT实操:使用JavaScript,Node.JS,Arduino,Raspberry Pi](https://item.jd.com/12160187.html) 58 | > * [从芯片到云端:Python物联网全栈开发实践](https://item.jd.com/12253128.html) 59 | >* **云平台** 60 | > * https://vinfrastructure.it/2013/07/iaas-vs-paas-vs-saas/ 61 | > * https://en.wikipedia.org/wiki/DevOps 62 | > * https://en.wikipedia.org/wiki/DevOps_toolchain 63 | 64 | ## 如何学习网络服务 65 | 66 | * 理解与某项服务相关的协议 67 | * 通用互联网协议 68 | * DHCP、DNS、NTP、SNMP 69 | * HTTP(s)、FTP(s)、SMTP(s)、POP3(s)、IMAP(s) 70 | * 与操作系统相关的网络协议 71 | * RDP、SMB 72 | * SSH、NFS 73 | * 安装服务软件包 74 | * 查看服务软件包安装的执行文件和配置文件 75 | * 查看服务软件包安装的与 Linux 发布版本相关的 `README` 文件 76 | * 查看服务软件包安装的手册 77 | * 查找某项服务的配置文档 78 | * 发行版本的官方文档 79 | * https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/ 80 | * https://help.ubuntu.com/ 81 | * 知名 VPS 服务商提供的相关服务配置文档 82 | * https://www.linode.com/docs/ 83 | * https://www.vultr.com/docs/ 84 | * 服务软件的官方配置文档 -------------------------------------------------------------------------------- /ch11/guidelines.md: -------------------------------------------------------------------------------- 1 | # CH11 - 教学指导 2 | 3 | ## 教学模块和知识点 4 | 5 | > 1. 可以作为教师教学和考试出题的依据。 6 | > 2. 可以作为学生学习的依据。 7 | 8 | ### 模块401 - DHCP 服务 9 | 10 | | 编号 | 知识点 | 掌握程度 | 上机操作 | 11 | | ------ | ----------------------------------- | -------- | -------- | 12 | | 401-01 | 分配 IP 地址的方法 | 理解 | | 13 | | 401-02 | DHCP 的工作过程 | 理解 | | 14 | | 401-03 | 安装和启动 DHCP 服务 | 掌握 | 是 | 15 | | 401-04 | 配置基本的 DHCP 服务 | 掌握 | 是 | 16 | | 401-05 | 配置 DHCP 中继服务 | 了解 | | 17 | | 401-06 | 中大型网络 DHCP 服务部署 | 了解 | | 18 | | 401-07 | 配置使用 DHCP 的网络接口 | 掌握 | 是 | 19 | | 401-08 | 使用 `dhclient` 命令释放并获取 IP | 掌握 | 是 | 20 | | 401-09 | 使用 `Cobber` 配置无人值守安装服务器 | 了解 | 是* | 21 | 22 | 23 | ### 模块402 - DNS 服务 24 | 25 | | 编号 | 知识点 | 掌握程度 | 上机操作 | 26 | | ------ | ------------------------------------------ | -------- | -------- | 27 | | 402-01 | IP 地址和主机名转换的方法 | 理解 | | 28 | | 402-02 | DNS 系统的组成 | 理解 | | 29 | | 402-03 | 域名注册 | 了解 | | 30 | | 402-04 | DNS 域名服务器的类型 | 理解 | | 31 | | 402-05 | DNS 查询模式 | 理解 | | 32 | | 402-06 | 域名解析过程 | 理解 | | 33 | | 402-07 | 安装和启动 BIND | 掌握 | 是 | 34 | | 402-08 | 使用 `rndc` 命令管理 BIND | 掌握 | 是 | 35 | | 402-09 | BIND 域名服务器的配置文件族 | 理解 | | 36 | | 402-10 | 区数据库文件和资源记录 | 理解 | | 37 | | 402-11 | 配置 BIND 作为唯高速缓存器 | 掌握 | 是 | 38 | | 402-12 | 配置 BIND 作为主域名服务器 | 掌握 | 是 | 39 | | 402-13 | 配置 BIND 作为简单负载均衡 | 掌握 | 是 | 40 | | 402-14 | 配置 BIND 作为辅助域名服务器 | 掌握 | 是 | 41 | | 402-15 | 配置 BIND 作为域名转发器 | 掌握 | 是 | 42 | | 402-16 | 使用 Dnsmasq 配置私有域名解析 | 了解 | 是* | 43 | | 402-17 | 使用 Dnsmasq 配置唯高速缓存器和域名转发器 | 了解 | 是* | 44 | | 402-18 | 使用 **dig**/nslookup/host 检测域名解析 | 掌握 | 是 | 45 | 46 | 47 | ## 本章学习材料 48 | 49 | * **教材和课件 第11章** 50 | * linux.vbird.org 51 | * [DHCP 伺服器](http://linux.vbird.org/linux_server/0340dhcp.php) 52 | * [DNS 伺服器](http://linux.vbird.org/linux_server/0350dns.php) 53 | * 马哥教育 视频 54 | * [Linux培训教程——域名解析服务](http://edu.51cto.com/course/course_id-5545.html) 55 | * [CDN必备知识——DNS服务和智能DNS实现](http://edu.51cto.com/course/course_id-649.html) 56 | -------------------------------------------------------------------------------- /ch16/guidelines.md: -------------------------------------------------------------------------------- 1 | # CH16 - 教学指导 2 | 3 | ## 教学模块和知识点 4 | 5 | > 1. 可以作为教师教学和考试出题的依据。 6 | > 2. 可以作为学生学习的依据。 7 | 8 | 9 | ### 模块412 - E-mail 服务 10 | 11 | | 编号 | 知识点 | 掌握程度 | 上机操作 | 12 | | ------ | ------------------------------------------ | -------- | -------- | 13 | | 412-01 | 电子邮件系统的组成 | 理解 | | 14 | | 412-02 | 电子邮件协议 | 理解 | | 15 | | 412-03 | 邮件中继 | 理解 | | 16 | | 412-04 | MTA 与 DNS | 理解 | | 17 | | 412-05 | LDA 与 用户邮箱 | 理解 | | 18 | | 412-06 | Postfix 及其特性 | 了解 | | 19 | | 412-07 | Postfix 的体系结构 | 理解 | | 20 | | 412-08 | Postfix 的多进程协作 | 掌握 | | 21 | | 412-09 | Postfix 的邮件队列及其管理器 | 掌握 | | 22 | | 412-10 | Postfix 映射表的功能及类型 | 理解 | | 23 | | 412-11 | Postfix 的 UCE 控制功能 | 理解 | | 24 | | 412-12 | 安装和启动 Postfix | 掌握 | 是 | 25 | | 412-13 | Postfix 的命令工具 | 掌握 | 是 | 26 | | 412-14 | Postfix 的默认配置 | 掌握 | | 27 | | 412-15 | 使用 swaks 测试 Postfix | 掌握 | 是 | 28 | | 412-16 | Postfix 的配置文件和常用参数 | 掌握 | | 29 | | 412-17 | 使用 Postfix 配置基本功能的 SMTP 服务 | 掌握 | 是 | 30 | | 412-18 | 使用 access 映射表实现中继控制 | 掌握 | 是 | 31 | | 412-19 | 使用 aliases 映射表实现别名映射 | 掌握 | 是 | 32 | | 412-20 | 使用 virtual 映射表实现虚拟别名机制 | 掌握 | 是* | 33 | | 412-21 | 使用 header_checks 映射表实现邮件头过滤 | 了解 | | 34 | | 412-22 | 使用 body_checks 映射表实现邮件内容过滤 | 了解 | | 35 | | 412-23 | Postfix 内置内容检查的缺点及解决方法 | 理解 | | 36 | | 412-24 | Docecot 及其特性 | 了解 | | 37 | | 412-25 | Docecot 的体系结构 | 理解 | | 38 | | 412-26 | Docecot 的多进程协作 | 掌握 | | 39 | | 412-27 | 安装和启动 Docecot | 掌握 | 是 | 40 | | 412-28 | Docecot 的命令工具 | 掌握 | 是 | 41 | | 412-29 | Docecot 的配置文件和常用参数 | 掌握 | | 42 | | 412-30 | 使用 Docecot 配置基本功能的 POP3/IMAP 服务 | 掌握 | 是 | 43 | | 412-31 | SASL 与 SMTP 认证 | 理解 | | 44 | | 412-32 | 配置支持 SMTP 认证的 SMTP 服务 | 掌握 | 是 | 45 | | 412-33 | 配置基于 STARTTLS 的 SMTP 服务 | 掌握 | 是 | 46 | | 412-34 | 配置基于 SSL/TLS 的 SMTPs 服务 | 掌握 | 是 | 47 | | 412-35 | 配置基于 SSL/TLS 的 POP3s 服务 | 掌握 | 是 | 48 | | 412-36 | 配置基于 SSL/TLS 的 IMAPs 服务 | 掌握 | 是 | 49 | | 412-37 | 安装配置邮件系统解决方案 `iRedMail` | 了解 | 是* | 50 | 51 | 52 | ## 本章学习材料 53 | 54 | * **教材和课件 第16章** 55 | * linux.vbird.org 56 | * [郵件伺服器](http://linux.vbird.org/linux_server/0380mail.php) 57 | * 马哥教育 视频 58 | * [Linux邮件服务企业级应用](http://edu.51cto.com/course/course_id-1487.html) 59 | 60 | 61 | 62 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Linux 课程学习指导 — CentOS 7 2 | 3 | ## 课程概览 4 | 5 | 项目 | 内容 6 | ------------ | ------------------ 7 | **课程名称** | Linux 基础及应用 (Linux Fundamental and Application) 8 | **课程性质** | 为计算机相关专业开设的一门**专业基础课** 9 | **课程描述** | _CentOS 7 Linux_ **操作基础** **系统管理** **安全管理** **网络服务** 10 | **课程目标** | 成为 中高级 Linux 系统管理员、 初中级 Linux 运维工程师 11 | **预备知识** | [計算機概論](http://linux.vbird.org/linux_basic/0105computers.php)、 [基礎網路概念](http://linux.vbird.org/linux_server/0110network_basic.php) 12 | **课程教材** | [《Linux 基础及应用教程 (基于CentOS7)》 第2版](http://www.cmpedu.com/book/book%21webDetails.do?book_id=2053472) 13 | **课程课件** | [《Linux 基础及应用教程 (CentOS 7)》 配书PPT](http://down.51cto.com/data/2230243) 14 | **教学大纲** | [ **Linux 基础及应用教学大纲**](/assets/TeachingOutline.doc) 15 | **建议学时** | **80** (16×5) 或 **72** (12×6) 或 **64** (16×4) 16 | **参考资料** | [参考书](overview/references.md#reading-material)、 [参考视频](overview/references.md#videos)、 [参考网站](overview/references.md#website) 17 | **联系笔者** | 18 | 19 | ## 学习指导 20 | 21 | 章号 | 内容 | 教学指导 | 实验指导 | 家庭作业 | 阶段测验 22 | ---- | ------------------ | ------------------------- | ------------------------------- | -------------------------- | --------- 23 | 1 | Linux 简介与安装 | [G1](ch01/guidelines.md) | [E1.1](ch01/experiment_01-01.md), [E1.2](ch01/experiment_01-02.md) | [A1](ch01/assignments.md) | 24 | 2 | Linux 操作基础 | [G2](ch02/guidelines.md) | [E2.1](ch02/experiment_02-01.md), [E2.2](ch02/experiment_02-02.md) | [A2](ch02/assignments.md) | 25 | 3 | 多用户多任务管理 | [G3](ch03/guidelines.md) | [E3.1](ch03/experiment_03-01.md), [E3.2](ch03/experiment_03-02.md) | [A3](ch03/assignments.md) | 26 | 4 | 本地存储管理 | [G4](ch04/guidelines.md) | [E4](ch04/experiment_04-01.md) | [A4](ch04/assignments.md) | [Q1](quiz1.md) 27 | 5 | 网络配置与包管理 | [G5](ch05/guidelines.md) | [E5](ch05/experiment_05-01.md) | [A5](ch05/assignments.md) | 28 | 6 | 服务管理与基础服务 | [G6](ch06/guidelines.md) | [E6](ch06/experiment_06-01.md) | [A6](ch06/assignments.md) | 29 | 7 | 系统日常维护 | [G7](ch07/guidelines.md) | [E7](ch07/experiment_07-01.md) | [A7](ch07/assignments.md) | 30 | 8 | 服务器安全基础 | [G8](ch08/guidelines.md) | [E8](ch08/experiment_08-01.md) | [A8](ch08/assignments.md) | 31 | 9 | Linux 防火墙 | [G9](ch09/guidelines.md) | [E9.1](ch09/experiment_09-01.md), [E9.2](ch09/experiment_09-02.md) | [A9](ch09/assignments.md) | 32 | 10 | Shell 脚本编程 | [G10](ch10/guidelines.md) | [E10](ch10/experiment_10-01.md) | [A10](ch10/assignments.md) | [Q2](quiz2.md) 33 | 11 | DHCP 和 DNS 服务 | [G11](ch11/guidelines.md) | [E11](ch11/experiment_11-01.md) | [A11](ch11/assignments.md) | 34 | 12 | FTP 和 NFS 服务 | [G12](ch12/guidelines.md) | [E12](ch12/experiment_12-01.md) | [A12](ch12/assignments.md) | 35 | 13 | Samba 服务 | [G13](ch13/guidelines.md) | [E13](ch13/experiment_13-01.md) | [A13](ch13/assignments.md) | 36 | 14 | Apache 基础 | [G14](ch14/guidelines.md) | [E14](ch14/experiment_14-01.md) | [A14](ch14/assignments.md) | 37 | 15 | Apache 进阶 | [G15](ch15/guidelines.md) | [E15.1](ch15/experiment_15-01.md), [E15.2](ch15/experiment_15-02.md) | [A15](ch15/assignments.md) | 38 | 16 | E-mail 服务 | [G16](ch16/guidelines.md) | [E16](ch16/experiment_16-01.md) | [A16](ch16/assignments.md) | [Q3](quiz3.md) 39 | -------------------------------------------------------------------------------- /ch05/assignments.md: -------------------------------------------------------------------------------- 1 | # CH05 - 家庭作业 2 | 3 | ## 熟悉 Debian 系列发行 4 | 5 | * 包管理 6 | * 学习 `apt`、`aptitude`、`apt-get`、`apt-cache` 等命令的使用 7 | * 学习修改 APT 的仓库配置文件 8 | * 网络配置 9 | * 熟悉网络接口配置文件位置及语法 10 | 11 | >##### 参考 12 | >* https://linuxtoy.org/archives/debian-tips.html 13 | >* https://help.ubuntu.com/lts/serverguide/networking.html 14 | >* https://help.ubuntu.com/lts/serverguide/package-management.html 15 | 16 | ## 了解 Container & Docker 17 | 18 | * [Awesome Linux Containers](https://github.com/Friz-zy/awesome-linux-containers) 19 | * [Awesome Docker](https://github.com/veggiemonk/awesome-docker) 20 | 21 | * [Docker — 从入门到实践](https://yeasy.gitbooks.io/docker_practice/content/) 22 | 23 | ## 文件转换 24 | 25 | ### 文件编码转换 26 | 27 | 学习使用文件编码转换命令 (`iconv`/`enconv`/`enca`/`convmv`) 28 | 29 | >##### 参考 30 | > 31 | >* [Linux 转换文件名编码和文件编码](http://niyunjiu.iteye.com/blog/739224) 32 | 33 | ### 图片格式转换 34 | 35 | 使用命令行转换图片格式 36 | 37 | ``` 38 | ## 安装 ImageMagick 和 optipng 39 | yum install 40 | 41 | ## 更改图片大小 42 | convert -resize 300 profile.jpg profile_small.jpg 43 | 44 | ## 给图片加阴影 45 | convert screenshot.jpg 46 | \( +clone -background black -shadow 60×5+0+5 \) 47 | +swap -background white -layers merge +repage shadow.jpg 48 | 49 | ## PNG 图片瘦身 50 | optipng file.png 51 | ``` 52 | 53 | >##### 参考 54 | >* `man convert` 55 | >* `man optipng` 56 | >* http://www.imagemagick.org/ 57 | >* [LinuxCast.net每日播客](http://study.163.com/course/courseMain.htm?courseId=221001) 之课时28 58 | 59 | ### 音频格式转换 60 | 61 | 使用命令行转换音频 62 | 63 | ``` 64 | ## 安装 sox 65 | yum install sox 66 | 67 | ## 将Apple的AIFF格式转换为Microsoft的WAV格式 68 | sox filename.aiff filename.wav 69 | 70 | ## 将一个11.025K采样、16bit的WAV文件转化为8K采样、8bit的WAV文件 71 | sox infile.wav -r 8000 -b outputfile.wav 72 | 73 | ## 将wav格式转换为gsm格式 74 | sox 00.wav -r 8000 -c 1 00.gsm resample -ql 75 | ``` 76 | 77 | >##### 参考 78 | >* `man sox` 79 | >* [音频处理领域的瑞士军刀──SoX](http://blog.csdn.net/brave_heart_lxl/article/details/5715920) 80 | >* [sox :音频文件转换命令](http://www.2cto.com/os/201107/97208.html) 81 | 82 | ### 视频格式转换 83 | 84 | 使用命令行转换视频 85 | 86 | ``` 87 | ## 配置 RpmFusion 仓库 88 | ## 参考 https://rpmfusion.org/Configuration 89 | 90 | ## 安装 ffmpeg 和 mencoder 91 | yum -y install ffmpeg mencoder 92 | 93 | ## mpg/avi/ogg 转换 94 | ffmpeg -i video_origine.avi video_finale.mpg 95 | ffmpeg -i video_origine.mpg video_finale.avi 96 | ffmpeg -i video_origine.avi video_finale.ogg 97 | 98 | ## 将rm格式视频转换成mp4格式 99 | mencoder -ovc lavc -lavcopts vcodec=mpeg4 -oac mp3lame source.rm -o dest.mp4 100 | 101 | ## 将三个flv格式的视频合并成一个 102 | mencoder -ovc copy -oac mp3lame 0.flv 2.flv 3.flv -o test.flv 103 | ``` 104 | 105 | >##### 参考 106 | >* http://ffmpeg.org/ffmpeg.html 107 | >* [LinuxCast.net每日播客](http://study.163.com/course/courseMain.htm?courseId=221001) 之课时14 108 | >* [19 ffmpeg commands for all needs](http://www.catswhocode.com/blog/19-ffmpeg-commands-for-all-needs) 109 | >* [关于 ffmpeg 的总结](http://blog.csdn.net/jixiuffff/article/details/5709976) 110 | >* [MEncoder的基础用法](http://www.mplayerhq.hu/DOCS/HTML/zh_CN/mencoder.html) 111 | >* [Linux下三款流行的命令行文件转换工具](http://www.techweb.com.cn/network/system/2016-12-21/2456348.shtml) 112 | > * GUI 工具 -- [FF Multi Converter](https://sites.google.com/site/ffmulticonverter/home) (rpmfusion仓库) 113 | > * [FF Multi Converter:流行文件格式转换器](https://linuxtoy.org/archives/ff-multi-converter.html) 114 | -------------------------------------------------------------------------------- /overview/learning_environment.md: -------------------------------------------------------------------------------- 1 | # 学习环境 2 | 3 | ## 个人学习环境 4 | 5 | * 自备 **笔记本电脑**/台式机 6 | * CPU 支持硬件虚拟化技术 7 | * 内存 >= 8G 8 | * 桌面操作系统为 **Windows 10/7** 或 MacOS 或 LinuxMint/Ubuntu 9 | * 能连接公网 10 | * 使用开源虚拟化软件 **VirtualBox** 安装 Linux 系统虚拟机 11 | 12 | > **参考** 13 | > 14 | > * Mac 用户:[Awesome Mac](https://github.com/jaywcjlove/awesome-mac) 15 | > * Win 用户:[Awesome Windows](https://github.com/Awesome-Windows/Awesome) 16 | 17 | ## Windows 下的软件获取 18 | 19 | * 国内 20 | * 360 软件管家 21 | * 腾讯软件管理 22 | * 百度软件管理 23 | * 国外 24 | * [PortableApps for Windows](http://portableapps.com) 25 | * **[Chocolatey](https://chocolatey.org)** 26 | 27 | >* [Microsoft's open source project hosting web site](http://www.codeplex.com) 28 | >* [SourceForge](https://sourceforge.net/) 29 | 30 | ## 软件包管理器(命令行工具) 31 | 32 | * Linux: `yum`/`apt`... 33 | * Mac: `brew` 34 | * Windows:`choco` 35 | 36 | ## Chocolatey 37 | 38 | * **以管理员身份运行** PowerShell 39 | * 查看执行策略: `Get-ExecutionPolicy` 40 | * Windows PowerShell 加载配置文件并运行脚本的条件 41 | * *Restricted*: 允许执行单独的命令,但阻止所有脚本文件的运行 42 | * *RemoteSigned*: 要求从 Internet 下载的脚本和配置文件需具有受信任的发布者的数字签名 43 | * *AllSigned*: 要求所有脚本和配置文件都由受信任的发布者签名,包括在本地计算机上编写的脚本 44 | * *Bypass*: 不阻止任何内容,并且没有任何警告或提示 45 | * **设置执行策略**: 46 | * `Set-ExecutionPolicy AllSigned` 47 | * `Set-ExecutionPolicy RemoteSigned -Scope CurrentUser` 48 | * **安装** Chocolatey 49 | * `iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))` 50 | * **使用** Chocolatey 51 | * `choco --help` 52 | * 优缺点 53 | 54 | > 参考: [about_Execution_Policies](https://technet.microsoft.com/zh-CN/library/hh847748.aspx) 55 | 56 | 57 | ## Windows 下的 必备/常用 工具 58 | 59 | * 必备工具 60 | * **虚拟化软件** -- [VirtualBox](https://www.virtualbox.org/) 61 | * **`cmd` 替代品** -- [cmder/cmdermini](http://cmder.net/) 62 | * **Git** -- [git-for-windows](http://git-for-windows.github.io) 63 | * **`nodepad` 替代品** -- [nodepad++](https://notepad-plus-plus.org/) 64 | * 常用工具 65 | * 远程登录工具 -- [Putty](http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html) 66 | * 命令行下载工具 -- [aria2](https://aria2.github.io/) 67 | * 开发环境创建工具 -- [Vagrant](https://www.vagrantup.com/) 68 | * 代码等宽字体 -- [Source Code Pro](http://adobe-fonts.github.io/source-code-pro/) 69 | * `PATH` 环境变量编辑 -- [Path Editor](https://patheditor2.codeplex.com/) 70 | * `HOSTS` 文件编辑器 -- [Hosts File Editor](https://scottlerch.github.io/HostsFileEditor/) 71 | * 压缩/解压工具 -- [7zip](http://www.7-zip.org/) 72 | * 显示目录磁盘占用 -- [TreeSize](http://www.jam-software.de/treesize_free/) 73 | * 局域网络扫描 -- [Advanced IP Scanner](http://www.advanced-ip-scanner.com/cn/) 74 | * 路由跟踪 -- [Best Trace](http://www.ipip.net/) 75 | * MS Sysinternals Troubleshooting Utilities -- [Sysinternals Suite](https://docs.microsoft.com/en-us/sysinternals/downloads/sysinternals-suite) 76 | * 屏幕截图 -- [Greenshot](http://getgreenshot.org/) 77 | * 文件 HASH 码校验 -- [HashTab](http://implbits.com/products/hashtab/) 78 | * 多重引导U盘创建器 -- [YUMI](https://www.pendrivelinux.com/yumi-multiboot-usb-creator/) 79 | 80 | > 参考:[Win下必备神器之Cmder ](https://segmentfault.com/a/1190000004408436) 81 | 82 | ## 机房环境 83 | 84 | * 解决 Linux 系统安装问题 85 | * 部署 PXE 自动安装服务器(cobbler) 86 | * 使用现成的 **VirtualBox** 虚拟机镜像文件(`.ova`) 准备可用的Linux虚拟机 87 | * 使用现成的 **Vagrant** 虚拟机镜像文件(`.box`) 准备可用的Linux虚拟机 88 | * 解决 Linux 软件安装问题 89 | * 从公网镜像 CentOS 的官方仓库和 EPEL 仓库到本地 YUM 服务器 90 | * 从公网镜像或预先下载 虚拟机镜像文件(`.ova`/[.box](http://cloud.centos.org/centos/7/vagrant/x86_64/images/)) 91 | * 避免镜像的另一个选择是架设面向 YUM/APT 的代理服务器并预热 92 | * 解决 ISO 和虚拟机镜像文件的下载加速问题 93 | * 使用 P2P 下载工具 [Resilio](https://www.resilio.com/) 或 [Syncthing](https://syncthing.net) 94 | -------------------------------------------------------------------------------- /ch07/experiment_07-01.md: -------------------------------------------------------------------------------- 1 | # 实验指导 7 - 系统维护 2 | 3 | >#### 学习目标 4 | > * 使用系统监视工具 5 | > * `uptime`/`tload` 6 | > * `top`/`htop`/`dstat` 7 | > * `free`/`vmstat` 8 | > * `mpstat`/`iostat`/`sar` 9 | > * `nload`/`nethogs`/`iftop` 10 | > * 内核管理 11 | > * 安全升级内核 12 | > * 使用 `sysctl` 调整内核参数 13 | > * 系统启动过程 14 | > * Systemd 的目标管理与运行级别 15 | > * 使用 `systemd-analyze` 分析启动过程性能 16 | > * 自定义 Systemd 服务单元的配置文件 17 | > * 备份与恢复 18 | > * 使用 `cp`、`tar`、`dd`、`rsync` 等命令实施备份 19 | > * 使用 `rsnapshot` 工具实现快照型备份 20 | > * 使用 `lsyncd` 实现实时同步 21 | > * 故障排查 22 | > * 切换进入 Systemd 的 `rescue`/`emergency` 目标 23 | > * 使用 安装光盘的援救环境/LiveCD 修复系统启动故障和其他故障 24 | > * 使用 `grub2-mkconfig` 工具重新生成 GRUB2 的配置文件 25 | > * 为内核传递 `rd.break` 参数中断 systemd 的执行并修复故障 26 | > * 修复 root 口令丢失、分区/LVM、文件系统、软件包、网络等故障 27 | 28 | 29 | ## 任务1: 使用监视工具分析系统性能 30 | 31 | >**提示** 请先确保常用的系统监视工具已经被安装 32 | > `yum -y install sysstat htop dstat nload nethogs iftop` 33 | 34 | * 使用如下工具监视系统 35 | * `uptime`/`tload` 36 | * `top`/`htop`/`dstat` 37 | * `free`/`vmstat` 38 | * `mpstat`/`iostat`/`sar` 39 | * `nload`/`nethogs`/`iftop` 40 | * 系统性能分析 41 | * 系统平均负载为何时表示负载过重? 42 | * 如何找出 CPU 瓶颈? 43 | * 如何找出 内存 瓶颈? 44 | * 如何找出 I/O 瓶颈? 45 | * 如何找出 带宽 瓶颈? 46 | 47 | ## 任务2: 内核管理 48 | 49 | * 升级内核 50 | * yum update kernel-VER 51 | * yum update 52 | * 调整内核参数 53 | * 使用 `sysctl` 显示内核参数 54 | * 使用 `sysctl -w` 设置内核参数 55 | * 如:开启包转发功能 56 | 57 | 58 | ## 任务3:系统启动过程 59 | 60 | >### BIOS/UEFI -> GRUB2 -> 内核初始化 -> Systemd 初始化 61 | 62 | * 内核初始化 63 | * 参考 `man 7 dracut.bootup` 64 | * Systemd 初始化 65 | * 参考 `man 7 bootup` 66 | * systemd 的运行目标管理 67 | * 显示当前已激活的目标 68 | * 显示当前已加载的所有目标 69 | * 显示当前已安装的所有目标 70 | * systemd 的默认目标管理 71 | * 类似于在 CentOS 6 中配置或切换系统运行级别 72 | * 显示当前的默认目标 73 | * 显示默认目标的依赖关系 74 | * 设置默认目标(下次启动时生效)为 `graphical.target` 75 | * 更改当前的目标(立即生效)到 `emergency.target` 76 | 77 | 78 | ## 任务4: 禁用一致的网络设备名 79 | 80 | * 修改 `/etc/default/grub` 的 `GRUB_CMDLINE_LINUX` 配置行 81 | * 重新生成 grub2 的配置文件 82 | * 重新启动 83 | 84 | ## 任务5: 基于 tar 的备份 85 | 86 | * 完全(Full)备份 87 | * 将 `/etc /home /srv` 目录下的所有文件打包备份到 `/backup/full-backup.tgz` 88 | * 将当前完全备份的日期时间戳 (`date +%F`)写入 `/backups/full-backup-date` 文件 89 | * 增量(Incremental)备份 90 | * 将自昨天 0 点起有变化的数据打包备份到 `/backup/inc-backup-$(date -d yesterday "+%F").txz` 91 | * 差分(Differential)备份 92 | * 将自完全备份以来有变化的数据打包备份到 `/backup/diff-backup-$(date +%F).tbz` 93 | 94 | >* 编写一个每日执行脚本,实现每月一次完全备份,每周一次差分备份,每日一次增量备份,并删除 180 天前创建的备份文件 95 | 96 | ## 任务6: 基于 rsync 和 tar 的远程备份 97 | 98 | **要求** 99 | 1. 备份生产服务器(容器 c6-v1)的 /etc /home 目录到备份服务器(假如使用在第一章安装的 CentOS 7 VirtualBox 虚拟机) 100 | 2. 保留历史归档 (每月一次完全备份,每周一次差分备份,每日一次增量备份) 101 | 3. 删除 180 天前创建的备份文件 102 | 103 | **方法** 104 | 1. 在容器 c6-v1 上执行任务5的操作,然后使用 rsync 命令同步到备份服务器 105 | 2. 优选方法 106 | * 在备份服务器上创建目录 /backup/c6-v1/{current,archive} 107 | * 在备份服务器上每天将 c6-v1 上的 /etc /home 同步到自己的 /backup/c6-v1/current/{etc,home} 108 | * 在备份服务器上针对 /backup/c6-v1/current/{etc,home} 里的数据实施如 任务5 的操作,并将生成的 tar 文件存到 /backup/c6-v1/archive 目录里 109 | * 这样可以减轻生产服务器的负载并极大地减少了网络传输 110 | 111 | 试编写一个脚本完成上述任务。 112 | 113 | 114 | ## 任务7: 基于快照工具(rsnapshot)的备份 115 | 116 | **要求:**备份 `/etc/ /home /srv /root` 目录下的所有内容 117 | 118 | * 修改 rsnapshot 的配置文件 `/etc/rsnapshot.conf` 119 | * 假设这些目录都在某个逻辑卷中 120 | * 在备份之前,对要备份的目录所在的逻辑卷创建快照 121 | * 将快照卷挂装到 `/mnt/snap/` 相应的子目录下 122 | * 备份完毕卸装快照卷并删除快照卷 123 | * 要求保留 6个小时快照,7 个日快照,4个周快照,6个月快照 124 | * 添加周期性任务配置文件 `/etc/cron.d/rsnapshot` ,配置使之符合备份频率要求 125 | 126 | ## 任务8: 实时同步 127 | 128 | * 安装并配置 `lsyncd` 129 | * 使 CentOS 7 VirtualBox 虚拟机 的 `/var/www` 目录与 容器 c6-v1 中的 `/var/www` 目录保持同步 130 | 131 | ## 任务9: 故障排查 132 | 133 | * 找回丢失的 root 口令 134 | * 使用 gpt 分区设备的备份分区表修复其主分区表 135 | * 使用通过 dd 命令备份的 DOS(MBR) 分区表镜像文件修复 DOS 分区表 -------------------------------------------------------------------------------- /ch03/guidelines.md: -------------------------------------------------------------------------------- 1 | # CH03 - 教学指导 2 | 3 | ## 教学模块和知识点 4 | 5 | > 1. 可以作为教师教学和考试出题的依据。 6 | > 2. 可以作为学生学习的依据。 7 | 8 | ### 模块200 - 系统管理概览 9 | 10 | | 编号 | 知识点 | 掌握程度 | 上机操作 | 11 | | ------ | --------------------------------- | -------- | -------- | 12 | | 200-01 | 系统管理员的职责 | 理解 | | 13 | | 200-02 | CLI 管理工具 | 掌握 | | 14 | | 200-03 | TUI 管理工具 | 掌握 | | 15 | | 200-04 | GUI 管理工具 | 了解 | | 16 | | 200-05 | WUI 管理工具 | 了解 | | 17 | | 200-06 | 配置管理工具(Ansible、Puppet、Chef、SaltStack) | 了解 | | 18 | 19 | > **参考** 20 | > * [Linux System Administrator Projects](https://www.linuxtrainingacademy.com/linux-projects/) 21 | > * [Awesome Sysadmin](https://github.com/n1trux/awesome-sysadmin) 22 | > * [Awesome Sysadmin](https://github.com/kahun/awesome-sysadmin) 23 | > * [Infra as Code 自动化运维服务](http://www.connext.com.cn/solution/infra-as-code自动化运维服务/) 24 | 25 | ### 模块201 - 账户管理 26 | 27 | | 编号 | 知识点 | 掌握程度 | 上机操作 | 28 | | ------ | --------------------------------- | -------- | -------- | 29 | | 201-01 | 用户和组的概念 | 理解 | | 30 | | 201-02 | 用户分类 | 理解 | | 31 | | 201-03 | 标准组与私有组、主组和附加组 | 理解 | | 32 | | 201-04 | 账户系统文件 | 理解 | | 33 | | 201-05 | 使用命令行工具管理用户 | 掌握 | 是 | 34 | | 201-06 | 使用命令行工具管理组 | 掌握 | 是 | 35 | | 201-07 | 口令管理和口令时效 | 掌握 | 是 | 36 | | 201-08 | 用户和组显示命令(`id`和`group`) | 掌握 | 是 | 37 | | 201-09 | 用户和组切换命令(`su`和`newgrp`)| 掌握 | 是 | 38 | 39 | 40 | ### 模块202 - 权限管理 41 | 42 | | 编号 | 知识点 | 掌握程度 | 上机操作 | 43 | | ------ | --------------------------------- | -------- | -------- | 44 | | 202-01 | 查看文件和目录的权限 | 掌握 | | 45 | | 202-02 | 文件和目录权限的文字和数值表示法 | 理解 | | 46 | | 202-03 | 设置文件和目录的基本权限 | 掌握 | 是 | 47 | | 202-04 | 设置文件和目录的特殊权限 | 掌握 | 是 | 48 | | 202-05 | 设置文件和目录的FACL权限 | 掌握 | 是 | 49 | | 202-06 | 使用字符设定法设置操作权限 | 掌握 | 是 | 50 | | 202-07 | 使用数值设定法设置操作权限 | 掌握 | 是 | 51 | | 202-08 | 更改属主和同组人 | 掌握 | 是 | 52 | | 202-09 | 设置文件和目录的生成掩码 | 掌握 | 是 | 53 | 54 | 55 | ### 模块203 - 进程管理 56 | 57 | | 编号 | 知识点 | 掌握程度 | 上机操作 | 58 | | ------ | --------------------------------- | -------- | -------- | 59 | | 203-01 | 程序、进程和作业的概念 | 理解 | | 60 | | 203-02 | 进程的类型 | 理解 | | 61 | | 203-03 | 进程的启动方式 | 理解 | | 62 | | 203-04 | 进程查看 | 掌握 | 是 | 63 | | 203-05 | 杀死进程 | 掌握 | 是 | 64 | | 203-06 | 进程的运行优先级 | 掌握 | 是 | 65 | | 203-07 | 在注销后保证进程的执行 | 掌握 | 是 | 66 | | 203-08 | 显示进程的执行时间 | 掌握 | 是 | 67 | | 203-09 | 实施作业控制的常用命令 | 掌握 | 是 | 68 | 69 | ## 本章学习材料 70 | 71 | * **教材和课件 第3章** 72 | * linux.vbird.org 73 | * [Linux 帳號管理與 ACL 權限設定](http://linux.vbird.org/linux_basic/0410accountmanager.php) 74 | * [Linux 的檔案權限與目錄配置](http://linux.vbird.org/linux_basic/0210filepermission.php) 75 | * [程序管理與 SELinux 初探](http://linux.vbird.org/linux_basic/0440processcontrol.php) 76 | * 马哥教育 视频 77 | * [Linux培训教程--Linux用户和组、权限](http://edu.51cto.com/course/course_id-5537.html) 之 视频 6~17 78 | * [Linux培训教程--特殊权限与FACL](http://edu.51cto.com/course/course_id-5539.html) 之 视频 15~17 79 | * [Linux培训教程--linux 查看进程和资源管理](http://edu.51cto.com/course/course_id-5541.html) 之 视频 1~17 80 | 81 | 82 | 83 | -------------------------------------------------------------------------------- /ch01/guidelines.md: -------------------------------------------------------------------------------- 1 | # CH01 - 教学指导 2 | 3 | ## 教学模块和知识点 4 | 5 | > 1. 可以作为教师教学和考试出题的依据。 6 | > 2. 可以作为学生学习的依据。 7 | 8 | 9 | ### 模块100 - Linux 简介 10 | 11 | | 编号 | 知识点 | 掌握程度 | 上机操作 | 12 | | ------ | --------------------------------- | -------- | -------- | 13 | | 100-01 | 自由软件和开源软件 | 了解 | | 14 | | 100-02 | GNU 和 GPL | 了解 | | 15 | | 100-03 | UNIX 和 Linux 的历史 | 了解 | | 16 | | 100-04 | Linux 系统的特点 | 理解 | | 17 | | 100-05 | Linux 系统的组成 | 掌握 | | 18 | | 100-06 | Linux 的内核版本和发行套件 | 了解 | | 19 | | 100-07 | Debian 系列发型和 Fedora 系列发型 | 理解 | | 20 | | 100-08 | RHEL 与 Fedora 及 CentOS 的关系 | 理解 | | 21 | | 100-09 | Linux 的应用领域 | 了解 | | 22 | | 100-10 | Linux 的理念(哲学思想) | 理解 | | 23 | 24 | ### 模块101 - Linux 安装 25 | 26 | | 编号 | 知识点 | 掌握程度 | 上机操作 | 27 | | ------ | --------------------------------------- | -------- | -------- | 28 | | 101-01 | 根据不同用途下载适合的发型ISO文件 | 理解 | | 29 | | 101-02 | 校验下载的ISO文件的完整性 | 理解 | 是 | 30 | | 101-03 | 为物理安装将ISO文件写入光盘或U盘 | 了解 | | 31 | | 101-04 | 阅读发行注记获知发行版的新特性 | 了解 | | 32 | | 101-05 | 查看发型版的硬件支持情况 | 了解 | | 33 | | 101-06 | 为安装 Linux 准备硬盘空间 | 掌握 | | 34 | | 101-07 | 本地安装和网络安装 | 理解 | | 35 | | 101-08 | 手动安装和自动安装 | 理解 | | 36 | | 101-09 | CentOS 中 Anaconda 提供的三种运行模式 | 理解 | 是 | 37 | | 101-10 | CentOS 中 Anaconda 提供的四种安装界面 | 了解 | | 38 | | 101-11 | 本地手动最小化安装 CentOS 7 服务器 | 掌握 | 是 | 39 | | 101-12 | 网络自动最小化安装 CentOS 7 服务器 | 了解 | 是* | 40 | | 101-13 | 在安装过程中配置分区/逻辑卷布局 | 掌握 | 是 | 41 | | 101-14 | 在安装过程中配置网络参数和主机名 | 掌握 | 是 | 42 | | 101-15 | 在安装过程中配置本地化参数 | 掌握 | 是 | 43 | | 101-16 | 在安装过程中设置root口令并添加普通用户 | 掌握 | 是 | 44 | | 101-17 | 升级到 CentOS 7 | 了解 | | 45 | | 101-18 | 删除 CentOS 7 | 了解 | | 46 | 47 | 48 | ### 模块102 - Linux 初入 49 | 50 | | 编号 | 知识点 | 掌握程度 | 上机操作 | 51 | | ------ | -------------------------------- | -------- | -------- | 52 | | 102-01 | 虚拟控制台 | 理解 | | 53 | | 102-02 | 普通用户和超级用户 | 理解 | | 54 | | 102-03 | 本地登录和注销 | 掌握 | 是 | 55 | | 102-04 | 使用 ssh 登录远程 Linux 系统 | 掌握 | 是 | 56 | | 102-05 | 使用 GUI 工具登录远程 Linux 系统 | 掌握 | 是 | 57 | | 102-06 | 命令类型 | 理解 | | 58 | | 102-07 | 命令格式 | 掌握 | | 59 | | 102-08 | 获取命令帮助 | 掌握 | 是 | 60 | | 102-09 | 获取系统基本信息 | 掌握 | 是 | 61 | | 102-10 | 安装后的本地化配置 | 掌握 | 是 | 62 | | 102-11 | 禁用/启用 SELinux 安全机制 | 掌握 | 是 | 63 | | 102-12 | 安装必要的软件并更新系统 | 掌握 | 是 | 64 | | 102-13 | 关机与重新启动 | 掌握 | 是 | 65 | 66 | 67 | ## 本章学习材料 68 | 69 | * **教材和课件 第1章** 70 | * linux.vbird.org 71 | * [Linux是什麼與如何學習](http://linux.vbird.org/linux_basic/0110whatislinux.php) 72 | * [主機規劃與磁碟分割](http://linux.vbird.org/linux_basic/0130designlinux.php) 73 | * [安裝 CentOS7.x](http://linux.vbird.org/linux_basic/0157installcentos7.php) 74 | * [首次登入與線上求助](http://linux.vbird.org/linux_basic/0160startlinux.php) 75 | * 马哥教育 视频 76 | * [Linux入门学习和基础命令](http://edu.51cto.com/course/course_id-5524.html) 之 视频 9~24 77 | * [Linux入门学习和基础命令](http://edu.51cto.com/course/course_id-5524.html) 之 视频 25~30 78 | -------------------------------------------------------------------------------- /ch02/guidelines.md: -------------------------------------------------------------------------------- 1 | # CH02 - 教学指导 2 | 3 | ## 教学模块和知识点 4 | 5 | > 1. 可以作为教师教学和考试出题的依据。 6 | > 2. 可以作为学生学习的依据。 7 | 8 | ### 模块103 - Shell 及其特性 9 | 10 | | 编号 | 知识点 | 掌握程度 | 上机操作 | 11 | | ------ | -------------------------------- | -------- | -------- | 12 | | 103-01 | Shell 及其主要版本 | 了解 | | 13 | | 103-02 | Shell 的功能和系统地位 | 理解 | | 14 | | 103-03 | 文件通配符 | 掌握 | 是 | 15 | | 103-04 | `~` 扩展和大括号扩展 | 掌握 | 是 | 16 | | 103-05 | 命令补全 | 掌握 | 是 | 17 | | 103-06 | 命令别名 | 掌握 | 是 | 18 | | 103-07 | 命令历史 | 掌握 | 是 | 19 | | 103-08 | 命令行编辑 | 掌握 | 是 | 20 | | 103-09 | 重定向 | 掌握 | 是 | 21 | | 103-10 | 管道 | 掌握 | 是 | 22 | | 103-11 | 命令替换 | 掌握 | 是 | 23 | | 103-12 | 命令组合 | 掌握 | 是 | 24 | | 103-13 | shell 变量的定义、引用和作用域 | 掌握 | 是 | 25 | | 103-14 | 强引用/弱引用 和 防止命令行扩展 | 掌握 | 是 | 26 | | 103-15 | 在 bash 下进行算数运算 | 掌握 | 是 | 27 | | 103-16 | Shell 环境变量和 `export` | 掌握 | 是 | 28 | | 103-17 | 当前 Shell 和子 Shell | 理解 | 是 | 29 | | 103-18 | 登录 Shell 和非登录 Shell | 理解 | 是 | 30 | | 103-19 | Shell 的环境配置文件 | 理解 | 是 | 31 | | 103-20 | 设置用户自己的 Shell 工作环境 | 掌握 | 是 | 32 | 33 | 34 | 35 | ### 模块104 - 基本概念和基本命令 36 | 37 | | 编号 | 知识点 | 掌握程度 | 上机操作 | 38 | | ------ | -------------------------------- | -------- | -------- | 39 | | 104-01 | Linux 系统的目录结构(FHS) | 理解 | | 40 | | 104-02 | 文件命名规则 | 掌握 | 是 | 41 | | 104-03 | 文件类型 | 理解 | | 42 | | 104-04 | Linux 环境下设备的使用方法 | 掌握 | 是 | 43 | | 104-05 | 绝对路径和相对路径 | 理解 | 是 | 44 | | 104-06 | 文件目录操作命令 | 掌握 | 是 | 45 | | 104-07 | 文本显示命令 | 掌握 | 是 | 46 | | 104-08 | 文本处理命令 | 掌握 | 是 | 47 | | 104-09 | 正则表达式 | 掌握 | 是 | 48 | | 104-10 | sed | 掌握 | 是 | 49 | | 104-11 | awk | 掌握 | 是 | 50 | | 104-12 | 信息显示命令 | 掌握 | 是* | 51 | | 104-13 | 打包和压缩命令 | 掌握 | 是* | 52 | | 104-14 | tmux / screen | 了解 | 是* | 53 | 54 | 55 | ### 模块105 - vim 编辑器 56 | 57 | | 编号 | 知识点 | 掌握程度 | 上机操作 | 58 | | ------ | -------------------------------- | -------- | -------- | 59 | | 105-01 | vim 及其3种基本运行模式 | 理解 | | 60 | | 105-02 | 进入 vim 插入模式 | 掌握 | 是 | 61 | | 105-03 | vim 普通模式下的操作 | 掌握 | 是 | 62 | | 105-04 | vim 命令行模式下的操作 | 掌握 | 是 | 63 | | 105-05 | 设置 vim 工作环境 | 了解 | 是 | 64 | | 105-06 | 安装并配置 vim 插件 | 了解 | 是* | 65 | 66 | 67 | ## 本章学习材料 68 | 69 | * **教材和课件 第2章** 70 | * linux.vbird.org 71 | * [Linux 檔案與目錄管理](http://linux.vbird.org/linux_basic/0220filemanager.php) 72 | * [認識與學習BASH](http://linux.vbird.org/linux_basic/0320bash.php) 73 | * [正規表示法與文件格式化處理](http://linux.vbird.org/linux_basic/0330regularex.php) 74 | * [vim 程式編輯器](http://linux.vbird.org/linux_basic/0310vi.php) 75 | * 马哥教育 视频 76 | * [Linux入门学习和基础命令](http://edu.51cto.com/course/course_id-5524.html) 之 视频 31~54 77 | * [Linux培训教程--vim命令和find命令入门到精通](http://edu.51cto.com/course/course_id-5539.html) 之 视频 1~14 78 | * [Linux培训教程--shell脚本入门及正则表达式](http://edu.51cto.com/course/course_id-5538.html) 79 | * [Linux培训教程--Bash基础](http://edu.51cto.com/course/course_id-5537.html) 之 视频 1~5 80 | * [Linux培训教程--awk命令从入门到精通](http://edu.51cto.com/course/course_id-5542.html) 81 | 82 | -------------------------------------------------------------------------------- /SUMMARY.md: -------------------------------------------------------------------------------- 1 | # Summary 2 | 3 | * [Linux 课程学习指导 (CentOS7)](README.md) 4 | * [课程概览](overview/README.md) 5 | * [技术文档写作](overview/technical_document_writing.md) 6 | * [学习环境](overview/learning_environment.md) 7 | * [参考资料](overview/references.md) 8 | * [家庭作业](overview/assignments.md) 9 | * [教材勘误](overview/centos7book.md) 10 | 11 | ### PART I 操作基础 12 | * [CH01 Linux 简介与安装](ch01/README.md) 13 | * [CH01 - 教学指导](ch01/guidelines.md) 14 | * [CH01 - 课堂笔记 1.1](ch01/lecture_notes_01-01.md) 15 | * [CH01 - 课堂笔记 1.2](ch01/lecture_notes_01-02.md) 16 | * [CH01 - 课堂笔记 1.3](ch01/lecture_notes_01-03.md) 17 | * [CH01 - 实验指导 1.1](ch01/experiment_01-01.md) 18 | * [CH01 - 实验指导 1.2](ch01/experiment_01-02.md) 19 | * [CH01 - 家庭作业](ch01/assignments.md) 20 | * [CH02 Linux 操作基础](ch02/README.md) 21 | * [CH02 - 教学指导](ch02/guidelines.md) 22 | * [CH02 - 课堂笔记 2.1](ch02/lecture_notes_02-01.md) 23 | * [CH02 - 课堂笔记 2.2](ch02/lecture_notes_02-02.md) 24 | * [CH02 - 实验指导 2.1](ch02/experiment_02-01.md) 25 | * [CH02 - 实验指导 2.2](ch02/experiment_02-02.md) 26 | * [CH02 - 家庭作业](ch02/assignments.md) 27 | 28 | ### PART II 系统管理与安全 29 | * [CH03 多用户多任务管理](ch03/README.md) 30 | * [CH03 - 教学指导](ch03/guidelines.md) 31 | * [CH03 - 实验指导 3.1](ch03/experiment_03-01.md) 32 | * [CH03 - 实验指导 3.2](ch03/experiment_03-02.md) 33 | * [CH03 - 家庭作业](ch03/assignments.md) 34 | * [CH04 本地存储管理](ch04/README.md) 35 | * [CH04 - 教学指导](ch04/guidelines.md) 36 | * [CH04 - 课堂笔记](ch04/lecture_notes_04-01.md) 37 | * [CH04 - 实验指导](ch04/experiment_04-01.md) 38 | * [CH04 - 家庭作业](ch04/assignments.md) 39 | * [阶段测验 1](quiz1.md) 40 | * [CH05 网络配置与包管理](ch05/README.md) 41 | * [CH05 - 教学指导](ch05/guidelines.md) 42 | * [CH05 - 实验指导](ch05/experiment_05-01.md) 43 | * [CH05 - 家庭作业](ch05/assignments.md) 44 | * [CH06 服务管理与基础服务](ch06/README.md) 45 | * [CH06 - 教学指导](ch06/guidelines.md) 46 | * [CH06 - 实验指导](ch06/experiment_06-01.md) 47 | * [CH06 - 家庭作业](ch06/assignments.md) 48 | * [CH07 系统日常维护](ch07/README.md) 49 | * [CH07 - 教学指导](ch07/guidelines.md) 50 | * [CH07 - 实验指导](ch07/experiment_07-01.md) 51 | * [CH07 - 家庭作业](ch07/assignments.md) 52 | * [CH08 服务器安全基础](ch08/README.md) 53 | * [CH08 - 教学指导](ch08/guidelines.md) 54 | * [CH08 - 实验指导](ch08/experiment_08-01.md) 55 | * [CH08 - 家庭作业](ch08/assignments.md) 56 | * [CH09 Linux 防火墙](ch09/README.md) 57 | * [CH09 - 教学指导](ch09/guidelines.md) 58 | * [CH09 - 实验指导 9.1](ch09/experiment_09-01.md) 59 | * [CH09 - 实验指导 9.2](ch09/experiment_09-02.md) 60 | * [CH09 - 家庭作业](ch09/assignments.md) 61 | * [CH10 Shell 脚本编程](ch10/README.md) 62 | * [CH10 - 教学指导](ch10/guidelines.md) 63 | * [CH10 - 课堂笔记](ch10/lecture_notes_10-01.md) 64 | * [CH10 - 实验指导](ch10/experiment_10-01.md) 65 | * [CH10 - 家庭作业](ch10/assignments.md) 66 | * [阶段测验 2](quiz2.md) 67 | 68 | * [写在配置网络服务之前](words_in_middle_of_course.md) 69 | 70 | ### PART III 网络服务 71 | * [CH11 DHCP 服务和 DNS 服务](ch11/README.md) 72 | * [CH11 - 教学指导](ch11/guidelines.md) 73 | * [CH11 - 实验指导](ch11/experiment_11-01.md) 74 | * [CH11 - 家庭作业](ch11/assignments.md) 75 | * [CH12 FTP 服务和 NFS 服务](ch12/README.md) 76 | * [CH12 - 教学指导](ch12/guidelines.md) 77 | * [CH12 - 实验指导](ch12/experiment_12-01.md) 78 | * [CH12 - 家庭作业](ch12/assignments.md) 79 | * [CH13 Samba 服务](ch13/README.md) 80 | * [CH13 - 教学指导](ch13/guidelines.md) 81 | * [CH13 - 实验指导](ch13/experiment_13-01.md) 82 | * [CH13 - 家庭作业](ch13/assignments.md) 83 | * [CH14 Apache 基础](ch14/README.md) 84 | * [CH14 - 教学指导](ch14/guidelines.md) 85 | * [CH14 - 实验指导](ch14/experiment_14-01.md) 86 | * [CH14 - 家庭作业](ch14/assignments.md) 87 | * [CH15 Apache 进阶](ch15/README.md) 88 | * [CH15 - 教学指导](ch15/guidelines.md) 89 | * [CH15 - 实验指导 15.1](ch15/experiment_15-01.md) 90 | * [CH15 - 实验指导 15.2](ch15/experiment_15-02.md) 91 | * [CH15 - 家庭作业](ch15/assignments.md) 92 | * [CH16 E-mail 服务](ch16/README.md) 93 | * [CH16 - 教学指导](ch16/guidelines.md) 94 | * [CH16 - 实验指导](ch16/experiment_16-01.md) 95 | * [CH16 - 家庭作业](ch16/assignments.md) 96 | * [阶段测验 3](quiz3.md) 97 | 98 | 99 | 100 | 101 | -------------------------------------------------------------------------------- /ch05/guidelines.md: -------------------------------------------------------------------------------- 1 | # CH05 - 教学指导 2 | 3 | ## 教学模块和知识点 4 | 5 | > 1. 可以作为教师教学和考试出题的依据。 6 | > 2. 可以作为学生学习的依据。 7 | 8 | 9 | ### 模块205 - 网络配置 10 | 11 | | 编号 | 知识点 | 掌握程度 | 上机操作 | 12 | | ------ | ------------------------------------ | -------- | -------- | 13 | | 205-01 | TCP/IP 网络模型 | 理解 | | 14 | | 205-02 | TCP/IP 协议族 | 理解 | | 15 | | 205-03 | Linux 网络接口和内核网络设备名 | 理解 | | 16 | | 205-04 | 一致的网络设备名 | 理解 | | 17 | | 205-05 | 禁用一致的网络设备名的设置方法 | 掌握 | 是 | 18 | | 205-06 | 使用 `ip` 命令显示和临时设置网络参数 | 掌握 | | 19 | | 205-07 | CentOS 中的 TCP/IP 配置文件族 | 理解 | | 20 | | 205-08 | 修改配置文件配置网络相关参数 | 了解 | | 21 | | 205-09 | NetworkManager 服务 | 理解 | | 22 | | 205-10 | 使用 `nmcli` 配置网络设备并激活连接 | 掌握 | 是 | 23 | | 205-11 | 配置 Modem/xDSL/无线 设备并激活连接 | 了解 | | 24 | 25 | 26 | ### 模块206 - 网络工具 27 | 28 | | 编号 | 知识点 | 掌握程度 | 上机操作 | 29 | | ------ | --------------------------------------------- | -------- | -------- | 30 | | 206-01 | 连通性: **ping**/fping | 掌握 | 是 | 31 | | 206-02 | 路由: **ip route**/route/**traceroute**/mtr | 掌握 | 是 | 32 | | 206-03 | 套接字: **ss**/netstat/**lsof** | 掌握 | 是 | 33 | | 206-04 | 带宽/流量: nload/nethogs/iptraf/tcpdump | 掌握 | 是 | 34 | | 206-05 | 监听: nc | 了解 | 是* | 35 | | 206-06 | 嗅探: nmap | 了解 | 是* | 36 | | 206-07 | 域名解析: dig/nslookup/host/[DNSDiag](https://dnsdiag.org/) | 掌握 | 是 | 37 | | 206-08 | 下载:wget/curl | 掌握 | 是 | 38 | | 206-09 | 多协议下载: aria2/Transmission/MLDonkey | 了解 | 是* | 39 | | 206-10 | FTP客户:ftp/lftp | 掌握 | 是 | 40 | | 206-11 | WWW客户:elinks/w3m | 掌握 | 是 | 41 | | 206-12 | Mail客户:mail/mutt | 掌握 | 是 | 42 | | 206-13 | SSH客户:ssh/scp/sftp | 掌握 | 是 | 43 | 44 | 45 | ### 模块207 - 软件包管理 46 | 47 | | 编号 | 知识点 | 掌握程度 | 上机操作 | 48 | | ------ | ------------------------------------------------------- | -------- | -------- | 49 | | 207-01 | RPM 包和 DEB 包 及包依赖关系 | 理解 | | 50 | | 207-02 | 使用 `rpm` 命令 安装/卸载/升级/校验软件包 | 了解 | 是 | 51 | | 207-03 | 使用 `rpm` 命令 查询软件包 | 掌握 | 是 | 52 | | 207-04 | 使用 `dpkg` 命令 安装/卸载/升级软件包 | 了解 | 是* | 53 | | 207-05 | 使用 `dpkg` 命令 查询软件包 | 掌握 | 是* | 54 | | 207-06 | 使用 `yum/dnf` 命令 安装/卸载/升级/查询 rpm 软件包 | 掌握 | 是 | 55 | | 207-07 | 使用 `apt/aptitude` 命令 安装/卸载/升级/查询 deb 软件包 | 了解 | 是* | 56 | | 207-08 | 使用 `rpm --import` 命令导入 YUM 仓库密钥 | 掌握 | 是 | 57 | | 207-09 | 使用 `apt-key add` 命令导入 APT 仓库密钥 | 了解 | 是* | 58 | | 207-10 | 配置远程 YUM 仓库(包括非官方仓库) | 掌握 | 是 | 59 | | 207-11 | 配置远程 APT 仓库(包括非官方仓库) | 了解 | 是* | 60 | | 207-12 | 使用安装光盘配置本地 YUM 仓库 | 掌握 | 是 | 61 | | 207-13 | 使用安装光盘配置本地 APT 仓库 | 了解 | 是* | 62 | | 207-14 | 使用 `yum/apt` 命令进行系统更新 | 掌握 | 是 | 63 | | 207-15 | 架设本地 YUM/APT 镜像服务器 | 了解 | 是* | 64 | 65 | ## 本章学习材料 66 | 67 | * **教材和课件 第5章** 68 | * linux.vbird.org 69 | * [網路設定](http://linux.vbird.org/linux_basic/0610hardware.php#basic_network) 70 | * [常用網路指令](http://linux.vbird.org/linux_server/0140networkcommand.php) 71 | * [軟體安裝 RPM, SRPM 與 YUM](http://linux.vbird.org/linux_basic/0520rpm_and_srpm.php) 72 | * 马哥教育 视频 73 | * [Linux培训教程--Linux 网络配置管理](http://edu.51cto.com/course/course_id-852.html) 74 | * [Linux培训教程--Linux 网络工具](http://edu.51cto.com/course/course_id-5541.html) 之 视频 18~19 75 | * [Linux培训教程--Linux程序包管理](http://edu.51cto.com/course/course_id-5540.html) 76 | -------------------------------------------------------------------------------- /ch01/assignments.md: -------------------------------------------------------------------------------- 1 | # CH01 - 家庭作业 2 | 3 | ## 安装和使用其他 Linux 发行版 4 | 5 | * 安装 Debian/Ubuntu 服务器(择其一) 6 | * [Ubuntu Server](https://www.ubuntu.com/download/server) 7 | * [Debian](http://www.debian.org/CD/http-ftp/#stable) 8 | * [Proxmox Virtual Environment](https://pve.proxmox.com/) 9 | * 基于 Debian 10 | * 支持 KVM 和 LXC 虚拟化技术 11 | * 提供 CLI 和 WUI 12 | * [Proxmox VE Documentation](https://pve.proxmox.com/pve-docs/) 13 | * 安装和使用 Linux 桌面发行版(择其一) 14 | * [LinuxMint](https://linuxmint.com/) 15 | * [Ubuntu Desktop](https://www.ubuntu.com/download/desktop) 16 | * [Fedora Workstation](https://getfedora.org/workstation/) 17 | * [深度操作系统桌面版](https://deepin.org/) -- 基于 Debian 18 | * [优麒麟操作系统](http://www.ubuntukylin.com/) -- 基于 Ubuntu 19 | * [中兴新支点桌面操作系统](http://www.gd-linux.com/desktop/) -- 基于 LinuxMint 20 | 21 | >**参考** 22 | > 23 | >* [Linux Distribution Introduction and Overview](https://www.linuxtrainingacademy.com/linux-distribution-intro/) 24 | >* [Top Ten Distributions list at DistroWatch.com](http://distrowatch.com/dwres.php?resource=major) 25 | >* [Must-have applications for your fresh Linux desktop install](https://www.linuxtrainingacademy.com/must-have-linux-apps/) 26 | 27 | ## 使用 Windows 下的开源软件 28 | 29 | * CMD 替代品 -- [Cmder](http://cmder.net/) 30 | * 办公套件 -- [LibreOffice](http://www.libreoffice.org) 31 | * 浏览器 -- [FireFox](http://firefox.com.cn) 32 | * MarkDown 文件编辑器 -- [Typora](https://typora.io/) 33 | * 文本编辑和IDE -- [Atom](http://atom.io) 34 | * 版本控制 -- [Git](https://git-scm.com/downloads) 35 | * 集成 GitHub 的命令行工具 -- [gitsome](https://github.com/donnemartin/gitsome) 36 | * 电子图书管理 -- [calibre](http://calibre-ebook.com/) 37 | * 口令管理 -- [KeePass](http://www.keepass.info/) 38 | * 剪贴板管理器 -- [CopyQ](http://hluk.github.io/CopyQ) 39 | * 即时通信 -- [Franz](http://meetfranz.com)、[Electronic WeChat](https://github.com/geeeeeeeeek/electronic-wechat) 40 | * 字体编辑器 -- [trufont](https://github.com/trufont/trufont) 41 | 42 | ## Windows 软件包管理 43 | 44 | 学习 Windows 下的包管理工具 [chocolatey](https://chocolatey.org/) 的安装和使用 45 | 46 | ``` 47 | > choco -y install cmdermini yumi wget aria2 putty mtputty sysinternals 48 | > choco -y install chocolateygui 49 | ``` 50 | 51 | >##### 参考 52 | >* 53 | >* 54 | >* [Windows下自动化部署的救赎](http://www.docin.com/p-1134872994.html) -- [视频](http://v.youku.com/v_show/id_XOTIzOTA4MjY4.html) 55 | >* [Boxstarter](http://boxstarter.org/) 56 | >* [Windows Sysinternals](https://technet.microsoft.com/en-us/sysinternals/bb842062.aspx) -- [微软极品Sysinternals Suite工具包使用指南](http://www.win7china.com/html/6691.html) 57 | 58 | ## 使用 Vagrant 安装 Linux 虚拟机 59 | 60 | >* [下载 Vagrant](https://www.vagrantup.com/downloads.html) 并安装 61 | >* [下载 VirtualBox](https://www.virtualbox.org/wiki/Downloads) 并安装 62 | 63 | ### 使用 Vagrant 安装 CentOS7 64 | 65 | ``` 66 | > cd %USERPROFILE% 67 | > mkdir boxes\centos7 68 | > cd boxes\centos7 69 | 70 | > vagrant box add boxcutter/centos73 71 | > vagrant box list 72 | 73 | > vagrant init boxcutter/centos73 74 | 75 | > vagrant up 76 | > vagrant status 77 | > vagrant ssh 78 | 79 | [vagrant@localhost ~]$ sudo yum -y reinstall man-db man-pages 80 | [vagrant@localhost ~]$ sudo mandb -c 81 | [vagrant@localhost ~]$ man 7 passwd 82 | [vagrant@localhost ~]$ mkdir /vagrant/exercises 83 | [vagrant@localhost ~]$ touch /vagrant/exercises/test 84 | [vagrant@localhost ~]$ logout 85 | 86 | > vagrant halt 87 | > vagrant status 88 | > vagrant --help 89 | ``` 90 | 91 | >**参考** 92 | > 93 | >* https://www.vagrantup.com/ 94 | >* [Deploy Your Very Own Linux Server with Full Root Access](https://www.linuxtrainingacademy.com/create-build-test-drive-deploy-linux-server-full-root-access/) 95 | 96 | ### 使用 Vagrant 安装 Ubuntu & gitbook 97 | 98 | ``` 99 | > cd %USERPROFILE% 100 | > mkdir boxes\ubuntu1604 101 | > cd boxes\ubuntu1604 102 | 103 | > vagrant box add boxcutter/ubuntu1604 104 | > vagrant box list 105 | 106 | > vagrant init boxcutter/ubuntu1604 107 | > vagrant up 108 | > vagrant status 109 | > vagrant ssh 110 | ``` 111 | 112 | ``` 113 | sudo curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - 114 | echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list 115 | sudo apt-get update && sudo apt-get install yarn 116 | 117 | sudo yarn config get registry 118 | sudo yarn config set registry https://registry.npm.taobao.org 119 | 120 | sudo yarn global add gitbook-cli 121 | nodejs -v 122 | sudo ln -s /usr/bin/nodejs /usr/bin/node 123 | nodejs -v 124 | gitbook -V 125 | ``` 126 | ``` 127 | gitbook help 128 | gitbook init 129 | gitbook serve 130 | ``` -------------------------------------------------------------------------------- /ch06/experiment_06-01.md: -------------------------------------------------------------------------------- 1 | # 实验指导 6 - 服务管理与基础服务 2 | 3 | >#### 学习目标 4 | > * 服务管理 5 | > * 使用 `systemctl` 显示、启动和停止服务 6 | > * 使用 `systemctl` 实现服务的持久化管理 7 | > * 使用 `service` 和 `chkconfig/update-rc.d` 管理服务 8 | > * cron 服务 9 | > * 修改配置文件安排 cron 任务 10 | > * 使用 `crontab` 命令安排 cron 任务 11 | > * 控制使用 cron 的人员 12 | > * rsyslogd 和 systemd-journal 服务 13 | > * 显示系统日志 14 | > * 配置中央日志服务器 15 | > * 查看 `LogWatch` 的日志统计信息 16 | > * sshd 服务 17 | > * 配置仅支持用户密钥登录的 SSH 服务器 18 | > * 配置支持 sftp+chroot 的 SFTP 服务器 19 | > * 使用 `ssh-keyscan` 命令搜集可信任主机公钥 20 | > * 用户密钥管理 21 | > * 使用 SSH 隧道(Tunnel)实现端口转发(Port forward) 22 | 23 | 24 | ## 任务1:守护进程(服务)管理 25 | 26 | * 显示当前已运行的所有服务 27 | * 查看所有服务是否在启动系统时启用 28 | * 显示 cron 服务是否正在运行 29 | * 显示 cron 服务是否在启动时运行 30 | * 显示 cron 服务的运行状态 31 | * 关闭正在运行的 cron 服务 32 | * 显示 cron 服务的运行状态 33 | * 启动 cron 服务 34 | * 禁止 cron 服务在启动时运行 35 | * 启用 cron 服务在启动时运行 36 | 37 | ## 任务2:修改配置文件安排 cron 任务 38 | 39 | >* 请在 /etc/cron.d/test 文件中完成下列任务 40 | >* **提问** 此文件修改后需要重新 restart/reload cron 服务吗? 41 | 42 | * 每小时第1分钟将系统平均负载信息以追加方式写入 /root/load 文件 43 | * 每阁3小时的30分时将磁盘剩余信息以追加方式写入 /root/du 文件 44 | * 每周1-5晚10点将 /data/work 目录中的内容向 /backup/data/work 同步一次 45 | * 每月1日和15日凌晨1:30重新启动一次 httpd 服务 46 | * 每天凌晨 0:30 找出 /backup 目录下 90 天以前修改过的文件并将其删除 47 | 48 | ## 任务3:使用 `crontab` 命令安排 cron 任务 49 | 50 | * 切换 student 用户身份,完成如下任务 51 | * 每天 7:00 找出 ~/student 目录下尺寸最大的 10 个文件列表写入 ~/student/maxsize 文件 52 | * 每隔 5 天凌晨的 2 点删除 ~/student/temp 目录下的所有文件 53 | * 每周日凌晨的 2 点将 ~/student/data 同步到 ~/student/bak/data 54 | * 配置仅允许 student 和 tony 用户安排 cron 任务 55 | 56 | ## 任务4:显示日志信息 57 | 58 | * 浏览 /var/log 59 | * 使用文本工具查看 /var/log/{secure,message} 文件 60 | * 检查用户上次登录的时间 61 | * 使用 logwatch 62 | * 在屏幕上打印昨天的日志信息简要,如用户登录失败信息、SSH 登录信息、磁盘空间使用等。 63 | * 在屏幕上打印今天的 SSH 登录信息。 64 | * 使用 journalctl 65 | * 显示journal记录的所有日志 66 | * 显示自昨天以来记录的日志(类似地可以使用today表示今天) 67 | * 动态跟踪显示最新日志信息 68 | * 显示日志级别为err的日志 69 | * 显示内核日志 70 | * 显示最近一次的启动日志 71 | * 显示上次启动时的错误日志 72 | * 显示systemd指定单元的日志 73 | * 显示进程名为sshd的相关日志 74 | * 显示指定时间之内的进程名sudo的日志 75 | 76 | >**提问** 如何配置 systemd-journal 服务实现持久化存储(即将其存入磁盘而非 tmpfs) 77 | 78 | ## 任务5:配置日志服务器 79 | 80 | * 配置将容器 c7-v1 上的所有 rsyslog 日志记入 宿主服务器 81 | * 配置将容器 c6-v1 上的所有 rsyslog 日志记入 宿主服务器 82 | * 配置将容器 d9-v1 上的所有 rsyslog 日志记入 宿主服务器 83 | 84 | ## 任务6:SSH 密钥管理 85 | 86 | * 在容器的宿主服务器上完成如下操作 87 | * 收集 c7-v1、c6-v1、d9-v1 的主机公钥 88 | * 以 root 身份创建密钥对(无私钥口令) 89 | * 将此公钥分发给容器 c7-v1、c6-v1、d9-v1 90 | * 分别 ssh 登录容器 c7-v1、c6-v1、d9-v1 进行连接测试 91 | * 为私钥设置保护口令 92 | * 使用 ssh-agent、ssh-add 导入私钥 93 | * 分别 ssh 登录 c7-v1、c6-v1、d9-v1 进行连接测试 94 | * 在安装 VirualBox 的 Windows 宿主机上使用 Putty 携带的工具完成 95 | * 使用 PuTTYgen 生成密钥对(设置私钥口令) 96 | * 将私钥保存到 \User\YourName\ 的任意子目录下 97 | * 打开 Putty 的会话窗口,载入连接 CentOS 7 VirtualBox 虚拟机的回话,设置私钥文件位置 98 | * 运行 Pageant 导入以创建的私钥 99 | * 使用 Putty 通过密钥登录 CentOS 7 VirtualBox 100 | 101 | >**提示** 若你偏爱命令行工具,不喜欢图形工具(如:Putty),安装 Git for Windows 即可,她集成了 openssh-client。 102 | 103 | ## 任务7:跨主机的文件复制 104 | 105 | * 使用 scp/sftp 106 | * 使用 scp/sftp 在 CentOS 7 VirtualBox 虚拟机和容器 c7-v1、c6-v1、d9-v1 之间互传文件 107 | * 使用 Windows 下的 GUI 工具在 WIndows 和 CentOS 7 VirtualBox 虚拟机之间互传文件 108 | * 使用 [WinSCP](https://winscp.net/) 实现 sftp 109 | * 使用 [FreeFileSync](https://www.freefilesync.org/) 实现基于 sftp 的目录同步 110 | 111 | > **参考** 112 | > 113 | > * [使用 rz 和 sz 命令在 Windows 和 Linux 之间传输小文件](https://blog.csdn.net/jack85986370/article/details/51321475) 114 | 115 | ## 任务8:配置 chroot 的 SFTP 服务 116 | 117 | * 配置 sftp-grp 组的成员登录 SFTP 服务器后被监禁在 /home 目录下 118 | 119 | >**参考** 120 | > 121 | >* [SFTP only + Chroot](https://www.server-world.info/en/note?os=CentOS_7&p=ssh&f=5) 122 | 123 | ## 任务9:配置 SSH 服务 124 | 125 | * 设置所有用户必须以密钥方式登录 126 | * 执行 .ssh 目录及文件的严格权限检查 127 | * 设置 ssh 空闲回话时间为5分钟,超过时自动注销 128 | * 关闭 DNS 反向解析功能 129 | * 除了 root 只有 student 和 tony 才能使用 ssh/scp/sftp 130 | * 重新启动 sshd 服务 131 | 132 | ## 任务10:配置 SSH 隧道 133 | 134 | >**基于 WUI 的系统管理工具** 135 | >* Webmin -- http://www.webmin.com 136 | >* Cockpit -- http://cockpit-project.org 137 | >* Ajenti -- http://ajenti.org/ 138 | 139 | * 在 Linux 上安装、配置并启动 webmin 140 | * 安装:参考 http://www.webmin.com/rpm.html 141 | * 启动:`/etc/init.d/webmin start` 142 | * 在 Windows 是上配置 SSH 隧道 143 | * 对本机上的 10000 端口和 CentOS 7 VirtualBox 虚拟机上的 10000 端口建立 ssh 隧道 144 | * 安装并使用 **[MyEntunnel](https://myentunnel.informer.com/)** -- `plink` 命令行工具的 GUI 前端 145 | * 若您已配置了基于 Putty 的密钥登录,可在 Putty 的回话配置界面中设置,也可以使用 `plink` 命令行工具实现 146 | * 若您已配置了基于 openssh-client 的密钥登录,请使用 `ssh` 命令行工具实现 147 | * 在 Windows 上的浏览器中使用 URL https://localhost:10000 访问 Webmin 148 | 149 | >**参考** 150 | >* [三种不同类型的 SSH 隧道](http://hetaoo.iteye.com/blog/2299123) 151 | >* [通过 SSH 隧道连接远程 MySQL 服务](http://blog.csdn.net/fgf00/article/details/51284335) 152 | >* [如何在VPS上设置SSH隧道](https://www.howtoing.com/how-to-set-up-ssh-tunneling-on-a-vps) 153 | 154 | 155 | ## 任务11:服务管理 (续) 156 | 157 | * 在 c6-v1 容器上使用 `service` 和 `chkconfig` 管理服务 158 | -------------------------------------------------------------------------------- /ch08/guidelines.md: -------------------------------------------------------------------------------- 1 | # CH08 - 教学指导 2 | 3 | ## 教学模块和知识点 4 | 5 | > 1. 可以作为教师教学和考试出题的依据。 6 | > 2. 可以作为学生学习的依据。 7 | 8 | 9 | ### 模块300 - 安全管理概览 10 | 11 | | 编号 | 知识点 | 掌握程度 | 上机操作 | 12 | | ------ | -------------------------------- | -------- | -------- | 13 | | 300-01 | 安全的定义和元素 | 了解 | | 14 | | 300-02 | 安全措施和生命周期 | 熟悉 | | 15 | | 300-03 | 安全攻击 | 了解 | | 16 | | 300-04 | 安全服务 (X.800) | 理解 | | 17 | | 300-05 | 安全机制 | 理解 | | 18 | | 300-06 | 安全协议 | 理解 | | 19 | | 300-07 | Linux 服务器安全的一般性原则 | 理解 | | 20 | 21 | 22 | ### 模块301 - 物理安全与登录安全 23 | 24 | | 编号 | 知识点 | 掌握程度 | 上机操作 | 25 | | ------ | ----------------------------------------- | -------- | -------- | 26 | | 301-01 | 禁止 BIOS 的附加存储介质启动系统 | 熟悉 | | 27 | | 301-02 | 设置 BIOS 修改口令 | 熟悉 | | 28 | | 301-03 | 配置 GRUB 的修改口令 | 掌握 | 是 | 29 | | 301-04 | 禁用 ``+``+`` 重启 | 掌握 | 是 | 30 | | 301-05 | 禁用非必要的登录设备(`/etc/securetty`) | 掌握 | 是 | 31 | | 301-06 | 为 BASH 设置超时自动注销 | 掌握 | 是 | 32 | | 301-07 | 限制 bash 命令历史的记录条目数量 | 掌握 | 是 | 33 | | 301-08 | 禁止 root 用户登录(配置 sudo) | 掌握 | 是 | 34 | | 301-09 | 使用 PAM 模块增强口令安全 | 掌握 | 是 | 35 | | 301-10 | 使用基于 PAM 模块的访问控制 | 掌握 | 是 | 36 | | 301-11 | 启用 SSH 服务,禁用 Telnet 服务 | 理解 | | 37 | | 301-12 | 禁止 root 用户使用口令登录 SSH 服务 | 掌握 | 是 | 38 | | 301-13 | 禁止所有用户使用口令登录 SSH 服务 | 掌握 | 是 | 39 | | 301-14 | 配置所有用户使用基于用户密钥登录 SSH 服务 | 掌握 | 是 | 40 | | 301-15 | 禁用非必要的 FTP 服务而使用 sftp | 理解 | | 41 | 42 | 43 | ### 模块302 - 系统安全与安全工具 44 | 45 | | 编号 | 知识点 | 掌握程度 | 上机操作 | 46 | | ------ | ---------------------------------------------- | -------- | -------- | 47 | | 302-01 | 使用合理的磁盘布局将系统数据与用户数据分离 | 理解 | | 48 | | 302-02 | 使用挂装选项提高文件系统的安全性 | 掌握 | 是 | 49 | | 302-03 | 查找并取消文件/目录的非必要的特殊权限 | 掌握 | 是 | 50 | | 302-04 | 使用 AIDE 工具实现重要文件的完整性检查 | 了解 | 是* | 51 | | 302-05 | 使用 `rkhunter`/`chkrootkit` 工具实现 rootkit 检查 | 了解 | 是* | 52 | | 302-06 | 制定灾难恢复计划并检测备份的有效性 | 理解 | | 53 | | 302-07 | 安装和运行最少的软件,以尽量减少漏洞 | 理解 | | 54 | | 302-08 | 保持软件更新 | 掌握 | 是 | 55 | | 302-09 | 关闭不必要的服务 | 掌握 | 是 | 56 | | 302-10 | 尽量在不同的系统上运行不同的网络服务 | 理解 | | 57 | | 302-11 | 为用户和软件执行任务赋予所必需的最低权限 | 理解 | | 58 | | 302-12 | 让每一项服务以各自的用户身份执行,并尽量不使用 root 身份运行服务 | 理解 | | 59 | | 302-13 | 启用远程系统日志服务器防止入侵者篡改本地日志 | 理解 | | 60 | | 302-14 | 使用 fail2ban 工具保护 SSH 服务及其他服务 | 掌握 | 是 | 61 | | 302-15 | 使用 [Lynis](https://cisofy.com/lynis/) 安全审计工具检测系统漏洞 | 掌握 | 是 | 62 | | 302-16 | 使用 [OpenScap](https://www.open-scap.org/) 进行安全检查 | 掌握 | 是 | 63 | | 302-17 | 使用 TCP Wrappers 实现网络访问控制 | 掌握 | 是 | 64 | | 302-18 | 使用 Netfilter/iptables 实现网络访问控制 | 掌握 | | 65 | | 302-19 | 使用 SELinux 实现强制访问控制(MAC) | 了解 | | 66 | | 302-20 | 使用 Snort/PSAD 等工具实现入侵检测 | 了解 | | 67 | 68 | 69 | ### 模块303 - 数据加密与信息安全 70 | 71 | | 编号 | 知识点 | 掌握程度 | 上机操作 | 72 | | ------ | ------------------------------------------------ | -------- | -------- | 73 | | 303-01 | openssl 及其特性 | 理解 | | 74 | | 303-02 | 对称加密和非对称加密 | 理解 | | 75 | | 303-03 | 使用 openssl 命令实现文件的对称加解密 | 掌握 | 是 | 76 | | 303-04 | 使用 gnupg 命令实现文件的非对称加解密 | 了解 | | 77 | | 303-05 | 使用 gnupg 命令验证文件的数字签名 | 掌握 | 是 | 78 | | 303-06 | 使用 openssl 命令创建文件的信息摘要 | 掌握 | 是 | 79 | | 303-07 | 使用 md5sum、sha1sum、sha256sum 命令创建信息摘要 | 掌握 | 是 | 80 | | 303-08 | 数字签名 和 数字证书(X509v.3) | 理解 | | 81 | | 303-09 | CA 及其层次信任关系 | 理解 | | 82 | | 303-10 | 由 CA 签署证书的过程 | 理解 | | 83 | | 303-11 | SSL/TLS 协议 | 理解 | | 84 | | 303-12 | 使用 openssl 命令创建私钥和自签名证书 | 掌握 | 是 | 85 | | 303-13 | 使用 openssl 命令创建私钥和自签名 SAN 证书 | 掌握 | 是 | 86 | | 303-14 | 基于 SSL/TLS 协议的网络协议及服务 | 了解 | 是* | 87 | 88 | * 基于 SSL/TLS 协议的网络服务配置分散于网络服务部分的各章中 89 | 90 | 91 | 92 | ## 本章学习材料 93 | 94 | * **教材和课件 第8章** 95 | * linux.vbird.org 96 | * [網路安全與主機基本防護](http://linux.vbird.org/linux_server/0210network-secure.php) 97 | * 马哥教育 视频 98 | * [Linux培训教程--加密和解密技术](http://edu.51cto.com/course/course_id-5544.html) 99 | -------------------------------------------------------------------------------- /ch08/experiment_08-01.md: -------------------------------------------------------------------------------- 1 | # 实验指导 8 - 服务器安全 2 | 3 | >#### 学习目标 4 | > * 系统安全 5 | > * 设置 GRUB 的修改口令 6 | > * 禁用 ``+``+`` 重启 7 | > * 设置超时自动注销 8 | > * 限制 root 用户 bash 命令历史的记录条目数量 9 | > * 配置 `sudo` 并禁止 root 用户登录 10 | > * 使用 `rkhunter` 工具实现 rootkit 检查 11 | > * 使用 `aide` 工具实现重要文件的完整性检查 12 | > * 配置 root 用户仅能使用用户密钥而非用户口令登录 SSH 服务 13 | > * 将 SSH 服务运行于非标准端口 14 | > * 软件安全 15 | > * `yum update` 与 `yum upgrade` 的区别 16 | > * `yum-cron` 获取每日安全更新通知或直接进行安全更新 17 | > * 口令安全 18 | > * 使用 `pam_unix.so` 模块限制用户使用旧口令 19 | > * 使用 `pam_pwquality.so` 模块实现口令复杂性检查 20 | > * 使用 `pam_tally2.so` 模块实现登录失败的账户锁定 21 | > * 口令时效 22 | > * 访问控制 23 | > * 设置用户或组使用系统资源(文件打开数量) 24 | > * 配置仅 wheel 组成员可以使用 su 和 sudo 命令 25 | > * 使用 `TCP Wrappers` 实现基于 主机/网络 的访问控制 26 | > * 使用 `fail2ban`/`denyhost` 工具保护 SSH 服务 27 | > * 信息与数据安全 28 | > * 使用对称加密算法加解密文件 29 | > * 校验文件的 GPG 数字签名 30 | > * 创建 SSL/TLS 自签名证书 31 | > * 漏洞检测 32 | > * 使用 `lynis` 安全审计工具检测系统漏洞 33 | > * 根据 `lynis` 报告提示加固系统 34 | 35 | ## 任务1:物理安全 36 | 37 | * 设置 GRUB 的修改口令 38 | * 禁用 ``+``+`` 重启 39 | 40 | ## 任务2:登录安全 41 | 42 | * 设置 bash 超时自动注销 43 | * 限制 root 用户 bash 命令历史的记录条目数量为 10 44 | * 配置仅 tony 用户可以使用 sudo 实现完全功能访问 45 | * 禁止 root 用户以口令方式登录(口令锁定) 46 | * 用户 root 的 SSH 登录策略 47 | * 禁止 root 用户登录 SSH 服务 48 | * 配置 root 仅能使用用户密钥而非用户口令登录 SSH 服务 49 | 50 | ## 任务3:软件安全 51 | 52 | * 安装 `yum-cron` 53 | * 配置 `yum-cron` 54 | * 获取每日安全更新通知 55 | * 发送到你自己的邮箱 56 | 57 | ## 任务4: 服务安全 58 | 59 | * 关闭无必要 `vfstpd` 服务 60 | * 关闭无必要 `nfs` 服务 61 | * 关闭 `NetworkManager` 服务 62 | * 关闭无必要 `ntpd` 和 `chronyd` 服务 63 | * 使用 `ntpdate` 命令安排每日周期任务进行时间同步 64 | 65 | >**将不同的 服务/应用 分散部署在不同的 服务器/虚拟机/容器** 66 | 67 | ## 任务5:口令安全 68 | 69 | * 记住最近使用的5个口令,在设置新口令时不能使用 70 | * 口令质量检查 (/etc/security/pwquality.conf) 71 | * 口令必须大于12个字符 72 | * 必须至少包含四类字符中的一个 73 | * 口令时效 74 | * 对新创建用户设置 90 天后必须重新修改口令 75 | * 对现存的 tony 用户设置 90 天后必须重新修改口令 76 | * 账户锁定 77 | * 5 次登录失败进行登录锁定 78 | * 20 分钟后自动解锁 79 | 80 | ## 任务6:访问控制 81 | 82 | * 为 apache 用户设置打开文件数的限制为 65535 83 | * 配置仅 wheel 组成员可以使用 su 和 sudo 命令 84 | * 安装 `denyhosts` 工具基于 `TCP Wrappers` 实现对 SSH 服务的主机访问控住保护 85 | 86 | ## 任务7:文件加密与解密 87 | 88 | * 显示 openssl 支持的所有兑成加密算法 89 | * 使用 aes128 加密算法对 /root/anaconda-ks.cfg 文件加密 90 | * 加密后的文件为 /root/anaconda-ks.cfg.mi 91 | * 对 /root/anaconda-ks.cfg.mi 文件进行解密 92 | * 加密后的文件为 /root/anaconda-ks.cfg.new 93 | * 使用 `diff` 命令比对解密文件与源文件 94 | 95 | ## 任务8:校验 RPM 包的数字签名 96 | 97 | * 查询已导入 RPM 数据库的所有 GPG 公钥信息 98 | * 要求显示 summary,version 和 release 信息 99 | * 使用 wget 下载最新的 usermin RPM包,以及其 GPG 签名的公钥 100 | * http://www.webmin.com/download/rpm/usermin-current.rpm 101 | * http://www.webmin.com/jcameron-key.asc 102 | * 将此 GPG 签名的公钥文件 `jcameron-key.asc` 导入 RPM 数据库 103 | * 再次查询已导入 RPM 数据库的所有 GPG 公钥信息 104 | * 验证 usermin-current.rpm 文件的 GPG 签名 105 | 106 | 107 | ## 任务9:校验文件的数字签名 108 | 109 | * 校验 sha256sum.txt.asc 文件的 GPG 签名从而确认此文件确实是 CentOS 发布的 110 | wget http://mirrors.163.com/centos/7/isos/x86_64/sha256sum.txt.asc 111 | * 下载 CentOS 的 GPG 公钥文件 112 | wget http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-7 113 | * 显示 GPG 公钥文件的密钥指纹 114 | gpg --quiet --with-fingerprint ./RPM-GPG-KEY-CentOS-7 115 | * 将 GPG 公钥导入本机的 GPG 公钥链 116 | gpg --import ./RPM-GPG-KEY-CentOS-7 117 | * 校验 sha256sum.txt.asc 的 GPG 签名 118 | gpg --verify ./sha256sum.txt.asc 119 | 120 | * 校验你下载的 CentOS/LinuxMint 发行版的 ISO 文件及其 GPG 数字签名 121 | > * CentOS - 参考 https://wiki.centos.org/Download/Verify 122 | > * LinuxMint - 参考 ttp://linuxmint-installation-guide.readthedocs.io/en/latest/verify.html 123 | 124 | > **提示** 若 ISO 文件下载在 Windows 上,可以使用 git-for-windows 中集成的 gpg 工具完成 125 | 126 | ## 任务10:自签名 SSL/TLS 证书 127 | 128 | * 创建单域名自签名证书文件及其私钥 129 | * 证书文件 ftp.olabs.lan.crt 130 | * 私钥文件 ftp.olabs.lan.key 131 | * 创建多域名自签名证书文件及其私钥文件 132 | * 证书文件 myservers.crt 133 | * 私钥文件 myservers.key 134 | * 多域名 135 | * olabs.lan www.olabs.lan wiki.olabs.lan 136 | * olabs.net www.olabs.net wiki.olabs.net 137 | * olabs.org www.olabs.org wiki.olabs.org 138 | 139 | ## 任务11*:由本地 CA 签署证书模拟证书签署过程 140 | 141 | * 在 Windows 上创建本地 CA 142 | * 安装基于 OpenSSL 的前端开源 GUI 工具 [xca](https://sourceforge.net/projects/xca/) 143 | * 创建 CA 的证书和私钥 144 | * 在 Linux 上生成证书签名请求文件 145 | * ftp.olabs.lan.csr 146 | * myservers.csr 147 | * 在 Windows 上使用本地 CA 签署证书 148 | * 将 Linux 上生成的 CSR 文件共享给 Windows (如 scp) 149 | * 使用本地 CA 签署 CSR 文件并生成 CRT 证书文件 150 | * 将生成的 CRT 证书文件共享给 Linux (如 scp) 151 | 152 | 153 | ## 任务12*:RKHunter : Check Rootkit 154 | 155 | * 安装 RKHunter 156 | * 配置文件:`/etc/rkhunter.conf` 157 | * 检查系统上的 Rootkit 158 | 159 | >**参考** [RKHunter : Detect Rootkit](https://www.server-world.info/en/note?os=CentOS_7&p=rkhunter) 160 | 161 | ## 任务13*: AIDE : Host based IDS 162 | 163 | * 安装 AIDE 164 | * 配置文件:`/etc/aide.conf` 165 | * 生成检测数据库 166 | * 检查系统上的重要文件变化,实现基于主机的入侵检测 167 | * 确认更改安全后重新生成检测数据库 168 | 169 | >**参考** [AIDE: Host based IDS](https://www.server-world.info/en/note?os=CentOS_7&p=aide) 170 | 171 | ## 任务14: 漏洞检测 172 | 173 | * 安装 `lynis` 174 | * 首次执行 `lynis audit system` 175 | * 使用 `lynis -c` 扫描整个系统 176 | * 根据 `lynis` 报告提示加固系统 177 | 178 | >**参考** 179 | >* https://cisofy.com/documentation/lynis/get-started/ 180 | >* `man lynis` -------------------------------------------------------------------------------- /ch10/experiment_10-01.md: -------------------------------------------------------------------------------- 1 | # 实验指导 10 - Shell 编程 2 | 3 | >#### 学习目标 4 | > * 掌握脚本的编辑、运行和调试方法 5 | > * 掌握 bash 变量的定义、引用、替换扩展 6 | > * 掌握 bash 的各种流程控制语句 7 | > * 掌握 bash 函数的定义和调用方法 8 | > * 掌握命令行参数的使用方法 9 | > * 掌握避免错误的处理方法使得脚本更健壮 10 | 11 | ## 任务1:编写一个最小化安装 CentOS7 后的配置脚本 12 | 13 | **要求:** 14 | 15 | 1. 配置 YUM 并更新系统 16 | * 安装 EPEL 仓库 17 | * 导入已安装所有仓库的 GPG 签名文件 `/etc/pki/rpm-gpg/RPM-GPG-KEY-*` 18 | * 配置所有仓库的国内镜像URL 19 | * 更新系统 20 | 2. 安装常用的必要的软件 21 | * bash-completion vim-enhanced 22 | * net-tools psmisc yum-cron yum-utils yum-security 23 | * wget curl elinks w3m lftp mailx mutt rsync ntp git bind-utils 24 | * sysstat htop dstat nload nethogs iftop 25 | * rkhunter aide denyhost fail2ban lynis 26 | 3. 系统基本配置 27 | * 设置语言、时区 28 | * 设置主机名 29 | * 创建一个普通用户并为其设置口令 30 | * 禁用 chrony 和 ntp 服务 31 | * 使用 ntpdate 配置每日时间同步 32 | * 限制每个用户能打开的最大文件数 33 | * 限制仅 wheel 组的人才能使用 sudo 和 su 命令 34 | * 关闭 SELINUX 35 | * 确保网络参数配置正确后关闭 NetworkManager 服务 36 | 4. 安全配置 37 | * SSH 38 | * 允许使用口令登录但 root 用户只能使用密钥登录 39 | * 预先写入 root 远程 ssh 登录的公钥并为 .ssh 目录及其文件设置安全权限 40 | * 关闭 DNS 反向解析检查 41 | * ssh 回话闲置 5 分钟后自动注销登录 42 | * 安装配置 fail2ban 43 | * 口令 44 | * 口令必须大于12个字符 45 | * 必须至少包含四类字符中的一个 46 | * 网络 47 | * 开启防火墙 22,80,443 端口 48 | 49 | >* 扩展:使 `postinstall.sh` 脚本同时适用于 CentOS 6/7 50 | >* Vagrant 自动部署 -- https://www.vagrantup.com/docs/provisioning/shell.html 51 | 52 | ## 任务2:根据 shell 类型统计用户数 53 | 54 | **要求:** 55 | 56 | 1. shell 类型通过命令行参数 `-s ` 的形式指定 57 | * 显示 shell 类型为 SHELL 的用户数并列出所有用户名 58 | * SHELL 必须是 `/etc/shells` 文件中存在的类型,否则不执行脚本且退出状态码为1 59 | 2. 当没有给出命令行参数或命令行参数为 `-h | --help` 时,显示帮助信息并退出 60 | 3. 当命令行参数为其他值时,显示提示信息且退出状态码为2 61 | 62 | 若脚本名为 usersbysh,执行效果如下: 63 | 64 | ``` 65 | $ usersbysh -s bash 66 | bash - 3 users , they are: root,student,tony 67 | $ echo $? 68 | 0 69 | 70 | $ usersbysh -s zash 71 | Invalid shell. 72 | $ echo $? 73 | 1 74 | 75 | $ usersbysh 76 | Usage: usersbysh -s |-h|--help 77 | 根据 shell 类型统计用户数并显示用户列表 78 | $ echo $? 79 | 0 80 | 81 | $ usersbysh --help 82 | Usage: usersbysh -s |-h|--help 83 | 根据 shell 类型统计用户数并显示用户列表 84 | $ echo $? 85 | 0 86 | 87 | $ usersbysh -a 88 | usersbysh:无效选项 -- a 89 | Try 'usersbysh --help|-h' for more information. 90 | $ echo $? 91 | 2 92 | ``` 93 | 94 | ## 任务3:根据用户选择显示不同类型的系统信息 95 | 96 | **要求:** 97 | 98 | 1. 向用户展示功能菜单,具有如下功能: 99 | * 显示所有登录用户 100 | * 显示系统平均负载 101 | * 显示物理内存的使用 102 | * 显示交换空间的使用 103 | * 显示磁盘空间的使用 104 | * quit或q 105 | 2. 读取用户从键盘上的选择 106 | * 根据不同的选择执行相应的命令 107 | * 选择 quit 或 q 时退出脚本 108 | * 输入错误的选择时退出脚本,且退出状态吗返回1 109 | 110 | ## 任务4:任务3扩展 111 | 112 | **要求:** 113 | 114 | 1. 当用户选择显示相应信息后不退出,而让用户继续选择,继续显示相应内容,用户选择 quit 菜单项才退出。 115 | 2. 使用 `while` 语句 和 `select` 语句分别完成。 116 | 117 | ## 任务5:检测与服务器处于同一子网的每台主机的连通性 118 | 119 | **要求:** 120 | 121 | 1. 通过 `ip|ifconfig` 命令获取本机 IP 地址 122 | * 使用变量替换扩展删除最后一位十进制数 123 | 2. 通过 ping 命令测试当前主机与 1..254 所有主机的连通性 124 | * 若能 ping 通就显示 "`` is up.",其中的IP要换为真正的IP地址,且以绿色显示 125 | * 若不能 ping 通就显示"`` is down.",其中的IP要换为真正的IP地址,且以红色显示 126 | 3. 请分别使用 `while`,`until` 和 `for` (两种形式)循环实现 127 | 128 | > **提示** 为避免突发性的线路故障发生,在使用 ping 时,每次等待 ping 的响应时间可以设置稍长一些(如:`-W 2`) 129 | 130 | ## 任务6:任务5 的函数实现方式 131 | 132 | **要求:** 133 | 134 | 1. 使用函数实现获取本机 IP 地址 135 | 2. 使用函数实现一台主机的连通性判定 136 | 3. 在主程序中调用函数判定指定范围内的所有主机的在线情况 137 | 138 | > **扩展** 根据子网掩码的值确定要 ping 的主机的 IP 地址范围 139 | 140 | ## 任务7:找出使用率大于 90% 的所有分区 141 | 142 | **要求:** 143 | 144 | 1. 使用 read 配合 while 语句实现 145 | 2. 将 df 命令的输出结果通过管道传递给 while 146 | * 不要对虚拟文件系统进行操作 147 | 3. 将结果通过邮件发送给 root 148 | * 只有当有使用率大于 90% 的分区时才发送邮件 149 | * 邮件主题为:Warn: Disk Usage on <主机的FQDN> 150 | * 邮件体包含:找出的分区设备名(挂装点)和使用率 151 | 152 | >1. **思考1**:循环控制语句 153 | > * 若 df 的输出结果以使用率**降序**排序后再通过管道传递给 while 时,在循环体内可以使用哪个循环控制语句配合条件判断来优化? 154 | > * 若 df 的输出结果以使用率**升序**排序后再通过管道传递给 while 时,在循环体内可以使用哪个循环控制语句配合条件判断来优化? 155 | >2. **思考2**:下面的命令行能完全实现要求的功能吗?为什么? 156 | > * `df -PT |egrep -v '^Filesystem|tmpfs'|sort -nr -k6 | awk '{print $6 , $7}'|mail -s "Warn: Disk Usage on $(hostname -f)" root` 157 | > * `df -PT |egrep -v '^Filesystem|tmpfs' | sed 's/%//' |awk '$6>90 {printf "%d%% used on %s (%s)\n", $6, $7, $1}'|mail -s "Warn: Disk Usage on $(hostname -f)" root` 158 | 159 | 160 | ## 任务8:找出使用率大于 N% 的所有分区 161 | 162 | 任务7 扩展 163 | 164 | **要求:**分别实现如下两种情况 165 | 166 | 1. N 通过命令行参数传递给脚本 167 | * 若 N 不是值为 0~99 的数字,给出出错提示并退出脚本且退出状态码为1 168 | 2. N 通过 read 从键盘读取 169 | * 使用循环由键盘读取 N,直至读取的值为 0~99 的数字为止 170 | 171 | 172 | ## 任务9:打印 1~N 之间的所有 奇数|偶数|素数 173 | 174 | **要求:** 175 | 176 | 1. 编写一个函数用于判断一个字符串是否为纯数字的值 177 | 2. 编写三个函数分别用于打印 1~N 之间的所有 奇数|偶数|素数 178 | 3. 编写一个函数显示脚本的格式和功能 179 | 3. 脚本的命令行参数 180 | * 第一个参数必须为一个数字,否则显示使用帮助信息,并设置退出状态码为1 181 | * -o|--odd :打印奇数 182 | * -e|--even:打印偶数 183 | * -p|--prime:打印素数 184 | * -a|--all:打印奇数、偶数和素数 185 | * -h|--help:显示使用帮助信息 186 | * 对于其他的参数应该报错,并设置退出状态码为2 187 | * 可以同时指定多个参数,例如 -o -p 表示既打印奇数又打印素数 188 | 189 | >**提示** 命令行参数处理:`getopts` 和 `getopt` 190 | >* 参考 [Shell 参数(2) - 解析命令行参数工具:getopts/getopt](https://www.cnblogs.com/yxzfscg/p/5338775.html) 191 | 192 | ## 参考资源 193 | 194 | * [Shell 编程之语法基础](https://linuxtoy.org/archives/shell-programming-basic.html) 195 | * [Linux Shell Scripting Tutorial (LSST) v2.0 ](https://bash.cyberciti.biz/guide/Main_Page) 196 | 197 | -------------------------------------------------------------------------------- /ch10/lecture_notes_10-01.md: -------------------------------------------------------------------------------- 1 | # CH10 - bash 脚本编程 2 | 3 | ## 条件测试1 - test 或 `[]` 4 | 5 | ``` 6 | [ ] test 7 | [ 0 ] test 0 8 | [ 1 ] test 1 9 | [ string ] test string 10 | 11 | [ $UID == 0 ] 比较 [ $UID==0 ] 12 | [ $(id -u) == 0 ] 比较 [ $(id -u)==0 ] 13 | ``` 14 | 15 | ## 使用命令列表替换 if 语句 16 | 17 | ``` 18 | if [ ]; then echo T; fi 19 | if [ 0 ]; then echo T; fi 20 | if [ 1 ]; then echo T; fi 21 | if [ string ]; then echo T; fi 22 | 23 | [ ] && echo T 24 | [ 0 ] && echo T 25 | [ 1 ] && echo T 26 | [ string ] && echo T 27 | ``` 28 | 29 | ``` 30 | if [ ]; then echo T; else echo F; fi 31 | if [ 0 ]; then echo T; else echo F; fi 32 | if [ 1 ]; then echo T; else echo F; fi 33 | if [ string ]; then echo T; else echo F; fi 34 | 35 | [ ] && echo T || echo F 36 | [ 0 ] && echo T || echo F 37 | [ 1 ] && echo T || echo F 38 | [ string ] && echo T || echo F 39 | 40 | ``` 41 | 42 | ## 使用命令列表替换 if 语句 (续) 43 | 44 | ``` 45 | [ ] && echo T 46 | [ 0 ] && echo T 47 | [ 1 ] && echo T 48 | [ string ] && echo T 49 | 50 | ! [ ] && echo F 51 | ! [ 0 ] && echo F 52 | ! [ 1 ] && echo F 53 | ! [ string ] && echo F 54 | 55 | [ ] && : || echo F 56 | [ 0 ] && : || echo F 57 | [ 1 ] && : || echo F 58 | [ string ] && : || echo F 59 | ``` 60 | 61 | 62 | ``` 63 | ~]# help : 64 | :: : 65 | Null command. 66 | 67 | No effect; the command does nothing. 68 | 69 | Exit Status: 70 | Always succeeds. 71 | ``` 72 | 73 | 74 | ``` 75 | ~]# help true false 76 | true: true 77 | Return a successful result. 78 | 79 | Exit Status: 80 | Always succeeds. 81 | false: false 82 | Return an unsuccessful result. 83 | 84 | Exit Status: 85 | Always fails. 86 | ``` 87 | 88 | 89 | 90 | ## 条件测试2 - `(())` 91 | 92 | ``` 93 | (( )) 比较 [ ] 94 | (( 0 )) 比较 [ 0 ] 95 | (( 1 )) 比较 [ 1 ] 96 | (( string )) 比较 [ string ] 97 | ``` 98 | 99 | ## 条件测试3 - 根据命令结果状态码测试 100 | 101 | ``` 102 | id -u > /dev/null 103 | echo $? 104 | 105 | grep -q '^osmond\>' /etc/passwd || useradd osmond 106 | ping -c1 -W1 8.8.8.8 > /dev/null && elinks --dump http://whatismyip.org || ip r s 107 | ``` 108 | 109 | ## 检查字符串变量空值与非空值 110 | 111 | * 检查空 112 | [ "$name" = "" ] 113 | [ -z "$name" ] 114 | [ ! "$name" ] 115 | [ "X${name}" = "X" ] 116 | * 检查非空 117 | [ "$name" != "" ] 118 | [ -n "$name" ] 119 | [ "$name" ] 120 | [ "X${name}" != "X" ] 121 | 122 | ## 检查字符串变量是否为纯数字(正整数)的方法 123 | 124 | ``` 125 | ((n>0)) 2> /dev/null 126 | [ $n -gt 0 ] 2> /dev/null 127 | ``` 128 | 129 | ``` 130 | [ -n "$n" -a -z "$(sed 's/[0-9]//g' <<< "$n")" ] 131 | [ -n "$n" -a -z "$(egrep -o '[^0-9]+' <<< "$n")" ] 132 | [ -n "$n" -a -z "${n//[0-9]/}" ] 133 | [ -n "$n" -a "$n" == "${n//[0-9]/}" ] 134 | 135 | [[ -n "$n" && -z "$(sed 's/[0-9]//g' <<< "$n")" ]] 136 | [[ -n "$n" && -z "$(egrep -o '[^0-9]+' <<< "$n")" ]] 137 | [[ -n "$n" && -z "${n//[0-9]/}" ]] 138 | [[ -n "$n" && "$n" == "${n//[0-9]/}" ]] 139 | ``` 140 | 141 | ## 在 if 、while、until 中使用条件测试 142 | 143 | ``` 144 | ~]# help if while until 145 | if: if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi 146 | Execute commands based on conditional. 147 | 148 | Exit Status: 149 | Returns the status of the last command executed. 150 | 151 | while: while COMMANDS; do COMMANDS; done 152 | Execute commands as long as a test succeeds. 153 | 154 | Exit Status: 155 | Returns the status of the last command executed. 156 | 157 | until: until COMMANDS; do COMMANDS; done 158 | Execute commands as long as a test does not succeed. 159 | 160 | Exit Status: 161 | Returns the status of the last command executed. 162 | ``` 163 | 164 | 举例:从标准输入读取n的值,直至为全数字的整数为止 165 | 166 | ``` 167 | n= 168 | until ((n>0)) 2>/dev/null 169 | do 170 | read -p "Pls input a number: " n 171 | done 172 | ### 173 | n= 174 | while ! ((n>0)) 2>/dev/null 175 | do 176 | read -p "Pls input a number: " n 177 | done 178 | ``` 179 | 180 | 181 | ``` 182 | n= 183 | while true 184 | do 185 | read -p "Pls input a number: " n 186 | ((n>0)) 2>/dev/null && break 187 | done 188 | ### 189 | n= 190 | until false 191 | do 192 | read -p "Pls input a number: " n 193 | ((n>0)) 2>/dev/null && break 194 | done 195 | ``` 196 | 197 | ## 循环控制语句与 Shell 特性 198 | 199 | ``` 200 | |while 201 | |until 202 | |for 203 | 204 | done| 205 | 206 | done< 207 | done<<< 208 | done< 211 | done>> 212 | ``` 213 | 214 | 215 | ## 函数 216 | 217 | * 定义 218 | * 是被命名的的 shell 脚本片段 219 | * 显示 220 | * declare -F 221 | * declare -f 222 | * declare -f funName 223 | * 执行 224 | * 函数与主程序在一个 shell 内执行 225 | * 主程序与函数中同名变量是一个变量 226 | * 在函数中使用 local 定义的变量只在此函数及其调用的函数中起作用 227 | * 返回值 228 | * 状态返回值 exit N 229 | * 结果返回值 可通过标准输出传递 230 | 231 | ``` 232 | a=100; b=200 233 | 234 | mytest1 () { 235 | local a 236 | echo -e "($BASHPID) \t $[a=a+b] \t $a$b" 237 | mytest2 238 | } 239 | mytest2 () { 240 | echo -e "($BASHPID) \t $[++a]" 241 | } 242 | declare -f mytest{1,2} 243 | 244 | echo $a $b 245 | mytest1 246 | echo $? 247 | echo $a $b 248 | echo $BASHPID 249 | ``` -------------------------------------------------------------------------------- /ch09/experiment_09-01.md: -------------------------------------------------------------------------------- 1 | # 实验指导 9.1 - Linux 防火墙 2 | 3 | >#### 学习目标 4 | > * 使用 `firewall-cmd` 或 `firewall-config` 工具配置基于 firewalld 守护进程的防火墙 5 | > * 使用 `lokkit` 或`system-config-firewall-tui` 工具配置基于 iptables 服务的防火墙 6 | > * 编写基于 `iptabls` 命令的防火墙脚本 7 | > * 编写基于 `iptables-save` 命令输出文件格式的防火墙脚本 8 | 9 | 10 | ## 任务1:firewalld 防火墙 -- 主机防火墙(单网卡) 11 | 12 | * 安装并启动 firewalld 13 | * 使用 `firewall-cmd` 命令完成如下操作 14 | * 显示当前的默认区域 15 | * 显示当前已经激活的区域 16 | * 显示默认区域的所有规则 17 | * 显示默认区域内允许访问的所有服务 18 | * 显示默认区域内允许访问的所有端口 19 | * 显示 firewalld 预定义的服务(名称) 20 | * 允许访问 http、https 、syslog 服务 21 | * 允许访问 81 (TCP)端口 22 | * 禁止访问 syslog 服务 23 | * 仅允许 192.168.56.30 的主机访问 syslog 服务 24 | * 禁止 192.168.56.30 的主机访问 http 服务 25 | * 使上述配置持久化(下次启动 firewalld 时生效) 26 | * 在适当的客户端进行测试 27 | 28 | >**提问** 下面两条命令的作用 29 | >* `firewall-cmd --get-services | grep -wo http` 30 | >* `firewall-cmd --get-services | tr ' ' '\n' | grep http` 31 | 32 | 33 | ## 任务2:基于 2222 端口的 SSH 服务的 firewalld 防火墙 34 | 35 | 1. 配置 SSH 服务 36 | * 设置端口为 2222 37 | * 重新加载配置 38 | 2. 自定义 firewalld 的规则配置文件 39 | * 复制默认的 SSH 规则文件到 `/etc/firewalld/services/` 40 | * 修改复制后的 `/etc/firewalld/services/ssh.xml`, 将 22 端口改为 2222 41 | * 重新加载防火墙配置 42 | 3. 配置 fail2ban 43 | * 安装 fail2ban 44 | * 创建本地配置文件 `/etc/fail2ban/jail.local` 45 | [DEFAULT] 46 | findtime = 900 47 | [sshd] 48 | enabled = true 49 | bantime = 3600 50 | maxretry = 5 51 | port=2222 52 | * 设置 fail2ban 立即/开机 启动 53 | 54 | 55 | ## 任务3:SSH X11 Forwarding 56 | 57 | * 服务器端 58 | * 安装 `xauth` 59 | * 配置 SSH 服务器开启 `X11Forwarding` 60 | * 重新加载 sshd 配置文件 61 | * 安装 `firewall-config` 62 | * 客户端 63 | * 安装 Xming 64 | * 配置 Putty 中的 ssh 会话启用 `X11Forwarding` 65 | * 连接已配置的 ssh 会话 66 | * 执行 GUI 工具 `firewall-config` 配置防火墙 67 | 68 | >* [Xming](https://xming.en.softonic.com/) 69 | >* [PuTTY+Xming 实现 X11 的 ssh 转发](http://blog.csdn.net/smstong/article/details/46328247) 70 | 71 | ## 任务4:firewalld 防火墙 -- 网关防火墙(多网卡) 72 | 73 | >**配置环境** 74 | >* 防火墙主机(CentOS 7 VirtualBox 虚拟机)有 2 块物理网卡 75 | > * NAT 类型网卡 (自动获得网络参数) 76 | > * host-only 网卡 (192.168.56.71/24) 77 | > * libVirtd 虚拟网桥 (192.168.122.1/24) 78 | > * c7-v1 容器 (192.168.122.71/24) 79 | >* 服务器主机(CentOS 7 VirtualBox 虚拟机)有 1 块网卡 80 | > * host-only 网卡 (192.168.56.30/24) 81 | >* Window 宿主机 82 | > * host-only 虚拟网桥 (192.168.56.1/24) 83 | > * 能连接公网 (有线/无线) 84 | 85 | * 配置防火墙主机 86 | * 显示 firewalld 预定义的区域 87 | * 显示 firewalld 预定义的区域的所有规则 88 | * 仅显示 `work` 区域的所有规则 89 | * 显示当前已经激活的区域 90 | * 显示默认区域的所有规则 91 | * 将默认区域设置为 `work` 92 | * 将 VirtualBox 虚拟机中设置为 NAT 的网卡对应的设备设置为 `external` 区域 93 | * 绑定源地址 192.168.122.0/24 到 `public` 区域 94 | * 显示 `public` 区域的所有规则 95 | * 重新显示当前已经激活的区域 96 | * 允许访问 `external` 区域的 http、https 服务 97 | * 允许访问 `external` 区域的81 (TCP)端口 98 | * 仅允许 192.168.56.30 的主机访问 `work` 区域(默认)的 syslog 服务 99 | * 删除 `external` 区域上默认设置的 IP 伪装功能 100 | * 显示 `external` 区域的所有规则 101 | * 添加 `work` 区域上对 `192.168.56.0/24` 的 IP 伪装功能 102 | * 在 `work` 区域(默认)上,将对 192.168.56.71:22/tcp 的访问重定向到新克隆的系统 192.168.56.30 的 22 端口 103 | * 在 `work` 区域(默认)上,将对 192.168.56.71:2022/tcp 的访问重定向到 c7-v1 容器的 22 端口 104 | * 显示 `work` 区域的所有规则 105 | * 显示 `public` 区域的所有规则 106 | * ...... 107 | * 使上述配置持久化(下次启动 firewalld 时生效) 108 | * 测试 109 | * 在防火墙主机上测试 110 | ping 192.168.56.1 111 | ping 192.168.56.30 112 | ping 192.168.122.71 113 | 114 | ssh 192.168.122.71 115 | ssh -p 2222 192.168.122.71 116 | 117 | ssh 192.168.56.30 118 | * 在 Windows (192.168.56.1)上测试 119 | ssh -p 22 root@192.168.56.71 120 | ssh -p 2222 root@192.168.56.71 121 | ssh -p 2022 root@192.168.56.71 122 | * 在服务器主机(新克隆的虚拟机)上,测试 IP 伪装 123 | elinks --dump http://whatismyip.org 124 | 125 | >**提问** 下面命令的帮助输出中只有 **[Z]** 而没有 **[P]** 说明了什么?如何持久化地将一个网络接口绑定到一个 firewlld 的区域? 126 | >``` 127 | ># firewall-cmd --help |grep -A1 '\--change-interface=' 128 | > --change-interface= 129 | > Change zone the is bound to [Z] 130 | >``` 131 | >**参考** 132 | >* https://fedoraproject.org/wiki/Firewalld?rd=FirewallD 133 | >* http://firewalld.org/ 134 | 135 | ## 任务5:iptables 防火墙 136 | 137 | 1. 关闭 firewalld 并切换使用基于 iptables 服务的防火墙 138 | * 关闭并禁用 `firewalld` 139 | * 安装 `iptables-services` 和 `system-config-firewall-tui` 140 | * 启动并设置开机启动 `iptables` 服务 141 | 2. 配置 `iptables` 防火墙 142 | * 直接修改规则集文件 `/etc/sysconfig/iptables` 配置 143 | * 使用 `system-config-firewall-tui` 或 `lokkit` 配置 144 | 3. 重新加载防火墙配置 145 | 146 | >**提示** 你也可以在 c6-v1 容器上练习配置 iptables 主机防火墙 147 | 148 | 149 | ## 任务6:iptables 脚本 150 | 151 | * 基于 `iptables-save` 命令输出文件格式的防火墙脚本 152 | * **参考** https://github.com/fcaviggia/hardened-centos7-kickstart/blob/master/config/hardening/iptables.sh 153 | * 基于 `iptabls` 命令的防火墙脚本 154 | * **参考** http://easyfwgen.morizot.net/gen/index.php 155 | * **参考** http://www.malibyte.net/iptables/scripts/fwscripts.html 156 | 157 | 158 | ## 任务7:Debian 防火墙 159 | 160 | * 配置 Debian 系列服务器的防火墙 161 | * [Debian Firewall](https://wiki.debian.org/DebianFirewall) 162 | 163 | >**参考** 164 | >* [Debian VPS 系统 iptables 防火墙使用教程](https://yq.aliyun.com/ziliao/70072) 165 | >* [Debian/Ubuntu系统中安装和配置 UFW](http://blog.csdn.net/jb19900111/article/details/18552913) 166 | >* [ubuntu server guide -- firewall](https://help.ubuntu.com/lts/serverguide/firewall.html) 167 | >* [Ufw 使用指南](http://wiki.ubuntu.org.cn/Ufw使用指南) 168 | 169 | 170 | 171 | 172 | -------------------------------------------------------------------------------- /overview/README.md: -------------------------------------------------------------------------------- 1 | # Linux 课程概览 2 | 3 | ## 课程名称 4 | 5 | * **Linux 基础及应用** 6 | * **以 [CentOS 7](https://seven.centos.org/) 为主** 7 | * 兼顾 CentOS 6 以及 Debian 8或9 / Ubuntu 16.04 LTS 8 | 9 | * 课程学时(包含上机操作) 10 | * 多学时:**80** (16×5) 或 **72** (12×6) 或 **64** (16×4) 11 | * 少学时:**48** (8×6) 或 **32** (8×4) 12 | 13 | ## 课程资源 14 | 15 | * 课程教材 16 | * [《Linux 基础及应用教程 (基于CentOS7)》 第2版](http://www.cmpedu.com/book/book%21webDetails.do?book_id=2053472) 17 | * [《Linux 应用基础教程》(基于CentOS6)](http://www.cmpedu.com/book/book%21webDetails.do?book_id=2044317) 18 | * 课程课件 19 | * [《Linux 基础及应用教程 (CentOS 7)》 配书 PPT](http://down.51cto.com/data/2230243) 20 | * 课程视频 21 | * 学习指导 22 | * Linux 应用基础课程学习指导 -- [CentOS 7 Learning Guide](http://github.com/linuxbooks/c7lg) 23 | 24 | ## 课程性质和目标 25 | 26 | * 课程性质 27 | * **计算机相关专业的一门实践性很强的专业基础课程** 28 | * 课程目标 29 | * **成为初中级 Linux 系统管理员/运维人员** 30 | 31 | ## 必备知识 32 | 33 | * 掌握计算机的基本使用 34 | * 具有初步的网络知识并熟悉网络操作 35 | 36 | >#### 推荐书目 37 | >* [鸟哥 Linux 私房菜](http://linux.vbird.org/) 38 | > * [計算機概論](http://linux.vbird.org/linux_basic/0105computers.php) 39 | > * [基礎網路概念](http://linux.vbird.org/linux_server/0110network_basic.php) 40 | >---- 41 | >* [《计算机科学概论(原书第12版)》](https://item.jd.com/12041619.html) -- [美] J.格伦·布鲁克希尔(J.Glenn Brookshear),丹尼斯·布里罗(Dennis Brylow) 著;刘艺,吴英,毛倩倩 译 42 | >* [《计算机科学概论(原书第5版)》](https://item.jd.com/11937908.html) -- [美] 内尔·黛尔(NellDale),约翰·路易斯(JohnLewis) 著;吕云翔,刘艺博 译 43 | >---- 44 | >* [《计算机网络(第7版)》](https://item.jd.com/12025317.html) -- 谢希仁 著 45 | >* [《计算机网络原理创新教程》](https://item.jd.com/12047649.html) -- 韩立刚,马青,王艳华,韩利辉 著 46 | >---- 47 | >* [《计算机是怎样跑起来的》](https://item.jd.com/11699385.html) -- [日]矢泽久雄 著;胡屹 译 48 | >* [《网络是怎样连接的》](https://item.jd.com/12109464.html) -- [日]户根勤 著;周自恒 译 49 | >* [《程序是怎样跑起来的》](https://item.jd.com/11676683.html) -- [日]矢泽久 著;李逢俊 译 50 | >* [《程序员的数学》](https://item.jd.com/11094250.html) -- [日] 结城浩 著;管杰 译 51 | >---- 52 | >* [《图解TCP/IP 第5版》](https://item.jd.com/11253710.html) -- [日]竹下隆史,[日]村山公保,[日]荒井透,[日]苅田幸雄 著;乌尼日其其格 译 53 | >* [《图解HTTP》](https://item.jd.com/11449491.html) -- [日]上野·宣 著;于均良 译 54 | >* [《图解密码技术 第3版》](https://item.jd.com/11942019.html) -- [日]结城浩 著;周自恒 译 55 | >---- 56 | >* [《图解服务器端网络架构》](https://item.jd.com/11680021.html) -- [日] 宫田宽士 著;曾薇薇 译 57 | >* [《图解网站分析:让流量倍增的网站优化方法(修订版)》](https://item.jd.com/11559946.html) -- [日]小川卓 著;沈麟芸 译 58 | >---- 59 | >* [《图解网络硬件》](https://item.jd.com/11506709.html) -- [日]三轮贤一 著;盛荣 译 60 | >* [《图解基础设施设计模式》](https://item.jd.com/11687463.html) -- [日] NTT DATA集团,杉原健郎,吉田一幸,岩崎贤治,三浦广志 ... 著;杨文轩 译 61 | 62 | 63 | ## 课程内容 64 | 65 | * 操作基础 66 | * Linux 简介与安装 67 | * Shell 的使用 68 | * 常用命令的操作 69 | * 系统管理 70 | * 用户和组管理、权限管理、进程管理、本地存储管理 71 | * 网络配置、网络工具、软件包管理 72 | * 服务管理、周期性任务服务、系统日志服务、SSH 服务 73 | * 系统监视、内核管理、系统启动过程、备份与恢复、故障排查 74 | * Shell 脚本编程、配置管理工具* 75 | * 安全管理 76 | * 物理安全、登录安全、账户安全、软件安全、服务安全 77 | * 信息安全与加密技术、访问控制、防火墙、安全工具 78 | * 网络服务 79 | * DHCP 服务和 DNS 服务 80 | * FTP 服务、NFS 服务和 Samba 服务 81 | * 基于 Apache 实现的 Web 服务 82 | * 代理和反向代理服务 83 | * 基于 Postfix 和 Dovecot 的 邮件服务 84 | 85 | ## 能力培养 86 | 87 | * 知识管理 88 | * [高效的知识阅读和信息筛选技巧](http://www.williamlong.info/archives/4899.html) 89 | * [我的知识管理工具列表](http://www.williamlong.info/archives/3388.html) 90 | * 时间管理 91 | * [《时间管理:给系统管理员》](https://item.jd.com/10042434.html) 92 | * [时间管理的高级技巧培训](http://www.williamlong.info/archives/1995.html) 93 | * [时间管理101招](http://www.williamlong.info/archives/1996.html) 94 | * [常见时间管理工具](http://www.williamlong.info/archives/3175.html) 95 | * **科学上网** 96 | * 两种方案:Socks5 代理、VPN 97 | * 你所知的任何免费方案 98 | * 购买并配置自己的 VPS,架设 Socks5 代理 和/或 VPN 服务 99 | * [跟 Toy 玩自架服务器](https://linuxtoy.org/archives/selfhosted-server-4.html) 100 | * [飞羽博客](https://cokebar.info/) 101 | * https://github.com/Angristan/OpenVPN-install 102 | * https://github.com/bedefaced/vpn-install 103 | * 尊重知识产权/版权 104 | * 使用开源软件 105 | * 为开源软件做贡献 106 | * 团队协作工具 107 | * WIKI 108 | * Q&A(Question&Answer) 109 | * RT(Request tracking) 110 | * 版本控制 111 | * 邮件列表 112 | * 即时通信 113 | 114 | ## 课程要求 115 | 116 | * 为每章的每个模块内容制作思维导图([百度脑图](http://naotu.baidu.com/)) 117 | * 使用博客(BLOG)总结知识、写作业 118 | * 使用图书托管服务写 课堂笔记、实验/实训 报告 119 | * [gitbook](https://www.gitbook.com) 120 | * [readthedocs](https://readthedocs.org/) 121 | * [看云](https://www.kancloud.cn/) 122 | 123 | ## 考评机制 124 | 125 | * 博客作业 -- 16% 126 | * 实验报告书 -- 32% 127 | * 期末上机实验考试 -- 50% 128 | * 出勤率 -- 2% 129 | 130 | ## 学习资源 131 | 132 | ### 在线教育平台 133 | 134 | * [51CTO 学院](http://edu.51cto.com/) 135 | * [百度传课](https://www.chuanke.com/) 136 | * [腾讯课堂](https://ke.qq.com/) 137 | * [网易云课堂](http://study.163.com/) 138 | * [网易公开课](https://open.163.com/) 139 | 140 | 141 | * [慕课网](http://www.imooc.com/) 142 | * [爱课程](http://www.icourses.cn/home/) 143 | * [精品课](http://www.jingpinke.com/) 144 | * [极客学院](http://www.jikexueyuan.com) 145 | * [麦子IT学院](http://www.maizitime.com) 146 | * [超星视频](http://video.chaoxing.com/) 147 | * [YY教育](http://edu.yy.com/) 148 | * [德智教育](http://www.dezhi.com/) 149 | * [沪江网校](http://class.hujiang.com/) 150 | * [Codecademy](https://www.codecademy.com/) 151 | 152 | >* [芥末堆](http://www.jmdedu.com) -- 中国专注于教育产业信息挖掘与传递的行业内资讯服务媒体平台 153 | 154 | ### 技术相关的问答网站 155 | 156 | * https://segmentfault.com 157 | * https://superuser.com 158 | * https://www.v2ex.com 159 | * http://www.tuicool.com 160 | * http://stackoverflow.com 161 | * https://www.zhihu.com 162 | * http://www.slideshare.net 163 | 164 | ### 阅读与分享 165 | 166 | * https://readthedocs.org 167 | * https://www.gitbook.com/explore 168 | * https://book.douban.com 169 | 170 | -------------------------------------------------------------------------------- /assets/exercises/The-DevOps-Handbook.txt: -------------------------------------------------------------------------------- 1 | DevOps实践指南 2 | 作者译者:[美] Gene Kim,Jez Humble,Patrick Debois,John Willis 著,刘征,王磊,马博文,曾朝京 译 3 | 购买链接:https://item.jd.com/12350780.html 4 | 5 | 目录 6 | 7 | 第 一部分 DevOps介绍 8 | 第 1章 敏捷、持续交付和三步法  4 9 | 1.1 制造业价值流  4 10 | 1.2 技术价值流  4 11 | 1.2.1 聚焦于部署前置时间  5 12 | 1.2.2 关注返工指标——%C/A  7 13 | 1.3 三步工作法:DevOps的基础原则  7 14 | 1.4 小结  8 15 | 第 2章 第 一步:流动原则  9 16 | 2.1 使工作可见  9 17 | 2.2 限制在制品数  10 18 | 2.3 减小批量大小  11 19 | 2.4 减少交接次数  13 20 | 2.5 持续识别和改善约束点  14 21 | 2.6 消除价值流中的困境和浪费  15 22 | 2.7 小结  16 23 | 第3章 第二步:反馈原则  17 24 | 3.1 在复杂系统中安全地工作  17 25 | 3.2 及时发现问题  18 26 | 3.3 群策群力,战胜问题获取新知  19 27 | 3.4 在源头保障质量  21 28 | 3.5 为下游工作中心而优化  22 29 | 3.6 小结  22 30 | 第4章 第三步:持续学习与实验原则  23 31 | 4.1 建立学习型组织和安全文化  23 32 | 4.2 将日常工作的改进制度化  25 33 | 4.3 把局部发现转化为全局优化  26 34 | 4.4 在日常工作中注入弹性模式  27 35 | 4.5 领导层强化学习文化  27 36 | 4.6 小结  29 37 | 4.7 第 一部分总结  29 38 | 第二部分 从何处开始 39 | 第5章 选择合适的价值流作为切入点  32 40 | 5.1 绿地项目与棕地项目  34 41 | 5.2 兼顾记录型系统和交互型系统  35 42 | 5.3 从最乐于创新的团队开始  36 43 | 5.4 扩大DevOps的范围  37 44 | 5.5 小结  38 45 | 第6章 理解、可视化和运用价值流  39 46 | 6.1 确定创造客户价值所需的团队  40 47 | 6.2 针对团队工作绘制价值流图  40 48 | 6.3 组建专门的转型团队  42 49 | 6.3.1 拥有共同的目标  43 50 | 6.3.2 保持小跨度的改进计划  44 51 | 6.3.3 为非功能性需求预留20%的开发时间,减少技术债务  44 52 | 6.3.4 提高工作的可视化程度  47 53 | 6.4 用工具强化预期行为  47 54 | 6.5 小结  48 55 | 第7章 参考康威定律设计组织结构  49 56 | 7.1 组织原型  51 57 | 7.2 过度职能导向的危害(“成本优化”)  51 58 | 7.3 组建以市场为导向的团队(“速度优化”)  52 59 | 7.4 使职能导向有效  53 60 | 7.5 将测试、运维和信息安全融入日常工作  54 61 | 7.6 使团队成员都成为通才  54 62 | 7.7 投资于服务和产品,而非项目  56 63 | 7.8 根据康威定律设定团队边界  56 64 | 7.9 创建松耦合架构,提高生产力和安全性  57 65 | 7.10 小结  60 66 | 第8章 将运维融入日常开发工作  61 67 | 8.1 创建共享服务,提高开发生产力  62 68 | 8.2 将运维工程师融入服务团队  63 69 | 8.3 为每个服务团队分派运维联络人  64 70 | 8.4 邀请运维工程师参加开发团队的会议  65 71 | 8.4.1 邀请运维工程师参加每日站会  65 72 | 8.4.2 邀请运维工程师参加回顾会议  66 73 | 8.4.3 使用看板图展示运维工作  66 74 | 8.5 小结  67 75 | 8.6 第二部分总结  67 76 | 第三部分 第 一步:流动的技术实践 77 | 第9章 为部署流水线奠定基础  70 78 | 9.1 按需搭建开发环境、测试环境和生产环境  71 79 | 9.2 应用统一的代码仓库  72 80 | 9.3 使基础设施的重建更容易  74 81 | 9.4 运行在类生产环境里才算“完成”  75 82 | 9.5 小结  76 83 | 第 10章 实现快速可靠的自动化测试  77 84 | 10.1 对代码和环境做持续构建、测试和集成  79 85 | 10.2 构建快速可靠的自动化测试套件  81 86 | 10.2.1 在自动化测试中尽早发现错误  83 87 | 10.2.2 尽可能并行地快速执行测试  84 88 | 10.2.3 先编写自动化测试  84 89 | 10.2.4 尽量将手动测试自动化  85 90 | 10.2.5 在测试套件中集成性能测试  86 91 | 10.2.6 在测试套件中集成非功能性需求测试  86 92 | 10.3 在部署流水线失败时拉下安灯绳  87 93 | 10.4 小结  89 94 | 第 11章 应用和实践持续集成  90 95 | 11.1 小批量开发与大批量合并  92 96 | 11.2 应用基于主干的开发实践  93 97 | 11.3 小结  95 98 | 第 12章 自动化和低风险发布  96 99 | 12.1 自动化部署流程  97 100 | 12.1.1 应用自动化的自助式部署  100 101 | 12.1.2 在部署流水线中集成代码部署  101 102 | 12.2 将部署与发布解耦  104 103 | 12.2.1 基于环境的发布模式  105 104 | 12.2.2 基于应用的发布模式更安全  109 105 | 12.3 持续交付和持续部署实践的调查  112 106 | 12.4 小结  113 107 | 第 13章 降低发布风险的架构  114 108 | 13.1 能提高生产力、可测试性和安全性的架构  115 109 | 13.2 架构原型:单体架构与微服务  116 110 | 13.3 安全地演进企业架构  118 111 | 13.4 小结  121 112 | 13.5 第三部分总结  121 113 | 第四部分 第二步:反馈的技术实践 114 | 第 14章 建立能发现并解决问题的遥测系统  125 115 | 14.1 建设集中式监控架构  127 116 | 14.2 建立生产环境的应用程序日志遥测  129 117 | 14.3 使用遥测指导问题的解决  131 118 | 14.4 将建立生产遥测融入日常工作  132 119 | 14.5 建立自助访问的遥测和信息辐射器  133 120 | 14.6 发现和填补遥测的盲区  135 121 | 14.6.1 应用程序和业务度量指标  136 122 | 14.6.2 基础架构度量指标  137 123 | 14.6.3 显示叠加的指标组合  138 124 | 14.7 小结  139 125 | 第 15章 分析遥测数据以更好地预测故障和实现目标  140 126 | 15.1 用均值和标准差识别潜在问题  141 127 | 15.2 异常状态的处理和告警  142 128 | 15.3 非高斯分布遥测数据的问题  143 129 | 15.4 应用异常检测技术  146 130 | 15.5 小结  149 131 | 第 16章 应用反馈实现安全部署  150 132 | 16.1 通过遥测使部署更安全  151 133 | 16.2 开发和运维共同承担值班工作  153 134 | 16.3 让开发人员跟踪工作对下游的影响  153 135 | 16.4 让开发人员自行管理生产服务  155 136 | 16.5 小结  159 137 | 第 17章 将假设驱动的开发和A/B测试融入日常工作  160 138 | 17.1 A/B测试简史  161 139 | 17.2 在功能测试中集成A/B测试  162 140 | 17.3 在发布中集成A/B测试  162 141 | 17.4 在功能规划中集成A/B测试  163 142 | 17.5 小结  165 143 | 第 18章 建立评审和协作流程以提升当前工作的质量  166 144 | 18.1 变更审批流程的危险  168 145 | 18.2 “过度控制变更”的潜在危险  168 146 | 18.3 变更的协调和排程  170 147 | 18.4 变更的同行评审  170 148 | 18.5 人工测试和变更冻结的潜在危害  173 149 | 18.6 利用结对编程改进代码变更  173 150 | 18.7 消除官僚流程  176 151 | 18.8 小结  177 152 | 18.9 第四部分总结  178 153 | 第五部分 第三步:持续学习与实验的技术实践 154 | 第 19章 将学习融入日常工作  180 155 | 19.1 建立公正和学习的文化  181 156 | 19.2 举行不指责的事后分析会议  182 157 | 19.3 尽可能广泛地公开事后分析会议结果  184 158 | 19.4 降低事故容忍度,寻找更弱的故障信号  185 159 | 19.5 重新定义失败,鼓励评估风险  186 160 | 19.6 在生产环境注入故障来恢复和学习  186 161 | 19.7 创建故障演练日  187 162 | 19.8 小结  189 163 | 第 20章 将局部经验转化为全局改进  190 164 | 20.1 使用聊天室和聊天机器人自动积累组织知识  190 165 | 20.2 软件中便于重用的自动化、标准化流程  192 166 | 20.3 创建全组织共享的单一源代码库  192 167 | 20.4 运用自动化测试记录和交流实践来传播知识  194 168 | 20.5 通过确定非功能性需求来设计运维  194 169 | 20.6 把可重用的运维用户故事纳入开发  195 170 | 20.7 确保技术选型有助于实现组织目标  195 171 | 20.8 小结  197 172 | 第 21章 预留组织学习和改进的时间  198 173 | 21.1 偿还技术债务的制度化惯例  199 174 | 21.2 让所有人教学相长  200 175 | 21.3 在DevOps会议中分享经验  201 176 | 21.4 传播实践的内部顾问和教练  203 177 | 21.5 小结  204 178 | 21.6 第五部分总结  204 179 | 第六部分 集成信息安全、变更管理和合规性的技术实践 180 | 第 22章 将信息安全融入每个人的日常工作  207 181 | 22.1 将安全集成到开发迭代的演示中  207 182 | 22.2 将安全集成到缺陷跟踪和事后分析会议中  208 183 | 22.3 将预防性安全控制集成到共享源代码库及共享服务中  208 184 | 22.4 将安全集成到部署流水线中  209 185 | 22.5 保证应用程序的安全性  210 186 | 22.6 确保软件供应链的安全  214 187 | 22.7 确保环境的安全  215 188 | 22.8 将信息安全集成到生产环境遥测中  216 189 | 22.9 在应用程序中建立安全遥测系统  217 190 | 22.10 在环境中建立安全遥测系统  217 191 | 22.11 保护部署流水线  219 192 | 22.12 小结  219 193 | 第 23章 保护部署流水线  220 194 | 23.1 将安全和合规性集成到变更批准流程中  220 195 | 23.2 将大量低风险变更重新归类为标准变更  221 196 | 23.3 如何处理常规变更  222 197 | 23.4 减少对职责分离的依赖  224 198 | 23.5 确保为审计人员和合规人员留存文档和证据  226 199 | 23.6 小结  228 200 | 23.7 第六部分总结  228 201 | 行动起来——本书总结  229 202 | 附加材料 203 | 附 录  232 204 | 附录1 DevOps的大融合  232 205 | 附录2 约束理论和核心的长期冲突  234 206 | 附录3 恶性循环列表  235 207 | 附录4 交接和队列的危害  235 208 | 附录5 工业安全神话  236 209 | 附录6 丰田安灯绳  237 210 | 附录7 软件包产品  238 211 | 附录8 事后分析会议  238 212 | 附录9 猿猴军团  239 213 | 附录10 上线时间透明化  240 214 | 参考资源  241 215 | 致 谢  243 216 | EXIN DevOps Professional认证备考指南&模拟题  245 -------------------------------------------------------------------------------- /ch15/assignments.md: -------------------------------------------------------------------------------- 1 | # CH15 - 家庭作业 2 | 3 | ## LAMP/LEMP 环境 4 | 5 | * 学习如何配置 **Nginx** 和 PHP-FPM 6 | * * [Nginx Resources](https://github.com/fcambus/nginx-resources#readme) 7 | * 从源代码安装 LAMP 环境 8 | * https://oneinstack.com/ 9 | * [linux平台编译安装PHP7并安装Redis扩展与Swoole扩展实例教程](http://www.jb51.net/article/93876.htm) 10 | * **不建议,建议通过 YUM 仓库安装并保持更新** 11 | 12 | 13 | ## 安装配置 Web 应用 14 | 15 | > **参考** 16 | > 17 | > * [A list of Free Software network services and web applications which can be hosted locally. ](https://github.com/Kickball/awesome-selfhosted) 18 | > * [A curated list of Web Performance Optimization.](https://github.com/davidsonfellipe/awesome-wpo) 19 | 20 | * Weblate 21 | * https://docs.weblate.org/en/latest/admin/install.html 22 | * gitLab 23 | * http://www.mamicode.com/info-detail-1731312.html 24 | * http://blog.csdn.net/swebin/article/details/64919850 25 | * http://blog.csdn.net/huangzhijie3918/article/details/51330425 26 | * mattermost 27 | * https://docs.mattermost.com/install/install-rhel-71.html 28 | * https://github.com/mattermost 29 | * https://about.mattermost.com 30 | * NodeBB 31 | * https://nodebb.org/ 32 | * https://github.com/NodeBB/NodeBB 33 | * https://docs.nodebb.org/installing/os/centos/ 34 | * 个人云 35 | * https://nextcloud.com 36 | * https://owncloud.com 37 | * https://www.getnas.com 38 | 39 | ## 反向代理与负载均衡 40 | 41 | * 学习使用 Nginx 配置反向代理和负载均衡。 42 | * 学习使用 HAproxy 配置反向代理和负载均衡。 43 | 44 | * https://www.cyberciti.biz/open-source/http-web-performance-proxy-load-balancer-accelerator-software/ 45 | 46 | ## Java 47 | 48 | * [详解web容器 - Jetty与Tomcat孰强孰弱](https://www.cnblogs.com/crazyacking/p/5734849.html) 49 | * Dubbo Spring-boot 50 | * * http://dubbo.apache.org/books/ 51 | 52 | * [Dubbo入门---搭建一个最简单的Demo框架](https://blog.csdn.net/noaman_wgs/article/details/70214612/) 53 | * * [DUBBO+Zookeeper在Centos7中本地搭建及小案例](https://blog.csdn.net/changyinling520/article/details/77150857) 54 | * * [Dubbo+zookeeper 最简单的分布式搭建](https://blog.csdn.net/hua1586981/article/details/79195111) 55 | * http://spring.io/projects/spring-boot 56 | * https://github.com/alibaba/dubbo-spring-boot-starter 57 | * https://github.com/apache/incubator-dubbo-spring-boot-project 58 | * [JVM安全退出(如何优雅的关闭java服务)](https://blog.csdn.net/u011001084/article/details/73480432) , [常见Java应用如何优雅关闭](http://ju.outofmemory.cn/entry/337235) 59 | 60 | ## 数据库管理 61 | 62 | * 书籍 63 | * [《深入浅出MySQL 数据库开发 优化与管理维护 第2版》](https://item.jd.com/11381295.html) 64 | * [《MySQL管理之道:性能调优、高可用与监控(第2版)》](https://item.jd.com/11973797.html) 65 | * [《MariaDB 必知必会》](https://item.jd.com/11480057.html) 66 | * [《MySQL 5.7从入门到精通(视频教学版)》](https://item.jd.com/11979137.html) 67 | * [《数据库系统原理及MySQL应用教程 》](https://item.jd.com/11862586.html) 68 | * [《MySQL数据库基础与实践》](https://item.jd.com/12113257.html) 69 | * 文章 70 | * [mysql备份的三种方式详解](http://www.jb51.net/article/41570.htm) 71 | * [percona-xtrabackup](https://www.percona.com/software/mysql-database/percona-xtrabackup) 72 | * [MySQL 基于 LVM 快照的备份与恢复](http://www.linuxidc.com/Linux/2015-04/116238.htm) 73 | 74 | ## Web 编程 75 | 76 | * [awesome-php](https://github.com/ziadoz/awesome-php) 77 | 78 | * PHP 框架 79 | * [Laravel](https://laravel.com/) 80 | * https://laravel-china.org 81 | * http://laravelacademy.org 82 | * https://www.codecasts.com 83 | * [Awesome Laravel](https://github.com/chiraggude/awesome-laravel#readme) 84 | * [symfony](http://symfony.com) 85 | * http://www.symfonychina.com 86 | * [Awesome Symfony](https://github.com/sitepoint-editors/awesome-symfony#readme) 87 | * [Yii](http://www.yiiframework.com/) 88 | * http://www.yiichina.com 89 | * [Phalcon](https://phalconphp.com/) 90 | * http://www.iphalcon.cn 91 | * [主流PHP框架同步学习@慕课网](http://www.imooc.com/topic/phpframe?mc_marking=1fdf2ad3cd559d3c043eb5562300bc7c&mc_channel=bdphpkj) 92 | * [A curated list of Microservice Architecture related principles and technologies.](https://github.com/mfornos/awesome-microservices) 93 | 94 | * PHP 教程 95 | * [PHP The Right Way](http://laravel-china.github.io/php-the-right-way/) 96 | * [Web 开发安全指南](http://guides.rubyonrails.org/security.html) -- 其中的概念不仅适用于 RoR 97 | * [从百草园到三味书屋](https://huanghua581.github.io/FATA/) -- Laravel 作者著 From Apprentice To Artisan 的中文翻译 98 | * [Laravel 教程 - Web 开发实战入门 ( Laravel 5.5 ) ](https://fsdhub.com/books/laravel-essential-training-5.5) 99 | * [Laravel 教程 - Web 开发实战进阶 ( Laravel 5.5 ) ](https://fsdhub.com/books/laravel-intermediate-training-5.5) 100 | 101 | * 开发相关 102 | 103 | * * [Web Components the Right Way](https://github.com/mateusortiz/webcomponents-the-right-way#readme) 104 | * [成为专业程序员路上用到的各种优秀资料、神器及框架](https://github.com/stanzhai/be-a-professional-programmer) 105 | * [Awesome Cheatsheet](https://github.com/detailyang/awesome-cheatsheet) 106 | * [Awesome Dev Env](https://github.com/jondot/awesome-devenv#readme) 107 | * [Creative Resources for Developer and Designer](https://github.com/gztchan/awesome-design) 108 | * [Libraries.io —— The Open Source Discovery Service](https://libraries.io/) 109 | * [Front-End Developer Handbook 2017](https://www.gitbook.com/book/frontendmasters/front-end-handbook-2017/details) 110 | * [Manually curated collection of resources for frontend web developers.](https://github.com/dypsilon/frontend-dev-bookmarks) 111 | * Windows 上的 PHP 开发环境 112 | * **laragon** - https://laragon.org/ 113 | * winnmp - https://winnmp.wtriple.com/ 114 | * wampserver - http://www.wampserver.com/en/ 115 | * xampp - https://www.apachefriends.org/zh_cn/ 116 | * vagrant php dev box - https://github.com/dirkaholic/vagrant-php-dev-box 117 | * [Themes for InteliJ IDEA, PhpStorm, PyCharm, RubyMine, WebStorm and AppCode](http://www.riaway.com/) 118 | * 技术/技能 图谱 119 | * * [后端架构师技术图谱](https://github.com/xingshaocheng/architect-awesome) 120 | * [程序员技能图谱](https://github.com/TeamStuQ/skill-map) 121 | -------------------------------------------------------------------------------- /ch01/lecture_notes_01-02.md: -------------------------------------------------------------------------------- 1 | # CH01U02 - 安装 Linux 2 | 3 | ## 安装前的准备 4 | 5 | * 获知 CentOS 7 发型注记 6 | * https://wiki.centos.org/Manuals/ReleaseNotes 7 | * https://access.redhat.com/documentation/en/red-hat-enterprise-linux/ 8 | * [RHEL/CentOS technology capabilities and limits](https://access.redhat.com/articles/rhel-limits) 9 | * 获取 CentOS 7 的 ISO 文件 10 | * https://www.centos.org/download/ 11 | * https://wiki.centos.org/Download 12 | * 校验 ISO 文件的完整性 13 | * 物理机安装需要刻录光盘或写入U盘 14 | * 为安装 Linux 系统规划硬盘空间 15 | * 考虑是否支持双系统引导 16 | * 考虑分区或 LVM 布局 17 | * 为安装 Linux 系统规划网络配置信息 18 | 19 | ## 硬盘分区表(DPT) 20 | 21 | * 两种磁盘地址表示 22 | * **CHS**:[柱面-磁头-扇区(Cylinder-Head-Sector)](https://en.wikipedia.org/wiki/Cylinder-head-sector) 23 | * **LBA**:[逻辑块地址(logical block addressing)](https://en.wikipedia.org/wiki/Logical_block_addressing) 24 | * 两种类型的磁盘分区表 25 | * **MBR** -- [主引导记录(Master Boot Record)](https://en.wikipedia.org/wiki/Master_boot_record) 26 | * 位于:**磁盘主引导扇区**,即硬盘的第一个扇区 27 | * 使用**CHS** 地址表示位于硬盘的 0柱面,0磁头,1扇区。 28 | * 组成:启动引导器(BootLoader)、**硬盘分区表(Disk Partition Table)** 和 有效结束标志 29 | * **GPT** -- [全局唯一标识分区表(GUID Partition Table)](https://en.wikipedia.org/wiki/GUID_Partition_Table) 30 | * GPT 使用 **LBA** 替换了 **CHS** 地址表示 31 | * 主分区表位于磁盘开始的 LBA 1~33 ,次分区表位于磁盘结尾的 LBA -1 ~ -33 32 | 33 | |   | MBR/DOS | GPT 34 | | ------- | -------------------------------- | -------------------------------- 35 | | 位于 | 硬盘主引导扇区的第447~510字节中 | LBA1 ~ LBA33 和 LBA -1 ~ LBA -33 36 | | 分区个数 | 4个主分区,或3个主分区加一个扩展分区 | 128 个主分区 37 | | 分区大小 | 最大 2.2TB(2^32 sectors × 512 bytes) | 最大 9.4ZB (2^64 sectors × 512 bytes) 38 | | 冗余支持 |   | 提供备份分区表和循环冗余校检 (CRC) 保护 39 | 40 | >* **GUID** -- Globally Unique IDentifiers 41 | >* [MBR、GPT的结构和区别](http://dmwing.blog.51cto.com/11607397/1843254) 42 | 43 | ## MBR 示意图 44 | 45 | ![MBR Scheme](/assets/figs/MBR_Scheme.png) 46 | 47 | ## GPT 示意图 48 | 49 | ![GPT Scheme](/assets/figs/GPT_Scheme.png) 50 | 51 | ## 两种类型的系统固件 52 | 53 | |   | legacy **BIOS** firmware | **UEFI** firmware 54 | | ------------ | ----------------------------------- | ------------------- 55 | | BootLoader | 位于硬盘主引导扇区的前446字节中 | 位于独立 **ESP**(EFI System Partition)分区 56 | | 对 GPT 的支持 | 仅能读取 GPT 中的 LBA0 | 可以直接读取 57 | | 特点 | 已过时 | 可操作性、安全性、兼容性、可扩展性 58 | 59 | >* **BIOS** -- [Basic Input/Output System](https://en.wikipedia.org/wiki/BIOS) 60 | >* **UEFI** -- [Unified Extensible Firmware Interface](https://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface) 61 | >* **ESP** -- [EFI System Partition](https://en.wikipedia.org/wiki/EFI_system_partition) 62 | >* [GPT+UEFI与BIOS+MBR有什么区别(Windows)](http://www.kqidong.com/bios/876.html) 63 | >* [UEFI+GPT与BIOS+MBR各自有什么优缺点](https://www.zhihu.com/question/28471913) 64 | 65 | |   | **BIOS** | **UEFI** 66 | | --------- | ---------------------------- | ------------------- 67 | | **MBR** | 可对额外的数据磁盘使用 GPT 分区 | 降级为成 Legacy 模式并开启 CSM(Compatibility Support Module),无实际意义 68 | | **GPT** | 可启动,且需创建为 GRBU 使用的 **BIOS boot** 分区 | 可启动,且需创建 **ESP** 分区 69 | 70 | >* [类 UNIX 操作系统对 GPT 的支持](https://en.wikipedia.org/wiki/GUID_Partition_Table#UNIX_and_Unix-like_systems) 71 | 72 | ## 磁盘分区的设备名 73 | 74 | * Linux 中用设备名来访问设备,磁盘也不例外 75 | * Linux 下的设备名存放在 /dev 目录中 76 | * 磁盘设备以 **sd** 开始 77 | * 以字母 a、b、c 等区分不同的硬盘 78 | * 以数字 1、2、3 等区分不同的分区 79 | * 例如 80 | * /dev/sda1 表示第1块硬盘的第1个分区 81 | * /dev/sdc7 表示第3块硬盘的第7个分区 82 | 83 | > 对于 MBR 分区表,数字编号 1~4 留给主分区或扩展分区使用,逻辑分区编号从 5 开始 84 | 85 | ## Linux 环境下如何使用分区 86 | 87 | * 在 Linux 环境下没有 Windows 中盘符(如:C:)的概念 88 | * 将每个分区当成目录使用,此目录称为“挂装点”(Mount Point) 89 | 90 | ![文件系统挂装点](/assets/figs/monunt-point.png) 91 | 92 | >* https://wiki.archlinux.org/index.php/Partitioning 93 | 94 | ## Linux 下的文件系统 95 | 96 | * 在 Linux 系统上划分了分区之后,还要在分区上创建文件系统 97 | * Linux 下创建文件系统的操作相当于 Windows 下的磁盘格式化操作 98 | * Linux 下常用的文件系统类型为:ext2/3/4、XFS、ZFS、btrfs 99 | * Windows 系统常用的文件系统类型为 FAT32、exFAT(FAT64)、NTFS 100 | 101 | ## LVM 的引入 102 | 103 | * 逻辑盘卷管理(LVM,Logical Volume Manager) 104 | * 是建立在 硬盘 和/或 物理分区 之上的一个逻辑层 105 | * 为文件系统屏蔽下层磁盘分区布局 106 | * 提高磁盘分区管理的灵活性 107 | * 使用 LVM 的优势 108 | * 可以在多个物理磁盘设备间重新组织文件系统 109 | * 可以重新设定(扩展/收缩)文件系统的大小 110 | 111 | ![LVM 结构图](/assets/figs/lvm.png) 112 | 113 | ## 执行安装 114 | 115 | * 安装程序的启动方式: 116 | * 光盘 117 | * USB设备 118 | * 引导装载程序,比如 GRUB 119 | * 网络(PXE) 120 | * 支持的安装源: 121 | * 网络服务器(ftp、http 或 nfs) 122 | * 光盘 123 | * 硬盘 124 | 125 | ## 多种安装方式 126 | 127 | * 本地安装和远程安装 128 | * **本地安装**:安装源保存在本地光盘或本地硬盘的ext2/3/4分区或vfat(FAT32)分区 129 | * **远程安装**:安装源保存在网络服务器中,并以 HTTP/FTP/NFS协议的服务器提供 130 | * 手动安装和自动安装 131 | * **手动安装**:在安装过程中逐一回答安装程序所提出的问题 132 | * **自动安装**:以自动应答文件(Kickstart 文件)自动回答安装程序所提出的问题 133 | 134 | >* [hardened-centos7-kickstart](https://github.com/fcaviggia/hardened-centos7-kickstart) 135 | >* [centos-7-kickstart-example](https://github.com/archonik/centos-7-kickstart-example) 136 | 137 | ## 安装程序 —— Anaconda 138 | 139 | * 是由 Python 语言编写的 Linux 安装程序 140 | * Anaconda 是基于Linux平台的应用程序,因此必须先启动一个Linux内核以便运行之 141 | * Anaconda 的三种工作模式 142 | * Update模式 —— 用于安装和更新 143 | * Kickstart模式 —— 用于实现自动安装 144 | * Rescue模式 —— 用于为无法引导的系统故障修复 145 | * Anaconda 的访问界面 146 | * 图形安装界面 —— 默认界面 147 | * 文本安装界面 —— 通过 `inst.text` 启用 148 | * VNC 安装界面 —— 通过 `inst.vnc` 启用 149 | * 使用 `inst.vncconnect=:` 指定主动连接的VNC客户端的主机名或IP地址以及端口号(默认端口号为5900) 150 | * 使用 `inst.vncpassword=` 指定VNC的联机口令 151 | 152 | ## 本地光盘最小化安装 CentOS 7 153 | 154 | * 使用光盘引导系统 155 | * 选择安装过程使用的语言 156 | * 安装信息概要 157 | * 本地化 158 | * 语言 159 | * 日期时间 160 | * 键盘 161 | * 软件 162 | * 安装源 163 | * 软件包选择 164 | * 系统 165 | * 安装位置 166 | * 选择要安装的硬盘并配置分区/逻辑卷布局 167 | * 可以手动或者自动设置 168 | * 引导装载程序配置 169 | * KDUMP:是否启用KDUMP(当系统崩溃时将内存内容导出为磁盘文件) 170 | * 网络和主机名:配置安装后的系统的主机名和网络参数 171 | * 开始安装 172 | * 用户设置 173 | * 设置超级用户 root 的口令 174 | * 添加普通用户并为其设置口令 175 | * 安装完成 176 | -------------------------------------------------------------------------------- /assets/exercises/The-DevOps-Handbook.md: -------------------------------------------------------------------------------- 1 | # DevOps实践指南 2 | > **作者译者**:[美] Gene Kim,Jez Humble,Patrick Debois,John Willis 著,刘征,王磊,马博文,曾朝京 译 3 | > **购买链接**:https://item.jd.com/12350780.html 4 | 5 | ##目录 6 | 7 | ### 第 一部分 DevOps介绍 8 | * 第 1章 敏捷、持续交付和三步法   9 | * 1.1 制造业价值流   10 | * 1.2 技术价值流   11 | * 1.2.1 聚焦于部署前置时间   12 | * 1.2.2 关注返工指标——%C/A   13 | * 1.3 三步工作法:DevOps的基础原则   14 | * 1.4 小结   15 | * 第 2章 第 一步:流动原则   16 | * 2.1 使工作可见   17 | * 2.2 限制在制品数   18 | * 2.3 减小批量大小   19 | * 2.4 减少交接次数   20 | * 2.5 持续识别和改善约束点   21 | * 2.6 消除价值流中的困境和浪费   22 | * 2.7 小结   23 | * 第3章 第二步:反馈原则   24 | * 3.1 在复杂系统中安全地工作   25 | * 3.2 及时发现问题   26 | * 3.3 群策群力,战胜问题获取新知   27 | * 3.4 在源头保障质量   28 | * 3.5 为下游工作中心而优化   29 | * 3.6 小结   30 | * 第4章 第三步:持续学习与实验原则   31 | * 4.1 建立学习型组织和安全文化   32 | * 4.2 将日常工作的改进制度化   33 | * 4.3 把局部发现转化为全局优化   34 | * 4.4 在日常工作中注入弹性模式   35 | * 4.5 领导层强化学习文化   36 | * 4.6 小结   37 | * 4.7 第 一部分总结   38 | ### 第二部分 从何处开始 39 | * 第5章 选择合适的价值流作为切入点   40 | * 5.1 绿地项目与棕地项目   41 | * 5.2 兼顾记录型系统和交互型系统   42 | * 5.3 从最乐于创新的团队开始   43 | * 5.4 扩大DevOps的范围   44 | * 5.5 小结   45 | * 第6章 理解、可视化和运用价值流   46 | * 6.1 确定创造客户价值所需的团队   47 | * 6.2 针对团队工作绘制价值流图   48 | * 6.3 组建专门的转型团队   49 | * 6.3.1 拥有共同的目标   50 | * 6.3.2 保持小跨度的改进计划   51 | * 6.3.3 为非功能性需求预留20%的开发时间,减少技术债务   52 | * 6.3.4 提高工作的可视化程度   53 | * 6.4 用工具强化预期行为   54 | * 6.5 小结   55 | * 第7章 参考康威定律设计组织结构   56 | * 7.1 组织原型   57 | * 7.2 过度职能导向的危害(“成本优化”)   58 | * 7.3 组建以市场为导向的团队(“速度优化”)   59 | * 7.4 使职能导向有效   60 | * 7.5 将测试、运维和信息安全融入日常工作   61 | * 7.6 使团队成员都成为通才   62 | * 7.7 投资于服务和产品,而非项目   63 | * 7.8 根据康威定律设定团队边界   64 | * 7.9 创建松耦合架构,提高生产力和安全性   65 | * 7.10 小结   66 | * 第8章 将运维融入日常开发工作   67 | * 8.1 创建共享服务,提高开发生产力   68 | * 8.2 将运维工程师融入服务团队   69 | * 8.3 为每个服务团队分派运维联络人   70 | * 8.4 邀请运维工程师参加开发团队的会议   71 | * 8.4.1 邀请运维工程师参加每日站会   72 | * 8.4.2 邀请运维工程师参加回顾会议   73 | * 8.4.3 使用看板图展示运维工作   74 | * 8.5 小结   75 | * 8.6 第二部分总结   76 | ### 第三部分 第 一步:流动的技术实践 77 | * 第9章 为部署流水线奠定基础   78 | * 9.1 按需搭建开发环境、测试环境和生产环境   79 | * 9.2 应用统一的代码仓库   80 | * 9.3 使基础设施的重建更容易   81 | * 9.4 运行在类生产环境里才算“完成”   82 | * 9.5 小结   83 | * 第 10章 实现快速可靠的自动化测试   84 | * 10.1 对代码和环境做持续构建、测试和集成   85 | * 10.2 构建快速可靠的自动化测试套件   86 | * 10.2.1 在自动化测试中尽早发现错误   87 | * 10.2.2 尽可能并行地快速执行测试   88 | * 10.2.3 先编写自动化测试   89 | * 10.2.4 尽量将手动测试自动化   90 | * 10.2.5 在测试套件中集成性能测试   91 | * 10.2.6 在测试套件中集成非功能性需求测试   92 | * 10.3 在部署流水线失败时拉下安灯绳   93 | * 10.4 小结   94 | * 第 11章 应用和实践持续集成   95 | * 11.1 小批量开发与大批量合并   96 | * 11.2 应用基于主干的开发实践   97 | * 11.3 小结   98 | * 第 12章 自动化和低风险发布   99 | * 12.1 自动化部署流程   100 | * 12.1.1 应用自动化的自助式部署   101 | * 12.1.2 在部署流水线中集成代码部署   102 | * 12.2 将部署与发布解耦   103 | * 12.2.1 基于环境的发布模式   104 | * 12.2.2 基于应用的发布模式更安全   105 | * 12.3 持续交付和持续部署实践的调查   106 | * 12.4 小结   107 | * 第 13章 降低发布风险的架构   108 | * 13.1 能提高生产力、可测试性和安全性的架构   109 | * 13.2 架构原型:单体架构与微服务   110 | * 13.3 安全地演进企业架构   111 | * 13.4 小结   112 | * 13.5 第三部分总结   113 | ### 第四部分 第二步:反馈的技术实践 114 | * 第 14章 建立能发现并解决问题的遥测系统   115 | * 14.1 建设集中式监控架构   116 | * 14.2 建立生产环境的应用程序日志遥测   117 | * 14.3 使用遥测指导问题的解决   118 | * 14.4 将建立生产遥测融入日常工作   119 | * 14.5 建立自助访问的遥测和信息辐射器   120 | * 14.6 发现和填补遥测的盲区   121 | * 14.6.1 应用程序和业务度量指标   122 | * 14.6.2 基础架构度量指标   123 | * 14.6.3 显示叠加的指标组合   124 | * 14.7 小结   125 | * 第 15章 分析遥测数据以更好地预测故障和实现目标   126 | * 15.1 用均值和标准差识别潜在问题   127 | * 15.2 异常状态的处理和告警   128 | * 15.3 非高斯分布遥测数据的问题   129 | * 15.4 应用异常检测技术   130 | * 15.5 小结   131 | * 第 16章 应用反馈实现安全部署   132 | * 16.1 通过遥测使部署更安全   133 | * 16.2 开发和运维共同承担值班工作   134 | * 16.3 让开发人员跟踪工作对下游的影响   135 | * 16.4 让开发人员自行管理生产服务   136 | * 16.5 小结   137 | * 第 17章 将假设驱动的开发和A/B测试融入日常工作   138 | * 17.1 A/B测试简史   139 | * 17.2 在功能测试中集成A/B测试   140 | * 17.3 在发布中集成A/B测试   141 | * 17.4 在功能规划中集成A/B测试   142 | * 17.5 小结   143 | * 第 18章 建立评审和协作流程以提升当前工作的质量   144 | * 18.1 变更审批流程的危险   145 | * 18.2 “过度控制变更”的潜在危险   146 | * 18.3 变更的协调和排程   147 | * 18.4 变更的同行评审   148 | * 18.5 人工测试和变更冻结的潜在危害   149 | * 18.6 利用结对编程改进代码变更   150 | * 18.7 消除官僚流程   151 | * 18.8 小结   152 | * 18.9 第四部分总结   153 | ### 第五部分 第三步:持续学习与实验的技术实践 154 | * 第 19章 将学习融入日常工作   155 | * 19.1 建立公正和学习的文化   156 | * 19.2 举行不指责的事后分析会议   157 | * 19.3 尽可能广泛地公开事后分析会议结果   158 | * 19.4 降低事故容忍度,寻找更弱的故障信号   159 | * 19.5 重新定义失败,鼓励评估风险   160 | * 19.6 在生产环境注入故障来恢复和学习   161 | * 19.7 创建故障演练日   162 | * 19.8 小结   163 | * 第 20章 将局部经验转化为全局改进   164 | * 20.1 使用聊天室和聊天机器人自动积累组织知识   165 | * 20.2 软件中便于重用的自动化、标准化流程   166 | * 20.3 创建全组织共享的单一源代码库   167 | * 20.4 运用自动化测试记录和交流实践来传播知识   168 | * 20.5 通过确定非功能性需求来设计运维   169 | * 20.6 把可重用的运维用户故事纳入开发   170 | * 20.7 确保技术选型有助于实现组织目标   171 | * 20.8 小结   172 | * 第 21章 预留组织学习和改进的时间   173 | * 21.1 偿还技术债务的制度化惯例   174 | * 21.2 让所有人教学相长   175 | * 21.3 在DevOps会议中分享经验   176 | * 21.4 传播实践的内部顾问和教练   177 | * 21.5 小结   178 | * 21.6 第五部分总结   179 | ### 第六部分 集成信息安全、变更管理和合规性的技术实践 180 | * 第 22章 将信息安全融入每个人的日常工作   181 | * 22.1 将安全集成到开发迭代的演示中   182 | * 22.2 将安全集成到缺陷跟踪和事后分析会议中   183 | * 22.3 将预防性安全控制集成到共享源代码库及共享服务中   184 | * 22.4 将安全集成到部署流水线中   185 | * 22.5 保证应用程序的安全性   186 | * 22.6 确保软件供应链的安全   187 | * 22.7 确保环境的安全   188 | * 22.8 将信息安全集成到生产环境遥测中   189 | * 22.9 在应用程序中建立安全遥测系统   190 | * 22.10 在环境中建立安全遥测系统   191 | * 22.11 保护部署流水线   192 | * 22.12 小结   193 | * 第 23章 保护部署流水线   194 | * 23.1 将安全和合规性集成到变更批准流程中   195 | * 23.2 将大量低风险变更重新归类为标准变更   196 | * 23.3 如何处理常规变更   197 | * 23.4 减少对职责分离的依赖   198 | * 23.5 确保为审计人员和合规人员留存文档和证据   199 | * 23.6 小结   200 | * 23.7 第六部分总结   201 | * 行动起来——本书总结   202 | * 附加材料 203 | * 附 录   204 | * 附录1 DevOps的大融合   205 | * 附录2 约束理论和核心的长期冲突   206 | * 附录3 恶性循环列表   207 | * 附录4 交接和队列的危害   208 | * 附录5 工业安全神话   209 | * 附录6 丰田安灯绳   210 | * 附录7 软件包产品   211 | * 附录8 事后分析会议   212 | * 附录9 猿猴军团   213 | * 附录10 上线时间透明化   214 | * 参考资源   215 | * 致 谢   216 | * EXIN DevOps Professional认证备考指南&模拟题   217 | -------------------------------------------------------------------------------- /overview/technical_document_writing.md: -------------------------------------------------------------------------------- 1 | # 技术文档写作 2 | 3 | ## 技术文档的特点 4 | 5 | * 结构清晰 6 | * 多人协作 (版本控制系统/WIKI) 7 | * 利于回溯 (版本控制系统) 8 | * 程序/脚本 语法加亮显示 9 | * 程序/脚本 可直接 复制粘贴 用于生产环境 10 | * 提供多种格式的文档 (**.html**, .pdf, .epub, .docx/.odt) 11 | 12 | ## 使用排版工具(如:M$ Word)的劣势 13 | 14 | * 不利于回溯 15 | * 不利于多文档搜索 16 | * 不利于 程序/脚本 的语法加亮显示 17 | * 不利于直接复制内容用于生产 18 | * Word 会自以为是的替换许多符号 19 | * Word 会包含许多不可见的控制字符 20 | 21 | >* [LaTex](http://www.latex-project.org/) -- [如何使用 LaTeX 排版论文](https://github.com/tuna/thulib-latex-talk) 22 | 23 | ## 结构化文档的格式 24 | 25 | * [DocBook](http://docbook.org/) 26 | * XHTML/HTML5(CSS) 27 | 28 | * WIKI 标记语言 29 | * 轻量级的文本标记语言 30 | 31 | >#### 结构化数据格式 32 | >* XML 33 | >* JSON 34 | >* YAML 35 | 36 | ## DocBook 37 | 38 | * 使用**语义化标签**的 XML 文档 39 | * 写作和发行过程 40 | * 使用 XML 书写图书源码 41 | * 使用 XSLT 读取 DocBook 的 XSL 文件将 XML 转换成 HTML 42 | * 生成 pdf 等格式 43 | 44 | * 在 Linux 世界里广泛使用 45 | * [The Linux Documentation Project](http://www.tldp.org/) 46 | 47 | >* [DocBook 5: The Definitive Guide](http://tdg.docbook.org/) -- By Norman Walsh , O'Reilly Media 48 | 49 | ## Wiki 50 | 51 | * Wiki 系统 52 | * 将 Wiki 标记语言 转换成 HTML 页面 53 | * 利于**多人协作**,提供**版本控制** 54 | * 如: Dokuwiki, MoinMoin, Mediawiki 55 | * Wiki 标记语言 ([Creole](http://www.wikicreole.org/)) 56 | * [各种 Wiki 系统(包括标记语言)的比较](http://www.wikimatrix.org/) 57 | 58 | ## 轻量级的文本标记语言 59 | 60 | * [MarkDown](http://commonmark.org/help/) -- 使用广泛 61 | * 方言:[GFM](https://help.github.com/articles/github-flavored-markdown) 62 | * [reStructuredText](http://docutils.sourceforge.net/rst.html) -- Pythoner 的钟爱 63 | * [AsciiDoc](http://www.methods.co.nz/asciidoc/) -- 基于文本标记语言的 DocBook 实现,基本实现了 DocBook 的语义表达 64 | * [AsciiDoc cheatsheet](http://powerman.name/doc/asciidoc) 65 | * 方言:[asciidoctor](http://asciidoctor.org) 66 | * [AsciiDoc Syntax Quick Reference](http://asciidoctor.org/docs/asciidoc-syntax-quick-reference/) 67 | * 各种标记语言格式之间的转换工具 68 | * http://pandoc.org/ 69 | * 在线转换:http://pandoc.org/try/ 70 | 71 | ## 技术文档的写作方式 72 | 73 | >**像写代码一样的方式写文档** 74 | 75 | * 使用文本标记语言书写文档内容 76 | * 使用**纯文本编辑器** -- 如:Nodepad++, Editplus,Vim 等 77 | * 使用程序员偏爱的代码编辑器及其标记语言插件 -- 如:[Atom](https://atom.io/),[Sublime Text](https//www.sublimetext.com) 等 78 | * MarkDown 专用编辑器 -- 如: [MarkdownPad2](http://markdownpad.com/)、[Typora](https://typora.io/) 79 | * [14 Best Markdown Editors for Linux](https://itsfoss.com/best-markdown-editors-linux/) 80 | * AsciiDoc 专用编辑器 -- 如: [AsciiDocFX](http://www.asciidocfx.com/) 81 | * 使用文档格式转换工具(类此与对程序语言进行编译) 82 | * 生成 HTML、PDF 等格式的文件 83 | * 将文档内容纳入版本控制系统 84 | * 记录修改历史并提供回溯 85 | * 多人协作 86 | 87 | >#### 使用文档标记语言的 图书/文档 案例 88 | >* [Front-End Developer Handbook 2017](https://github.com/FrontendMasters/front-end-handbook-2017) -- MarkDown 89 | >* [readthedocs.org docs](https://github.com/rtfd/readthedocs.org/tree/master/docs) -- reStructuredText 90 | >* [ProGit 2nd ed](https://github.com/progit/progit2/) -- Asciidoc 91 | 92 | ## 版本控制系统 93 | 94 | * [Git](http://git-scm.com) 95 | * 代码托管服务(程序员的 SNS 社区) 96 | * [github](https://github.com) 97 | * [bitbucket](https://bitbucket.org) 98 | * [码云@oschina](http://git.oschina.net/) 99 | * https://code.csdn.net/ 100 | * 图书/文档 托管服务 101 | * [gitbook](https://www.gitbook.com) -- https://help.gitbook.com/ 102 | * [readthedocs](https://readthedocs.org/) -- https://docs.readthedocs.io/ 103 | * [看云](https://www.kancloud.cn/) -- http://help.kancloud.cn/ 104 | 105 | > SNS: Social Network Service 106 | 107 | ## git 和 github 108 | 109 | * 学习 git 参考 110 | * [为啥 Git 最棒](http://zh-cn.whygitisbetterthanx.com/) 111 | * [git 简易指南](http://rogerdudler.github.com/git-guide/index.zh.html) 112 | * [git-recipes](https://github.com/geeeeeeeeek/git-recipes/wiki) 113 | * [git 教程](https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000) 114 | * [git 魔法](http://www-cs-students.stanford.edu/~blynn/gitmagic/intl/zh_cn/) -- [git](https://github.com/blynn/gitmagic) 115 | * [10篇写给Git初学者的最佳教程](http://www.cnblogs.com/JoannaQ/p/3302544.html) -- [Top 10 Git Tutorials for Beginners](https://www.webpagefx.com/blog/web-design/git-tutorials-beginners/) 116 | * [Git Cheat Sheet & Git Flow](https://github.com/arslanbilal/git-cheat-sheet#readme) 117 | * [Git Book](https://git-scm.com/book/zh/v2) 118 | * 学习 Github 参考 119 | * [《如何高效利用GitHub》](http://www.yangzhiping.com/tech/github.html) 120 | * [《Got GitHub》(蒋鑫)](http://www.worldhello.net/gotgithub/) 121 | * [GitHub Cheat Sheet](https://github.com/tiimgreen/github-cheat-sheet) 122 | * [The GitHub Help](http://help.github.com/) 123 | * * [Categories / GitHub Pages Basics](https://help.github.com/categories/github-pages-basics/) 124 | * [《GitHub入门与实践》([日]大塚弘记)](https://item.jd.com/11733256.html) 125 | * [《完全学会Git GitHub Git Server的24堂课》(孙宏明)](https://item.jd.com/11974446.html) 126 | 127 | ## 将一组文档构建成网站 128 | 129 | * 选择你偏爱的静态网站生成工具 130 | * [staticgen](http://www.staticgen.com/) 131 | * [staticsitegenerators](https://staticsitegenerators.net/) 132 | * BLOG 133 | * [Pelican](http://blog.getpelican.com/)(Python) 134 | * [Jekyll](http://jekyllrb.com/) / [Octopress](http://octopress.org/) (Ruby) 135 | * [Hugo](http://gohugo.io/)(Go) 136 | * [**Hexo**](http://hexo.io/)(Javascript) 137 | * BOOK 138 | * [**gitbook**](https://toolchain.gitbook.com/) 139 | * 解析器 -- 基于 Node.js 语言的 gitbook 140 | * 支持的文档标记语言 -- Markdown([GFM](https://help.github.com/articles/github-flavored-markdown))、**AsciiDoc** 141 | * 支持的版本控制系统 -- Git 142 | * [Read The Docs](http://docs.readthedocs.io/en/latest/) 143 | * 解析器 -- 基于 Python 语言的 [Sphinx](http://www.sphinx-doc.org) 144 | * 支持的文档标记语言 -- Markdown ([CommonMark](http://commonmark.org/))、**reStructuredText** 145 | * 支持的版本控制系统 -- Subversion, Bazaar, Git, and Mercurial 146 | 147 | >#### Markdown to Slide 148 | >**Slide** (HTML+CSS+JavaScript) 149 | > * [md2googleslides](https://github.com/googlesamples/md2googleslides) 150 | > * [slideshow](https://github.com/slideshow-s9/slideshow) 151 | 152 | 153 | 154 | -------------------------------------------------------------------------------- /ch07/guidelines.md: -------------------------------------------------------------------------------- 1 | # CH07 - 教学指导 2 | 3 | ## 教学模块和知识点 4 | 5 | > 1. 可以作为教师教学和考试出题的依据。 6 | > 2. 可以作为学生学习的依据。 7 | 8 | ### 模块209 - 系统监视 9 | 10 | | 编号 | 知识点 | 掌握程度 | 上机操作 | 11 | | ------ | ------------------------------------------------- | -------- | -------- | 12 | | 209-01 | 影响系统性能的因素 | 理解 | | 13 | | 209-02 | 性能分析标准的经验准则 | 理解 | | 14 | | 209-03 | `nload`、`top`/`htop`、`dstat` | 掌握 | 是 | 15 | | 209-04 | `uptime`、`vmstat`/`free` | 掌握 | 是 | 16 | | 209-06 | `mpstat`、`iostat` 和 `sar` 的运作机制 | 理解 | | 17 | | 209-05 | `nload`/`bmon`、`nethogs`/`iftop`/`iptraf` | 掌握 | 是 | 18 | | 209-07 | Nagios+Cacti | 了解 | | 19 | | 209-08 | Zabbix | 了解 | | 20 | | 209-09 | [netdata](https://github.com/firehol/netdata) | 了解 | | 21 | | 209-10 | 系统日志分析平台 rsyslog+LogAnalyzer | 了解 | | 22 | | 209-11 | 日志分析平台 ELK (ElasticSearch+Logstash+Kibana) | 了解 | | 23 | 24 | 25 | ### 模块210 - 内核管理 26 | 27 | | 编号 | 知识点 | 掌握程度 | 上机操作 | 28 | | ------ | -------------------------------- | -------- | -------- | 29 | | 210-01 | 显示内核相关的信息 | 掌握 | 是 | 30 | | 210-02 | 内核的重要组件 | 理解 | | 31 | | 210-03 | 管理内核模块 | 理解 | | 32 | | 210-04 | 安全升级内核 | 掌握 | 是 | 33 | | 210-05 | /proc 和 /sys 虚拟文件系统 | 理解 | | 34 | | 210-06 | 调整内核参数(/proc 和 sysctl) | 掌握 | 是 | 35 | 36 | 37 | ### 模块211 - 系统引导与启动过程 38 | 39 | 40 | | 编号 | 知识点 | 掌握程度 | 上机操作 | 41 | | ------ | ------------------------------------------------ | -------- | -------- | 42 | | 211-01 | GURB2 及其功能 | 理解 | | 43 | | 211-02 | GRUB2 的操作界面 | 掌握 | | 44 | | 211-03 | GRUB2 的配置文件 | 了解 | | 45 | | 211-04 | 使用 `grub2-mkconfig` 工具生成 GRUB2 的配置文件 | 掌握 | 是 | 46 | | 211-05 | 使用 `grub2-install` 重新安装 GRUB2 | 掌握 | 是 | 47 | | 211-06 | 制作和使用 GRUB2 启动U盘 | 了解 | 是* | 48 | | 211-07 | 基于 Systemd 的系统启动过程 | 理解 | | 49 | | 211-08 | 基于 sysVinit 的系统启动过程 | 了解 | | 50 | | 211-09 | 基于 upstart 的系统启动过程 | 了解 | | 51 | 52 | 53 | ### 模块212 - Systemd 54 | 55 | | 编号 | 知识点 | 掌握程度 | 上机操作 | 56 | | ------ | ------------------------------------------- | -------- | -------- | 57 | | 212-01 | Systemd 的特性 | 理解 | | 58 | | 212-02 | Systemd 的激活机制 | 理解 | | 59 | | 212-03 | Systemd 的组件 | 理解 | | 60 | | 212-04 | Systemd 的单元及其类型 | 理解 | 是 | 61 | | 212-05 | Systemd 单元配置文件 | 了解 | | 62 | | 212-06 | Systemd 单元的依赖关系 | 了解 | | 63 | | 212-07 | Systemd 的目标 | 理解 | | 64 | | 212-08 | Systemd 的目标与运行级别 | 理解 | 是 | 65 | | 212-09 | 管理 Systemd 的默认目标 | 掌握 | 是 | 66 | | 212-10 | 使用 systemd-analyze 分析启动过程性能 | 掌握 | 是 | 67 | | 212-11 | 使用 journalctl 命令查看日志 | 掌握 | 是 | 68 | | 212-12 | 配置使用 systemd-journald 的日志持久化存储 | 掌握 | 是 | 69 | | 212-13 | systemd 与 Cgroup | 了解 | | 70 | 71 | 72 | 73 | ### 模块213 - 备份管理 74 | 75 | | 编号 | 知识点 | 掌握程度 | 上机操作 | 76 | | ------ | --------------------------------------- | -------- | -------- | 77 | | 213-01 | 备份与恢复 | 理解 | | 78 | | 213-02 | 备份介质的选择 | 理解 | | 79 | | 213-03 | 备份策略与恢复顺序 | 理解 | | 80 | | 213-04 | 选择备份内容 | 理解 | | 81 | | 213-05 | 备份注意事项 | 理解 | | 82 | | 213-06 | 使用 cp、tar、dd、rsync 等命令实施备份 | 掌握 | 是 | 83 | | 213-07 | 使用 rsnapshot 工具实现快照型备份 | 掌握 | 是 | 84 | | 213-08 | 基于 LVM 逻辑卷快照的备份 | 了解 | | 85 | | 213-09 | 使用 lsyncd 实现实时同步 | 掌握 | 是 | 86 | | 213-10 | 制作 ISO 文件与光盘刻录 | 了解 | 是* | 87 | 88 | 89 | ### 模块214 - 故障排查 90 | 91 | | 编号 | 知识点 | 掌握程度 | 上机操作 | 92 | | ------ | ----------------------------------------------- | -------- | -------- | 93 | | 214-01 | 使用 安装光盘/LiveCD 进入援救环境(**rescue**) | 掌握 | 是 | 94 | | 214-02 | 使用 光盘/LiveCD 援救环境修复系统启动故障 | 掌握 | 是 | 95 | | 214-03 | 进入 Systemd 的 `rescue`/`emergency` 目标 | 掌握 | 是 | 96 | | 214-04 | 为内核传递 `rd.break` 参数中断 systemd 的执行 | 掌握 | 是 | 97 | | 214-05 | 修复 root 口令丢失故障 | 掌握 | 是 | 98 | | 214-06 | 修复 分区/LVM、文件系统故障 | 掌握 | 是 | 99 | | 214-07 | 修复软件包故障 | 掌握 | 是 | 100 | | 214-08 | 修复网络故障 | 掌握 | 是 | 101 | 102 | 103 | ## 本章学习材料 104 | 105 | * **教材和课件 第7章** 106 | * linux.vbird.org 107 | * [開機流程、模組管理與 Loader](http://linux.vbird.org/linux_basic/0510osloader.php) 108 | * [認識系統服務](http://linux.vbird.org/linux_basic/0560daemons.php) 109 | * [伺服器硬體資料的收集](http://linux.vbird.org/linux_basic/0610hardware.php#hw) 110 | * [備份要點&種類、頻率與工具的選擇](http://linux.vbird.org/linux_basic/0610hardware.php#backup_hint) 111 | * [檔案與檔案系統的壓縮,打包與備份](http://linux.vbird.org/linux_basic/0240tarcompress.php) 112 | * [Linux 網路偵錯](http://linux.vbird.org/linux_server/0150detect_network.php) 113 | * 马哥教育 视频 114 | * [Linux培训教程--高级监控系统cacti+nagios](http://edu.51cto.com/course/course_id-460.html) 115 | * LinuxCast 116 | * [每日播客](http://study.163.com/course/courseMain.htm?courseId=221001) -------------------------------------------------------------------------------- /ch01/lecture_notes_01-03.md: -------------------------------------------------------------------------------- 1 | # CH01U03 —— 初入 Linux 2 | 3 | ## Linux 工作界面 4 | 5 | * 字符界面(**CLI**:Command Line Interface) 6 | * **bash** 7 | * zsh 8 | * sh 9 | * 图形界面(**GUI**:Graphic User Interface) 10 | * [Gnome 桌面环境](http://www.gnome.org/) 11 | * [Unity 桌面环境](http://unity.ubuntu.com/) 12 | * [MATE 桌面环境](http://www.mate-desktop.org/) 13 | * [Cinnamon 桌面环境](http://cinnamon.linuxmint.com/) 14 | * [KDE 桌面环境](http://www.kde.org/) 15 | * [Trinity 桌面环境](http://www.trinitydesktop.org/) 16 | * [Xfce 桌面环境](http://www.xfce.org/) 17 | * [LXDE 桌面环境](http://www.lxde.org/) 18 | * …… 19 | 20 | > 可以在 http://www.freedesktop.org/wiki/Desktops/ 了解其他开源桌面系统。 21 | 22 | ## 为什么使用字符工作方式 23 | 24 | * 在字符操作方式下可以高效地完成所有的任务,尤其是系统管理任务。 25 | * 系统管理任务通常在远程进行,而远程登录后进入的是字符工作方式。 26 | * 由于使用字符界面不用启动图形工作环境,大大地节省了系统资源开销。 27 | 28 | ## 进入字符工作界面的方法 29 | 30 | * 在图形环境下开启终端窗口进入字符工作方式。 31 | * 在系统启动后直接进入字符工作方式。 32 | * 使用远程登录方式(SSH)进入字符工作方式。 33 | 34 | ## 终端类型 35 | * 物理终端:直接接入本机的显示器和键盘设备 (控制台) /dev/console 36 | * 虚拟终端:附加在物理终端之上的以软件方式虚拟实现的终端 /dev/ttyN 37 | * 模拟终端(伪终端):图形界面下打开的命令行接口设备;基于 ssh 或 telnet 协议等远程打开的设备 /dev/pts/N 38 | * 串行终端: /dev/ttySN 39 | 40 | ## 字符界面登录与注销 41 | 42 | * 虚拟控制台(Virtual Console) 43 | * 系统默认提供了6个虚拟控制台。每个虚拟控制台可以独立的使用,互不影响。 44 | * 使用Alt+F1~Alt+F6进行多个虚拟控制台之间的切换 45 | * 使用登录名和口令登录 46 | * 超级用户登录后的操作提示符是“#” 47 | * 普通用户登录后的操作提示符是“$” 48 | * 每个用户都有一个存放个人文件的主目录 49 | * 注销 50 | * logout/exit 命令 51 | * Ctrl+d 热键 52 | 53 | ## ssh 登录远程 54 | 55 | * ssh 是英文 Secure Shell 的缩写。 56 | * 用户在通过ssh连接到远程系统时在网络上传输的口令和数据都是经过加密的,因此更加安全。 57 | * Linux 58 | ssh osmond@192.168.1.100 59 | ssh osmond@192.168.1.100 date 60 | * Windows 61 | * 使用 [git for windows](git-for-windows.github.io) 中集成的 OpenSSH 客户端 62 | * Windows 下的 gcc 编译环境 [mingw64](http://mingw-w64.org/) 或 [mingw](http://mingw.org/) 63 | * 使用 GUI 工具 64 | * **putty** - http://www.chiark.greenend.org.uk/~sgtatham/putty/ 65 | * SecureCRT - http://www.vandyke.com/products/securecrt/ 66 | * Xshell - http://www.netsarang.com/products/xsh_overview.html 67 | 68 | ## 当前工作目录 69 | 70 | * 每个 shell 和系统进程都有一个当前工作目录(current working directory,cwd) 71 | * shell 初始的当前工作目录 72 | * 超级用户:/root 73 | * 普通用户:/home/ 74 | * 随着用户使用 cd 命令在文件系统中切换目录,可以使用 75 | * pwd -- 显示 shell 当前工作目录的绝对路径 76 | 77 | ## 超级用户 78 | 79 | * 超级用户(root):特殊的管理帐号 80 | * root 具有对系统全部地控制能力 81 | * 另一方面也具有对系统破坏的无限能力 82 | * 除非必要,尽量不要登录为 root 账户 83 | * 普通(无特权,unprivileged)用户的系统破坏能力有限 84 | 85 | ## 成为超级用户 86 | 87 | * $ `su -` : 新建一个 root 身份执行的 shell 88 | * $ `sudo COMMAND`:以 root 用户身份运行命令 89 | * 需要被系统管理员事先配置 90 | * 默认地,wheel 组中的用户皆可使用 sudo 91 | 92 | ## 命令类型 93 | 94 | * 内置命令 95 | * 由 Shell 自身解析执行的命令 96 | * 外置命令 97 | * 存执在文件系统路径下的可执行文件 98 | * 执行时 在 `PATH` 环境变量指定的路径中**依次**搜寻 99 | * 显示命令的存储路径 100 | * `which COMMAND` 101 | * `whereis COMMAND` 102 | 103 | > 显示命令类型 `type COMMAND` 104 | 105 | ## 命令格式 106 | 107 | COMMAND [OPTIONS...] [ARGUMENTS...] 108 | 109 | * 选项:指定使用命令的某个或某些功能 110 | * 短选项(单字符选项)前使用 `-`, 如: `-l` `-h` 111 | * 多个短选项前可使用一个 `-` , 如: `-lh` 112 | * 长选项(单词选项)前使用 -- 113 | * 如: `--help` , `--human-readable` 114 | * 参数:指定命令的操作对象 115 | 116 | > 命令名、多个选项、以及多个操作对象之间都用空格间隔 117 | 118 | # 几个简单命令 119 | 120 | * date 121 | * cal 122 | * cat 123 | * echo 124 | * passwd 125 | * pwd 126 | * type 127 | 128 | ## 命令帮助 129 | 130 | * 使用 --help 命令选项 131 | * `COMMAND` **--help** 132 | * 内置命令 133 | * `help` 134 | * `help COMMAND` 135 | * 外部命令 136 | * `man [1-8] COMMAND` 137 | * `info COMMAND` 138 | 139 | ## man 手册中的常见段落 140 | 141 | * NAME 142 | * SYNOPSIS 143 | * **[]**: 可选内容 144 | * **<>**: 必选内容 145 | * **a|b**: 二选一 146 | * **...**: 同一内容可出现多次 147 | * DESCRIPTION 148 | * OPTIONS 149 | * EXAMPLES 150 | * ENVIRONMENT 151 | * AUTHOR 152 | * REPORTING BUGS 153 | * SEE ALSO 154 | 155 | ## man 的章节 156 | 157 | * man1: 用户命令 158 | * man2: 系统调用 159 | * man3: C库调用 160 | * man4: 设备文件及特殊文件 161 | * man5: 配置文件格式 162 | * man6: 游戏 163 | * man7: 杂项 164 | * man8: 管理类的命令 165 | 166 | ## man 的操作 167 | 168 | * `空格键` 或 `PgDn`:向下滚动一屏;`PgUp`:向上滚动一屏 169 | * `下箭头`:向下滚动一行;`上箭头`:向上滚动一行 170 | * `/string` : 向下搜索字符串 string 171 | * n:继续向下搜索;N:继续向上搜索 172 | * `?string` : 向上搜索字符串 string 173 | * n:继续向上搜索;N:继续向下搜索 174 | * `g`:跳转到手册首行;`G`:跳转到手册末行 175 | * `q`:退出手册,返回Shell提示符 176 | 177 | >**man手册的操作** 与 `less` 命令的操作键兼容 178 | 179 | ## man 搜索 180 | 181 | * 显示 man 命令在何处查找手册 182 | * `manpath` 183 | * 安装最小化安装未安装的 man-pages 184 | * `yum -y install man-pages` 185 | * 创建 man 索引数据库文件 186 | * `mandb -c` 187 | * `mandb` 的配置文件:/etc/man_db.conf 188 | * 从 man 的索引数据库中查找信息(精确匹配) 189 | * `whatis KEYWORD` 190 | * 从 man 的索引数据库中查找信息(模糊匹配) 191 | * `apropos KEYWORD` 或 `man -k KEYWORD` 192 | 193 | >**比较 whatis 和 apropos** 194 | >* `whatis ls` 195 | >* `apropos ls` 或 `man -k ls` 196 | 197 | 198 | ## info 命令 199 | 200 | * 和 man 命令相似,但它提供的信息更加深入 201 | * 不带任何参数运行 info 会列举所有项目 202 | * info 信息页的结构和网页相似 203 | * 每页都被分成“节点” 204 | * 到节点的链接又一个前缀“*” 205 | * `info [命令]` 206 | 207 | ## 浏览信息(info)页 208 | 209 | * 在查看 info 信息页时: 210 | * 使用箭头键、PgUp、 PgDn 来浏览 211 | * Tab 会转移到下一个链接 212 | * Enter 会转移到选中的链接 213 | * n/p /u 会转到下一个/前一个/  上一级节点 214 | * s 文本 搜索文本(默认为前一个搜索项目) 215 | * q 会退出 info 程序 216 | 217 | 218 | ## 安装必要的软件并更新系统 219 | 220 | * 安装软件 `yum -y install` 221 | * 检查更新 `yum check-update` 222 | * 更新系统 `yum -y update` 223 | 224 | ``` 225 | # yum -y install lshw pciutils usbutils bash-completion vim-enhanced tree psmisc net-tools 226 | ``` 227 | 228 | ## 获取系统基本信息 229 | 230 | * 显示硬件信息 231 | * lshw 232 | * lscpu 233 | * lspci/lsusb 234 | * 显示系统信息 235 | * cat /etc/system-release 236 | * uname -r 237 | * dmesg 238 | * lsblk 239 | * df -hP 240 | * free -m 241 | * swapon -s 242 | * localectl 243 | * timedatectl 244 | * hostnamectl 245 | * ip addr show 246 | * ip route show 247 | 248 | ## 系统基本设置 249 | 250 | * 设置语言支持 251 | * `localectl set-locale LANG="zh_CN.UTF-8"` 252 | * 设置系统时区 253 | * `timedatectl set-timezone Asia/Shanghai` 254 | * 设置日期 和/或 时间 255 | * `timedatectl set-time 2017-08-15` 256 | * `timedatectl set-time 20:08:08` 257 | * `timedatectl set-time '2017-08-15 20:08:08'` 258 | * 设置主机名 259 | * `hostnamectl set-hostname cl7h1.olabs.lan` 260 | * 配置 防火墙 的 启用/禁用 261 | * `systemctl stop firewalld.service` 262 | * `systemctl disable firewalld.service` 263 | * 配置 SELinux 的 启用/禁用 264 | * `sed -i 's/SELINUX=.*/SELINUX=disabled/' /etc/selinux/config` 265 | 266 | ## 关机 和 重启 267 | 268 | * sync 269 | * 将文件系统的缓存内容强制写入硬盘中 270 | * 关机 271 | * systemctl poweroff 272 | * poweroff 273 | * shutdown -h now 274 | * 重启 275 | * systemctl reboot 276 | * reboot 277 | * shutdown -r now 278 | 279 | ## shutdown 命令 280 | 281 | * 语法 282 | shutdown [选项] time [警告信息] 283 | * time 284 | * hh:mm 285 | * +m 286 | * now(+0) 287 | * -t sec: 表示给进程发送警告和杀死信号之间的秒数 288 | * -r/-h:重启/关机 289 | * -k:仅发出信息给所有用户,但并不会真正关机 290 | * -c:取消前一个后台运行的 shutdown 命令 291 | * -F/-f:重新启动时**强制/禁止**运行 fsck 292 | * 举例 293 | # shutdown –h +5 “System will be down in 5 minites, Please save your work.” 294 | -------------------------------------------------------------------------------- /ch04/experiment_04-01.md: -------------------------------------------------------------------------------- 1 | # 实验指导 4 - 本地存储管理 2 | 3 | >#### 学习目标 4 | > * 分区工具 5 | > * 使用 `fdisk`/`cfdisk` 管理 MBR 分区 6 | > * 使用 `**gdisk**`/`cgdisk` 管理 GPT 分区 7 | > * 使用 `parted` 管理 MBR/GPT 分区 8 | > * 使用 `partx`/`kpartx` 通知内核强制重读磁盘分区表 9 | > * 文件系统管理 10 | > * 使用 `mkfs.{ext4,xfs}` 创建文件系统 11 | > * 使用 `mount`/`umount` 挂装/卸装 文件系统 12 | > * 使用 `fuser` 终止所有正在访问某挂载点的进程 13 | > * 使用 `blkid` 命令显示文件系统的 卷标/UUID 14 | > * 修改 `/etc/fstab` 在系统启动时挂装文件系统 15 | > * 使用 `mkswap`、`swapon`/`swapoff` 管理交换空间 16 | > * 使用 `fsck`/`xfs_repair` 检查和修复文件系统 17 | > * 磁盘/文件系统常用工具 18 | > * `dd`、`df`、`du` 19 | > * `find` 20 | > * 磁盘限额 21 | > * 使用 `setquota` 或 `edquota` 配置 ext3/4 文件系统的磁盘限额 22 | > * 使用 `xfs_quota` 配置 xfs 文件系统的磁盘限额 23 | > * 逻辑卷管理 24 | > * 使用 `{pv,vg,lv}create` 创建 物理卷/卷组/逻辑卷 25 | > * 使用 `{pv,vg,lv}{s,display}` 查看 物理卷/卷组/逻辑卷 26 | > * 使用 `{vg,lv}{extend,reduce}` 扩展和收缩 卷组/逻辑卷 27 | > * 使用 `resize2fs` 扩展和收缩 ext 文件系统 28 | > * 使用 `xfs_growfs` 扩展 xfs 文件系统 29 | 30 | 31 | ## 任务1:磁盘分区 32 | 33 | * 为虚拟机添加一块 20G 大小的硬盘 34 | * 为磁盘设置 GPT 分区表 35 | * 添加 3 个分区,分别为 36 | * 5G, Linux 分区类型 37 | * 3G, Linux 分区类型 38 | * 1G,swap 分区类型 39 | * 在不重启系统的前提下,让 Linux 内核重新读取新硬盘的分区表 40 | 41 | >##### 参考 42 | > 43 | >* https://wiki.archlinux.org/index.php/Partitioning 44 | >* https://wiki.archlinux.org/index.php/Fdisk 45 | 46 | 47 | ## 任务2:创建和 挂装/卸装 文件系统 48 | 49 | * 在大小为 5G 的分区上创建 xfs 文件系统 50 | * 在大小为 3G 的分区上创建 ext4 文件系统 51 | * 创建两个文件系统挂装点 /mnt/{xfs,ext4} 52 | * 将大小为 5G 的文件系统手动挂装到 /mnt/xfs 53 | * 将大小为 3G 的文件系统手动挂装到 /mnt/ext4 54 | * 检查文件系统的挂装情况 55 | * 复制 /usr 整个目录的内容到 /mnt/xfs 56 | * 进入 /mnt/ext4 目录,将 /etc 整个目录的内容复制到当前目录 57 | * 使用 fuser 命令分别查看两个挂装点目录下有无进行在运行 58 | * 分别手动卸装 /mnt/{xfs,ext4} 59 | 60 | ## 任务3:交换空间 61 | 62 | * 交换分区 63 | * 在大小为 1G 的分区上创建 swap 空间 64 | * 查看当前 swap 空间大小 65 | * 激活大小为 1G 的 swap 空间 66 | * 查看当前 swap 空间大小 67 | * 去激活大小为 1G 的 swap 空间 68 | * 查看当前 swap 空间大小 69 | * 交换文件 70 | * 创建一个大小为 512M 的交换文件 71 | * 为此交换文件创建 swap 空间 72 | * 查看当前 swap 空间大小 73 | * 激活交换文件上的 swap 空间 74 | * 查看当前 swap 空间大小 75 | * 去激活交换文件上的 swap 空间 76 | * 查看当前 swap 空间大小 77 | 78 | ## 任务4:配置系统启动时挂装 79 | 80 | * 将大小为 5G 的 xfs 文件系统挂装到 /data(使用文件系统UUID) 81 | * 将大小为 3G 的 ext4 文件系统挂装到 /srv 82 | * 激活大小为 1G 的交换分区 83 | * 模拟系统启动,检查文件系统和交换分区的挂装情况 84 | 85 | ## 任务5:挂装 iso 文件 86 | 87 | * 下载一个 iso 文件 88 | wget -c http://www.tinycorelinux.net/8.x/x86/release/Core-current.iso 89 | * 创建 /mnt/iso 挂装点 90 | * 将 iso 文件只读挂装到 /mnt/iso 91 | * 显示挂装点目录的内容 92 | * 解除挂装 93 | 94 | 95 | ## 任务6:使用 dd 命令将 iso 文件的内容写入U盘 96 | 97 | >**提示** 本任务使用虚拟块设备模拟了一个 16M 大小的 U盘 98 | 99 | * 准备 loop 设备 100 | # dd if=/dev/zero of=/tmp/vdisk1.dd bs=1M count=16 101 | # losetup -fP /tmp/vdisk1.dd 102 | # losetup -a 103 | /dev/loop0: [64768]:4221244 (/tmp/vdisk1.dd) 104 | # lsblk -io NAME,TYPE,SIZE,MOUNTPOINT,FSTYPE,MODEL| egrep 'loop|^NAME' 105 | * 准备 iso 文件 106 | # wget http://www.tinycorelinux.net/8.x/x86/release/Core-current.iso 107 | * 将 iso 文件的内容写入虚拟块设备 108 | # dd if=Core-current.iso of=/dev/loop0 109 | # lsblk -io NAME,TYPE,SIZE,MOUNTPOINT,FSTYPE,MODEL| egrep 'loop|^NAME' 110 | * 检查写入的虚拟块设备(U盘)内容 111 | * 将虚拟块设备 挂装到 /mnt/iso 112 | * 显示挂装点内容 113 | * 解除挂装 114 | 115 | ## 任务7:文件系统检查和修复 116 | 117 | >**对挂装点 /data 和 /srv 分别进行如下操作 118 | 119 | * 手动卸装文件系统 120 | * 检查文件系统 121 | * 向挂装点对应的分区里写入连续随机数据,模拟分区损坏 122 | * 越过 100 块,像设备写入 10 块(每块 512 字节)数据 123 | * 检查文件系统 124 | * 修复文件系统 125 | * 重新挂装文件系统,并查看分区中的原有数据 126 | 127 | ## 任务8:df 和 du 命令 128 | 129 | * 显示 /etc 目录中每个文件的磁盘占用 130 | * 显示 /etc 目录总共占用了多少 131 | * 显示 xfs 和 ext4 文件系统的剩余空间 132 | * 显示除了 tmpfs 之外,所有文件系统的剩余空间,并按照使用率降序输出 133 | 134 | ## 任务9: find 命令 135 | 136 | * 查找 /var 目录下属主为root,且属组不为 root 的所有文件或目录 137 | * 查找 /var 目录下属主为root,且属组不为 root 的所有常规文件 138 | * 查找 /bin /sbin 目录下所有 设置了 SUID 或 SGID 的文件 139 | * 查找 /etc 目录下最近一周内修改过其内容且大小小于 2k 的文件 140 | * 查找当前系统上没有属或属组,且最近一周内曾被访问过的文件或目录 141 | * 查找 /etc 目录下所有用户都没有写权限的文件 142 | * 查找 /etc 目录下至少有一类用户没有执行权限的文件 143 | * 删除 /tmp/test 目录下 30 天前 60 天内修改的文件 144 | * 删除 /tmp/test 目录下 30 天前修改的文件 145 | * 复制 两周之前早 9:00 到两月之前 19:00 点之间修改的文件 到 /backup/1目录下 146 | 147 | 148 | > **提示** 可以使用如下脚本在 /tmp/test 目录下先随机生成 200 个 100 天以内的文件,再使用 find 命令按时间戳查找和删除 149 | ``` 150 | #!/bin/bash 151 | [ -d "/tmp/test" ] || mkdir /tmp/test 152 | for d in $(shuf -i $(date +%s -d '-100 days')-$(date +%s) -n 200) 153 | do 154 | time=$(date -d "@$d" +%F) 155 | touch -d "$time" /tmp/test/file_$time 156 | done 157 | ``` 158 | 159 | ## 任务10:创建基于新硬盘上的卷组和逻辑卷 160 | 161 | 1. 为逻辑卷准备新的分区 162 | * 为虚拟机添加第3块 10G 大小的新硬盘(/dev/sdc) 163 | * 为磁盘设置 GPT 分区表 164 | * 使用全部空间添加 1 个分区,类型为 8e00 165 | * 在不重启系统的前提下,让 Linux 内核重新读取新硬盘的分区表 166 | 2. 管理LVM 167 | * 在新建的分区上创建物理卷 168 | * 基于此物理卷创建名为 db 的逻辑卷 169 | * 在 db 卷组中创建名为 mysql 的逻辑卷,大小使用全部FREE 170 | 3. 管理基于 LVM 上的文件系统 171 | * 对名为 mysql 的逻辑卷创建 ext4 文件系统 172 | * 创建挂装点目录 /var/lib/mysql 173 | * 修改 /etc/fstab 设置对此逻辑卷的启动时挂载 174 | * 重新挂在 /etc/fstab 中的文件系统,检查挂装情况 175 | 176 | 177 | ## 任务11:扩展现有的卷组和逻辑卷 178 | 179 | 1. 为系统中已经存在的 home 逻辑卷准备新的分区 180 | * 在第2块硬盘(/dev/sdb)上,使用全部剩余空间添加 1 个分区,类型为 8e00 181 | * 重启系统,使得 Linux 内核重新读取硬盘的新分区表 182 | 2. 管理LVM 183 | * 在新建的分区上创建物理卷 184 | * 将此物理卷扩展到 home 逻辑卷所在的卷组中 185 | * 扩展名为 home 的逻辑卷,大小为 8G 186 | 3. 扩展逻辑卷上的 xfs 文件系统 187 | 4. 若安装 CentOS 时没有使用硬盘的所有空间,请将剩余的所有空间加到 / 文件系统所在的卷组中 188 | 189 | ## 任务12:缩减逻辑卷 190 | 191 | 1. 解除对 mysql 逻辑卷 的挂装 192 | 2. 强行检查 mysql 逻辑卷上的 ext4 文件系统 193 | 3. 将 mysql 逻辑卷缩减至原始大小的 50% 194 | 4. 缩减 mysql 逻辑卷上的 ext4 文件系统使之适应逻辑卷的新大小 195 | 5. 重新挂装 mysql 逻辑卷 196 | 6. 检查 mysql 逻辑卷上文件系统的大小 197 | 198 | ## 任务13*:逻辑卷快照 199 | 200 | 1. 在 mysql 逻辑卷的挂装点目录里创建一个测试文件,如: 201 | lvs > /var/lib/mysql/test 202 | cat /var/lib/mysql/test 203 | 2. 对 mysql 逻辑卷创建名为 mysql_snap 的只读快照卷,大小为 1G 204 | 3. 将快照卷 mysql_snap 挂装到 /lvmsnap/mysql 目录 205 | 4. 在 mysql 逻辑卷的挂装点目录里修改测试文件,如: 206 | (lvs ;vgs) > /var/lib/mysql/test 207 | cat /var/lib/mysql/test 208 | 5. 验正快照卷的功能,如 209 | cat /lvmsnap/mysql/test 210 | 6. 将快照卷里的内容备份到 /backup/mysql 211 | 7. 解除对快照卷的挂装 212 | 8. 删除快照卷 mysql_snap 213 | 9. 删除 mysql 卷上的测试数据 214 | 215 | 216 | >#####参考 217 | >* [Linux LVM 简明教程](https://linux.cn/article-3218-1.html) 218 | 219 | 220 | ## 任务14: 在 ext4 文件系统上配置用户的磁盘限额 221 | 222 | ** 要求:** 223 | 224 | * 创建用户、组并设置其成员 225 | * 创建用户 fanny 和 ann 226 | * 创建组 webs 和 apps 227 | * 分别将 fanny 和 ann 加入组 webs 和 apps 228 | * 对挂装在 /srv 目录上的 ext4 文件系统设置用户配额 229 | * 创建 fanny 用户并设置其为 webs 组的成员 230 | * 为用户 fanny 设置容量软限制 400M、容量硬限制 500M 的块配额 231 | * 为用户 fanny 设置文件数软限制 2000、文件数硬限制 2500 的 inode 配额 232 | * 创建新用户 ann,并以 fanny 用户为参考用户设置其用户的磁盘配额 233 | * 对挂装在 /srv 目录上的文件系统设置组配额 234 | * 为组 webs 设置容量软限制 1G、容量硬限制 2G 的块配额 235 | * 为组 webs 设置文件数软限制 20000、文件数硬限制 25000 的 inode 配额 236 | * 创建新组 apps,并以 webs 组为参考组设置 apps 组的磁盘配额 237 | * 检查配额 238 | * 查看磁盘限额报告 239 | * 查看 fanny 的用户配额 240 | * 查看 apps 的组配额 241 | 242 | ## 任务15: 在 xfs 文件系统上配置用户的磁盘限额 243 | 244 | ** 要求:** 245 | 246 | 247 | * 对挂装在 /data 目录上的 xfs 文件系统设置用户配额 248 | * 创建 fanny 用户并设置其为 webs 组的成员 249 | * 为用户 fanny 设置容量软限制 400M、容量硬限制 500M 的块配额 250 | * 为用户 fanny 设置文件数软限制 2000、文件数硬限制 2500 的 inode 配额 251 | * 创建新用户 ann,并以 fanny 用户为参考用户设置其用户的磁盘配额 252 | * 对挂装在 /data 目录上的 xfs 文件系统设置组配额 253 | * 为组 webs 设置容量软限制 1G、容量硬限制 2G 的块配额 254 | * 为组 webs 设置文件数软限制 20000、文件数硬限制 25000 的 inode 配额 255 | * 创建新组 apps,并以 webs 组为参考组设置 apps 组的磁盘配额 256 | * 检查配额 257 | * 查看磁盘限额报告 258 | * 查看 fanny 的用户配额 259 | * 查看 apps 的组配额 260 | -------------------------------------------------------------------------------- /ch15/guidelines.md: -------------------------------------------------------------------------------- 1 | # CH15 - 教学指导 2 | 3 | ## 教学模块和知识点 4 | 5 | > 1. 可以作为教师教学和考试出题的依据。 6 | > 2. 可以作为学生学习的依据。 7 | 8 | 9 | ### 模块407 - Web 编程语言与 Web 框架 10 | 11 | | 编号 | 知识点 | 掌握程度 | 上机操作 | 12 | | ------ | ----------------------------------------- | -------- | -------- | 13 | | 407-01 | 安装 Perl | 掌握 | | 14 | | 407-02 | 使用 `cpan` 管理 Perl 模块 | 熟悉 | 是* | 15 | | 407-03 | Perl 语言框架: Catalyst | 了解 | | 16 | | 407-04 | 安装 Python | 掌握 | | 17 | | 407-05 | 使用 `pip/easy_install` 管理 Python 模块 | 熟悉 | 是* | 18 | | 407-06 | Python 语言框架: Django/Flask | 了解 | | 19 | | 407-07 | 安装 PHP | 掌握 | 是 | 20 | | 407-08 | 使用 `composer/pear/pecl` 管理 PHP 模块 | 熟悉 | 是* | 21 | | 407-09 | PHP 语言框架: Laravel/symfony/Phalcon/ThinkPHP | 了解 | | 22 | | 407-10 | 安装 Ruby | 掌握 | 是 | 23 | | 407-11 | 使用 `gem` 管理 Ruby 模块 | 熟悉 | 是* | 24 | | 407-12 | Ruby 语言框架: Ruby on Rails | 了解 | | 25 | | 407-13 | 安装 Go | 掌握 | 是 | 26 | | 407-14 | 使用 `gopm` 管理 Go 模块 | 熟悉 | 是* | 27 | | 407-15 | Go 语言框架: revel | 了解 | | 28 | | 407-16 | 安装 Nodejs | 掌握 | 是 | 29 | | 407-17 | 使用 `yarn/npm` 管理 Nodejs 模块 | 熟悉 | 是* | 30 | | 407-18 | JS 语言框架: AngularJS/VueJS | 了解 | | 31 | 32 | 33 | 34 | ### 模块408 - 数据库与键值缓存系统 35 | 36 | | 编号 | 知识点 | 掌握程度 | 上机操作 | 37 | | ------ | -------------------------------------------- | -------- | -------- | 38 | | 408-01 | MySQL/MariaDB 关系数据库简介 | 了解 | | 39 | | 408-02 | MyISAM/InnoDB/Maria 等存储引擎的特点及选择 | 理解 | | 40 | | 408-03 | 安装和启动 MySQL/MariaDB 服务 | 掌握 | 是 | 41 | | 408-04 | 为 MySQL/MariaDB 的 root 用户设置口令 | 掌握 | 是 | 42 | | 408-05 | 单实例 MySQL/MariaDB 服务的配置 | 掌握 | 是 | 43 | | 408-06 | CLI 客户工具:mysql | 熟悉 | 是 | 44 | | 408-07 | GUI 客户工具:HeidiSQL | 熟悉 | 是 | 45 | | 408-08 | WUI 客户工具:phpMyAdmin/Adminer | 熟悉 | 是 | 46 | | 408-09 | MySQL/MariaDB 数据库的备份与恢复 | 掌握 | 是 | 47 | | 408-10 | mongoDB 文档数据库简介 | 了解 | | 48 | | 408-11 | 安装、启动和配置 mongoDB | 了解 | | 49 | | 408-12 | Memcached 简介 | 了解 | | 50 | | 408-13 | 安装、启动 Memcached | 掌握 | 是 | 51 | | 408-14 | 单实例 Memcached 服务的配置 | 掌握 | 是* | 52 | | 408-15 | 使用管理工具 `memcached-tool` | 熟悉 | 是 | 53 | | 408-16 | Redis 简介 | 了解 | | 54 | | 408-17 | 安装、启动和配置 Redis | 掌握 | 是* | 55 | | 408-18 | 单实例 Redis 服务的配置 | 掌握 | 是 | 56 | | 408-19 | 使用管理工具 `redis-cli` | 熟悉 | 是 | 57 | 58 | 59 | ### 模块409 - 基于 Apache 的动态网站技术 60 | 61 | | 编号 | 知识点 | 掌握程度 | 上机操作 | 62 | | ------ | ----------------------------------------------- | -------- | -------- | 63 | | 409-01 | CGI 技术及其特点 | 理解 | | 64 | | 409-02 | 使用 ScriptAlias/AddHandler 配置 CGI | 掌握 | 是 | 65 | | 409-03 | AWStats 日志统计分析工具的安装配置 | 掌握 | 是 | 66 | | 409-04 | LAMP 简介 | 熟悉 | | 67 | | 409-05 | PHP 及其相关模块的配置 | 掌握 | 是 | 68 | | 409-06 | 配置 Apache 基于 mod_php 的 PHP 支持 | 掌握 | 是 | 69 | | 409-07 | 配置 Apache 基于 php-fpm 的 PHP 支持 | 掌握 | 是 | 70 | | 409-08 | 安装配置基于 LAMP 的管理工具 phpMyAdmin/LogAnalyzer | 掌握 | 是 | 71 | | 409-09 | 安装配置 LAMP 的 BLOG/WIKI/FORUM/CMS 等典型应用 | 熟悉 | 是 | 72 | | 409-10 | 安装配置基于 laravel/symfony 框架的应用 | 熟悉 | 是* | 73 | | 409-11 | 配置 Apache 支持 Python 的 WSGI 模块 | 熟悉 | 是* | 74 | | 409-12 | 安装配置基于 Django 框架的应用(如:[Weblate](https://docs.weblate.org/en/latest/admin/install.html)) | 了解 | | 75 | | 409-13 | 配置 Apache 支持 Ruby 的 Passenger 模块 | 了解 | 是* | 76 | | 409-14 | 安装配置基于 RoR 框架的应用(如:[Gitlab](https://docs.gitlab.com/ce/README.html)) | 了解 | | 77 | | 409-15 | 从 SCL 仓库安装各种版本的软件并使用 `scl` 命令切换 | 掌握 | 是 | 78 | | 409-16 | 从源代码编译安装 LAMP 环境 | 了解 | 是* | 79 | 80 | 81 | ### 模块410 - 代理与反向代理 82 | 83 | | 编号 | 知识点 | 掌握程度 | 上机操作 | 84 | | ------ | -------------------------------------------- | -------- | -------- | 85 | | 410-01 | 代理服务的概念和工作原理 | 理解 | | 86 | | 410-02 | Varnish 的安装、初始化和启动 | 了解 | 是* | 87 | | 410-03 | 使用 Varnish 配置缓存代理 | 熟悉 | 是* | 88 | | 410-04 | Squid 的安装、初始化和启动 | 了解 | 是* | 89 | | 410-05 | 使用 Squid 配置缓存代理 | 熟悉 | 是* | 90 | | 410-06 | Polipo 的安装、初始化和启动 | 了解 | 是* | 91 | | 410-07 | 使用 Polipo 配置缓存代理 | 了解 | 是* | 92 | | 410-08 | 反向代理服务的概念和工作原理 | 理解 | | 93 | | 410-09 | 使用 Apache 配置反向代理 | 掌握 | 是 | 94 | | 410-10 | 使用 Nginx 配置反向代理 | 了解 | 是* | 95 | | 410-11 | 使用 Varnish 配置反向代理 | 了解 | 是* | 96 | | 410-12 | 使用 Squid 配置反向代理 | 了解 | 是* | 97 | 98 | 99 | ### 模块411 - JDK 和 Tomcat 100 | 101 | | 编号 | 知识点 | 掌握程度 | 上机操作 | 102 | | ------ | -------------------------------------------- | -------- | -------- | 103 | | 411-01 | 安装配置 JDK | 掌握 | 是 | 104 | | 411-02 | Tomcat 简介 | 了解 | | 105 | | 411-03 | 安装和配置默认的 Tomcat 实例 | 掌握 | 是 | 106 | | 411-04 | 安装和配置第二个 Tomcat 实例 | 掌握 | 是 | 107 | | 411-05 | 配置基于 Tomcat 虚拟主机 | 熟悉 | 是* | 108 | | 411-06 | 配置 Apache 反向代理 Tomcat | 掌握 | 是 | 109 | | 411-07 | 配置 Nginx 反向代理 Tomcat | 熟悉 | 是* | 110 | | 411-08 | 部署基于二进制包发布的 Tomcat | 了解 | 是* | 111 | 112 | 113 | ## 本章学习材料 114 | 115 | * **教材和课件 第15章** 116 | * linux.vbird.org 117 | * [WWW 伺服器](http://linux.vbird.org/linux_server/0360apache.php) 118 | * 马哥教育 视频 119 | * [Linux运维视频课程-Web服务进阶](http://edu.51cto.com/course/course_id-5547.html) 120 | * [Linux必备web服务入门及高级进阶](http://edu.51cto.com/course/course_id-866.html) 121 | * [Nginx应用基础及配置详解](http://edu.51cto.com/course/course_id-5550.html) 122 | * [马哥教育2016高薪Linux培训教程-Web服务之Tomcat](https://www.chuanke.com/2309244-178898.html) 123 | * 布尔教育 视频 124 | * [MySQL 性能优化](https://www.chuanke.com/1053373-215686.html) 125 | * https://www.codecasts.com/ 126 | * [从零部署一个网站](https://www.codecasts.com/series/deploy-a-website-from-scratch) 127 | -------------------------------------------------------------------------------- /ch01/experiment_01-02.md: -------------------------------------------------------------------------------- 1 | # 实验指导 1.2 - 初入 Linux 2 | 3 | >#### 学习目标 4 | > * 学会本地登录和远程登录 5 | > * 学会使用命令帮助 6 | > * 学会获取系统基本信息 7 | > * 学会关闭和重启系统 8 | 9 | ## 任务1:本地登录和远程登录 10 | 11 | * 在虚拟机中本地登录 12 | * 以 root 用户登录 13 | * 用 Alt+F2 切换第二个虚拟控制台,以 student 用户登录 14 | * 从宿主机远程登录 Linux 15 | * 使用 Git Bash 16 | $ ssh root@192.168.56.71 17 | 18 | 19 | # logout # 或 exit 或 Ctrl+d 20 | 21 | $ ssh student@192.168.56.71 22 | 23 | $ logout # 或 exit 或 Ctrl+d 24 | * 使用 Putty 25 | * 从 下载 Putty 并安装 26 | * 创建两个会话,分别用于 root 和 student 登录 192.168.56.71 27 | 28 | > **参考** 29 | > 30 | > * 31 | > * [《完全用 GNU/Linux 工作》 之 20. 增進 SSH 使用效率 - ssh_config](https://chusiang.gitbooks.io/working-on-gnu-linux/content/20.ssh_config.html) 32 | > * [storm](https://github.com/emre/storm) is a command line tool to manage your ssh connections. 33 | 34 | ## 任务2:获得命令帮助 35 | 36 | * 显示所有可用的 Bash 内置命令 37 | $ help 38 | * 显示指定的 Bash 内置命令的帮助 39 | $ help pwd 40 | $ help type 41 | $ help exit 42 | * 使用 `--help` 命令参数获取命令帮助 43 | $ ls 44 | $ ls --help 45 | $ ls / 46 | $ ls -l / 47 | $ ll / 48 | $ which ll # ll 是命令别名 49 | $ ls -F /etc 50 | $ ls -a 51 | 52 | $ which clear 53 | $ clear # 清屏,快捷键为 54 | 55 | $ basename --help 56 | $ basename /usr/bin/sort 57 | $ dirname --help 58 | $ dirname /usr/bin/sort 59 | 60 | $ date 61 | $ date --help 62 | $ date +%F 63 | $ date +%Y/%m/%d 64 | $ date +"%F %T" 65 | $ date +%s 66 | 67 | # 显示UNIX纪元时间为 1476436877 的当前时区时间 68 | $ date --date='@1476436877' 69 | $ date -d '@1476436877' 70 | $ date --date='@1476436877' +"%F %T" 71 | $ date -d '@1476436877' +"%F %T" 72 | $ date -d '+45 days' +%F # 显示 45 天后的日期 73 | $ date -d '-45 days' +%w # 显示 45 天前是周几 74 | # 显示下周五洛杉矶早九点 的当前时区时间 75 | $ date -d 'TZ="America/Los_Angeles" 09:00 next Fri' 76 | 77 | $ cal 78 | $ cal --help 79 | $ cal -3 80 | $ cal 2016 81 | $ cal 9 2016 82 | $ cal 9 1752 # 新历换旧历,有11天被去除 83 | * 使用 man 手册获得命令帮助(1) 84 | 85 | $ man ls 86 | $ man date 87 | $ man cal 88 | $ man which 89 | $ man basename 90 | $ man dirname 91 | $ man bash 92 | 93 | $ manpath # 显示 man 命令在何处查找手册 94 | $ man man # 显示 man 命令的手册 95 | 96 | # 从 man 的索引数据库中查找有关 passwd 的手册(精确匹配) 97 | $ whatis passwd 98 | $ man passwd 99 | $ man 5 passwd 100 | 101 | # 从 man 的索引数据库中查找有关 standards 的手册(模糊匹配) 102 | $ apropos standards 103 | $ man 7 standards 104 | 105 | # 比较 whatis 和 apropos 106 | $ whatis ls 107 | $ apropos ls 或 man -k ls 108 | 109 | $ man intro 110 | $ man 4 console 111 | $ man 4 pts 112 | 113 | >**man手册的操作**(与 `less` 命令的操作键兼容) 114 | > 115 | >* 下箭头:向下滚动一行;上箭头:向上滚动一行 116 | >* 空格键 或 PgDn:向下滚动一屏;PgUp:向上滚动一屏 117 | >* /string : 向下搜索字符串 string 118 | >* n:继续向下搜索;N:继续向上搜索 119 | >* g:跳转到手册首行;G:跳转到手册末行 120 | >* q:退出手册,返回Shell提示符 121 | 122 | ## 任务3:使用 `su -` 切切换用户身份 123 | 124 | * 普通用户切换为 root 用户 125 | [student@localhost ~]$ su - 126 | Password: # 输入 root 用户口令 127 | [root@localhost ~]# 128 | 129 | ## 执行只有 root 用户才能执行的管理命令 130 | # 安装最小化安装未安装的 man-pages 131 | [root@localhost ~]# yum -y install man-pages 132 | [root@localhost ~]# mandb --help 133 | # 创建 man 索引数据库文件 134 | [root@localhost ~]# mandb -c 135 | 136 | [root@localhost ~]# exit 137 | [student@localhost ~]$ 138 | * root 用户切换为普通用户 139 | [root@localhost ~]# su - student 140 | [student@localhost ~]$ 141 | 142 | [student@localhost ~]$ exit 143 | [root@localhost ~]# 144 | 145 | ## 任务4:安装必要的软件并更新系统 146 | 147 | * 安装必要的软件 148 | # yum -y install lshw pciutils usbutils 149 | # yum -y install gdisk system-storage-manager 150 | # yum -y install bash-completion 151 | # yum -y install zip unzip bzip2 tree tmpwatch pinfo man-pages 152 | # yum -y install nano vim-enhanced tmux screen 153 | # yum -y install net-tools psmisc lsof sysstat 154 | # yum -y install yum-plugin-security yum-utils createrepo 155 | # yum -y install git wget curl elinks lynx lftp mailx mutt rsync bind-utils 156 | * 更新系统 157 | * 检查是否有可用的软件包更新 158 | # yum check-update 或 yum list updates 159 | * 执行更新 160 | # yum -y update 161 | 162 | > **提示**: 163 | > 164 | > * 更新系统时会使用 CentOS 镜像站点中的 update 仓库,因此需要主机连接公网 165 | > * 在安装 Linux 虚拟机时配置了一块自动获得IP的NAT类型的网卡,因此只要安装此虚拟机的宿主机能连接公网则 Linux 虚拟机就能连接公网 166 | 167 | ## 任务5: 重启系统 168 | 169 | * 执行如下命令之一重启系统 170 | # systemctl reboot 171 | # reboot 172 | # shutdown -r now 173 | 174 | ## 任务6: 获取系统基本信息 175 | 176 | * 显示硬件信息 177 | # lshw # 显示所有硬件信息 178 | # lshw -c processor # 显示 CPU 的制造厂商及型号 179 | # lshw -c memory # 显示物理内存的大小 180 | # lshw -c disk # 显示磁盘的实际尺寸 181 | # lshw -c display # 显示显卡的制造厂商及型号 182 | # lshw -c network # 显示网卡的制造厂商及型号 183 | 184 | # lscpu 185 | # lspci 186 | # lsusb 187 | * 显示系统信息 188 | # cat /etc/system-release # 查看系统发行版本 189 | # uname -r # 查看系统内核版本 190 | # dmesg # 查看系统启动信息 191 | 192 | # free -h # 查看物理内存和交换空间大小 193 | # swapon -s # 查看所有交换空间 194 | 195 | # lsblk # 查看系统中的块设备 196 | # df -Ph # 查看磁盘剩余空间 197 | 198 | # localectl # 查看语言支持与键盘设置 199 | # timedatectl # 查看日期和时间(或 date) 200 | 201 | # hostnamectl # 显示主机名(或 hostname) 202 | # ip addr show # 显示网络接口参数(或 ifconfig) 203 | # ip route show # 显示路由信息(或 route) 204 | 205 | ## 任务7: 系统基本设置 206 | 207 | * 设置语言支持 208 | # 查看系统支持的语言 209 | # localectl list-locales 210 | 211 | # 更改为英文,下次登录时生效 212 | # localectl set-locale LANG="en_US.UTF-8" 213 | # 更改为中文,下次登录时生效 214 | # localectl set-locale LANG="zh_CN.UTF-8" 215 | * 设置系统时区 216 | # 查看系统支持的时区 217 | # timedatectl list-timezones 218 | 219 | # 更改时区为欧洲巴黎,立即生效 220 | # timedatectl set-timezone Europe/Paris 221 | # 更改时区为中国上海,立即生效 222 | # timedatectl set-timezone Asia/Shanghai 223 | * 设置日期 和/或 时间 224 | # timedatectl set-time 23:06:00 225 | # timedatectl set-time 2016-10-15 226 | # timedatectl set-time '2016-10-15 23:06:00' 227 | 228 | ## CentOS6 及早期版本中使用的命令,CentOS7 仍兼容 229 | # date -s '20161015' 230 | # date -s '23:06' 231 | # date -s '20161015 2306' 232 | 233 | # date 101523052016.00 # [MMDDhhmm[[CC]YY][.ss]] 234 | * 设置主机名 235 | # hostnamectl set-hostname cent7h1.olabs.lan 236 | * 配置SELinux 237 | # 将配置文件 /etc/selinux/config 中的 `SELINUX=enforcing` 行改为 `SELINUX=disabled` 238 | # sed -i 's/SELINUX=.*/SELINUX=disabled/' /etc/selinux/config 239 | 240 | ## 任务8: 关闭系统 241 | 242 | * 执行如下命令之一关闭系统 243 | # systemctl poweroff 244 | # poweroff 245 | # shutdown -h now 246 | -------------------------------------------------------------------------------- /overview/references.md: -------------------------------------------------------------------------------- 1 | # 参考资料 2 | 3 | ## Reading Material 4 | 5 | [Awesome](https://awesome.re/) - Collaborative lists on many different topics 6 | 7 | [Awesome Lists](https://github.com/topics/awesome) 8 | 9 | ### 纸版图书 10 | 11 | * [《CentOS 7系统管理与运维实战》 王亚飞,王刚 清华大学出版社 2016.2](http://item.jd.com/11876743.html) 12 | * [《Linux系统命令及Shell脚本实践指南》王军 机械工业出版社 2013.12](http://item.jd.com/11354663.html) 13 | * [《Linux应用基础教程——CentOS 6》梁如军 机械工业出版社 2015.3](http://item.jd.com/11665204.html) 14 | * [《Linux应用基础教程——RHEL/CentOS 5》梁如军 机械工业出版社 2012.1](http://item.jd.com/10876159.html) 15 | * [《CentOS 5 系统管理》 梁如军 电子工业出版社 2009.5](http://item.jd.com/10143295.html) 16 | * [《鸟哥的Linux私房菜-基础学习篇》(第3版) 鸟哥等 人民邮电出版社 2010.7](http://item.jd.com/10064429.html) 17 | * [《鸟哥的Linux私房菜-服务器架设篇》(第3版) 鸟哥等 机械工业出版社 2012.5](http://item.jd.com/11018248.html) 18 | * [《Linux系统管理技术手册》(第2版) Evi Nemeth 等著 张辉译 人民邮电出版社 2008.5](http://item.jd.com/10062723.html) 19 | * [《UNIX/Linux 系统管理技术手册》(第4版)Evi Nemeth 等著 张辉译 人民邮电出版社 2012.6](http://item.jd.com/11003166.html) 20 | 21 | ### 在线图书 22 | 23 | * [The Practice of System and Network Administration, 2nd Ed.](http://www.everythingsysadmin.com/), by Limoncelli, Hogan, and Chalup (Addison Wesley, 2007). 24 | * [UNIX and Linux System Administration Handbook 4th Ed.](http://www.admin.com/), by Nemeth, Snyder, Hein and Whaley (Prentice Hall, 2010) 25 | * [The Practice of Cloud System Administration](http://the-cloud-book.com/), by Limoncelli, Chalup, and Hogan (Addison-Wesley, 2015). 26 | * [Pro Git 2nd Ed.](https://git-scm.com/book/zh/v2) 27 | * [online_books@linuxtopia.org](http://www.linuxtopia.org/online_books/index.html) 28 | * [Linux Documentation Project](http://tldp.org/) 29 | * [FLOSS Manuals](http://flossmanuals.net) 30 | * [20本最好的LINUX免费书籍](http://coolshell.cn/articles/355.html) 31 | * [Linux 就该这么学(RHEL7)](http://www.linuxprobe.com/chapter-00.html) 32 | 33 | ### RHEL/Fedora/CentOS 官方文档 34 | 35 | * https://wiki.centos.org/ 36 | * https://seven.centos.org/ 37 | * https://fedoraproject.org/wiki/Fedora_Project_Wiki 38 | * https://access.redhat.com/documentation/zh_cn/red-hat-enterprise-linux/ 39 | 40 | ### Linux 相关的文档/教程 41 | 42 | * [Linux 教程](http://www.runoob.com/linux/linux-tutorial.html) 43 | * [Shell 教程](http://www.runoob.com/linux/linux-shell.html) 44 | * [Linux 教程](http://c.biancheng.net/cpp/linux/) 45 | * [Shell 教程](http://c.biancheng.net/cpp/shell/) 46 | * [正则表达式 教程](http://www.runoob.com/regexp/regexp-tutorial.html) 47 | * [Linux 命令大全](http://www.runoob.com/linux/linux-command-manual.html) 48 | * [Linux 命令大全](http://man.linuxde.net/) 49 | * [Linux Commands](https://linuxconfig.org/linux-commands) 50 | 51 | 52 | * [Linux System Administrator Projects](https://www.linuxtrainingacademy.com/linux-projects/) 53 | * [30 Things to Do After Minimal RHEL/CentOS 7 Installation](http://www.tecmint.com/things-to-do-after-minimal-rhel-centos-7-installation/) 54 | * [Initial Server Setup with CentOS 7](https://www.digitalocean.com/community/tutorials/initial-server-setup-with-centos-7) 55 | * [Additional Recommended Steps for New CentOS 7 Servers](https://www.digitalocean.com/community/tutorials/additional-recommended-steps-for-new-centos-7-servers) 56 | * [How To Install Linux, Apache, MySQL, PHP (LAMP) stack On CentOS 7](https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql-php-lamp-stack-on-centos-7) 57 | * [How To Install Linux, Nginx, MySQL, PHP (LEMP) stack On CentOS 7](https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-on-centos-7) 58 | * [How to Install, Create and Manage LXC (Linux Containers) in RHEL/CentOS 7](https://www.tecmint.com/install-create-run-lxc-linux-containers-on-centos/) - [中文版](http://blog.csdn.net/liumiaocn/article/details/52337479) 59 | 60 | ## WebSite 61 | 62 | ### Linux 相关的英文网站 63 | 64 | * https://www.kernel.org 65 | * http://www.distrowatch.com 66 | * https://opensource.com 67 | * http://www.linuxplanet.com 68 | * http://www.techrepublic.com 69 | * http://www.linuxjournal.com 70 | * https://itsfoss.com 71 | * http://fossforce.com 72 | * http://tuxmachines.org 73 | * http://www.tuxs.org 74 | * http://www.linuxsecurity.com 75 | * http://pretty-rfc.herokuapp.com/ 76 | 77 | ### Linux 相关的中文网站 78 | 79 | * http://os.51cto.com/ 80 | * http://www.centoscn.com/ 81 | * https://linuxtoy.org/ 82 | * https://linux.cn/ 83 | * http://linux.chinaunix.net/ 84 | * http://www.oschina.net/ 85 | * http://www.linuxidc.com/ 86 | * http://www.linuxeye.com/ 87 | * http://www.linux-ren.org/ 88 | * http://www.2cto.com/ 89 | 90 | ### 知名博客 91 | 92 | * [Server World](http://www.server-world.info/en/) 93 | * [linuxconfig.org](https://linuxconfig.org) 94 | * [Linux Training Academy](https://www.linuxtrainingacademy.com/) 95 | * [Linux Academy](https://linuxacademy.com/) 96 | * [digitalocean.com](https://www.digitalocean.com/community) 97 | * [nixCraft](http://www.cyberciti.biz/) 98 | * [thegeekstuff](http://www.thegeekstuff.com/) 99 | * [Tecmint](https://www.tecmint.com/) 100 | * [Raymii.org](https://raymii.org/s/) 101 | * [Cogito ergo sum](http://mathslinux.org/) 102 | 103 | 104 | * [BYVoid](https://www.byvoid.com/) 105 | * [王垠](http://www.yinwang.org) 106 | * [酷壳 – COOLSHELL](http://coolshell.cn/) 107 | 108 | ### 其他 109 | 110 | * [设计师导航网](http://www.289w.com) 111 | * [前端观察](http://www.qianduan.net) 112 | * [Bootstrap 4 Cheat Sheet](https://hackerthemes.com/bootstrap-cheatsheet/) 113 | * [Beginner Projects List on Github](https://github.com/karan/Projects-Solutions) 114 | * [7 Awesome Open Source Build Automation Tools For Sysadmin/DevOps/Developers](https://www.cyberciti.biz/open-source/awesome-curated-list-of-opensource-automating-software-build-tools-for-devops-sysadmin/) 115 | * [Over 1500 Coding Project Ideas](https://www.linuxtrainingacademy.com/projects/) 116 | * [Best Windows Apps](https://github.com/stackia/best-windows-apps) 117 | * [CodeMagic](https://shop120934020.taobao.com/) 118 | * [nosql-databases.org](http://nosql-databases.org/) 119 | 120 | ## Videos 121 | 122 | * 123 | * 124 | * 125 | * [马哥教育@百度传课](https://www.chuanke.com/course/_马哥教育_____.html) 126 | * [三大操作系统](http://study.163.com/series/1001154001.htm) 127 | 128 | 129 | * 130 | 131 | ## Course 132 | 133 | * [Advanced Network and System Administration](http://faculty.cs.nku.edu/~waldenj/classes/2011/summer/cit470/), by [James Walden, Ph.D.](http://faculty.cs.nku.edu/~waldenj/) 134 | * [System and Network Administration](http://www.cse.lehigh.edu/~brian/course/2016/sysadmin/), by [Prof. Brian D. Davison](http://www.cse.lehigh.edu/~brian/) 135 | * [System installation](http://www.ida.liu.se/~TDDI09/index.en.shtml), by [David Byers](http://www.ida.liu.se/~davby/) 136 | * [Information Security and Assurance](http://www.cs.northwestern.edu/~ychen/classes/msit458-f15/), by [Yan Chen](http://www.cs.northwestern.edu/~ychen/) 137 | * [Introduction to Network Security](http://www.cisa.umbc.edu/courses/cmsc/487/spring07/), by Dr. Deepinder Sidhu 138 | * [Web Security](http://sce.uhcl.edu/yang/teaching/csci5234Spring2013/), by [T. Andrew Yang](http://sce.uhcl.edu/yang/) 139 | * [Linux 网络操作系统](http://www.icourses.cn/coursestatic/course_2843.html), by 杨云 140 | * [資訊與網路安全概論](http://www.tsnien.idv.tw/security.htm), by 粘添壽 141 | * [伺服器系統管理 - CentOS](http://www.tsnien.idv.tw/CentOS.htm), by 粘添壽 142 | * **[List of awesome university courses for learning Computer Science!](https://github.com/prakhar1989/awesome-courses#readme)** 143 | 144 | --------------------------------------------------------------------------------