OpenEuler-HCIP-Notes

Web 服务简介

长连接, 会在响应头中加入 “Connection: keep-alive”.

HTTP 无状态.

Apache 简介及配置

mod_core 用于处理配置文件的配置指令.

mod_so 用于动态加载其他模块.

过滤出主配置文件中除注释行和空行以外的配置:

1
grep -Ev "^[ ]*#|^$|^#" httpd.conf

区分 IncludeIncludeOptional:

  • 在对应目录下不存在相应的配置文件, Include 会报错, 而 IncludeOptional 不会

指定默认页面:

1
DirectoryIndex index.html

如果在指定端口的时候未指定地址, 表示可以通过服务器的任意地址访问 httpd 服务, 如果指定了地址, 则仅能通过该地址访问.

MPM

MPM, Multi-Processing Module, 多进程模块, 用于处理并发请求和管理服务器进程.

可以设置的三种工作模式:

  • Prefork
  • Worker
  • Event

openEuler 中默认为 Event 模式.

静态资源的权限设置

Option 可加的一些参数:

  • Indexes
  • FollowSymLinks, 允许访问目录中软连接文件的源文件
  • None
  • All

AllowOverride 控制 .htaccess 文件的作用:

  • All, .htaccess 中的指令全部有效
  • None, .htaccess 中的指令全部无效
  • AuthConfig

数据压缩

1
2
3
4
5
6
7
8
9
LoadModule deflate_module modules/mod_deflate.so SetOutputFilter

SetOutputFilter DEFLATE
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE application/xhtml+xml

DeflateCompressionLevel 9
BrowserMatch ^Mozilla/4 gzip-only-text/html

日志

1
2
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\"\"%{User-Agent}i\"" combined
CustomLog "log/access_log" combined

HTTPS

1
2
3
4
5
6
SSLCertificateFile /path/file
SSLCertificateKeyFile /path/file
SSLCACertificateFile /path/file

RewriteEngine on
RewriteRule ^(/.*)$ https://%{HTTP_HOST}$1 [redirect=302]

Nginx 简介和配置

默认情况下, Nginx 会创建和服务器 CPU 核心数量相等的 worker 进程. 可通过 worker_processes 调整.

Nginx 的 proxy_pass 用于实现反向代理.

可用 upstream 实现负载均衡.

Master 进程的用户为 root, worker 进程的用户可在全局配置中通过 user 调整.

LVS

Linux Vertual Server.

调度算法

静态调度算法:

  • RR - Round Robin
  • WRR - Weighted Round Robin
  • SH - Source Hash
  • DH - Destination Hash

动态调度算法:
LC, WLC, SED, NQ, LBLC, LBLCR, FO 调度算法的名称分别是什么的缩写:

  • LC - Least Connections
  • WLC - Weighted Least Connections
  • SED - Shortest Expected Delay
  • NQ - Never Queue
  • LBLC - Locality-Based Least Connection
  • LBLCR - Locality-Based Least Connection with Replication
  • FO - Weighted Fail Over
  • OVF - Overflow comnection

HAProxy

High Availability Proxy.

Keepalive

VRRPv2 指 Virtual Router Redundancy Protocol version 2.

Redis

Redis, Remote dictionary server.

Redis 主要用于数据存储, 因此其支持多种数据类型.

Redis 本质上可以视作数据库, 但不同于传统的关系型数据库, 而是 一种键值存储数据库.

将数据持久化:

  • RDB, Redis DataBase: 将数据保存在磁盘
  • AOF, Append-Only File: 以日志形式记录服务器处理

Redis 命令查询:

在 Redis 中, 命令不区分大小写, 但是 key 要区分.

命令行查询:

1
HELP @datatype

如:

1
HELP @string

启用 redis 客户端命令行

1
redis-cli

DAS

DAS, Direct-Attached Storage. 指直接连接到主机或服务器的存储设备

NAS

NAS, Network-Attacked Storage. 指通过网络连接的存储设备.

NFS, Network File System, 适用于 Linux 与 Unix 之间的文件共享, 其只基于 IP 进行认证.

RPC, Remote Procedure Call, 一种通信协议. 用于在分布式系统中实现远程过程调用. 它允许一个计算机程序通过网络调用另一个计算机上的程序或服务, 就像调用本地程序一样.

rpcbind, 是一个用于绑定 RPC 服务和端口号的守护进程. 在某些 UNIX 和 Linux 系统中, rpcbind(或其前身 portmap)负责将远程过程调用(RPC)的程序与其服务端口进行映射. 当客户端发起 RPC 请求时, 它将使用 rpcbind 来确定服务的端口号, 并将请求路由到正确的服务. rpcbind 维护一个 RPC 端口映射表, 用于记录服务程序和其对应的端口号之间的关系

