ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

加密与安全

2022-08-28 18:32:26  阅读:340  来源: 互联网

标签:加密 证书 ## CA 安全 ssh key root


加密与安全

概述

image-20220710150432278

Linux内的邮件服务:postfix,监听端口smtp 25端口

DDOS攻击:泛洪攻击,flood,能够在短时间内发送大量的TCP包攻击网站,使得网站的连接数(承受并发)过高,瘫痪

--->拒绝服务

查看selinux的状态:getenforce

disabled或者是Enforcing

3A认证安全:认证、授权、审计

磁盘加密:阿里云ECS的系统盘加密

常见加密算法:

1.DES,3DES,数据加密标准(data encyption standard)---56位

2.AES,高级加密算法---128、192位

对称加密:加密和解密使用同一个秘钥

对称加密不是很安全,但是加密速率高(不需要自己的公钥发来发去),适合加密大量的数据TB PB级别。加密传输数据等

DES,AES,3DES等

非对称加密:双方有公钥和私钥,发送公钥

用私钥加密,要用公钥解密(类似gitlab验证,ssh-key验证都是将私钥保留,将公钥发送给对端主机,然后我ssh连接的时候,是通过我自己的私钥去解密的),解密自己的连接(解密自己的数据包)

因为只有公钥可以对Alice的私钥解密--->确认数据来源为Alice。因为gitlab有ssh的公钥了,能解析ssh发来的私钥加密包,一般的网站验证都是用RSA认证

公钥的作用:一般都是用于解密私钥的请求的

RSA算法:公钥加密算法,著名的公钥加密算法

一般的https算法,用的是RSA+AES算法的结合,网页端https加密

RSA加密算法的效率比较低,加密大量数据的速度慢

image-20220706215631380

ssh协议使用的就是rsa加密算法,把pub公钥发送到各个主机或者是gitlab,jenkins等,完成主机的身份验证

image-20220706222543854

hash算法(加密算法):唯一的hash值

数据--->hash算法--->hash值

如果源数据相同,比如说都是同一个文件(文件内容一致),那么经过hash算法的hash值也一样,确认文件内容一致;如果文件内容不一致,则hash值完全不同

MD5算法,sha1算法已经被破解,md5加密还可以临时的用于判断文件是否被修改等,比较md5sum加密值或者其他算法的加密值

常见算法:md5加密(hash值 128位--->显示的是32位的16进制),sha128(160位),sha256,sha512等算法

image-20220706225202230

##各种算法
##md5算法
md5sum + file ##使用md5算法计算出这个file的hash值
baf172378e0d27f555b95affa525307d  1+100.sh

##sha1算法,位数比md5要长(160位)
sha1sum + file 	
sha512sum file
sha256sum file

image-20220706225645552

sha512加密,128位的16进制数

image-20220706230214630

暴力破解概念:一个个数字猜,比如算法内指定是大小写字母+数字,那么假如是16位的随机字符算法,一个字符就是26+26+10=56种,16位就是56^16,这么多次的猜测(暴力破解)

image-20220706230526165

yum源加密gpgkey:用于检查来自yum源的包是否合法

这个gpgkey(公钥),这个yum源发布后,使用的yum源的私钥加密,那么gpgkey的公钥就可以解了,从而验证包来源的合法性

[base]
name=CentOS-$releasever - Base
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
baseurl=https://repo.huaweicloud.com/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
##这里是一个在Cent OS 7上面的gpgkey校验key

综合加密:结合AES和RSA算法(对称和非对称算法)

其实公钥也存在一个问题:如果有人冒充中间商截取A-B获取公钥的信息,从而发送一个假的公钥给到A的话(假冒B),那么A会将自己的真实信息用中间商的公钥加密,然后返回给中间商,从而泄露信息

混合对称算法和非对称算法,比如AES 128和sha256算法,类似互联网http访问的安全信息(AES+RSA)

流程加密:

1.原始data---对称加密(对称秘钥人人都有)---RSA加密,使用公钥B加密(类似gitlab的公钥B)

2.解密data:用私钥B解开公钥B,得到对称秘钥,在用对称秘钥解开data

image-20220707213833599

实现数字签名(验证数据的合法性,是否是同一个文件),使用hash算法先进行加密得到hash值(唯一),在通过RSA算法公钥私钥加密

一般较常应用与pdf等加密文档,数字签名技术等(先hash再RSA)

1.data---hash算法:data的hash值---B的公钥加密

2.B的私钥解密---再用hash算法算一遍data的hash值---比较hash值,一样的即证明数据来源为合法的

