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)的主要内容,如果未能解决你的问题,请参考以下文章
Software Engineering——A PRACTITIONER'S APPROACH (english edition · eighth edition)