SAN

SAN, Storage Area Network. 一种高速专用网络, 用于连接存储设备和服务器.

iSCSI, Internet Small Computer System Interface, 一种在 TCP/IP 网络上传输 SCSI 命令和数据的存储协议. 它允许计算机通过 IP 网络访问远程存储设备, 将远程存储设备映射为本地的 SCSI 设备.

Initiator, 指发起 iSCSI 连接请求的设备或主机.

Target, 指提供存储资源并接受 iSCSI 连接的设备

LUN, Logical Unit Number, 在 iSCSI 网络中标识和访问存储资源的逻辑单元, 可以是磁盘卷, 磁盘分区, 拟磁盘等

IQN, iSCSI Qualified Name, 用于唯一标识 iSCSI 设备的命名标准. 它是一个由字符串组成的标识符, 通常在 iSCSI 连接建立时用于识别 Initiator 和 Target.

HDFS

Swift

Ceph

Glusterfs

Shell 脚本进阶

条件判断

四种方式:

  • test
  • []
  • [[]]
  • (())

后三者都有 &&, ||! 的逻辑判断.

test

条件成立返回 0.

数值比较

数值比较时, 配合一些比较符:

  • -eq
  • -ne
  • -gt
  • -lt
  • -ge
  • -le

如:

1
2
3
4
5
a=$1
b=$2
if test $a -eq $b; then
echo "a=b"
fi

字符串比较

test 进行字符串比较:

  • -n (nonzero) 非空字符串
  • -z (zero) 空字符串
  • = 相等
  • != 不相等
1
2
3
4
5
a="Hello"
b="hello"
if test "$a" = "$b"; then
echo "a=b"
fi

字符串大小比较时, 用 \> 等.

文件判断

  • -d
  • -f
  • -e
  • -r
  • -w
  • -x
  • -ot
  • -nt
  • -s

逻辑判断

  • -a, and
  • -o, or

如:

1
2
3
if test 1 -eq 2 -o 2 -eq 2; then
echo "ok"
fi

[]

test 相同.

1
[ expression ]

注意这里的空格是必要的.

[[]]

[[]] 对字符串比较增加高级特性 – 添加了模式匹配.

1
[[ expression ]]

(())

(()) 对数值比较增加了高级特性 – 允许使用高级数学表达式.

  • var++
  • var--
  • ++var
  • --var
  • !
  • ~
  • **
  • <<
  • >>
  • &
  • |
  • &&
  • ||

函数

两种语法:

1
2
3
function hello() {
echo "hello"
}

或:

1
2
3
4
hello() {
echo "hello"
return 0
}

$? 记录退出状态码.

默认情况下:

  • 0: 成功
  • 1: 一般性未知错误
  • 2: 命令参数使用错误

查看与删除

set 命令可以查看 shell 中所有的变量和函数.

unset 可以删除当前 shell 中的某个变量或函数.

declare -F 可查看函数列表.

declare -f 可以查看函数的具体定义.

获取函数输出

1
2
3
4
5
hello() {
echo "hello"
}
result=$(hello)
echo $result

参数传递

注意不加括号, 和调用脚本一样:

1
2
3
4
hello() {
echo $1
}
hello "world"

grep

grep, Globally search a Regular Expression and Print.

-c, count, 输出为匹配的行数.

sed 编辑器

Sed, Stream Editor.

Sed 逐行处理内容, 将当前行存储在临时缓冲区中, 用 sed 命令处理缓冲区的内容, 然后输出到屏幕.

Awk

Awk 是一种编程语言.

{} 包裹的就是动作, 没有包裹的就是模式.

系统安全

内核参数

内核参数是操作系统内核中的可配置选项, 用于控制和调整操作系统的行为和性能.

内核参数位于 /proc/sys 目录下.

使用 sysctl 命令控制.

sysctl 是一个在 Unix-like 系统中用于查看和修改内核参数的命令行工具. 它允许用户在运行时访问和修改内核的配置参数, 以便优化系统性能, 调整网络设置, 改变文件系统行为等.

sysctl 可读取和修改内核参数.

若要永久保留内核参数, 需要修改 /etc/sysctl.conf 文件.

rp_filter, 可防止一些 IP 源地址欺骗攻击. 通过比较路由表中数据包应该从哪一个网络接口接收和实际接收的接口进行比较, 从而判断是否将该包丢弃.

accept_redirects, ICMP 重定向信息是路由器向主机提供实时的路由信息, 当一个主
机收到ICMP重定向信息时, 它就会根据这个信息来更新自己的路由表.

授权认证

设置远程登录的警告信息

修改 /etc/issue.net 文件来设置.

在 Archlinux 中似乎是修改 /etc/issue

设置终端的自动退出时间