image-20220707214618190

CA证书(SSL加密证书)

权威机构颁发的证书,SSL证书,有效期一般是一年的有效期,也有证书颁发机构,CA机构

DV、OV等

证书类型:单域名、多域名、泛域名证书

CA签名

CA证书加密的原理:CA机构 作为靠谱的中间商,加入还是A向B请求信息,A发公钥给到CA,CA用自己的权威私钥给A的公钥加密,同时B有CA机构的公钥,和B的公钥,用B的公钥加密返回给B,B用私钥再解密

image-20220707230307707

https加密证书

Chrome、edge等官方浏览器上受信任的根证书颁发机构,一般都存在于世界上,世界上的根证书颁发机构有不多,对应专门的证书企业

像这个暴雪的证书blizzard,暴雪也是一个根证书的颁发机构,自己给自己颁发证书:自签名证书,因为根机构已经是最高权限的机构了

image-20220707232553773

CA证书包含的内容:签名算法sha256(RSA)、签名的hash算法(客户端验证证书的合法性,对比hash值),公钥算法RSA

image-20220707232906187

自己购买的域名:www.cwjcloudtest.cn

域名颁发机构为DV(单域名免费版SSL证书),还有泛域名,多域名

根证书颁发机构:Digicert,在华为云上(或者是各大公有云厂商)上面都有

image-20220707233249092

image-20220707233432468

一般来说,在云厂商购买证书都涉及这几个参数:

1.证书类型:针对不同类型的企业、用途选择,同时价格也不一样,按照实际生产用途使用证书

2.证书品牌(根证书颁发机构):www.cwjcloudtest.cn选择的是digicert,华为云官网是globalsign,阿里云也是globalsign

3.域名类型:单域名、多域名、泛域名

4.有效期:一般都为1年

image-20220707233816482

SSL协议/TLS协议

HTTPS的原理:CA就是为了将服务端的公钥变得有效,可靠,客户端访问的时候才能放心访问;而这个可靠来自于可靠的根证书颁发机构(CA)

目前主流使用:TLS 1.2版本的协议

保护WEB应用层的数据包,SSH协议包裹,SSH:安全套接字,加上SSL证书

image-20220708211758519

HTTPS的工作原理:根本过程就是验证服务器(域名)证书(公钥)来源的真实性

1.客户端发起请求,请求访问某个服务器站点(url),访问443端口(其中站点必须放通443端口)

2.站点返回服务器的证书给到客户端,客户端验证证书的真实可靠性;如果有问题会提示安全/不安全/不受信任的证书,服务端发送公钥(证书)给到客户端

3.客户端验证成功,将加密信息给到服务器,用服务器的公钥加密

4.服务器用私钥解密信息,获取到传输的数据

企业内部使用生成SSL证书,自己生成就行;一般在互联网上申请的公共的CA,这个都是和根证书颁发机构申请的

openssl项目:生成企业内部免费证书用于加密服务

开放源码的软件库包,用于生成私有的CA证书

每台Linux的机器,都是自带openssl服务的

##查看版本
openssl version

image-20220708234136817

基本语法

##使用openssl技术对文件进行hash运算,得到唯一的hash值
[root@ecs-web01 ~]#openssl sha512 1.sh 
SHA512(1.sh)= 3c7db731a40a5ca38935f1b5868aed6f84f66678772a22b04b25a04d098e36f4a095b67d35ab1476769846a214978e030360b4fb67ad22f71b534781d17419df

等同于sha512sum 1.sh

##openssl生成密码,自动生成一串加密的密文,可能是版本不一样,生成密文的密码,对原来的密码加密
openssl passwd -6 caiweijia123
[root@localhost ~]#openssl passwd -6 123
$6$nq8pcEoJbqN7FLq3$aSwUOh/OtSxGP8N/yxGaLgD2hwsluDkU.qCQrN1fFgclesBlUOywUyqEqEtcgwO1ExRj8MqdA8Igj9NaDXBsz/

##也可以使用openssl+密码输出密文
##存储在/etc/shadow的就是sha512加密过的密文
catyer:$6$f63BKB2X09nKyqtf$Ipvckz1/eRXs5J/CFNvcCgcJJQFtyiuCiUx09Byej7FIfdjPuiiimYJe.iP6skoa.hawaX58PHcxzTLEFjZj80::0:99999:7:::

原理上,sha512是可以被解密的,但是需要花很长的时间,需要量子计算机才能解密,工具一般也不能解密

openssl生成私钥

