Linux 运维手册

前言

Linux 作为一款开源和高度定制化的操作系统,在服务器和云计算领域被广泛应用。对 Linux 系统的日常运维和管理至关重要,本手册的目的就是让读者系统地学习 Linux 运维知识,掌握 Linux 服务器的部署、配置、维护等技能。

无论你是一名初学 Linux 的运维工程师,还是一名有经验的资深运维人员,本手册都可以帮助你加深对Linux运维的理解,提高工作效率。手册内容涵盖 Linux 部署、网络配置、存储管理、用户和权限管理、进程管理、日志监控等方方面面。同时也会介绍一些 Linux 运维常用的工具,如 Nginx、SSH、Docker 等。

我希望本 Linux 运维手册可以成为读者学习和参考的资源,也欢迎广大读者提出宝贵的意见和建议。Linux 运维是一个互联网行业内高需求且专业性很强的岗位,掌握好 Linux 运维技能对个人的职业生涯发展大有帮助。在这里预祝每一位读者都可以通过阅读本手册和不断实践,成为一名出色的 Linux 运维工程师!

第一章

前言

本文以debian为例,详细介绍关于linux的日常使用与维护手段,涉及到许多概念性上的东西,同时也有很多经验上的总结,许多行为可能刚开始会不太适应,但请去适应,这些东西能为我们在实际操作中节省大量的时间,提升效率。

安装

确定发行版

确定发行版使得我们能够获得与该发行版相关的信息,包括但不限于:

  • 发行版包管理器
  • stable内核版本
  • 包名称查找方式
  • 镜像源
  • 发行版设计等相关对部署有帮助的信息

寻找发行版官网

从官网获取镜像通常情况下是安全可靠的,即使发生劫持一般镜像也会通过提供sha256等校验方式提供完整性验证。

一般来说寻找官网是十分直接的事,我们只需要在搜索引擎上直接搜索发信版名称都能够直接得到官网。

绝大多数的发行版以英文官网为主,少部分(deepin等)国内发行版可参考中文。

在google上搜索了debian结果如图,出现了 debian.org

从官网获取镜像

按照官方指示安装

包源 软件源

包管理工具

这个我们可以从发行版信息来获取

镜像站

软件定位(以apt为例)

确定依赖需求

根据自身需求确定依赖,了解这些依赖的gnu标准名称是很重要的,因为大多数的包命名也是遵守一定的规范,而了解这些规范能少走很多弯路,帮助我们更快的去定位包。

线索查找(so文件等)

通过apt或者对应发行版官网包搜索包所包含的相关文件。

以下将以补齐libcrypto为历程说明如何寻找依赖。

首先我们在编译时发生了依赖缺失的情况,但我们并不知道libcrypto是属于哪个包的,这时我们就要利用发行版带来的信息了。

首先我们使用的是 debian 发行版,并且我们使用的是stable版,有了这两条信息后,我们先来到debian官方的软件源搜索器,关键词是 Debian Packages Search

第二章 ssh

介绍

网络上的设备之间的数据传输需要调节,以便设备能够正确地进行通信。传输是通过一套称为网络协议的规则来进行的。

早期的网络协议如 Telnet 和 rsh 没有提供足够的保护来抵御恶意的网络攻击。由于需要更安全的网络通信方法,因此创建了 SSH 协议。

SSH (SecureShell 的缩写) 是一种网络协议,它为两台计算机远程连接提供了一种安全的方式。SSH 使用加密来确保黑客无法破译两个连接设备之间的通信。

SSH 由三个不同的层组成:

  • 在身份验证期间和之后,传输层在客户机和服务器之间建立安全可靠的通信。它监督数据加密、解密和完整性保护。此外,它还通过提供数据压缩和缓存来加速数据交换。

  • 身份验证层将支持的身份验证方法传递给客户端,并执行整个用户身份验证过程。

  • 连接层在身份验证成功后管理计算机之间的通信。它处理通信通道的开启和关闭,并允许多个通道用于多个会话。

用途