设置 TMOUT 环境变量.

修改 /etc/profile:

1
export TMOUT=300

GRUB2 加密口令

GRUB, GRand Unified Bootloader.

系统启动时, 可以通过GRUB2界面修改系统的启动参数. 为了确保系统的启动参数不被任意修改, 需要对GRUB2界面进行加密, 仅在输入正确的GRUB2口令时才能修改启动参数

openEuler 默认口令为 openEuler#12.

可通过 grub2-mkpasswd-pbkdf2 来生成新的口令, 通过追加到 grub.cfg 文件中起作用.

1
2
3
set superusers="root"
password_pbkdf2 root
grub.pbkdf2.sha512.10000.5A45748D892672FDA02DD3B6F7AE390AC6E6D532A600D4AC477D25C7D087644697D8A0894DFED9D86DC2A27F4E01D925C46417A225FC099C12DBD3D7D49A7425.2BD2F5BF4907DCC389CC5D165DB85CC3E2C94C8F9A30B01DACAA9CD552B731BA1DD3B7CC2C765704D55B8CD962D2AEF19A753CBE9B8464E2B1EB39A3BB4EAB08

单用户模式

安全单用户模式 (Safe Mode) 是一种特殊的启动模式, 可在操作系统中启动一个最小限度的环境, 以便进行故障排除和修复操作

修改 /etc/sysconfig/init 文件内容:

1
SINGLE=/sbin/sulogin

其会要求输入 root 密码以进入单用户模式.

交互式启动

交互式启动 (Interactive Boot) 是指在计算机系统启动过程中, 用户可以与系统进行交互并进行一些配置或调试操作的模式.

在交互式启动模式下, 系统将在启动过程中暂停, 并且会提供一个命令行界面或菜单供用户输入命令或选择选项. 用户可以通过键盘输入命令或选择菜单选项来进行特定的操作, 例如修改启动参数, 加载特定的驱动程序, 修复文件系统.

关闭交互式启动, 可修改 /etc/sysconfig/init 文件:

1
PROMPT=no

进入紧急救援模式

不同发行版可能不同.

在引导菜单时, 按下 e 以编辑引导选项, 在 linuxlinuxefi 开头的行的末尾添加 rd.break, 按下 F10 开始引导.

rd.break 是一个用于在Linux系统中进入紧急救援模式的内核参数. 通过在启动过程中添加 rd.break 参数, 您可以中断系统的启动, 并进入一个具有有限功能的紧急维护环境.

进入 shell 之后:

1
2
3
mount -o remount,rw /
chroot /sysroot
passwd root

initramfs

initramfs (Initial RAM File System) 是一个临时的根文件系统, 它在Linux启动过程中用于提供必要的驱动程序, 工具和文件, 以便能够成功加载并切换到真正的根文件系统.

屏蔽系统账户

将系统账户的 shell 修改为 /sbin/nologin:

1
usermod -L -s /sbin/nologin systemaccount

限制使用 su 命令的账户

通过修改 /etc/pam.d/su 文件:

1
auth    required    pam_wheel.so  use_uid

更改账户口令复杂度

通过 /etc/pam.d/password-auth/etc/pam.d/system-auth 文件中的 pam_pwquality.sopam_pwhistory.so 模块.

账户口令有效期

通过设置修改 /etc/login.defs 文件来实现. 该文件里的配置对root用户无效.

账户口令的加密算法

通过修改 /etc/pam.d/password-auth/etc/pam.d/system-auth 实现, 如:

1
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok

设置登录失败超过三次后锁定

同样通过修改 /etc/pam.d/password-auth/etc/pam.d/system-auth 实现, 如:

1
2
3
auth    required   pam_faillock.so preauth audit deny=3 even_deny_root unlock_time=300
auth [default=die] pam_faillock.so authfail audit deny=3 even_deny_root unlock_time=300
auth sufficient pam_faillock.so authsucc audit deny=3 even_deny_root unlock_time=300

加固 su 命令

防止使用 su 切换用户时将当前用户环境变量带入其他环境.

修改 /etc/login.defs:

1
ALWAYS_SET_PATH=yes

文件权限加固

删除无主文件

查找:

1
2
find / -nouser
find / -nogroup

空链接文件

查找:

1
find dirname -type l -follow 2>/dev/null

Sticky Bit

粘滞位属性 (Sticky Bit) 是一种在Unix和类Unix系统中应用于目录的特殊权限属性. 当粘滞位属性被设置在一个目录上时, 该目录下的文件只能由文件的所有者, 目录的所有者或超级用户进行删除, 重命名或移动, 即使其他用户具有对该目录的写权限.

粘滞位属性只对目录起作用, 不适用于文件.

设置:

1
chmod 1xxx dirname

或:

