The Eighth week (Lucklyzpp)

Posted lucklyzpp

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了The Eighth week (Lucklyzpp)相关的知识,希望对你有一定的参考价值。

The Eighth week (Lucklyzpp)
      人的一切行动,都产生于“愿望”,如果不想,任何事都不可能在现实出现,有了想法,坚持下去,总会看见——曙光

1、创建私有CA并进行证书申请。

[13:27:23 root@lucklyzpp8 ~]#mkdir -pv /etc/pki/CA/{certs,crl,newcerts,private}
mkdir: 已创建目录 \'/etc/pki/CA\'
mkdir: 已创建目录 \'/etc/pki/CA/certs\'
mkdir: 已创建目录 \'/etc/pki/CA/crl\'
mkdir: 已创建目录 \'/etc/pki/CA/newcerts\'
mkdir: 已创建目录 \'/etc/pki/CA/private\'
[14:22:01 root@lucklyzpp8 ~]#tree /etc/pki/CA/
/etc/pki/CA/
├── certs
├── crl
├── newcerts
└── private
[14:22:10 root@lucklyzpp8 ~]#touch /etc/pki/CA/index.txt
[14:22:20 root@lucklyzpp8 ~]##echo 0F > /etc/pki/CA/serial
[14:22:28 root@lucklyzpp8 ~]##openssl ca -in /data/app1/app1.csr -out
[14:23:01 root@lucklyzpp8 ~]##openssl ca -in /data/app1/app1.csr -out /etc/pk
pkcs11/ pki/    
[14:23:01 root@lucklyzpp8 ~]##openssl ca -in /data/app1/app1.csr -out /etc/pki/CA/certs/app1.crt -days 1000

"创建CA的私钥"

[14:24:21 root@lucklyzpp8 ~]#cd /etc/pki/CA/
[14:24:30 root@lucklyzpp8 CA]#(umask 066; openssl genrsa -out private/cakey.pem 2048)
14:24:39 root@lucklyzpp8 CA]#tree
.
├── certs
├── crl
├── index.txt
├── newcerts
└── private
    └── cakey.pem
[14:24:51 root@lucklyzpp8 CA]#ll private/
总用量 4
-rw------- 1 root root 1679 10月 29 14:24 cakey.pem

给CA颁发自签名证书

