ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

awk,linux系统启动流程和systemd,加密技术

2022-06-24 01:01:37  阅读:7  来源: 互联网

标签:cbc systemd 系统启动 加密 证书 openssl key root 加密技术


文本处理之AWK

gawk:模式扫描和处理语言,可以实现下面功能

文本处理

输出格式化的文本报表

执行算数运算

执行字符串操作

格式:

awk [options] 'program' var=value file…

awk [options] -f programfile var=value file…

说明:

program通常是被放在单引号中,并可以由三种部分组成

BEGIN语句块 :通用语句块之前执行,常用于打印表头

模式匹配的通用语句块:文本处理语句

END语句块 :通用语句块之后执行,常做统计用

常见选项:

-F “分隔符” 指明输入时用到的字段分隔符,默认的分隔符是若干个连续空白符

-v var=value 变量赋值

Program格式:

pattern{action statements;..}

pattern:决定动作语句何时触发及触发事件,比如:BEGIN,END,正则表达式等

action statements:对数据进行处理,放在{}内指明,常见:print, printf

2 动作 print

print item1, item2, …

说明:

逗号分隔符

输出item可以字符串,也可是数值;当前记录的字段、变量或awk的表达式

如省略item,相当于print $0

固定字符符需要用“ ” 引起来,而变量和数字不需要

3.常见内置变量

FS:输入字段分隔符,默认为空白字符,功能相当于 -F,以变量的方式指定分隔符,可用于后续调用

OFS:输出字段分隔符,默认为空白字符 ,指定输出时的分隔符

NF:字段数量 ,字段一般指用分割符隔断的列数或段数

#引用变量时,变量前不需加$

一般把行成为记录,NR:记录的编号

FNR:各文件分别计数,记录的编号

范例:
1.取出各分区利用率,过滤第一行
[root@centos7 ~]# df | awk 'NR>1{print $1,$5}'
devtmpfs 0%
tmpfs 0%
tmpfs 2%
tmpfs 0%
/dev/sda2 2%
/dev/sda3 1%
/dev/sda1 14%
tmpfs 0%
2.取ip地址
[root@centos7 ~]# ip addr show eth0 |awk '/inet /{print $2}'
10.0.0.17/24
3.利用变量NR,取特定位
倒数第二段
[root@centos7 ~]# awk -F: '{print $(NF-1)}' /etc/passwd
/root
/bin
/sbin
/var/adm
/var/spool/lpd

awk '{ip[$1]++}END{for(i in ip){print i,ip[i]}}' /var/log/httpd/access_log  此格式常用于取出日志中每个IP的访问次数

启动流程和系统服务

Linux启动流程

centos6启动流程

加电自检-->bootloader-->加载GRUB程序引导内核程序,根据grub.cnf文件将虚拟镜像加载到内存-->根据虚拟镜像加载文件系统-->执行init程序。根据inittab文件确定运行级别,执行rc.d下启动脚本-->执行rc.local

centos7启动流程

加电自检-->bootloader-->加载GRUB2程序引导内核程序,根据grub2.cfg文件将虚拟镜像加载到内存-->根据虚拟镜像加载文件系统-->/usr/lib/systemd/systemd初始化脚本

systemd

Systemd:从 CentOS 7 版本之后开始用 systemd 实现init进程,系统启动和服务器守护进程管理器,负责在系统启动或运行时,激活系统资源,服务器进程和其它进程
Systemd新特性
系统引导时实现服务并行启动
按需启动守护进程
自动化的服务依赖关系管理
同时采用socket式与D-Bus总线式激活服务
socket与服务程序分离
向后兼容sysv init脚本
使用systemctl 命令管理,systemctl命令固定不变,不可扩展,非由systemd启动的服务,
systemctl无法与之通信和控制
系统状态快照
systemd 核心概念:unit
unit表示不同类型的systemd对象,通过配置文件进行标识和配置;文件中主要包含了系统服务、监听socket、保存的系统快照以及其它与init相关的信息

unit的配置文件

/usr/lib/systemd/system #每个服务最主要的启动脚本设置,类似于之前的/etc/init.d/
/lib/systemd/system #ubutun的对应目录
/run/systemd/system #系统执行过程中所产生的服务脚本,比上面目录优先运行
/etc/systemd/system #管理员建立的执行脚本,类似于/etc/rcN.d/Sxx的功能,比上面目录优先运行

unit的文件格式