openssl可以生成密钥对,密钥对就指的是公钥+私钥,称为密钥对

生成一个服务的私钥

##生成一个私钥
openssl genrsa -out /key/app1.key
cat /key/app1.key

image-20220709091545538

给私钥加密(使用对称算法),因为非对称算法就是rsa,已经生成了密钥对了

使用aes算法加密的时候,需要输入一个密码(解密密码)--->但是不推荐,直接有私钥就行了

openssl genrsa -out /key/app2.key -aes128 ##-aes128表示使用什么对称算法进行加密

image-20220709091842721

一些对称算法加密的方式:常用的一般为aes128 aes192 aes256等,需要在rsa的基础上再加一层加解密

image-20220709092033851

使用ssh-keygen生成一个密钥对(本地生成),这个也是单纯的rsa算法,没有使用对称加密过

image-20220709092218522

私钥的生成:随机数,就像k8s的token一样,临时生成一个token或者是生成一个永久的都行

openssl根据私钥生成公钥(一般不需要手动生成,服务使用会自动解密)

这里没有再用aes加密,所以可以直接生成公钥的

-pubout需要加这个参数

openssl rsa -in /key/app1.key -pubout -out /key/app1.pub 

image-20220709092656585

根据aes加密过的私钥生成公钥,需要手动输入一个phrase来验证aes加密,解密

openssl rsa -in /key/app2.key -pubout -out /key/app2.pub 

image-20220709092903377

(重要)一个内网内如果想实现服务加密互访,需要搭建根CA,由根CA来颁发证书,自签名无法通信,自签名证书适用于单个服务

openssl生成CA证书(根CA)

私有CA:一般都是企业内部使用,直接就是根证书,一般不存在什么1级证书2级证书等目录

其实企业内部可以生成多个CA证书的,自签名证书

一般存放的目录:/etc/pki下面

[root@ecs-web01 ~]#tree /etc/pki/CA
/etc/pki/CA
├── certs
├── crl
├── newcerts
└── private

CA证书配置文件的路径:/etc/pki/tls/openssl.cnf

默认的配置参数,生成CA证书得配置参数

其中需要注意:

1.自签名证书certificate:$dir/xxx.pem要和openssl req -new -x509 -key /etc/pki/CA/private/ca.pem -days 3650 -out /etc/pki/CA/ca-cert.pem ###这个路径是自签名证书---一致

2.自己的私钥:$dir/private要和openssl genrsa -out private/ca.pem一致

[root@master tls]#pwd
/etc/pki/tls
[root@master tls]#ls
cert.pem  certs  ct_log_list.cnf  misc  openssl.cnf  private

##一定需要match匹配的字段,这些字段都可以修改路径的
[ CA_default ]
dir             = /etc/pki/CA           # 证书的根目录CA目录
certs           = $dir/certs            # CA下的certs,证书的存放位置,存放每个授予的证书
crl_dir         = $dir/crl              # Where the issued crl are kept
database        = $dir/index.txt        # 数据库索引存放index.txt
#unique_subject = no                    # Set to 'no' to allow creation of
                                        # several ctificates with same subject.
new_certs_dir   = $dir/newcerts         # default place for new certs.

certificate     = $dir/ca-cert.pem       # The CA certificate 这个是自己的自签名CA证书
serial          = $dir/serial           # The current serial number CA证书的序列号
crlnumber       = $dir/crlnumber        # the current crl number
                                        # must be commented out to leave a V1 CRL
crl             = $dir/crl.pem          # The current CRL
private_key     = $dir/private/ca.pem #这个是自己的私钥
RANDFILE        = $dir/private/.rand    # private random number file

x509_extensions = usr_cert              # The extentions to add to the cert

##CA证书的属性
default_days    = 365                   # 有效期默认1年
default_crl_days= 30                    # how long before next CRL
default_md      = sha256                # 默认RSA加密算法:sha256,可以修改
preserve        = no                    # keep passed DN ordering

##自签名和颁发的证书所需要match的字段,所以说还是不能乱填的
[ policy_match ]
countryName             = match ##国家名字
stateOrProvinceName     = match ##省份名
organizationName        = match ##公司名
organizationalUnitName  = optional
commonName              = supplied
emailAddress            = optional

##实验环境,暂时将这些修改为自定义optional
[ policy_match ]
countryName             = optional
stateOrProvinceName     = optional
organizationName        = optional
organizationalUnitName  = optional
commonName              = supplied
emailAddress            = optional


1.生成CA需要的文件:两个文件