SSH 为机器之间的信息传输提供了一个安全层,一些例子如下:

  • 远程访问-SSH 确保用户和进程的加密远程连接。

  • 文件传输——由 SSH 管理的安全文件传输协议 SFTP 提供了一种通过网络操作文件的安全方法。

  • X11转发-用户可以从他们的客户端机器上运行服务器托管的 X 应用程序。

  • 端口转发-通过将客户端的端口映射到服务器的远程端口,SSH 帮助保护其他网络协议,如 TCP/IP。

  • 隧道技术——这种封装技术提供安全的数据传输。隧道技术对于从不安全的网络访问业务敏感的在线材料非常有用,因为它可以作为一种方便的 VPN 替代方案。

  • 网络管理—— SSH 协议管理网络基础设施和系统的其他部分。

工作原理

SSH 是基于客户机-服务器的协议。这意味着协议允许请求信息或服务的设备(客户端)连接到另一个设备(服务器)。

当客户端通过 SSH 连接到服务器时,可以像控制本地计算机一样控制机器。

服务器有一个指定的 TCP 端口,它通过这个端口监视网络,等待客户端初始化连接。在客户端连接并开始发出 SSH 命令之前,它需要通过身份验证过程。

建立 ssh 链接

在客户端机器上运行以下命令以启动 SSH 连接:

ssh [username]@[server_ip_or_hostname]

当服务器收到请求时,会话加密协商开始。

会话加密协商

收到连接请求后,服务器向客户发送一组支持的加密协议。服务器使用公钥作为认证方法。

客户端将这些协议与自己的协议集进行比较。如果有匹配的协议,机器同意使用一个协议来建立连接。

客户端在第一次连接尝试时,将服务器的公钥与存储在其系统中的私钥进行比较。如果密钥匹配,客户端和服务器同意在SSH会话中使用对称加密进行通信。为此,他们使用非对称加密过程进行通信,采用Diffie-Hellman(DH)密钥交换算法。

DH算法使机器能够一起工作,并通过公共网络安全地创建一个加密密钥。为了生成一个密钥,机器执行以下步骤:

  • 机器就两个数字达成一致:一个模数和一个基数。为了防止暴力解密,所选择的模数是一个至少有600位的质数。
  • 机器分别选择一个数字并将其应用于涉及两个公共数字的方程。
  • 服务器和客户端交换计算值。
  • 每台机器现在使用从另一台机器收到的结果进行计算。

服务器首先产成两个数G、P,P为一个非常大的素数,作为DH算法的模;G为密码发生器,也就是底数,服务器将这两个数发给客户端。

客户端生成一个数(客户端的私钥)x(0<x<P,但x应该大一点,否则当G特别小时生成的秘钥长度可能会很短,服务器会拒绝),计算e=(G^x)%P。得到的e就是客户端的公钥,客户端将e发送给服务器。

服务器也同客户端一样,生成一个数y,计算f=(G^y)%P。将服务器公钥f发送给客户端。

现在客户端与服务器都知道了对方的公钥,双方把对方的公钥作为自己模幂运算的底数进行运算,服务器计算K1=(e^y)%P,客户端计算K2=(f^x)%P 可以证明这里K1==K2 ,得到的K值便是双方所交换的秘钥。

第三章 网络基本概念

ip

网络内独一无二,身份证号

主机名

一个名字

在局域网内,主机名可以重复,但不建议重复。
主机名重复会带来以下问题:

  1. 计算机名称冲突。在同一个局域网内,主机名重复会导致网络识别冲突,网络设备无从区分两个主机。这会导致ARP广播风暴,降低网络性能。
  2. 无法通过主机名访问特定主机。如果两个主机的主机名相同,在局域网内通过主机名访问时,无法明确指向哪一台主机。
  3. 可能导致某些网络服务混乱。像NetBIOS等服务依赖主机名,主机名重复会导致这些服务的混乱和错误。
    所以,在局域网内部署主机时,尽量给予每个主机唯一的主机名是比较好的做法。如果主机名重复也不可避免,可以通过以下方法解决:
  4. 使用IP地址直接访问主机,而不是主机名。
  5. 为重复的主机名配置不同的NetBIOS名称。
  6. 使用DNS域名而不是简单主机名,两个主机的完整域名应是唯一的。
  7. 禁用基于主机名的服务和功能,比如NetBIOS服务。全部使用基于IP的服务。
    综上,主机名重复在局域网内是可以的,但会有一定问题,所以如果可以,局域网内主机名尽量设置为唯一的为好。如果重复也不可避免,可以通过上述方法避免和减轻问题。