1
chmod +t dirname

限制 sudo 命令的使用权限

修改 /etc/sudoers 文件.

网络安全

Netfilter

Netfilter 是嵌入在Linux内核中的一个模块化框架, 于处理网络数据包的过滤和转发。. 被设计为Linux内核的一部分, 供了网络数据包的处理和操作机制.

作为内核框架, Netfilter 提供了一组API (应用程序编程接口), 内核模块, 驱动程序和用户空间工具与其进行交互.

工作模式:

(依靠 hooks 进行操控)

每个进入网络系统的包在经过协议栈时都会触发这些 hook.

5 个 hooks 包括:

  • NF_IP_PRE_ROUTING
  • NF_IP_LOCAL_IN
  • NF_IP_FORWARD
  • NF_IP_LOCAL_OUT
  • NF_IP_POST_ROUTING

示意图:

Iptables

iptables 是一个命令行工具, 用于配置和管理 Netfilter 框架中的过滤规则.

示意图:

用于串联多个规则, 用于将相同功能的规则集合起来.

五个表:

  • Filter
  • Nat
  • Mangle
  • Raw
  • Security

五条基本的链:

  • PREROUTING
  • INPUT
  • FORWARD
  • OUTPUT
  • POSTROUTING

内核在注册处理函数时提供了优先级, 以便 hook 触发时能按照优先级高低调用处理函数.

有会话表来记录连接的状态.

Nftables

Nftables(Netfilter Tables)是Linux内核中的一个新一代网络过滤框架,用于处理网络数据包的过滤, 转发和网络地址转换(NAT)等功能。它是 iptables 的继任者,旨在提供更强大, 更灵活和更高效的网络过滤和控制功能

接口为 nft 命令.

Firewalld

Firewalld 是一个位于用户空间的动态防火墙管理工具, 用于配置和管理防火墙规则。它是为了简化防火墙配置而开发的, 与传统的 iptables 相比, Firewalld 提供了更高级, 更易于使用的接口.

Firewalld 曾使用 iptables 命令来直接配置 iptables, 目前使用的nft 来管理防火墙规则.

D-Bus
D-Bus, Desktop Bus, 一个用于在计算机软件之间进行通信的系统总线. 它提供了一种机制, 使得不同进程之间可以相互通信, 从而能够在一个桌面环境中协调各种软件组件的工作.


Firewalld 是通过策略来对进出网络的访问行为进行控制, 默认拒绝所有流量.

区域

Firewalld 中用 “区域” 的概念来管理.

区域中通过 “连接, 接口, 源地址” 来给于权限:

配置

配置文件位于:

  • /usr/lib/firewalld
  • /etc/firewalld

SELinux

SELinux, Security-Enhanced Linux.

系统监控

性能查看

查看 CPU 资源利用率:

  • CPU 资源利用率:
    • mpstat, top, ps
  • 上下文切换:
    • pidstat, vmstat
  • 平均负载:
    • uptime, top

查看系统内存, 包括 memory, swap, buffer, cache: free, vmstat

查看进程内存, 包括 VIRT(虚拟内存), RSE(驻留内存), SHR (共享内存): top

查看 IOPS 和吞吐量: iostat, sar

查看网络连接状态, 响应时间, 带宽: netstat, ping, sar, iperf3

Mariadb 部分操作

配置 root 用户密码

1
> alter user root@'localhost' identified by '123';

查看用户和主机

1
> select user,host from mysql.user;

创建一个允许一个网段登录的用户

1
> CREATE USER test@'192.168.1.%' identified by '123';

对所有网段放行:

1
> CREATE USER test@'%' identified by '123';

或者修改 user 的 HOST 属性:

1
> UPDATE user SET HOST='%' WHERE user LIKE 'xxx';

添加权限

1
> GRANT SELECT ON xxx.xxx TO xxx@'xxx';

修改表名

1
> ALTER TABLE Vegetables rename as Vegetable1;

mariadb-admin 使用

查看 Mariadb 状态

1
mariadb-admin -uroot -p'123' status

查看版本信息

1
mariadb-admin -uroot -p'123' version

查看活动线程

1
mariadb-admin -uroot -p'123' processlist

刷新表, 线程等

1
2
3
mariadb-admin -uroot -p'123' flush-tables
mariadb-admin -uroot -p'123' flush-threads
mariadb-admin -uroot -p'123' flush-logs

查看连接状态

1
mariadb-admin -uroot -p'123' ping

创建和删除数据库

1
2
mariadb-admin -uroot -p'123' create test
mariadb-admin -uroot -p'123' drop test

OpenEuler-HCIP-Notes
http://example.com/2023/11/12/OpenEuler-HCIP-Notes/
作者
Jie
发布于
2023年11月12日
许可协议