touch index.txt  ##生成证书索引的数据库文件
echo 01 > serial ##颁发证书的序列号,这个序列号要是十六进制的,不能乱填
ls
certs  crl  index.txt  newcerts  private  serial

2.生成CA的私钥--->这个是自己的私钥
在7版本,6版本或者之前,生成一个文件默认的权限是644,需要修改下私钥的权限,或者直接chmod改一下600也可以

openssl genrsa -out private/ca.pem
ll private/ca.pem 
-rw------- 1 root root 1679 Jul  9 10:44 private/ca.pem ##ca默认路径,只有拥有者root可以访问others都不可以访问
可能还得chmod 600一下:chmod 600 private/ca.pem

3.生成CA证书(自签名证书),根据私钥生成自签名证书

颁发者和授予者都是自己,自签名证书;

企业内部其实也可以随便填,但是需要知道你这个证书是干嘛的,什么name,可以根据业务来划分(nginx,k8s,mysql,tomcat等),在openssl.cnf文件上也不一定需要match

##生成CA证书自签名
openssl req -new -x509 -key /etc/pki/CA/private/ca.pem -days 3650 -out /etc/pki/CA/ca.pem ###这个路径是自签名证书

-x509:生成自签名的参数
-key:使用之前生成的私钥文件,写好路径
-days:指定使用年限:10年
-out:输出一个私钥(证书文件),.cert文件

[root@ecs-web01 CA]#openssl req -new -x509 -key /etc/pki/CA/private/ca.pem -days 3650 -out /etc/pki/CA/ca-cert.pem
-----
##自己的可以随便填,如果是企业内的话,最好是命名规范一点
Country Name (2 letter code) [XX]:CN ##填写国家代码,CN---中国
State or Province Name (full name) []:SZ ##填写省份
Locality Name (eg, city) [Default City]:SZ ##城市
Organization Name (eg, company) [Default Company Ltd]:catyer ##公司名
Organizational Unit Name (eg, section) []:catyu^H ##部门名称
Common Name (eg, your name or your server's hostname) []:catyer 
Email Address []:catyer@11.com

##证书的基本格式输出.cert,查看master节点的证书说明
##关键参数:C=CN ST=GD O=CAT
[root@master CA]#openssl x509 -in /etc/pki/CA/ca-cert.pem  -noout -text
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            88:fe:3b:bf:0c:8c:46:51
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=CN, ST=GD, L=SZ, O=CAT, OU=CAT, CN=CAT/emailAddress=cat
        Validity
            Not Before: Jul  9 03:11:33 2022 GMT
            Not After : Jul  6 03:11:33 2032 GMT
        Subject: C=CN, ST=GD, L=SZ, O=CAT, OU=CAT, CN=CAT/emailAddress=cat
        Subject Public Key Info:

在windows下查看这个新的证书.crt后缀,在windows环境下需要修改,但是提示是不受信任的证书

image-20220709111351691

nginx服务生成证书(由根CA生成)

给到一个服务使用:需要

1.CA机构的自签名证书,ca.pem

2.服务的私钥,nginx.key:openssl genrsa -out nginx.key

3.服务的证书.crt:根据证书申请文件.csr申请.crt文件

前置条件:需要生成好CA的自签名证书,CA的私钥,并且规划好.pem的文件路径,写好文件路径

1.先生成一个服务的私钥

openssl genrsa -out /key/nginx.key

2.为需要生成证书的主机/服务生成证书申请文件,格式为.csr(申请文件)

openssl req -new -key /key/nginx.key -out /key/nginx.csr

[root@master CA]#openssl req -new -key /key/nginx.key -out /key/nginx.csr
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:GD
Locality Name (eg, city) [Default City]:SZ
Organization Name (eg, company) [Default Company Ltd]:CAT

3.通过CA申请证书并且颁发给服务,有效期为365天

openssl ca -in /key/nginx.csr -out /etc/pki/CA/certs/nginx.crt -days 365

[root@master CA]#openssl ca -in /key/nginx.csr -out /etc/pki/CA/certs/nginx.crt -days 365
Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 1 (0x1)
        Validity
            Not Before: Jul  9 04:25:34 2022 GMT
            Not After : Jul  9 04:25:34 2023 GMT ##有效期到2023年
        Subject:
            countryName               = CN ##基本的配置,一定要和CA机构的一致
            stateOrProvinceName       = SZ
            organizationName          = CAT
            organizationalUnitName    = CAT
            commonName                = CAT
            emailAddress              = CAT

4.生成完毕,查看证书的信息

证书文件格式:nginx.crt---/etc/pki/CA/certs/nginx.crt,其实就和CA机构的自签名证书ca.pem的格式是一致的,只不过现在是给到服务的证书

私钥文件格式:nginx.key---/key/nginx.key

也可以复制导出到windows桌面进行查看

openssl x509 -in /etc/pki/CA/certs/nginx.crt  -noout -text
[root@master CA]#openssl x509 -in /etc/pki/CA/certs/nginx.crt  -noout -text
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 1 (0x1)
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=CN, ST=SZ, L=SZ, O=CAT, OU=CAT, CN=CAT/emailAddress=CAT
        Validity
            Not Before: Jul  9 04:25:34 2022 GMT
            Not After : Jul  9 04:25:34 2023 GMT
        Subject: C=CN, ST=SZ, O=CAT, OU=CAT, CN=CAT/emailAddress=CAT
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)