域名

独一无二的头衔标签,如四川大学校长,和一个唯一ip地址对应

DNS, mDNS, DDNS

DNS:域名系统(Domain Name System),用于域名与IP地址的解析和转换。它的作用是提供域名到IP地址的映射,使人们更易于记忆的域名可以被用于定位互联网上的计算机。

mDNS:Multicast DNS,一种不需要专门的DNS服务器的零配置服务发现技术。它允许网络设备使用预定义的Multicast IP地址来通告和发现网络服务。从本质上来说,mDNS的作用就是让局域网内的主机能够相互解析彼此的主机名,而不需要配置DNS服务器。

DDNS:动态域名解析(Dynamic DNS),一种可以将动态分配的IP地址与域名动态绑定的技术。因为有线和无线网络会动态分配IP地址,而internet的域名与IP地址是静态绑定的。DDNS可以检测IP地址的变化,并自动更新DNS记录,以保证域名始终解析到最新的IP地址。

三者的区别和关系:

  1. DNS用于广域网域名和IP的静态绑定和解析。mDNS用于局域网内主机的动态解析,没有专门的DNS服务器。DDNS用于将广域网内动态分配的IP与域名动态绑定。
  2. DNS和DDNS需要域名服务商和DNS服务器的支持。mDNS是去中心化的,不需要DNS服务器,使用多播的方式在局域网内实现主机名解析。
  3. DDNS依赖于DNS,用于持续更新DNS中的记录。mDNS替代了DNS,但仅在局域网内使用。DNS是更广泛使用的域名解析方式。
  4. DNS用于全局域名解析,mDNS只用于局域网,DDNS通过更新DNS来支持局域网与广域网的结合。

三种技术有着不同的应用场景,但目的都是为了简化网络访问和管理。DNS是整个互联网域名系统的基石,mDNS适用于局域网,DDNS补充了DNS在动态IP环境下的不足。

内网穿透

内网穿透的概念是指将内网中的某台主机上的网络服务开放到外网,允许外网用户访问内网服务。实现内网穿透的常用方法有:

  1. 端口转发:利用公网IP对外开放某个端口,将访问这个端口的流量转发到内网主机上。这需要有公网IP和路由器的支持。
  2. VPN:使用VPN技术,将外网主机虚拟成内网主机,实现网络访问。需要VPN服务器和客户段软件的支持。
  3. SSH隧道:使用SSH的端口转发功能,创建SSH隧道将外网连接转发到内网主机。需要Linux主机做中转。
  4. 反向代理:使用Nginx等反向代理软件,接受外网连接,并转发到内网主机上。需要有公网IP的反向代理服务器。
  5. Frp内网穿透:使用Frp内网穿透工具,由Frp的服务器端与客户端实现内外网主机的连接与数据转发。
    除此之外,也有其他方式比如使用CDN中转、使用Apache或IIS的代理模块等。
    内网穿透的主要应用场景有:
  6. 远程管理内网主机:实现SSH或RDP登录内网主机。
  7. 内网Web服务开放:将内网网站或应用开放到外网访问。
  8. FTP文件访问:开放内网FTP服务器到外网。
  9. 摄像头监控:将内网摄像头流媒体开放到外网。
  10. 远程桌面:将内网Windows机器的远程桌面开放给外网用户。
    实现内网穿透需要注意的安全问题主要有:
  11. 身份验证:采用密码、证书或Token等方式对用户进行身份验证。
  12. 数据加密:使用SSL、SSH等方式加密传输的数据。
  13. 权限控制:控制内网主机的访问权限,避免过broad访问。
  14. 内外网隔离:隔离内外网的网络,使用独立的网卡和防火墙等。
  15. 服务安全:确保开放的内网服务本身就是安全的,避免被利用。
  16. 监控预警:监控内网穿透链路及访问,设置预警机制。
    内网穿透能够简化网络结构,降低运维成本,但也带来一定的安全风险,所以需要妥善配置和管理。

