├── 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 | 
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 | 
46 |
47 | ## GPT 示意图
48 |
49 | 
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 | 
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 | 
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 |
--------------------------------------------------------------------------------