service unit file文件通常由三部分组成:
[Unit]:定义与Unit类型无关的通用选项;用于提供unit的描述信息、unit行为及依赖关系等
[Service]:与特定类型相关的专用选项;此处为Service类型
[Install]:定义由“systemctl enable”以及"systemctl disable“命令在实现服务启用或禁用时用到 的一些选项

[Unit]
Description=The Nginx HTTP Server daemon # 描述信息
After=network.target remote-fs.target nss-lookup.target # 指定启动nginx之前需要其他
的其他服务,如network.target等
[Service]
# Type为服务类型,仅启动一个主进程的服务为simple,需要启动若干子进程的服务为forking
Type=forking 
# 设置执行systemctl start nginx后需要启动的具体命令
ExecStart=/usr/local/nginx/sbin/nginx
# 设置执行systemctl reload nginx后需要执行的具体命令
ExecReload=/usr/local/nginx/sbin/nginx -s reload
# 设置执行systemctl stop nginx后需要执行的具体命令
ExecStop=/bin/kill -s QUIT ${MAINPID}
[Install]
# 设置在什么模式下被安装,设置开机启动的时候需要
WantedBy=multi-user.target

unit文件创建完成后执行,通知systemd重载此配置文件
[root@centos8 ~]#systemctl daemon-reload

加密和CA

加密

常见加密算法:对称加密,非对称加密,hash

对称加密算法:加密和解密使用同一个密钥
特性:
加密、解密使用同一个密钥,效率高
将原始数据分割成固定大小的块,逐个进行加密
缺陷:
密钥过多
密钥分发
数据来源无法确认

非对称加密算法:密钥是成对出现 ,使用公钥加密,使用与之对应的私钥解密

公钥:public key,公开给所有人,主要给别人加密使用
私钥:secret key,private key 自己留存,必须保证其私密性,用于自已加密签名
特点:用公钥加密数据,只能使用与之配对的私钥解密;反之亦然
功能:
数据加密:适合加密较小数据,比如: 加密对称密钥

hash :也称为散列算法,将任意数据缩小成固定大小的“指纹”,称为digest,即摘要

特性:

​ 任意长度输入,固定长度输出

​ 若修改数据,指纹也会改变,且有雪崩效应,数据的一点微小改变,生成的指纹值变化非常大。

​ 无法从指纹中重新生成数据,即不要逆,具有单向性

功能:

​ 数据完整性

密钥交换:

​ 公钥加密:用目标的公钥加密对称密钥

​ DH (Deffie-Hellman):生成对称(会话)密钥

DH实现过程:

A: g,p 协商生成公开的整数g, 大素数p
B: g,p
A:生成隐私数据:a (a<p),计算得出 g^a%p,发送给B
B:生成隐私数据:b,(b<p),计算得出 g^b%p,发送给A
A:计算得出 [(g^b%p)^a]%p = g^ab%p,生成为密钥
B:计算得出 [(g^a%p)^b]%p = g^ab%p,生成为密钥

CA和证书

CA是证书的签发机构,它是公钥基础设施(Public Key Infrastructure,PKI)的核心。CA是负责签发证书、认证证书、管理已颁发证书的机关。

PKI:Public Key Infrastructure 公共密钥加密体系
签证机构:CA(Certificate Authority)
注册机构:RA
证书吊销列表:CRL
证书存取库: X.509:定义了证书的结构以及认证协议标准 版本号 序列号 签名算法 颁发者 有效期限 主体名称
证书类型: 证书授权机构的证书 服务器证书
用户证书获取证书两种方法:
自签名的证书: 自已签发自己的公钥
使用证书授权机构: 生成证书请求(csr) 将证书请求csr发送给CA CA签名颁发证书

openssl

openssl:开放式[安全套接层协议]

包括三个组件:
libcrypto:用于实现加密和解密的库
libssl:用于实现ssl通信协议的安全库
openssl:多用途命令行工具

Base64是网络上最常见的用于传输 8Bit 字节码的编码方式之一,Base64就是一种基于64个可打印字符 来表示二进制数据的方法

两种运行模式:

​ 交互模式

​ 批处理模式

三种子命令:

​ 标准命令

​ 消息摘要命令

​ 加密命令

Standard commands
asn1parse         ca                ciphers           cms               
crl               crl2pkcs7         dgst              dh                
dhparam           dsa               dsaparam          ec                
ecparam           enc               engine            errstr            
gendh             gendsa            genpkey           genrsa            
nseq              ocsp              passwd            pkcs12            
pkcs7             pkcs8             pkey              pkeyparam         
pkeyutl           prime             rand              req               
rsa               rsautl            s_client          s_server          
s_time            sess_id           smime             speed             
spkac             ts                verify            version           
x509              