[14:25:18 root@lucklyzpp8 CA]#openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 3650 -out /etc/pki/CA/cacert.pem
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:zhengzhou
Locality Name (eg, city) [Default City]:zhengzhou
Organization Name (eg, company) [Default Company Ltd]:zhengpp
Organizational Unit Name (eg, section) []:devops
Common Name (eg, your name or your server\'s hostname) []:ca.zheng.org
Email Address []:admin@zheng.org  
[14:27:29 root@lucklyzpp8 CA]#tree
.
├── cacert.pem
├── certs
├── crl
├── index.txt
├── newcerts
└── private
    └── cakey.pem
[14:27:33 root@lucklyzpp8 CA]#ll
总用量 4
-rw-r--r-- 1 root root 1448 10月 29 14:27 cacert.pem
drwxr-xr-x 2 root root    6 10月 29 14:22 certs
drwxr-xr-x 2 root root    6 10月 29 14:22 crl
-rw-r--r-- 1 root root    0 10月 29 14:22 index.txt
drwxr-xr-x 2 root root    6 10月 29 14:22 newcerts
drwxr-xr-x 2 root root   23 10月 29 14:24 private
[14:27:51 root@lucklyzpp8 CA]##openssl x509 -in /etc/pki/CA/cacert.pem -noout -text
[14:28:06 root@lucklyzpp8 CA]#sz cacert.pem 

用户生成私钥和证书申请

[14:35:39 root@lucklyzpp8 CA]#mkdir /data/app1
[14:35:51 root@lucklyzpp8 CA]#(umask 066; openssl genrsa -out   /data/app1/app1.key 2048)
Generating RSA private key, 2048 bit long modulus (2 primes)
....................................................................+++++

生成证书申请文件

[14:51:13 root@lucklyzpp8 app1]#openssl ca -in /data/app1/app1.csr -out /etc/pki/CA/certs/app1.crt
Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 15 (0xf)
        Validity
            Not Before: Oct 29 06:54:21 2021 GMT
            Not After : Oct 29 06:54:21 2022 GMT
        Subject:
            countryName               = CN
            stateOrProvinceName       = zhengzhou
            organizationName          = zhengpp
            organizationalUnitName    = devops
            commonName                = app1.zheng.org
            emailAddress              = root@zheng.org
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            Netscape Comment: 
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier: 
                07:DE:7C:D0:98:A3:3E:31:08:96:88:D0:D2:9D:74:E7:01:4F:96:CC
            X509v3 Authority Key Identifier: 
                keyid:F2:4E:BC:7C:F6:54:ED:61:27:5E:0A:E6:83:D7:26:40:7C:12:78:31

Certificate is to be certified until Oct 29 06:54:21 2022 GMT (365 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y

[14:55:21 root@lucklyzpp8 ~]##openssl ca -in /data/app1/app1.csr -out /etc/pki/CA/certs/app1.crt -days 1000
[14:56:01 root@lucklyzpp8 ~]#tree /etc/pki/CA/
/etc/pki/CA/
├── cacert.pem
├── certs
│?? └── app1.crt
├── crl
├── index.txt
├── index.txt.attr
├── index.txt.old
├── newcerts
│?? └── 0F.pem
├── private
│?? └── cakey.pem
├── serial
└── serial.old

4 directories, 9 files

[14:56:40 root@lucklyzpp8 ~]#cat /etc/pki/CA/certs/app1.crt 
[14:57:07 root@lucklyzpp8 ~]#openssl x509 -in /etc/pki/CA/certs/app1.crt -noout -text


[14:57:44 root@lucklyzpp8 ~]#openssl x509 -in /etc/pki/CA/certs/app1.crt -noout -issuer
issuer=C = CN, ST = zhengzhou, L = zhengzhou, O = zhengpp, OU = devops, CN = ca.zheng.org, emailAddress = admin@zheng.org
[14:57:46 root@lucklyzpp8 ~]#openssl x509 -in /etc/pki/CA/certs/app1.crt -noout -subject
subject=C = CN, ST = zhengzhou, O = zhengpp, OU = devops, CN = app1.zheng.org, emailAddress = root@zheng.org
[14:58:17 root@lucklyzpp8 ~]#openssl x509 -in /etc/pki/CA/certs/app1.crt -noout -serial
serial=0F

#验证指定编号对应证书的有效性

[14:58:53 root@lucklyzpp8 ~]#openssl ca -status 0F
[14:58:59 root@lucklyzpp8 ~]#cat /etc/pki/CA/index.txt
[14:59:19 root@lucklyzpp8 ~]#cat /etc/pki/CA/serial
[14:59:46 root@lucklyzpp8 ~]#cat /etc/pki/CA/serial.old 

将证书相关文件发送到用户端使用

[15:01:56 root@lucklyzpp8 ~]#cp /etc/pki/CA/certs/app1.crt /data/app1/
[15:02:05 root@lucklyzpp8 ~]#tree /data/app1/
/data/app1/
├── app1.crt
├── app1.csr
└── app1.key
[15:04:43 root@lucklyzpp8 data]#sz app1/app1.crt 

 

 

 

证书吊销

[15:14:57 root@lucklyzpp8 data]#openssl ca -revoke /etc/pki/CA/newcerts/0F.pem 
[15:42:23 root@lucklyzpp8 data]#cat /etc/pki/CA/index.txt
R    221029065421Z    211029074223Z    0F    unknown    /C=CN/ST=zhengzhou/O=zhengpp/OU=devops/CN=app1.zheng.org/emailAddress=root@zheng.org
生成证书吊销列表文件
[15:43:51 root@lucklyzpp8 data]#echo 01 > /etc/pki/CA/crlnumber
[15:44:48 root@lucklyzpp8 data]#openssl ca -gencrl -out /etc/pki/CA/crl.pem
Using configuration from /etc/pki/tls/openssl.cnf
[15:44:52 root@lucklyzpp8 data]#cat /etc/pki/CA/crlnumber
[15:45:06 root@lucklyzpp8 data]#cat /etc/pki/CA/crl.pem 
[15:47:28 root@lucklyzpp8 data]#sz /etc/pki/CA/crl.pem

 

2、总结ssh常用参数、用法

sh服务和sshd服务:ssh服务是运行在客户端,而sshd服务运行在服务端

配置文件路径
/etc/ssh/sshd_config

格式
ssh [user@]host [COMMAND]
ssh [-l user] host [COMMAND]
常见选项
-p port #远程服务器监听的端口
-b #指定连接的源IP
-v #调试模式
-C #压缩方式
-X #支持x11转发
-t #强制伪tty分配,如:ssh -t remoteserver1 ssh -t remoteserver2   ssh  
remoteserver3
-o option   如:-o StrictHostKeyChecking=no
-i <file>  #指定私钥文件路径,实现基于key验证,默认使用文件: ~/.ssh/id_dsa,
~/.ssh/id_ecdsa, ~/.ssh/id_ed25519,~/.ssh/id_rsa等

1. 首先在客户端生成一对密钥(ssh-keygen)
2. 并将客户端的公钥ssh-copy-id 拷贝到服务端
3. 当客户端再次发送一个连接请求,包括ip、用户名
4. 服务端得到客户端的请求后,会到authorized_keys中查找,如果有响应的IP和用户,就会随机生
成一个字符串,例如:magedu
5. 服务端将使用客户端拷贝过来的公钥进行加密,然后发送给客户端
6. 得到服务端发来的消息后,客户端会使用私钥进行解密,然后将解密后的字符串发送给服务端
7. 服务端接受到客户端发来的字符串后,跟之前的字符串进行对比,如果一致,就允许免密码登录

实现基于 key 验证

[18:08:01 root@lucklyzpp8 data]#ssh-keygen
[18:08:36 root@lucklyzpp8 ~]#ll .ssh/
[18:08:38 root@lucklyzpp8 ~]#cat .ssh/id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCaeeH/NIds+MsEhwtj0nCjY5FkS8mV7JvPqgP+4i+VjJU7FZHOGSIShkzdIz5ZXQPnz3KPo4lFjIkkZGUpuzY+lqVt8qAaLX/k60VGQeARavW/hnOd309xOMHKc587wNJq68mRwSje09ie8e3LJwYiFTXwvFdvdu6ihBrqAWaJZ2TQMk1B3YK9J/6Fcsus6R5Btr5VyHdH/if1OZS2xHjYHBj0qcnuLKA8Vh5/trm6RE65n/UILLo9MVk9ZFdmwc5vWnktwCpIVdC0H+/9QtOCDQF0b9u7aCiqN24oHadS2cKXCUY9BwDaPw9GvBcwGH7KhcXv6Xuc94mDD8+x1zszMwVld9UaeTF+ZGrryCvrX/KcKRWrxgEZk0RQbPJIs855sTECtM1DZ8FqH9WKiH7RS/sz5itGc5baiylUZbb+yD+DSQqSkybvV5KcFoBQ07RfXQ/hddSqjqCsZEcuFZV2y4RdvfLk7ICAT3WCQznZx/imWp83Vlx+DApNSW6oJsM= root@lucklyzpp8
[18:09:16 root@lucklyzpp8 ~]#ssh-copy-id root@192.168.33.130
[18:11:10 root@lucklyzpp8 ~]#ssh 192.168.33.130
Last failed login: Fri Sep 10 15:34:02 CST 2021 from 192.168.33.131 on ssh:notty
There was 1 failed login attempt since the last successful login.
Last login: Fri Sep 10 10:50:44 2021 from 192.168.33.2
[15:35:25 root@web2 ~]#cat /etc/redhat-release 
CentOS Linux release 7.9.2009 (Core)
[15:35:33 root@web2 ~]#ll .ssh/
总用量 4
-rw------- 1 root root 569 9月  10 15:34 authorized_keys

 

3、总结sshd服务常用参数。

Port
ListenAddress IP   # 设置绑定的ip地址
LoginGraceTime 2m  #设定登陆超时时间
PermitRootLogin yes #默认ubuntu不允许root远程ssh登录
StrictModes yes #检查.ssh/文件的所有者,权限等
MaxAuthTries 6 #最大尝试次数
MaxSessions 10 #同一个连接最大会话
PubkeyAuthentication yes #基于key验证
PermitEmptyPasswords no #空密码连接
PasswordAuthentication yes #基于用户名和密码连接
GatewayPorts no
ClientAliveInterval 10 #单位:秒
ClientAliveCountMax 3 #默认3
UseDNS yes #可以关闭DNS反解析,提升登陆速度
GSSAPIAuthentication yes #提高速度可改为no
MaxStartups #未认证连接最大值,默认值10
Banner /path/file
#以下可以限制可登录用户的办法:
AllowUsers user1 user2 user3
DenyUsers
AllowGroups
DenyGroups

4、搭建dhcp服务,实现ip地址申请分发

确保都是在仅主机模式下进行。

systemctl stop firewalld
setenforce 0
yum install -y dhcp
文件的模版:
/usr/share/doc/dhcp*/dhcpd.conf.example

配置内容 subnet
192.168.33.0 netmask 255.255.255.0 { ##网段和掩码 range 192.168.33.200 192.168.33.230; ##地址范围 option domain-name-servers 202.96.128.166; ## dns服务器地址 option domain-name "lukly.com"; ##该网段的域名,可以省略 option routers 192.168.33.1; ##网关 option broadcast-address 192.168.33.255; ##广播地址 default-lease-time 300; ## 租约时间 max-lease-time 7200; ## 最大租约时间

systemctl start dhcpd

通过配置Windows客服端,进行自动获取IP。

The programming summary (Eighth week)

题目1 混合类型数据格式化输入

(1)实验代码

#include <stdio.h>
 
int main()
{
    int a;
    double b,c;
    char d;
    scanf("%lf %d %c %lf",&b,&a,&d,&c);
    printf("%c %d %.2lf %.2lf",d,a,b,c);
    return 0;
}

(2)设计思路

第一步:定义变量
第二步:输入变量
第三步:输出结果

(3)本题调试过程碰到问题及解决办法(3)本题调试过程碰到问题及解决办法

注意字符输入时空字符的占位问题

(4)运行结果截图

(考试时间已到,无法获得截图)

题目2 计算符号函数的值

(1)实验代码

#include <stdio.h>
int main(void)
{
    int n, a;

    scanf("%d", &n);
    if (n < 0)
        a = -1;
    else if (n > 0)
        a = 1;
    else
        a = 0;
    printf("sign(%d) = %d
", n, a);

    return 0;
}

(2)设计思路

第一步:定义变量
第二步:输入变量
第三步:if-else判断条件
第四步:输出结果

(3)本题调试过程碰到问题及解决办法

本题无错误,一次性通过

(4)运行结果截图

(考试时间已到,无法获得截图)

题目3 计算个人所得税

(1)实验代码

#include <iostream>
#include <stdio.h>
using namespace std;
int main(void)
{
    int money;
    cin >> money;
    if (money <= 1600)
        printf("0.00");
    else if (money <= 2500)
        printf("%.2f", 0.05 * (money - 1600));
    else if (money <= 3500)
        printf("%.2f", 0.10 * (money - 1600));
    else if (money <= 4500)
        printf("%.2f", 0.15 * (money - 1600));
    else
        printf("%.2f", 0.20 * (money - 1600));
     
    return 0;
}

(2)设计思路

第一步:定义变量
第二步:输入变量
第三步:if-else判断条件
第四步:输出结果

(3)本题调试过程碰到问题及解决办法

可在printf函数中直接输出表达式

(4)运行结果截图

(考试时间已到,无法获得截图)

题目4 比较大小

(1)实验代码

#include <iostream>
#include <stdio.h>
using namespace std;
int main(void)
{
    int a, b, c, change = 0;;
    cin >> a >> b >> c;
    while (a > b || b > c)
    {
        if (a > b)
        {
            change = a;
            a = b;
            b = change;
        }
        if (b > c)
        {
            change = b;
            b = c;
            c = change;
        }
    }

    printf("%d->%d->%d", a, b, c);

    return 0;
}

(2)设计思路

第一步:定义变量,输入变量
第二步:定义while循环反复判断
第三步:if判断条件,进行数字间的交换
第四步:输出结果

(3)本题调试过程碰到问题及解决办法

本题就一些细节问题,不断调试后解决了

(4)运行结果截图

(考试时间已到,无法获得截图)

题目5 到底是不是太胖了

(1)实验代码

#include<stdio.h>
#include<math.h>
int main()
{   
  int h,w;  
  int N;    
  int z;
  int l,h1; 
  scanf("%d",&N);    
  for(int i=1;i<=N;i++)    
  {     
    scanf("%d %d",&h,&w);       
    z=(h-100)*2*9*1000/10;    
    l=z*9/10;       
    h1=z*11/10;     
    w=w*1000;       
    if(w>l&&w<h1)    
    printf("You are wan mei!
");    
    if(w<=l)    
    printf("You are tai shou le!
");   
    if(w>=h1)    
    printf("You are tai pang le!
");
    }   
  return 0;
}

(2)设计思路

第一步:定义变量
第二步:输入变量
第三步:if-else判断条件
第四步:输出结果

(3)本题调试过程碰到问题及解决办法

判断的时候注意上界和下界的取值

(4)运行结果截图

(考试时间已到,无法获得截图)

题目6 高速公路超速处罚

(1)实验代码

#include<stdio.h>
int main(void)
{
    float speed, limit;
    scanf("%f %f", &speed, &limit);
    if (speed >= limit * 15 / 10)
    {
        printf("Exceed %.0f%%. License Revoked
", (speed - limit) / limit * 100);
    }
    else {
        if (speed >= limit * 11 / 10)
        {
            printf("Exceed %.0f%%. Ticket 200
", (speed - limit) / limit * 100);
        }
        else
        {
            printf("OK
");
        }
    }
    return 0;
}

(2)设计思路

第一步:定义变量
第二步:输入变量
第三步:if-else判断条件
第四步:输出结果

(3)本题调试过程碰到问题及解决办法

注意if-else语句的嵌套使用

(4)运行结果截图

(考试时间已到,无法获得截图)

题目7 统计字符

(1)实验代码

#include<stdio.h>
int main(void)
{
    char c;
    int letter, blank, digital, other, i, n;
    
    letter=0, blank=0, digital=0, other=0, n=0;
    for(i=0; i<10; i++)
    {
        c = getchar();
        if((c>=‘a‘&&c<=‘z‘)||(c>=‘A‘&&c<=‘Z‘))
            letter++;
        else if(c == ‘ ‘||c == ‘
‘)
            blank++;
        else if( c>=‘0‘&&c<=‘9‘)
            digital++;
        else
            other++; 
    }   
    printf("letter = %d, blank = %d, digit = %d, other = %d
", letter, blank, digital, other);

    return 0; 
} 

(2)设计思路

第一步:定义变量,输入变量
第二步:定义for循环反复输入
第三步:if判断条件,判断字符应储存在哪个地方
第四步:输出结果

(3)本题调试过程碰到问题及解决办法

字符的判断条件

(4)运行结果截图

(考试时间已到,无法获得截图)

题目8 统计学生平均成绩与及格人数

(1)实验代码

#include <stdio.h>
#include <math.h>

int main(void)
{
    double n, number;
    int count = 0;
    double sum = 0.0, average = 0.0;

    scanf("%lf", &n);

    for (int i = 0; i < n; i++)
    {
        scanf("%lf", &number);
        sum = sum + number;
        if (number >= 60)
            count += 1;
    }

    if (n != 0)
        average = sum / n;
    else
        average = 0;

    printf("average = %.1lf
", average);
    printf("count = %d", count);

    return 0;
}

(2)设计思路

第一步:定义变量,输入变量
第二步:定义for循环反复输入
第三步:if判断条件
第四步:输出结果

(3)本题调试过程碰到问题及解决办法

average条件判断

(4)运行结果截图

(考试时间已到,无法获得截图)

题目9 输出闰年

(1)实验代码

#include<stdio.h>
int main()
{
    int year, i, count=0;
    
    scanf("%d", &year);
    
    if(year<=2000||year>2100)
        printf("Invalid year!
");
    else
    {
        for(i=2001; i<=year; i++)
        {
            if(i%4==0&&i%100!=0||i%400==0)
            {
                printf("%d
", i);
                count++;
            }
        }
        if(count==0)
            printf("None
");
    }   
    return 0;
}

(2)设计思路

第一步:判断闰年的取值范围
第二步:定义for循环遍历年份
第三步:闰年语句判断年份
第四步:输出结果

(3)本题调试过程碰到问题及解决办法

本题无错误,一次性通过

(4)运行结果截图

(考试时间已到,无法获得截图)



























以上是关于The Eighth week (Lucklyzpp)的主要内容,如果未能解决你的问题,请参考以下文章

eighth week

Scrum Meeting——Eighth week

THE EIGHTH DAY

ML -- the first week

The Week Code - Issue #1

Software Engineering——A PRACTITIONER'S APPROACH (english edition · eighth edition)