##查看index索引:cat $dir/index.txt
[root@master CA]#cat index/index.txt
V	230709042534Z		01	unknown	/C=CN/ST=SZ/O=CAT/OU=CAT/CN=CAT/emailAddress=CAT
V	230709090134Z		02	unknown	/C=CN/ST=CN/O=k8s/OU=k8s/CN=k8s/emailAddress=k8s

##查看serial序列号,现在变成02了,也就是下一个证书的编号是02
[root@master CA]#cat serial
02

吊销证书

某个证书泄漏了或者是不想用了,可以吊销证书,进入到newcerts,可以看到有01编号证书(nginx),02编号证书(k8s)

[root@master CA]#cd newcerts/
[root@master newcerts]#ls
01.pem  02.pem

吊销证书:openssl ca -revoke

吊销证书的状态:revoked(R状态)

openssl ca -revoke /etc/pki/CA/newcerts/01.pem

##可以看到,index序列已经变成r了,证明已经吊销
[root@master CA]#openssl ca -revoke /etc/pki/CA/newcerts/01.pem
Using configuration from /etc/pki/tls/openssl.cnf
Revoking Certificate 01.
Data Base Updated
[root@master CA]#cat index/index.txt
R	230709042534Z	220709091050Z	01	unknown	/C=CN/ST=SZ/O=CAT/OU=CAT/CN=CAT/emailAddress=CAT
V	230709090134Z		02	unknown	/C=CN/ST=CN/O=k8s/OU=k8s/CN=k8s/emailAddress=k8s

记录吊销证书的文件:culnumber,先更新这个文件的编号为01

echo 01 > crlnumber
echo 01 > crlnumber/crlnumber

更新证书吊销列表

openssl ca -gencrl -out /etc/pki/CA/crl/crl.pem

查看crl文件

openssl crl -in /etc/pki/CA/crl/crl.pem

[root@master CA]#openssl crl -in /etc/pki/CA/crl/crl.pem  -noout -text
Certificate Revocation List (CRL):
        Version 2 (0x1)
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: /C=CN/ST=SZ/L=SZ/O=CAT/OU=CAT/CN=CAT/emailAddress=CAT
        Last Update: Jul  9 13:16:58 2022 GMT
        Next Update: Aug  8 13:16:58 2022 GMT
        CRL extensions:
            X509v3 CRL Number: 

在本地计算机配置为受信任证书

拷出来的K8s证书,k8s.crt

image-20220709170425805

Cent OS 7直接生成自签名证书.pem和私钥.key(脚本模式)

根本的流程还是调用/usr/bin/openssl证书来实现

##如果是生成自签名证书,则不用根CA;如果是需要根CA,则需要在CA上生成CA的私钥以及CA的证书
##1.生成私钥
openssl genrsa -out /certs/nginx.key

##2.生成证书申请文件.csr
openssl req -new -key /key/nginx.key -out /key/nginx.csr

##3.nginx服务申请证书
openssl ca -in /key/nginx.csr -out /etc/pki/CA/certs/nginx.crt

##4.查看证书
openssl x509 -in /etc/pki/CA/certs/nginx.crt -noout -text

##5.使用ssl证书
将证书配置到各个服务内,形成加密

进入到目录/etc/pki/tls/certs,make就可以了,基于Makefile这个文件(脚本)来实现的

可以在这里openssl genrsa去掉-aes128加密,就不用输入phrase密码了

image-20220709214900776

生成各种各样的证书,也可以编写脚本来实现,不过需要实现交互式的openssl命令,这里还是得输入证书的信息

make nginx.crt ##私有CA颁发的证书
make nginx.key ##私钥,用于解密公钥
make nginx.csr ##证书申请文件csr
make nginx.pem ##自签名证书