Message Digest commands (see the `dgst' command for more details)
md2               md4               md5               rmd160            
sha               sha1              

Cipher commands (see the `enc' command for more details)
aes-128-cbc       aes-128-ecb       aes-192-cbc       aes-192-ecb       
aes-256-cbc       aes-256-ecb       base64            bf                
bf-cbc            bf-cfb            bf-ecb            bf-ofb            
camellia-128-cbc  camellia-128-ecb  camellia-192-cbc  camellia-192-ecb  
camellia-256-cbc  camellia-256-ecb  cast              cast-cbc          
cast5-cbc         cast5-cfb         cast5-ecb         cast5-ofb         
des               des-cbc           des-cfb           des-ecb           
des-ede           des-ede-cbc       des-ede-cfb       des-ede-ofb       
des-ede3          des-ede3-cbc      des-ede3-cfb      des-ede3-ofb      
des-ofb           des3              desx              idea              
idea-cbc          idea-cfb          idea-ecb          idea-ofb          
rc2               rc2-40-cbc        rc2-64-cbc        rc2-cbc           
rc2-cfb           rc2-ecb           rc2-ofb           rc4               
rc4-40            rc5               rc5-cbc           rc5-cfb           
rc5-ecb           rc5-ofb           seed              seed-cbc          
seed-cfb          seed-ecb          seed-ofb          zlib              


标准命令和摘要命令可查看man帮助,或通过交互方式 --help查看

openssl命令对称加密
[root@centos7 data]# openssl enc -e -des3 -a -salt -in passwd -out passwd.crypto
enter des-ede3-cbc encryption password:
Verifying - enter des-ede3-cbc encryption password:
解密:
[root@centos7 data]# openssl enc -d -des3 -a -salt -in passwd.crypto -out passwd.txt
enter des-ede3-cbc decryption password:

openssl命令单向哈希加密
[root@centos7 data]# openssl md5 passwd
MD5(passwd)= 388824fe0e2029fba5ef752f0e0fab2c
[root@centos7 data]# openssl sha512 passwd
SHA512(passwd)= 30ca186746000663a979473f1951e4c96215a3239bf17dc96cae4fbf7eeb6fac505ea327769c19e62a443d15c47ceeeb3ce56a8e947628ccc3e351ed2c36b2d2
[root@centos7 data]# openssl dgst passwd
MD5(passwd)= 388824fe0e2029fba5ef752f0e0fab2c

openssl 命令生成用户密码
[root@localhost ~]# openssl passwd  --help
Usage: passwd [options]
Valid options are:
 -help               Display this summary
 -in infile          Read passwords from file
 -noverify           Never verify when reading password from terminal
 -quiet              No warnings
 -table              Format output as table
 -reverse            Switch table columns
 -salt val           Use provided salt
 -stdin              Read passwords from stdin
 -6                  SHA512-based password algorithm
 -5                  SHA256-based password algorithm
 -apr1               MD5-based password algorithm, Apache variant
 -1                  MD5-based password algorithm
 -aixmd5             AIX MD5-based password algorithm
 -crypt              Standard Unix password algorithm (default)
 -rand val           Load the file(s) into the random number generator
 -writerand outfile  Write random data to the specified file
[root@localhost ~]# openssl passwd -6 123456
$6$Tv.eATpT4Ljy9QU6$dF3Hp0oU8rOCXjpsiMOuu6LyKDOPHlZrkyqRij2bReje1tmfZ5RZEdUJXHyBL3mqKKdksecDchOZfYaeyrwL9/
[root@localhost ~]# openssl passwd -6 -salt centos 123456
$6$centos$NulCOw5VeDxNl4A26gQuhdhugHb3n/ZlAzqnw1h7/9S./4F2zj0kbQUtGIVW4hozP1xLLuGM/Q8fbvTxcvvaX/


openssl命令生成随机数
[root@localhost ~]# openssl rand -base64 5
HjJD9Rw=


openssl命令实现 PKI
生成私钥
[root@localhost ~]# openssl genrsa -out test.key 2048
Generating RSA private key, 2048 bit long modulus (2 primes)
...................................................................+++++
....................+++++
e is 65537 (0x010001)
[root@localhost ~]# ls
anaconda-ks.cfg  test.key

提取公钥
[root@localhost ~]# openssl rsa -in test.key -pubout -out key.pub
writing RSA key
[root@localhost ~]# ls
anaconda-ks.cfg  key.pub  test.key
[root@localhost ~]# cat key.pub 
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzZdcGvHeBSC9TPcszY9H
Az5XSKGZs8KXhxyhE52XdYjdOSme3o1VbIDAJStfaBabBPsM8QyTv2kv8ec8jdZ2
hTlvHIjGY4Vi9ZwRA8nxvVbzsoNBbGpWHHwEBMjuVeqAiBTtSWLdLnjNlDpbovpk
Z+ewsJZJkwl4oNM1/hMptAvAI+6Pn5AwTEDJbKQxFwri4cd35tFmRen6pDmAHQ2n
JS5DSNKskvMvvHFmvERrikMOk+H1cQPt3RMXP4/JO1qWjLQRSceutB+ygOpRyv0t
0HCikt+4DQ6PBWGd/imj2I4hGANXarGMpEGdu4Pm3Yl2/py/WCTZ6U80BdxaDho1
RQIDAQAB
-----END PUBLIC KEY-----
[root@localhost ~]# cat test.key 
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAzZdcGvHeBSC9TPcszY9HAz5XSKGZs8KXhxyhE52XdYjdOSme
3o1VbIDAJStfaBabBPsM8QyTv2kv8ec8jdZ2hTlvHIjGY4Vi9ZwRA8nxvVbzsoNB
bGpWHHwEBMjuVeqAiBTtSWLdLnjNlDpbovpkZ+ewsJZJkwl4oNM1/hMptAvAI+6P
n5AwTEDJbKQxFwri4cd35tFmRen6pDmAHQ2nJS5DSNKskvMvvHFmvERrikMOk+H1
cQPt3RMXP4/JO1qWjLQRSceutB+ygOpRyv0t0HCikt+4DQ6PBWGd/imj2I4hGANX
arGMpEGdu4Pm3Yl2/py/WCTZ6U80BdxaDho1RQIDAQABAoIBADatqMtpxFisymvr
2TiagJJ2RBSHFi/e8xn2HUjwQtX5noyTazNZd3yyCWhZTriKOpRqiJibdbgUq7G0
hEBc54yrJ8f5AHp7gUQ9S7EsRmTK+Wliy0WgSmKtAQycu/aRtbl7h1hbOOQhMNvZ
YYHJAmc4EaAFeG/otvJe+h8mzZKaiz5/pD/cqmDNm5hZSN0kNJJ4s1yT/kC+D5u4
TC9rxoUkfrfZjtqEDy91QbN7xuoc/ZZsj7vfB2RBh2sGPKQyIj8WCpi8QARYPoXy
Hz7DZ3b74H7V3+fVV/SzK7u75jkiCkQ85raGkw5D3csosZYJxCv+yKK+MlNw2oqs
wG4WkMkCgYEA8cnAykYSN1X2yK3yXzl5cb/8t0ksV4GaohC/QDRotGeclkdA6LIp
lWHLaDhlZGNeToNvkKzbTXFjYmNpamxL7D4jmdcy51DCSqT1QD4kpTDnE0OSZM8q
J3+KNdJKOB/HN7o8rBepDe8lF2t01VYBpOc6lQ5Fq09GIcNDSV+Y5PcCgYEA2azx
irmfMRNPuaEpARf6hOuqS76kVyoeKu5dMxOApFsAkS7rdwhuC+xtovkN523OKmEy
D5LMUB7yPq16iJpCecMW3Dh3N4gjWUHZNDMCNoPvUjq7/3g2PseQuaSyLzlnmYWe
yzvO7ULjp4y9Xd0FMEUbEb0CF8Do/pYIQuZj9KMCgYATTXgGrfFmWYaKHtjqoTwA
yML0HvNbSQ1/QrcB+S0iueLWXHniGdcYBeanO1lc2lH9EqEle6dGV3cHs8gGpv6o
rY1KCtQVg2z/aIvrxQpH5c+Myig1xBQpcxUlltQ2BtNwr32If5sPcbgUVo/NOECJ
WaxjmfAV7Q48Q8prYSZjoQKBgQDD8mXAvlWqRLsI3CVgQaiXTNmQs72WZWigttAY
8V5lFTJOfxEhpuoBO8R55353rSXginwY/smC+kiQ2XMrUsmyeEa02POgfqFrcNZI
of5E+sFNoWeokhsqqlUCeFqaHi+/SERoqJ8ef48VPaEdxJ8uE5dJgX5HybUzr/Uh
2+lwxwKBgESIgyDdg4rWX/NoAjNBKao7FA6KSUCbyLGHZPjQ97ZwR00c2dpz/OO/
b1VCG3Xe6HhFSCnh33GYnV2IT2i0UegAK9HlaIL69n/wxnxsIFGgGKpD/cGoWZmR
JI7y33iK0qZIniomiMb6UVxvZ30hAHr8Yq5iXAKgC9axHFDRzinb
-----END RSA PRIVATE KEY-----


生成加密key
[root@localhost data]# openssl genrsa -out test2.key -des3 1024
Generating RSA private key, 1024 bit long modulus (2 primes)
...+++++
..............+++++
e is 65537 (0x010001)
Enter pass phrase for test2.key:
Verifying - Enter pass phrase for test2.key:

解密key
[root@localhost data]# openssl rsa -in test2.key -out test2.key 
Enter pass phrase for test2.key:
writing RSA key

http协议

HTTPS 协议:就是“HTTP 协议”和“SSL/TLS 协议”的组合。HTTP over SSL 或 HTTP over TLS ,对http协 议的文本数据进行加密处理后,成为二进制形式传输

HTTPS工作简化过程:

1.用户发起https请求连接到服务器443端口

2.服务端将证书传送给客户端,证书内包含公钥和证书信息

3.客户端验证证书是否有效,证书有效,客户端使用从证书内获得的公钥进行非对称加密自身生成的一个随机值,传送给服务端

4.服务端使用私钥解密获得随机值,并将数据使用随机值进行对称加密发送给客户端

5.客户端使用自身生成的随机值解密服务端发送数据,获得内容

作业

1、解决DOS攻击生产案例:根据web日志或者或者网络连接数,监控当某个IP 并发连接数或者短时内PV达到100,即调用防火墙命令封掉对应的IP,监控频 率每隔5分钟。防火墙命令为:iptables -A INPUT -s IP -j REJECT
#!/bin/bash
#通过awk取出PV大于100的ip地址和现已有的防火墙规则ip,通过对比找出不是现有防火墙规则的ip添加到iptables
awk -F' ' '{ip[$1]++}END{for(i in ip){if(ip[i]>100){print i}}}' access_log >ip.txt
iptables -nL | awk '/REJECT/{print $4}' >iptables.txt
#可通过比较两个文件获取未添加规则的ip
#grep -vf iptables.txt ip.txt > ip_new.txt
#while read line
#do
#        iptables -A INPUT -s ${line} -j REJECT
#done < ip_new.txt
while read line
do
        grep ${line} iptables.txt >/dev/null && echo "${line} is ok " || iptables -A INPUT -s ${line} -j REJECT
done < ip.txt


2、描述密钥交换的过程
对称加密:加密方和解密方协商使用同一个密钥进行加密和解密
非对称加密:加密方和解密方各自拥有一组公钥和密钥,并将各自密钥发布,加密方使用解密方公钥对数据进行加密发送给解密方,解密方使用自身密钥对加密数据进行解密
DH:
	1.双方协商出公开的证书g,大素数p
	2.双方各自生成隐秘数据a,b(a,b<p),并根据公式g^a(b)%p,得出B,A发送给对方
	3.双方将得到的B,A对p进行取模运算:[(g^b%p)^a]%p = g^ab%p,生成各自的密钥


3、https的通信过程
	1.用户发起https请求连接到服务器443端口
	2.服务端将证书传送给客户端,证书内包含公钥和证书信息
	3.客户端验证证书是否有效,证书有效,客户端使用从证书内获得的公钥进行非对称加密自身生成的一个随机值,传送给服务端
	4.服务端使用私钥解密获得随机值,并将数据使用随机值进行对称加密发送给客户端
	5.客户端使用自身生成的随机值解密服务端发送数据,获得内容
	
4、使用awk以冒号分隔获取/ettc/passwd文件第一列
[root@localhost data]# awk -F':' '{print $1}' /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
games
ftp
nobody
dbus
systemd-coredump
systemd-resolve
tss
polkitd
unbound
sssd
sshd

标签:cbc,systemd,系统启动,加密,证书,openssl,key,root,加密技术
来源: https://www.cnblogs.com/N62030/p/16407312.html

专注分享技术,共同学习,共同进步。侵权联系[admin#icode9.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有