frp

frp 是一款优秀的内网穿透工具,它可以将内网服务以安全加密的方式打开到外网,实现内网穿透。比如在公司或家庭使用frp,可以方便地访问内网网站、TCP/UDP应用等。
frp工作原理:
frp包含两部分:服务器端(frps)和客户端(frpc)。
服务器端部署在有公网IP的机器上,客户端部署在内网机器上。
客户端通过与服务器端建立长连接,在指定端口通过探测服务器获取一个对外可访问的URL,然后服务器将对该URL的请求通过长连接转发给客户端,实现内网穿透。
frp具有以下主要功能:

  1. 支持多种网络协议:TCP、UDP、HTTP、HTTPS 等。
  2. 加密传输:frp使用双向TLS来加密所有数据传输通道。
  3. 身份验证:frp 支持基于 Token 的身份验证方式。
  4. 负载均衡:frp支持基于域名的负载均衡,并且健康检查机制确保转发到的服务始终可用。
  5. 伪装:frp 支持 URL 伪装,可以将内网http服务展示为一个域名。
  6. 视频鉴权:frp与acme.sh结合,可以自动申请HTTPS证书来提供视频监控相关服务。
  7. 离线日志:frp 服务器离线时,客户端日志上传至服务器以供离线分析。
    frp的典型应用场景有:
  • 内网服务开放与对外
  • 远程桌面连接内网机器
  • 展示内网网站于外网
  • 远程文件传输管理
  • 跳板机代理
  • 摄像头监控等等
    frp是一个小巧但功能强大的内网穿透工具,能够轻松的将内网服务开放到公网,是运维人员必备的一个工具。

Zerotier

ZeroTier是一款开源的内网穿透工具,它可以通过创建虚拟网络将不同地点的设备连接起来,实现跨网络的连接和通信。
ZeroTier工作原理:
ZeroTier通过创建管理虚拟网络来实现设备间的内网穿透连接。虚拟网络由一组被分配给网络成员的节点地址组成。设备通过ZeroTier app加入虚拟网络,并被分配一个节点地址,这样在同一个虚拟网络中的设备就可以通过节点地址直接通信,如同在一个局域网中。
ZeroTier具有以下主要功能:

  1. 简单部署:只需要在设备上安装ZeroTier app并添加到虚拟网络中即可,无需xbd或路由器配置。
  2. 加密传输:使用極限加密算法将所有通信内容加密传输。
  3. 访问控制:可以基于设备或虚拟网络进行细粒度的访问控制和隔离。
  4. 无公网IP需求:设备之间的连接不依赖任何公共基础设施,只要能上网就可以建立连接。
  5. 跨平台:支持Windows、MacOS、Linux、FreeBSD、Android等多个平台。
  6. 开源:ZeroTier采用GPLv3开源协议,代码开源透明。
    ZeroTier典型的应用场景:
  7. 远程连接:比如连接办公内网和家庭内网环境。
  8. IoT设备连接:比如连接分布在不同位置的摄像头、传感器等IoT设备。
  9. 多地点VPN:替代OpenVPN等搭建低成本的多地点VPN。
  10. 云管理内网:将云环境下的虚拟网络与本地物理网络进行连接等。
  11. 地理分散部署:比如游戏服务器在不同地区部署,需要内网连接进行数据同步。
    ZeroTier是一个轻量级而强大的内网穿透工具,通过虚拟网络可以轻松地连接不同网络环境下的设备,实现安全的跨网络通信,无需复杂的网络配置。对个人和企业都有很好的应用价值。

WireGuard