image-20220709215259711

Cent OS 7执行创建.crt .key .pem等脚本

##进入指定目录创建,也可以openssl创建,mv到指定的目录存放
DIR=/key
SER=nginx

cd /etc/pki/tls/certs
make $SER.crt
make $SER.key
make $SER.pem
mv $SER.crt $SER.key $SER.pem $DIR
if [ $? -eq 0 ];then
        echo "$SER.crt $SER.key $SER.pem 创建成功"
fi

###生成私钥
#openssl genrsa -out /$DIR/$SER.key
#
###生成证书申请文件
#openssl req -new -key /$DIR/$SER.key -out /$DIR/$SER.csr
#
###生成证书
#openssl ca -in /$DIR/$DIR.csr -out /etc/pki/CA/certs/$SER.crt


SSH服务

用于连接远程主机,远程传输,远程操作等,openSSH服务默认安装的,安全的

通信过程:

1.ssh 192.168.244.132:首次连接确认是否是连接这台机器

2.确认,则将这台机器的公钥记录下来,下次连直接用公钥就行(对应算法)

3.下次直接使用密码

4.服务端也会获取到客户端的公钥,双方都有公钥,保证信息传输的安全性;服务端通过自己的私钥解密传输过来的公钥;客户端通过自己的私钥解密传过来的公钥

##主机IP,算法,公钥
192.168.244.132 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBOf8Uo6Tm0vy+2g9ctYsTwc/tfWcXHQtY5EywK0odPY1KFdXvw/bi75eyTbBqMUnX90RY36V+SV2CF05KCP1FJ0=

192.168.244.133 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBOf8Uo6Tm0vy+2g9ctYsTwc/tfWcXHQtY5EywK0odPY1KFdXvw/bi75eyTbBqMUnX90RY36V+SV2CF05KCP1FJ0=

基于ssh-keygen认证(本质上都是传公钥)

手动添加pubkey到服务端的过程,会进行验证,验证成功后自动认证,不需要人工输入账密

需要自己生成公钥私钥(密钥对)

ssh-keygen:默认算法是rsa算法

[root@master script]#ssh-keygen --help
unknown option -- -
usage: ssh-keygen [-q] [-b bits] [-t dsa | ecdsa | ed25519 | rsa | rsa1]
                  [-N new_passphrase] [-C comment] [-f output_keyfile]
       ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile]
       ssh-keygen -i [-m key_format] [-f input_keyfile]
       ssh-keygen -e [-m key_format] [-f input_keyfile]
       
##生成密钥对
ssh-keygen

##传输公钥
##-p 1258表示用不同的SSH端口连接
scp -P 1258 root@192.168.244.132:/root ##--->这个是scp命令,ssh和scp的一个是小写p,一个是大写P
ssh-copy-id root@192.168.244.132 

在远端机器生成key,传输过来的rsa算法加密的公钥,在.ssh的authkey目录下,同时known_host会添加多一个已知的主机地址

image-20220710092957530

image-20220710093056723

各个主机做ssh-keygen认证(expect)

原理:只要通过公钥验证就可以实现互访

思路:

1.在主机上先ssh-keygen生成自己的密钥对id_rsa和id_rsa.pub

2.ssh-copy-id root@192.168.244.128自己,生成自己的auth_key,自己生成了auth_key,known_host等文件

3.scp -r .ssh root@主机:将自己的.ssh目录复制到各个主机,那各个主机就可以识别到128这台主机了,同时各个主机也可以访问到128主机

如果远端机器修改了密码passwd,SSH还是可以连接的(基于key认证,基于公钥验证)

#!/bin/bash

pass="123"
cd /root
rm -rf .ssh

#host=`hostname -I`

##生成ssh-keygen
expect <<EOF
	spawn ssh-keygen
	expect {
		"key" { send "\n"; exp_continue }
		"passphrase" { send "\n"; exp_continue }
		"same" { send "\n"; exp_continue }
	}
EOF

##生成自己的auth_key
expect <<EOF
spawn ssh-copy-id root@192.168.244.128
expect {
            "yes/no" { send "yes\n"; exp_continue }
            "password" { send "$pass\n" }
}
expect eof
EOF

##循环复制到各个主机
for i in {132..133};do

expect <<EOF
spawn scp -r .ssh root@192.168.244.$i:/root
expect {
             "yes/no" { send "yes\n"; exp_continue }
             "password" { send "$pass\n" }
}
expect eof
EOF

