第一章
前言
本文以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
网络内独一无二,身份证号
主机名
一个名字
在局域网内,主机名可以重复,但不建议重复。
主机名重复会带来以下问题:
计算机名称冲突。在同一个局域网内,主机名重复会导致网络识别冲突,网络设备无从区分两个主机。这会导致ARP广播风暴,降低网络性能。
无法通过主机名访问特定主机。如果两个主机的主机名相同,在局域网内通过主机名访问时,无法明确指向哪一台主机。
可能导致某些网络服务混乱。像NetBIOS等服务依赖主机名,主机名重复会导致这些服务的混乱和错误。
所以,在局域网内部署主机时,尽量给予每个主机唯一的主机名是比较好的做法。如果主机名重复也不可避免,可以通过以下方法解决:
使用IP地址直接访问主机,而不是主机名。
为重复的主机名配置不同的NetBIOS名称。
使用DNS域名而不是简单主机名,两个主机的完整域名应是唯一的。
禁用基于主机名的服务和功能,比如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地址。
三者的区别和关系:
DNS用于广域网域名和IP的静态绑定和解析。mDNS用于局域网内主机的动态解析,没有专门的DNS服务器。DDNS用于将广域网内动态分配的IP与域名动态绑定。
DNS和DDNS需要域名服务商和DNS服务器的支持。mDNS是去中心化的,不需要DNS服务器,使用多播的方式在局域网内实现主机名解析。
DDNS依赖于DNS,用于持续更新DNS中的记录。mDNS替代了DNS,但仅在局域网内使用。DNS是更广泛使用的域名解析方式。
DNS用于全局域名解析,mDNS只用于局域网,DDNS通过更新DNS来支持局域网与广域网的结合。
三种技术有着不同的应用场景,但目的都是为了简化网络访问和管理。DNS是整个互联网域名系统的基石,mDNS适用于局域网,DDNS补充了DNS在动态IP环境下的不足。
内网穿透
内网穿透的概念是指将内网中的某台主机上的网络服务开放到外网,允许外网用户访问内网服务。实现内网穿透的常用方法有:
端口转发:利用公网IP对外开放某个端口,将访问这个端口的流量转发到内网主机上。这需要有公网IP和路由器的支持。
VPN:使用VPN技术,将外网主机虚拟成内网主机,实现网络访问。需要VPN服务器和客户段软件的支持。
SSH隧道:使用SSH的端口转发功能,创建SSH隧道将外网连接转发到内网主机。需要Linux主机做中转。
反向代理:使用Nginx等反向代理软件,接受外网连接,并转发到内网主机上。需要有公网IP的反向代理服务器。
Frp内网穿透:使用Frp内网穿透工具,由Frp的服务器端与客户端实现内外网主机的连接与数据转发。
除此之外,也有其他方式比如使用CDN中转、使用Apache或IIS的代理模块等。
内网穿透的主要应用场景有:
远程管理内网主机:实现SSH或RDP登录内网主机。
内网Web服务开放:将内网网站或应用开放到外网访问。
FTP文件访问:开放内网FTP服务器到外网。
摄像头监控:将内网摄像头流媒体开放到外网。
远程桌面:将内网Windows机器的远程桌面开放给外网用户。
实现内网穿透需要注意的安全问题主要有:
身份验证:采用密码、证书或Token等方式对用户进行身份验证。
数据加密:使用SSL、SSH等方式加密传输的数据。
权限控制:控制内网主机的访问权限,避免过broad访问。
内外网隔离:隔离内外网的网络,使用独立的网卡和防火墙等。
服务安全:确保开放的内网服务本身就是安全的,避免被利用。
监控预警:监控内网穿透链路及访问,设置预警机制。
内网穿透能够简化网络结构,降低运维成本,但也带来一定的安全风险,所以需要妥善配置和管理。
frp
frp 是一款优秀的内网穿透工具,它可以将内网服务以安全加密的方式打开到外网,实现内网穿透。比如在公司或家庭使用frp,可以方便地访问内网网站、TCP/UDP应用等。
frp工作原理:
frp包含两部分:服务器端(frps)和客户端(frpc)。
服务器端部署在有公网IP的机器上,客户端部署在内网机器上。
客户端通过与服务器端建立长连接,在指定端口通过探测服务器获取一个对外可访问的URL,然后服务器将对该URL的请求通过长连接转发给客户端,实现内网穿透。
frp具有以下主要功能:
支持多种网络协议:TCP、UDP、HTTP、HTTPS 等。
加密传输:frp使用双向TLS来加密所有数据传输通道。
身份验证:frp 支持基于 Token 的身份验证方式。
负载均衡:frp支持基于域名的负载均衡,并且健康检查机制确保转发到的服务始终可用。
伪装:frp 支持 URL 伪装,可以将内网http服务展示为一个域名。
视频鉴权:frp与acme.sh结合,可以自动申请HTTPS证书来提供视频监控相关服务。
离线日志:frp 服务器离线时,客户端日志上传至服务器以供离线分析。
frp的典型应用场景有:
内网服务开放与对外
远程桌面连接内网机器
展示内网网站于外网
远程文件传输管理
跳板机代理
摄像头监控等等
frp是一个小巧但功能强大的内网穿透工具,能够轻松的将内网服务开放到公网,是运维人员必备的一个工具。
Zerotier
ZeroTier是一款开源的内网穿透工具,它可以通过创建虚拟网络将不同地点的设备连接起来,实现跨网络的连接和通信。
ZeroTier工作原理:
ZeroTier通过创建管理虚拟网络来实现设备间的内网穿透连接。虚拟网络由一组被分配给网络成员的节点地址组成。设备通过ZeroTier app加入虚拟网络,并被分配一个节点地址,这样在同一个虚拟网络中的设备就可以通过节点地址直接通信,如同在一个局域网中。
ZeroTier具有以下主要功能:
简单部署:只需要在设备上安装ZeroTier app并添加到虚拟网络中即可,无需xbd或路由器配置。
加密传输:使用極限加密算法将所有通信内容加密传输。
访问控制:可以基于设备或虚拟网络进行细粒度的访问控制和隔离。
无公网IP需求:设备之间的连接不依赖任何公共基础设施,只要能上网就可以建立连接。
跨平台:支持Windows、MacOS、Linux、FreeBSD、Android等多个平台。
开源:ZeroTier采用GPLv3开源协议,代码开源透明。
ZeroTier典型的应用场景:
远程连接:比如连接办公内网和家庭内网环境。
IoT设备连接:比如连接分布在不同位置的摄像头、传感器等IoT设备。
多地点VPN:替代OpenVPN等搭建低成本的多地点VPN。
云管理内网:将云环境下的虚拟网络与本地物理网络进行连接等。
地理分散部署:比如游戏服务器在不同地区部署,需要内网连接进行数据同步。
ZeroTier是一个轻量级而强大的内网穿透工具,通过虚拟网络可以轻松地连接不同网络环境下的设备,实现安全的跨网络通信,无需复杂的网络配置。对个人和企业都有很好的应用价值。
WireGuard
Wireguard是一款新型的VPN协议和实现,它可以将网络中的设备进行内网穿透连接。Wireguard采用现代加密方法,可以实现更高的性能和更强的安全性能。
Wireguard工作原理:
Wireguard使用UDP 51413端口(可配置)在两台设备之间建立安全隧道,实现内网穿透连接。每个连接都使用公钥生成一个出站和入站的对称密钥,所有数据包都使用这两个密钥进行加密传输。
Wireguard具有以下主要特征:
加密方式:使用最新的Curve25519, ChaCha20Poly1305和BHKBcrypt算法进行密钥交换、数据包加密和身份验证。
轻量级:实现简单,占用资源少,较OpenVPN要轻量很多。
高性能:可以达到近10Gbps的吞吐量,比OpenVPN性能更高。
分散式:每个设备只需保存与其直接通信的其他对端的信息,无需中心节点。
隧道:使用UDP隧道在两台设备之间建立安全通道。
开源:Wireguard采用GPLv3开源协议,代码透明。
跨平台:支持Linux、Windows、Android、MacOS等多个平台。
Wireguard典型应用场景:
个人或企业VPN:实现办公网络和远程网络的连接与访问。
隧道代理:通过中间节点将两端设备的连接隧道转发。
设备内网:比如将IoT设备连接到内部管理平台构建私有网络。
云服务连接:将本地网络和云服务或云区域私有网络进行连接。
跨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