Wireguard是一款新型的VPN协议和实现,它可以将网络中的设备进行内网穿透连接。Wireguard采用现代加密方法,可以实现更高的性能和更强的安全性能。
Wireguard工作原理:
Wireguard使用UDP 51413端口(可配置)在两台设备之间建立安全隧道,实现内网穿透连接。每个连接都使用公钥生成一个出站和入站的对称密钥,所有数据包都使用这两个密钥进行加密传输。
Wireguard具有以下主要特征:

  1. 加密方式:使用最新的Curve25519, ChaCha20Poly1305和BHKBcrypt算法进行密钥交换、数据包加密和身份验证。
  2. 轻量级:实现简单,占用资源少,较OpenVPN要轻量很多。
  3. 高性能:可以达到近10Gbps的吞吐量,比OpenVPN性能更高。
  4. 分散式:每个设备只需保存与其直接通信的其他对端的信息,无需中心节点。
  5. 隧道:使用UDP隧道在两台设备之间建立安全通道。
  6. 开源:Wireguard采用GPLv3开源协议,代码透明。
  7. 跨平台:支持Linux、Windows、Android、MacOS等多个平台。
    Wireguard典型应用场景:
  8. 个人或企业VPN:实现办公网络和远程网络的连接与访问。
  9. 隧道代理:通过中间节点将两端设备的连接隧道转发。
  10. 设备内网:比如将IoT设备连接到内部管理平台构建私有网络。
  11. 云服务连接:将本地网络和云服务或云区域私有网络进行连接。
  12. 跨ISP连接:连接不同网络运营商环境下的网络等。
    Wireguard是一个新型的VPN方案和工具,使用现代加密协议,简单而高效,可以轻易地构建强加密的点对点连接或VPN,是传统VPN协议的很好替代方案,值得云服务商、企业和个人使用与部署。

Chapter 4 Linux Commands

pwd

print working directory

/

ls

list

texas@debian-texas:/$ ls -al
total 68
drwxr-xr-x  18 root root  4096 Feb 22 00:10 .
drwxr-xr-x  18 root root  4096 Feb 22 00:10 ..
lrwxrwxrwx   1 root root     7 Feb 22 00:10 bin -> usr/bin
drwxr-xr-x   4 root root  4096 May 15 11:37 boot
drwxr-xr-x  17 root root  3200 Apr 27 18:40 dev
drwxr-xr-x  87 root root  4096 May 21 15:01 etc
drwxr-xr-x   3 root root  4096 Feb 22 00:22 home
lrwxrwxrwx   1 root root     7 Feb 22 00:10 lib -> usr/lib
drwx------   2 root root 16384 Feb 22 00:09 lost+found
drwxr-xr-x   3 root root  4096 Feb 22 00:09 media
drwxr-xr-x   2 root root  4096 Feb 22 00:10 mnt
drwxr-xr-x   2 root root  4096 Feb 22 00:10 opt
dr-xr-xr-x 253 root root     0 Apr 27 18:40 proc
drwx------   4 root root  4096 Apr  9 19:12 root
drwxr-xr-x  22 root root   660 May 21 17:16 run
lrwxrwxrwx   1 root root     8 Feb 22 00:10 sbin -> usr/sbin
drwxr-xr-x   3 root root  4096 Apr  3 11:13 srv
dr-xr-xr-x  13 root root     0 Apr 27 18:40 sys
drwxrwxrwt  11 root root  4096 May 21 16:41 tmp
drwxr-xr-x  11 root root  4096 Feb 22 00:10 usr
drwxr-xr-x  12 root root  4096 Apr  3 11:05 var

d: directory
l: link
-: common file

3 groups rwx

r: read
w: write
x: execute

owner owner-group other-group

. & …

.: current directory

…: parent directory

-

cd -: previous directory

cd

change directory

mkdir

make directory

nano

cat

echo

>

pipeline

rm

remove
rm

rm -rf

history

grep

history | grep xxx

cp

copy

mv

move

man

manual

Todo

  • nginx
  • container eg. docker podman …
  • systemd
  • man

能做到这件事情的叫做gpg,哈希不能提供可信一致性验证。