if [ $? -eq 0 ];then
	echo "host 192.168.244.$i send success"
fi

done

各个主机做ssh-keygen认证(sshpass+expect)

sshpass:是ssh服务用于取消对每个主机的密码认证的服务,因为ssh 不能给连接的主机指定密码,可以指定明文密码

-p password:指定明文密码
-f file:可以跟记录密码的文件
-e:将环境变量SSHPASS作为密码

需要安装一下

rpm -qa | grep sshpass || yum -y install sshpass
rpm -q sshpass

sshpass+expect的组合

StrictHostKeyChecking=no:表示不再询问yes还是no,默认yes,-i表示把公钥复制过去

ssh-keygen -P "" -f /root/.ssh/id_rsa &>/dev/null:默认的key

由于sshpass貌似不支持1258端口,所以复制到139.9.57.240还得靠expect

host="
192.168.244.132
192.168.244.133
"
pass1=123
pass2=Caiwj@1258!
cd /root
rm -rf .ssh
ssh-keygen -P "" -f /root/.ssh/id_rsa &>/dev/null ##生成一个ssh-keygen的密钥对
rpm -q sshpass && echo "sshpass already install" || yum -y install sshpass
for i in ${host};do
        sshpass -p $pass1 ssh-copy-id -o StrictHostKeyChecking=no -i /root/.ssh/id_rsa.pub $i
#       sshpass -p $pass1 ssh -o StrictHostKeyChecking=no $i "echo `hostname -I` >> /root/ip"
        ssh $i "echo `hostname -I`"
done

#sshpass -p $pass2  -o StrictHostKeyChecking=no -i /root/.ssh/id_rsa.pub 139.9.57.240
expect <<EOF
        spawn ssh-copy-id -p 1258 root@139.9.57.240
        expect {
                "yes/no" {send "yes\n";exp_continue}
                "password" {send "Caiwj@1258!\n"}
        }
        expect eof
EOF

rsync:同步复制工具(可实现增量传输)

常用参数

##源 目的主机,也可以从目的主机复制到本地
rsync -av /etc server1:/tmp
rsync -av /server1:/tmp /etc

-a:包含rsync大部分的功能
-v:显示过程
-u:如果复制过来的文件比较新,则直接覆盖

#/etc和/etc/的区别:/etc拷贝包括目录下所有的文件,/etc/拷贝/etc下的文件,不拷贝目录
##区别
rsync -av f1 192.168.244.132:/data
rsync -av f1/ 192.168.244.132:/data

拷贝增量数据(SMS迁移工具就是借助Linux主机内的rsync组件来实现的)

拷贝data下的文件f1

##拷贝三个文件
rsync -av f1/ 192.168.244.132:/data
sending incremental file list
./
f1.txt
f2.txt
f3.txt

echo {1..10} >> f1/f1.txt ##对f1文件做一些改动

##再次拷贝,发现只拷贝增量数据incremental,只拷贝有变化的文件f1.txt
rsync -av f1/ 192.168.244.132:/data
sending incremental file list
f1.txt

sent 41,138 bytes  received 71,719 bytes  45,142.80 bytes/sec
total size is 314,572,821  speedup is 2,787.36

ll
total 307204
drwxr-xr-x 2 root root        48 Jul  9 23:26 f1
-rw-r--r-- 1 root root 104857621 Jul  9 23:28 f1.txt
-rw-r--r-- 1 root root 104857600 Jul  9 23:26 f2.txt
-rw-r--r-- 1 root root 104857600 Jul  9 23:26 f3.txt

实现拷贝脚本文件(只拷贝增量数据)

rsync需要对不同的ssh端口用法:rsync -e "ssh -p 1258",前提是需要做好ssh密钥对认证

复制script下的所有文件,或者说是同步script下的所有文件到目标主机

date=`date +%F_%H`
#scp -r -p -P 1258 /script/ root@139.9.57.240:/ &>/dev/null
rsync -e "ssh -p 1258" -av /script/ root@139.9.57.240:/
if [ $? -eq 0 ];then
        echo "$date点传输成功" >> /script/scp/scp.txt
fi

##写个crontab -e任务
* */1 * * * /bin/sh /script/scp/scp.sh

ssh服务配置文件

现在管理服务的总父进程:systemd进程,负责创建启动管理服务进程

lastb:查看you谁登录失败过

ssh服务端配置文件:/etc/ssh/sshd_config

#Port 22
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::

端口配置,监听本地的IP地址,默认0.0.0.0为所有IP

HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key

密钥对加密算法,一般是非对称加密算法rsa等

