1.1 安全概述
1.1.1安全现状
无论什么时候我们的服务器都有可能出现隐患处于可能被攻击的状态没人能考虑到方方面面WEB层面软件本身和浏览器级别的漏洞挖漏洞是代码相关的漏洞所有暴露出来的信息都会让别人根据这些信息猜到其他的信息
安全防护的目标:
1 数据来源的 安全保证 -- 客户端安全
2 数据处理的 安全保证 -- 服务端安全
3 数据传输的 安全保证 -- 数据通信级别安全安全设计原则:
使用成熟的安全系统
以小人之心度输入数据
外部系统是不安全的
最小授权
减少外部接口
缺省使用安全模式
安全不是似是而非
从STRIDE思考
在入口处检查
从管理上保护好你的系统
常用安全技术:
认证
授权
审计
安全通信
任何一个地方只要开启权限都有可能有隐患尽量让具有权限的地方权限小一些
1.1.2加密算法
加密算法主要定位是通信级别安全,通信双方以那种数据格式进行通信,传输信息的时候不被别人看到数据传输过程中没有被修改被破坏同行双方是互相承认的,加密算法是将明文转换为密文称为加密 ,解密是加密的逆向过程
加密算法分为三大类:
对称加密算法
加密和解密使用相同的密钥。
特性: - 加密、解密使用同一个密钥,效率高; - 将原始数据分割成固定大小的块,逐个进行加密
缺陷: - 密钥过多 - 密钥分发 - 数据来源无法确认
非对称加密算法
采用配对的公钥(public key)和私钥(secret key)对数据进行加解密操作
功能: - 数据加密:适合加密较小数据,
比如: 加密对称密钥 - 数字签名:主要在于让接收方确认发送方身份
缺点: - 密钥长,算法复杂 - 加密解密效率低下
单项加密
单向加密是一种不可逆的加密算法,它只能将明文加密成密文,而无法通过密文还原为明文。通常用于数 据完整性验证和密码存储等场景。确保数据完整性
特性: - 任意长度输入,固定长度输出。
若修改数据,指纹也会改变,且有雪崩效应,数据的一点微小改变,生成的指纹值变化非常大。
无法从指纹中重新生成数据,即不可逆,具有单向性。 功能:数据完整性
1.1.3 加密应用
单项加密
+-------------------+ +-------------------+ | 原始数据 (Input) | --> | 哈希函数 (Hash) | +-------------------+ +-------------------+ | | | 数据 (Data) | 哈希值 (Hash Value) v v +-------------------+ +-------------------+ | 哈希值 (Digest) | <----| | +-------------------+ +-------------------+
- 准备原始数据:- 确定要进行哈希处理的数据。这可以是任何形式的数据,比如文本、文件或其他数据结构。
- 选择哈希算法:- 根据安全性要求选择合适的哈希算法。例如,MD5 由于其安全性较低,现在较少用于安全相关的应用;而 SHA-256 则因其较高的安全性而被广泛采用。
- 执行哈希操作:- 使用所选的哈希算法对原始数据进行处理,生成哈希值。
- 使用哈希值:- 哈希值可以用于多种目的,如数据完整性校验、密码存储等。由于哈希值是固定的,可以将其存储起来,以便后续比对。
对称加密
+-------------------+ +-------------------+ | 明文 (Plaintext) | --> | 加密算法 (Encrypt)| +-------------------+ +-------------------+ | | | 密钥 (Key) | 密钥 (Key) v v +-------------------+ +-------------------+ | 密文 (Ciphertext)| <-- | 解密算法 (Decrypt)| +-------------------+ +-------------------+
生成一个安全的密钥,通常使用随机数生成器来生成密钥。
使用生成的密钥和选定的加密算法对明文进行加密,得到密文。
将密文传输给接收方。传输过程中,密文应该是安全的,即使被截获也无法轻易解密。
接收方使用相同的密钥和解密算法对密文进行解密,恢复成明文。
非对称加密算法
+-------------------+ +-------------------+ | 明文 (Plaintext) | --> | 公钥加密 (Encrypt)| +-------------------+ +-------------------+ | | | 公钥 (Public Key) | 私钥 (Private Key) v v +-------------------+ +-------------------+ | 密文 (Ciphertext)| <-- | 私钥解密 (Decrypt)| +-------------------+ +-------------------+
- **公钥 (Public Key)**:- 这是一对密钥中的公开部分,任何人都可以用来加密数据。公钥通常被广泛分享。
- **私钥 (Private Key)**:- 这是一对密钥中的保密部分,只有数据的接收方知道。私钥用于解密由公钥加密的数据。
- **公钥加密 (Encrypt)**:- 使用接收方的公钥和加密算法将明文转换为密文。常见的非对称加密算法包括 RSA、ECC(椭圆曲线密码学)等。
- **密文 (Ciphertext)**:- 这是经过加密后的数据,通常看起来是随机的、无意义的字节序列。
- **私钥解密 (Decrypt)**:- 使用接收方的私钥和解密算法将密文还原为明文。解密算法是加密算法的逆过程。
1.1.4证书&协议
中间人攻击(Man-in-the-Middle Attack,简称MITM攻击)是一种常见的网络安全攻击类型,它涉 及攻击者在两个通信实体之间插入自己,从而窃听、篡改或干扰他们之间的通信。 中间人攻击的基本原理是攻击者通过某种手段,如ARP欺骗、DNS劫持、Wi-Fi劫持等方式,让通信双方 误以为与对方直接通信,而实际上所有的通信都经过攻击者控制的中间环节。在这个过程中,攻击者可以窃取 双方的敏感信息,如账号密码、信用卡信息等,也可以篡改通信内容,导致双方交互的结果出现问题。
CA和证书
Linux的CA(Certificate Authority)认证是一种用于确保网络通信安全的技术。CA认证,即证书 颁发机构认证,是一种通过数字证书来验证通信双方身份的技术。在Linux系统中,CA认证通常依赖于 OpenSSL库来实现加密和签名功能。数字证书由CA机构颁发,用于证明证书持有者的身份,并加密网络通信。 注意:CA机构的公钥已经内置在操作系统中了,操作系统已经天然的相信它了。
主要作用: 身份验证:通过验证证书持有者的身份,确保通信双方的身份真实可靠。 数据加密:通过加密网络通信,保护数据传输的安全性和完整性。 数据签名:通过数字签名,确保数据的完整性和不可篡改性。 涉及的证书: 证书授权机构的证书、服务器证书、用户证书
CA认证流程
安装OpenSSL库:OpenSSL库是Linux CA认证的核心组件,用于实现加密和签名功能。 生成私钥和公钥:使用OpenSSL命令生成私钥和公钥。私钥用于签名,公钥用于验证签名。 生成CA证书:使用私钥对包含公钥和用户身份信息的证书签名请求(CSR)进行签名,生成CA证书。 安装CA证书:将生成的CA证书复制到适当的目录,供系统或其他应用程序使用
获取证书两种方法
自签名的证书: 自已签发自己的公钥 使用证书授权机构:1 生成证书请求 csr;2 将证书请求csr 发送给CA;3 CA 颁发签名证书
1.1.5 安全协议 SSL/TLS
SL(Secure Sockets Layer)和 TLS(Transport Layer Security)是用于在网络通信中提供安全性的协议。它们主要用于保护客户端和服务器之间的数据传输,确保数据的完整性和机密性。
数据加密:SSL/TLS协议能够对传输的数据进行加密,从而防止数据在传输过程中被窃听或篡改。
身份验证:通过证书认证机制,SSL/TLS协议可以确保通信双方的身份真实可靠。
数据完整性:传送的消息包括消息完整性检查(如使用MAC),以确保数据在传输过程中未被篡改
应用场景
SSL/TLS协议广泛应用于各种需要保障网络通信安全的场景 Web浏览器与服务器之间的通信:通过HTTPS协议,确保用户浏览网页时的数据安全。电子邮件客户端与服务器之间的通信:通过SMTPS、IMAPS等协议,确保邮件传输过程中的数据安全。移动应用与服务器之间的通信:通过HTTPS或其他安全协议,确保移动应用与服务器之间的数据传输安全
HTTPS
HTTPS 协议:就是“HTTP 协议”和“SSL/TLS 协议”的组合。HTTP over SSL 或 HTTP over TLS ,对http协议的文本数据进行加密处理后,成为二进制形式传输。
2.命令
2.1 Base64编码
简介:
Base64是网络上最常见的用于传输 8Bit 字节码的编码方式之一,Base64就是一种基于64个可打印字 符来表示二进制数据的方法。
base64的编码过程如下:
1 将每3个字节放入一个24位的缓冲区中, 最后不足3个字节的,缓冲区的剩余部分用0来填补。 2 然后每次取出6位(2的6次方为64,使用64个字符即可表示所有),将高2位用0来填充,组成一个新的字 节, 计算出这个新字节的十进制值,对应上面的编码表,输出相应的字符。 3 这样不断地进行下去,就可完成对所有数据的编码工作。
使用方法
echo xxx | base64 进行编码
echo xxx | base64 -d 进行解码
base编码不足3个字节的,缓冲区的剩余部分用0来填=代表0
取消换行符 echo默认有换行符
-d 破解密文
2.2 openssl 命令
定位:主要包括对称加密(DES、3DES、AES等),非对称加密(RSA),散列(MD5、SHA1等) 以及证书的相关操作(创建、申请、颁发、吊销等)。
openssl将子命令分为三类
子命令类型EN备注标准命令Standard commands消息摘要命令Message Digest commands配合不同算法加密命令Cipher commands配合不同算法
秘钥管理命令提示: openssl command [ command_opts ] [ command_args ] openssl:命令的起始部分,表示调用 OpenSSL 工具。 command:要执行的 OpenSSL 命令,如 genrsa、req、x509 等。 options:可选参数,用于修改命令的行为。这些选项通常以 - 或 -- 开头,后跟一个或多个字母或 单词。 arguments:命令的必需或可选参数,如文件路径、密钥大小、证书有效期等。 查看加密概览信息 openssl list [ standard-commands | digest-commands | cipher-commands | cipheralgorithms | digest-algorithms | public-key-algorithms
使用md5对摘要信息进行操作
使用sha512对摘要信息进行加密
2.2.1密码实践
通过 openssl passwd 可以生成用户密码
命令格:openssl passwd [options...] STRING
常用选项:
-1 #使用MD5 加密算法
-6 #使用SHA512 算法加密
-5 #使用SHA256 算法加密
-stdin #从标准输入接收要加密的内容
-salt val #手动指定盐值,默认每次自动随机生成
一般选项:
-help #获取帮助信息
-in infile #从文件读取要加密的内容
-noverify #从标准输入接收密码时,不用输两次
-quiet #不输出告警信息
-table #以表格形式输出
-apr1 #使用 apache 特有的MD5 算法加密
-aixmd5 #使用AIX MD5 加密算法
-rand val #将文件加到随机数生成器
-writerand outfile #将此过程中产生的随机数写到指定文件
-crypt #标准unix密码加密算法,旧版中默认项,目前已废弃 #如果想要使用,可以单独使用crypt命令
交互式
指定加密算法
从标准输入读取
指定盐值abc1234来加密
2.2.2 随机数
命令格式;
openssl rand [options...] NUM
参数解析:
NUM #字符个数
-help #获取帮助信息
-out outfile #输出到指定文件
-rand val #将文件加到随机数生成器
-writerand outfile #将此过程中产生的随机数写到指定文件
-base64 #base64编码后显示
-hex #16进制显示
-engine val #指定随机数发生设备
直接使用会乱码默认是以二进制输出不一定都是可打印字符
转base64不够加=号补齐
16进制显示,一个字节可表示8个二进制,一个16进制可表示4个二进制,所以一个字节可以表示2个16进制
生成随机十位长度密码
2.2.3 密钥对
命令格式解读
生成私钥,私钥包含公钥信息
openssl genrsa [options...] [NUM]
常用选项
NUM #指定密钥长度,单位bit,默认2048
-out outfile #输出到指定文件
一般选项
-help #获取帮助信息
-rand val #以文件作随机数种子
-writerand outfile #将此过程中产生的随机数写到指定文件
-passout val #输出文件的保护口令
-* #加密算法
从私钥提取公钥 openssl rsa [options...] 常用选项
-in val #指定输入的文件,通常是私钥
-out outfile #指定要输出的文件,不指定就是标准输出
-pubin #从输入文件中读取公钥值,默认是读取私钥值 一般选项
-help #获取帮助信息
-inform format #显示指定输入文件格式DEM|PEM,默认PEM
-outform format #指定输出文件模式DER|PEM,默认PEM
-pubout #指定导出公钥,默认输出私钥
-passout val #输出文件的保护口令
-passin val #输入文件的保护口令
-RSAPublicKey_in #输入文件格式为 RSAPublicKey
-RSAPublicKey_out #输出文件格式为 RSAPublicKey
-noout #不输出任何内容
-text #输出所有信息
-modulus #输出公钥信息
-check #检查公钥是否匹配
-* #指定私钥的保护加密算法
加密算法: aes128|aes192|aes256|aria128|aria192| aria256|camellia128|camellia192| camellia256|des|des3|idea
先生成私钥再用私钥提取公钥
指定加密算法指定口令
提取公钥要求密码
2.2.4 加解密
命令格式:
openssl rsautl [options]
常见选项:
-encrypt:使用 RSA 公钥加密数据。
-decrypt:使用 RSA 私钥解密数据。
-inkey file:指定私钥文件。
-pubin:从标准输入读取公钥,或者如果
-inkey 指定的文件包含公钥,则使用该公钥。
-in file:指定输入文件,默认为标准输入。
-out file:指定输出文件,默认为标准输出。
一般选项:
-sign:使用 RSA 私钥对数据进行签名。
-verify:使用 RSA 公钥验证签名。
-inkey_pass pass:私钥文件的密码。
-pubin_pass pass:公钥文件的密码(虽然公钥通常不使用密码保护,但某些场景下可能使用)。
-pkeyopt opt:val:设置私钥选项,例如指定 RSA 填充方案。常见的填充方案包括 rsa_padding_mode_pkcs1(PKCS#1 v1.5 填充)和 rsa_padding_mode_pss(PSS 填充)。
-oaep_label hexstring:当使用 OAEP 填充时,指定一个标签。
-raw:在加密或解密时,不使用任何填充(不推荐,因为可能导致安全漏洞)。
-hex:以十六进制格式处理输入/输出数据。
-base64:以 Base64 编码格式处理输入/输出数据。
2密钥对的加密与解密
2-1 加密:
使用公钥对文件进行加密。例如,使用以下命令加密一个名为hello.txt的文件: openssl rsautl -encrypt -in hello.txt -inkey public.pem -pubin -out hello.en
命令解读:
-in指定了要加密的文件,
-inkey指定了密钥文件(公钥),
-pubin表明使用纯公钥文件加密,
-out指定了加密后的文件,文件后缀自己定制
2-2 解密:
使用私钥对加密后的文件进行解密。例如,使用以下命令解密hello.en文件 openssl rsautl -decrypt -in hello.en -inkey private.pem -out hello.de
命令解读:
-in指定了要解密的文件,
-inkey指定了密钥文件(私钥),
-out指定了解密后的文件。
生成密钥然后从里面提出公钥信息
使用公钥加密hello.txt生成hello.en加密文件然后用私钥解密hello.en文件生成hello.de文件
2.2.5 数字签名
命令格式:
openssl dgst [-sha1|-sha224|-sha256|-sha384|-sha512|-md5|-mdc2|-ripemd160|- dss1] [-hex] [-binary] [-c] [file...]
常见选项:
-sha1, -sha224, -sha256, -sha384, -sha512: 指定使用哪种 SHA 算法。
-md5: 使用 MD5 算法
-out: 指定了签名文件的名称,
-sign: 指定了私钥文件
一般选项:
-mdc2: 使用 MDC2 算法(较旧且不推荐使用)。
-ripemd160: 使用 RIPEMD-160 算法。
-dss1: 使用 DSS1(即 SHA-1 的一种形式,用于 DSS 签名)。
-hex: 以十六进制格式输出摘要。这是默认格式。
-binary: 以二进制格式输出摘要。
-c: 输出摘要时,使用传统的 OpenSSL 格式(包含算法名称和哈希值)。
file...: 要计算摘要的文件。如果未指定文件,则 openssl dgst 会从标准输入读取数据。
数字签名与验签
签名:
使用私钥对文件进行签名。例如,使用以下命令对hello.txt文件进行签名,生成签名文件sign.txt: openssl dgst -sha1 -sign private.pem -out sign.txt hello.txt
命令解读:
-sha1指定了摘要算法,
-sign指定了私钥文件,
-out指定了签名文件的名称,
hello.txt是要签名的文件。
验签:
使用公钥验证签名。例如,使用以下命令验证sign.txt签名文件是否有效:
openssl dgst -verify public.pem -sha1 -signature sign.txt hello.txt
命令解读:
-verify指定了公钥文件,
-sha1指定了摘要算法(与签名时一致),
-signature指定了签名文件的名称,
hello.txt是要验证的文件。
计算文件的SHA-256摘要
以十六进制格式计算并显示标准输入的MD5摘要
以二进制格式计算并显示SHA-1摘要
使用传统Openssl 格式输出SHA-512摘要
使用私钥对文件进行签名 对hello.txt 文件进行签名生成签名文件sign.txt
使用公钥验证签名 验证sign.txt签名文件是否有效
3.1 CA 认证
基本流程:
1 生成私钥:
使用OpenSSL等工具生成CA的私钥,这是CA用于签名证书的关键。
2 创建自签名证书:
利用生成的私钥,CA可以创建自己的自签名证书。这个证书是CA自己的身份证明,用于签发其他证书。
3 设置数据库和序列号文件:
为CA创建数据库文件(用于存储证书信息)和序列号文件(用于生成唯一的证书序列号)。
4 颁发证书:
当内部实体需要数字证书时,它们会生成自己的私钥和证书签名请求(CSR),然后将CSR提交给CA。CA 验证实体的身份后,使用自己的私钥对CSR进行签名,生成数字证书,并颁发给实体。
5 吊销证书:
如果某个数字证书需要被吊销(例如私钥泄露或证书过期),CA可以将其标记为吊销状态,并更新证书吊 销列表(CRL)
准备环境:
rocky系统:yum insstall openssl-libs
ubuntu系统:apt install openssl libssl-de
核心配置文件部分内容说明:
rocky系统:cat /etc/pki/tls/openssl.cnf
ubuntu系统:cat /etc/ssl/openssl.cnf。
[ CA_default ]
dir = ./demoCA # 所有与证书相关的文件目录,在实际使用时此处 要进行修改 # 注意:Ubuntu系统的此地址是 ./demoCA,
:
3.1.1 自建CA
自建证书机构
1.创建文件:mkdir -pv /etc/pki/CA/{certs,crl,newcerts,private}
2.生成CA私钥
cd /etc/pki/CA/
openssl genrsa -out private/cakey.pem 2048
ls private/
3.生成CA自签名证书
openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 3650 -out /etc/pki/CA/cacert.pem
4.查看证书
openssl x509 -in /etc/pki/CA/cacert.pem -noout -text
申请证书
mkdir /data
openssl genrsa -out /data/test.key 2048
创建索引文件
touch /etc/pki/CA/index.txt
创建序号文件
echo 0F > /etc/pki/CA/serial
签发证书
openssl ca -in /data/test.csr -out /etc/pki/CA/certs/test.crt -days 100
查看证书效果
tree /etc/pki/CA/
根基编号查看状态
openssl ca -status 0F
将两个证书都导出到windows主机,默认 pem后缀的不识别,将.pem 改为.pem.crt 或者 直接改为 .crt,查看效果
4 ssh 服务
4.1.1 ssh 服务
SSH(Secure Shell)服务是一种网络协议,用于在不安全的网络中提供安全的远程登录和其他安全网 络服务。SSH 通过加密和认证机制,确保了数据传输的安全性和用户身份的验证,可以有效防止远程管理过程 中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。 SSH服务默认使用TCP的22端口.
主要功能:
远程登录
文件传输
端口转发
隧道
命令执行
与案例解读:
、1. 客户端发起链接请求 2. 服务端返回自己的公钥,以及一个会话ID(这一步客户端得到服务端公钥) 3. 客户端生成密钥对 ----- 没有实体文件 4. 客户端用自己的公钥异或会话ID,计算出一个值Res,并用服务端的公钥加密 5. 客户端发送加密后的值到服务端,服务端用私钥解密,得到Res 6. 服务端用解密后的值Res异或会话ID,计算出客户端的公钥(这一步服务端得到客户端公钥) 7. 最终:双方各自持有三个秘钥,分别为自己的一对公、私钥,以及对方的公钥,之后的所有通讯都会被加 密
4.1.2 openssh 服务
penSSH是SSH(Secure Shell)协议的免费开源实现。SSH协议族可以用来进行远程控制,或在计算 机之间传送文件。OpenSSH是使用SSH透过计算机网络加密通讯的实现,是取代由SSH Communications Security所提供的商用版本的开放源代码方案。
功能特点:
安全的shell连接
文件传输
端口转发
公钥身份验证
首次连接,会显示目标主机的指纹信息,并提示是否继续,然后敲yes后会将目标主机的公钥保存在当前 用户的~/.ssh/know_hosts 文件中
ssh 命令解析
命令格式:
ssh [options...] destination [command]
常用选项
-p PORT #指定远程服务器的端口,默认22
-v #调试模式,可以追踪此次连接的过程
-i #指定私钥文件路径,实现基于key验证
一般选项
-b IP #指定本地主机此次连接使用的IP,如果本地存在多个IP的话
-C #开启压缩
-F configfile #指定客户端配置文件
-t #强制伪终端分配,可用于在远程系统上执行基于屏幕的程序
-o option #以K=V格式指定选项
如果不指定用户名,默认使用当前用户去登录远程主机
用指定用户连接
在远程主机执行完命令后就断开
4.1.3远程传输
简介:SCP是基于SSH2协议的安全文件传输方式,支持批量操作。使用SSH意味 着它享有与SSH相同级别的数据加密,因此被认为是跨两个远程主机传输文件的安全方式。
命令格式:
scp [options] SRC... DEST/
注意: 远程主机目标位置的表现样式: login_user@remote_addr:/path/to/target
常用选项:
-r #递归复制 一般选项
-C #压缩数据流
-p #保持原文件的属性信息
-q #静默模式
-P PORT #指定远程服务器的端口,默认22
常用样式:
将文件复制到远程主机:
scp logs.tar.gz root@10.0.0.13:/root
将目录复制到远程主机:
scp -r syslog root@10.0.0.13:/root
将文件从远程系统复制到本地系统:
scp root@10.0.0.13:/root/passwd /root/
将目录从远程主机复制到本地系统:
scp -r root@10.0.0.13:/root/scripts /root/
将本地文件复制到远程
将远程主机文件复制到本地
复制目录
4.1.4 文件同步
简介:全量与增量备份:rsync支持全量备份和增量备份。全量备份意味着每次都会复制所有文件,而增量备份则只 复制那些自上次备份以来已经改变的文件。
命令格式:
rsync [OPTION]... SRC [SRC]... DEST
常用选项:
-a|--archive #保留所有属性,但不包括acl和selinux
-v|--verbose #显示详细过程
-r|--recursive #递归复制
一般选项
-n|--dry-run #只测试,不执行
-p|--perms #保留权限属性
-t|--times #保留修改时间戳
-g|--group #保留组信息
-o|--owner #保留所有者信息
-l|--links #将软链接文件本身进行复制(默认)
-L|--copy-links #将软链接文件指向的文件复制
-u|--update #如果接收者的文件比发送者的文件较新,将忽略同步
-z|--compress #压缩,节约网络带宽
--delete #如果原文件被删除,则目标中的对应文件也要被删除, 配合-r使用
--progress #显示进度
--bwlimit=5120 #限速以KB为单位,5120表示5MB
rsync命令示例
本地复制:rsync [OPTION...] SRC... [DEST]
远程复制(推送):rsync [OPTION...] SRC... [USER@]HOST:DEST
远程复制(拉取):rsync [OPTION...] [USER@]HOST:SRC... [DEST]
[OPTION...]表示rsync的选项,
SRC表示源文件或目录,
DEST表示目标文件或目录,
[USER@]HOST表示远程主机的用户名和地址。
注意:对于远程主机的目标目录,如果不存在的话,会自动创建。
传输目录
查看目标机属性保持一致
仅传输目录下的文件
这次只复制了新增的hahaha文件
4.1.5 sshpass
简介:
由EPEL源提供,ssh登陆不能在命令行中指定密码。sshpass 的出现,解决了这一问题。sshpass用于 非交互SSH的密码验证,一般用在sh脚本中,无须再次输入密码(本机known_hosts文件中有的主机才能生 效)。它允许你用 -p 参数指定明文密码,然后直接登录远程服务器,它支持密码从命令行、文件、环境变量 中读取
命令格式:
sshpass [option] command parameters
常用选项:
-p password #指定明文密码
-f filename #从文件中读取密码,文件的第一行为密码
-e #将环境变量SSHPASS作为密码
环境部署
Centos系统
[root@rocky9 ~]# yum install sshpass
Ubuntu系统:
root@ubuntu24:~# apt install sshpass
普通方式执行命令
通过sshpass方式指定密码
指定文件操作
变量方式使用
4.1.6 认证通信、
ssh服务登录的常用验证方式有两种,分别是基于用户/口令的方式验证和基于密钥的方式验证
客户端发起ssh请求,服务器会把自己的公钥发送给用户
用户会根据服务器发来的公钥对密码进行加密
加密后的信息回传给服务器,服务器用自己的私钥解密,如果密码正确,则用户登录成功
基于密钥的登陆方式
首先在客户端生成一对密钥(ssh-keygen)
并将客户端的公钥ssh-copy-id 拷贝到服务端
当客户端再次发送一个连接请求,包括ip、用户名
服务端得到客户端的请求后,会到authorized_keys中查找,如果有响应的IP和用户,就会随机生成一 个字符串,例如:magedu
服务端将使用客户端拷贝过来的公钥进行加密,然后发送给客户端
得到服务端发来的消息后,客户端会使用私钥进行解密,然后将解密后的字符串发送给服务端
服务端接受到客户端发来的字符串后,跟之前的字符串进行对比,如果一致,就允许免密码登录
命令解读:
在客户端生成密钥对
ssh-keygen -t rsa [-P 'password'] [-f “~/.ssh/id_rsa"]
把公钥文件传输至远程服务器对应用户的家目录
ssh-copy-id [-i [identity_file]] [user@]host
将本机公钥上传给远程主机
4.1.7 sudo 授权
简介:
sudo(superuser do 的缩写)是一个在类Unix操作系统(如Linux和macOS)中广泛使用的命令, 它允许授权的用户以另一个用户(通常是超级用户或root)的安全权限来运行命令,如halt,reboot,su 等。
sudo原理:
1 root用户将普通用户的名字,可以执行的特定命令,按照哪种用户或用户组的身份执行等信息,登记 在特殊文件中(通常是 /etc/sudoers),即完成对该用户的授权(此时此用户被称为 sudoer )。
2 在一般用户需要取得特殊权限时,其可在命令前加上 sudo,此时sudo会询问该用户自己的密码(以确 定是当前用户在操作),回答后系统即会将该命令的进程以root用户的权限运行。
3 之后的一段时间内(默认5分钟(redhat 系列),可在/etc/sudoers 中自定义),使用sudo 不需要 再次输入密码,由于不需要root 用户密码,部份unix 系统甚至利用 sudo 使一般用户取代root用户作为 管理员账号,例如 Ubuntu, Mac OS X 等。
sudo特性:
sudo能够授权指定用户在指定主机上运行某些命令。如果未授权用户尝试使用 sudo,会提示联系管理员
sudo提供了丰富的日志,详细地记录了每个用户干了什么。它能够将日志传到中心主机或者日志服务器
sudo使用时间戳文件来执行类似的“检票”系统。当用户调用sudo并且输入它的密码时,用户获得了一张 存活期为5分钟的票
sudo的配置文件是sudoers文件,它允许系统管理员集中的管理用户的使用权限和使用的主机。它所存放 的位置默认是在/etc/sudoers,属性必须为0440
工具命令
核心命令:
sudoedit 授权编辑规则文件的工具
sudo 执行授权命令
一般命令:
visudo 安全编辑授权规则文件和语法检查工具
语法检查 visudo -c
visudo -f /etc/sudoers.d/test
sudo命令解读
命令格式
sudo [options...] [command]
sudo [options...] file...
常用选项
-u|--user=user #指定要代表的用户,默认root
-S|--stdin #远程登录执行sudo时候,从标准输入读取密码
-l|--list #列出指定用户己配置的sudo规则,不指定用户则是查看当前 登录用户
一般选项
-b|--background #在后台执行
-B|--bell #响铃
-E|--preserve-env #继承当前环境变量
-e|--edit filename... #编辑文件
-g|--group=group #以指定组执行
-H|--set-home #指定切换用户的家目录
-h|--host=host #在指定主机上执行
-i|--login #直接登录
-K|--remove-timestamp #删除时间戳文件,则下次执行要重新输入密码
-k|--reset-timestamp #清除时间戳,则下次执行要重新输入密码
-p|--prompt=prompt #改变密码询问时的提示语句
-s|--shell #以指定shell来执行
-U|--other-user=user #配合-l使用,指定要查看的用户
-V|--version #显示版本 -h|--help #显示帮助
-v|--validate #再延长密码有效期5分钟
测试普通用户执行超越自身权限的动作
5.Chrony
5.1 时间同步服务
简介:
多主机协作工作时,各个主机的时间同步很重要,时间不一致会造成很多重要应用的故障,如:加密协 议,日志,集群等。 利用NTP(Network Time Protocol) 协议使网络中的各个计算机时间达到同步。 目前NTP协议属于运维基础架构中必备的基本服务之一。
客户端工具:
chronyc 可以运行在交互式和非交互式两种方式,交互方式提供了一系列的子命令
help #显示帮助信息
accheck #检查是否对特定主机可访问当前服务器
activity #显示有多少NTP源在线/离线
sources [-v] #显示当前时间源的同步信息
sourcestats [-v] #显示当前时间源的同步统计信息
add server #手动添加一台新的NTP服务器
clients #报告已访问本服务器的客户端列表
delete #手动移除NTP服务器或对等服务器
settime #手动设置守护进程时间
tracking #显示系统时间信息
chronyc 进入交互界面 tracking 检测时间同步服务状态
列出配置中可用的ntp服务
5.2 时间同步服务实践
服务器Ubuntu
vim/etc/chrony/chroony.conf
#注释pool行 # pool ntp.ubuntu.com iburst maxsources 4
pool 0.ubuntu.pool.ntp.org iburst maxsources 1
pool 1.ubuntu.pool.ntp.org iburst maxsources 1
pool 2.ubuntu.pool.ntp.org iburst maxsources 2
添加下列行
server ntp.aliyun.com iburst
重启:
systemctl restart chronyd.service
检查效果:
chronyc
自定义时间:
date -s "-100 day"
查看同步进程:
chronyc soyrces
chrony 是渐进式同步,如果差距太大,想立即同步完成,则可以重启服务:
systemctl restaet chronyd.service
date
chronyc soources
5.3 自建时间服务器
Ubuntu时间服务器
定制自建时间服务器配置:
vim /etc/chrony/chrony.conf
server ntp.aliyun.com iburst # 这是之前配置好的
allow 10.0.0.0/24 #允许10.0.0 网段的主机将本机作为时间同步服务器
local stratum 10 #允许本机在不能与外网同步的情况下,还能提供服务
重启服务:
systemctl restart chronyd.service
关闭防火墙:
systemctl stop firewalld.service ufw.service
Rncky客户端配置
添加server生产环境下至少两台保证高可用
vim /etc/chrony.conf
pool 2.rocky.pool.ntp.org iburst # 禁用默认的
server 10.0.0.13 iburst # 启用自定义的
重启服务
systemctl restart chronyd.service
查看时间服务器
chronyc -n sources
ubuntu客户端配置
添加server生产环境下至少两台,保证高可用
vim /etc/chrony/chrony.conf
server 10.0.0.13 idurst
重启服务
systemctl restart chrony.service
查看
chronyc -n sourcestats
服务器上查看
chronyc -n clients
版权归原作者 学无止境回头是岸 所有, 如有侵权,请联系我们删除。