ss -nt:查看已经建立连接的服务,监听的是本地的地址192.168.244.128:22端口,远端的是客户端端口(建立连接的)

image-20220712211606186

基于key的验证:可以把允许用户名密码登录关掉

复制都是复制公钥给到目标端的主机,私钥不会复制出去,目标端的主机记录的也是公钥,最后的是主机名

然后只要有源端主机(master)的私钥,就可以远程免密连接到目标端(slave)

image-20220712213104540

Ubuntu:默认关闭root登录,需要开启root用户登录

在生产中也可以禁止root用户登录

sudo:用于执行root命令

生产中一般是不给root权限的,因为权限太高很麻烦,如果是堡垒机就可以

管理员授权给到用户,用户具有管理员的权限,或者是执行某些command的权限

主配置文件:/etc/sudoers

vim /etc/sudoers

如果不对catyer授权,则会出现catyer不在授权用户范围的错误提示error

sudo -u username command:指令

##基本格式
root    ALL(在哪个主机)=(代表的用户,可以写root)       ALL(COMMAND指令)

#COMMAND指令需要写指令的完整路径,可以使用which来查看命令的路径which ls 
which cat which ls 
/usr/bin/cat

root    ALL=(ALL)   ALL
catyer  ALL
catyer  ALL=(root)      /usr/bin/ls 允许catyer用户执行ls /root命令
##注意:配置文件必须要和实际执行的命令一致,也是一种管理权限的手段,可以使用root用户临时授权一下,可以指定指令,也可以指定all

catyer  ALL=(root)      /usr/bin/ls /root,/usr/bin/mount /dev/sdb /mnt/mount
catyer  ALL=(root)      usr/bin/mount 
##授权某个命令,写命令路径即可,表示授权挂载命令,添加一个,即可授权多个command,不需要另起一行
catyer#sudo ls /root

image-20220714230423139

pid=0:管理员账号

一个账号之所以是管理员的原因:因为账号的pid=0,用id可以查看pid,$3就是pid的列

image-20220714232202130

grep /bin/bash /etc/passwd

image-20220714232252998

awk -F: '{print $1":"$3}' /etc/passwd:$1和$3之间可以指定一个分隔符

pam:安全认证相关模块,库

对应的目录:

/etc/pam.d

/etc/security

chrony时间同步机制

云服务器:云厂商机器内置的时间服务器,ntpserver

ntp.aliyun.com:阿里云的ntp服务器地址,不要使用ntp服务,不标准

ntpdate:只是一次性的时间同步,不是永久的同步

使用chrony服务:实现配置本地的ntp服务器

ntp服务器:自己既是服务端也是客户端,其实例如阿里云的ntp.aliyun.com这些服务器,也是基于国际的原子钟来进行时间同步的,同时NTP服务器又作为企业内网的NTP服务器(服务端)

image-20220715230846321

通过NTP协议实现时间同步

yum info:可以查看yum源内的软件包信息

yum info ntp:查看ntp软件的信息

yum info chrony:查看chrony软件包的信息

chrony更好一点,效率比较高,精度比较高一些,可以达到微秒级别的精准度

查看软件是否安装:rpm -q chrony

rpm -q chrony
chrony-3.2-2.el7.x86_64

配置文件:chrony.conf+服务chronyd

服务名称:chronyd

systemctl status chronyd

默认开机启动+chronyd.service服务的方式运行

image-20220715232433014

配置好后,重启一下chrony服务,类似nginx/mysqld服务一样,配置文件都在/etc/chrony.conf内

配置时间服务器

华为云:ntp.myhuaweicloud.com,server ntp.myhuaweicloud.com minpoll 4 maxpoll 10 iburst

阿里云:ntp.aliyun.com

腾讯云:time1.cloud.tencent.com

##添加iburst:可以加速同步
server ntp.myhuaweicloud.com iburst
server ntp.aliyun.com iburst
server time1.cloud.tencent.com iburst

ntpdate ntp.aliyun.com##调整时间

image-20220715233328059

image-20220715233723284

作为云厂商的内部机器(内网机器),本身的ntp服务就在华为云内网,有一个内网服务地址可以使用,直接用ntp.huaweicloud.com(有内部服务地址100.125开头的)

就可以了,不存在断公网无法同步时间;如果是IDC机器则是需要连公网才能同步时间的

image-20220715234312252

标签:加密,证书,##,CA,安全,ssh,key,root
来源: https://www.cnblogs.com/catyer/p/16633330.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

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

ICode9版权所有