google的双向认证

通常我们直接通过ssh输入密码连接服务器,但这样很容易出现暴力破解情况,所以我们可以结合google的动态认证+ssh密码,这样能够大大的提升登陆的安全。
简单来说,就是当用户通过ssh登陆系统时,先输入google的随机验证码,然后在输入服务器的ssh密码

Google-authenticator部署

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
我在m01_10.0.0.61这个服务器上进行配置的认证

#安装
1、安装依赖包,环境是centos7的
[root@m01 ~]# yum -y install pam-devel libpng-devel autoconf automake libtool

# 下载代码
国内源
wget http://test.driverzeng.com/other/1.04.tar.gz
国外源
wget https://github.com/google/google-authenticator-libpam/archive/1.04.tar.gz

2、下载安装google-authenticator-libpam插件
[root@m01 ~]# wget https://github.com/google/google-authenticator-libpam/archive/1.04.tar.gz

3、解压
[root@m01 ~]# tar xf 1.04
得到这个目录 google-authenticator-libpam-1.04

4、进入工作目录
[root@m01 ~]# cd google-authenticator-libpam-1.04/

5、执行(构建代码)
[root@m01 google-authenticator-libpam-1.04]# ./bootstrap.sh

6、生成
[root@m01 google-authenticator-libpam-1.04]# ./configure
生成好了会多一些东西

7、编译安装(编译的作用:让机器能够认识我的代码)
[root@m01 google-authenticator-libpam-1.04]#make && make install

8、查看pam_google_authenticator.so的插件是否生成(验证插件是否安装)
[root@m01 google-authenticator-libpam-1.04]# ll /usr/local/lib/security/
total 136
-rwxr-xr-x 1 root root 1021 May 21 08:59 pam_google_authenticator.la
-rwxr-xr-x 1 root root 133552 May 21 08:59 pam_google_authenticator.so

9、将google-authenticator-libpam复制到库文件
[root@m01 google-authenticator-libpam-1.04]# cp /usr/local/lib/security/pam_google_authenticator.so /usr/lib64/security/

#现在输入google会tab自动补全,证明安装已完成
[root@m01 google-authenticator-libpam-1.04]# google-authenticator

生成google认证识别

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
[root@m01 google-authenticator-libpam-1.04]# google-authenticator 
输入命令之后,再输入y,会有一个二维码出来,用手机扫描,获取动态码之后再输入4个y


#是否基于时间的认证,为了防止不同跨时区的问题,这里选择y
Do you want authentication tokens to be time-based (y/n) y
#然后会跳出一个google的二维码
#红色框框是: 生成的密钥
#绿色框框是: 生成的5个一次性紧急验证码,用于紧急情况下,使用过一次后该验证码即失效了。

#是否更新用户的 Google Authenticator 配置文件,选择 y 才能使上面操作对当前 root 用户生效,其实就是在对应用户的 Home 目录下生成了一个 .google_authenticator 文件,如果你想停用这个用户的 Google Authenticator 验证,只需要删除这个用户 Home 目录下的 .google_authenticator 文件就可以了。
Do you want me to update your "/root/.google_authenticator" file? (y/n) y

#每次生成的认证码是否同时只允许一个人使用?这里选择 y。
Do you want to disallow multiple uses of the same authentication
token? This restricts you to one login about every 30s, but it increases
your chances to notice or even prevent man-in-the-middle attacks (y/n) y

#每次生成的令牌30s生成一次,最高允许存在误差4分钟。
By default, a new token is generated every 30 seconds by the mobile app.
In order to compensate for possible time-skew between the client and the server,
we allow an extra token before and after the current time. This allows for a
time skew of up to 30 seconds between authentication server and client. If you
experience problems with poor time synchronization, you can increase the window
from its default size of 3 permitted codes (one previous code, the current
code, the next code) to 17 permitted codes (the 8 previous codes, the current
code, and the 8 next codes). This will permit for a time skew of up to 4 minutes
between client and server.
Do you want to do so? (y/n) y

将google 2FA加到ssh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 1、搭建配置文件(SSH调用及客户端配置,添加pam认证,再配置文件里面的第一行输入以下内容)
[root@m01 ~]# vim /etc/pam.d/sshd
#%PAM-1.0
auth required pam_google_authenticator.so

2、修改ssh配置文件,关联google认证
[root@m01 ~]# vim /etc/ssh/sshd_config
ChallengeResponseAuthentication yes #第69行的no,修改为yes

3、重启ssh服务
[root@m01 ~]# systemctl restart sshd

4、验证google双向认证
断开上述配置的服务器,再次重新连接发现无法连接登陆上去,代表Google二次认证已配置完成,可以使用远程连接的方法进行连接登陆
[root@web01 ~]# ssh root@10.0.0.61
我在m01_10.0.0.61这个服务器上进行配置的认证,所以我要远程连接10.0.0.61,需要让我输入动态码即成功完成配置认证

或者使用xshell建立连接验证也可以

image-20240521100545835

image-20240521140003525

注意事项:
1.用password + google authenticator,如果使用公钥登录的话,会跳过google authenticator验证直接登录服务器的。
2.如果是内网测试使用,建议安装google authenticator 浏览器插件实践。如果是公网服务器建议安装手机版的Authenticator

二次认证并不是刚需,可以根据工作需要去部署,只有xsehll连接可以设置二次认证,windterm不支持

image-20240521140905172 image-20240521141110144 image-20240521141204024

Nginx的部署

1
2
3
4
5
6
7
8
9
10
11
#yum安装 
优点:安装启动简单
缺点:yum安装的版本是1.20版本是固定死的,升级简单,直接使用yum update升级即可

#源码安装
优点:可以选择自己需要的版本
缺点:安装复杂,升级繁琐
#二进制安装
解压即用

Nginx官网 http://nginx.org/
image-20240521141338448 image-20240521141437441

Nginx源码安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#前期准备 安装编译需要的gcc和gcc-c++
yum install -y gcc gcc-c++

1、到Nginx官网下载源码包
wget http://nginx.org/download/nginx-1.24.0.tar.gz

[root@m01 ~]# ll
-rw-rw-rw- 1 root root 54019 May 21 08:49 1.04.tar.gz

2、创建工作目录,将源码包复制到工作目录并解压
[root@m01 ~]# mkdir /app
[root@m01 ~]# mv nginx-1.24.0.tar.gz /app/
[root@m01 ~]# cd /app/
[root@m01 app]# tar xf nginx-1.24.0.tar.gz
[root@m01 app]# ll
drwxr-xr-x 8 1001 1001 158 Apr 11 2023 nginx-1.24.0
-rw-r--r-- 1 root root 1112471 Apr 12 2023 nginx-1.24.0.tar.gz

3、生成(第1次生成)
#为避免缺少依赖生成报错,可以提前安装依赖:yum -y install pcre-devel pcre-devel

需要进入工作目录,再生成
[root@m01 app]# cd /app/nginx-1.24.0
[root@m01 app]#./configure --prefix=/opt/nginx-1.24.0 --with-http_ssl_module --with-http_stub_status_module
--prefix=/opt/nginx-1.24.0 :指定安装路径
--with-http_ssl_module:想要nginx带http的功能
--with-http_stub_status_module:这个模块能够获取Nginx自上次启动以来的工作状态

#执行命令报错,问题1:缺少pcre的依赖
./configure: error: the HTTP rewrite module requires the PCRE library.
You can either disable the module by using --without-http_rewrite_module
option, or install the PCRE library into the system, or build the PCRE library
statically from the source with nginx by using --with-pcre=<path> option.
#解决办法:安装pcre的依赖
[root@m01 nginx-1.24.0]# yum -y install pcre-devel

4、生成(第2次生成)
[root@m01 app]#./configure --prefix=/opt/nginx-1.24.0 --with-http_ssl_module --with-http_stub_status_module

# 执行命令报错,问题2:缺少openssl的依赖
./configure: error: SSL modules require the OpenSSL library.
You can either do not enable the modules, or install the OpenSSL library
into the system, or build the OpenSSL library statically from the source
with nginx by using --with-openssl=<path> option.
## 解决方案:安装openssl的依赖
yum install -y openssl-devel

5、生成(第3次生成)
[root@m01 app]#./configure --prefix=/opt/nginx-1.24.0 --with-http_ssl_module --with-http_stub_status_module
依赖全部安装完成后,再次生成,出现如下内容代表生成完成
Configuration summary
+ using system PCRE library
+ using system OpenSSL library
+ using system zlib library

nginx path prefix: "/opt/nginx-1.24.0"
nginx binary file: "/opt/nginx-1.24.0/sbin/nginx"
nginx modules path: "/opt/nginx-1.24.0/modules"
nginx configuration prefix: "/opt/nginx-1.24.0/conf"
nginx configuration file: "/opt/nginx-1.24.0/conf/nginx.conf"
nginx pid file: "/opt/nginx-1.24.0/logs/nginx.pid"
nginx error log file: "/opt/nginx-1.24.0/logs/error.log"
nginx http access log file: "/opt/nginx-1.24.0/logs/access.log"
nginx http client request body temporary files: "client_body_temp"
nginx http proxy temporary files: "proxy_temp"
nginx http fastcgi temporary files: "fastcgi_temp"
nginx http uwsgi temporary files: "uwsgi_temp"
nginx http scgi temporary files: "scgi_temp"


6、编译安装(让系统能够识别你的代码) 注意,要进入工作目录
[root@m01 nginx-1.24.0]# make && make install

7、安装 编译安装成功会在opt下生成nginx
[root@m01 nginx-1.24.0]# ll /opt/
drwxr-xr-x 6 root root 54 May 21 11:45 nginx-1.24.0

8、添加软连接
[root@m01 nginx-1.24.0]# ln -s /opt/nginx-1.24.0/ /opt/nginx
[root@m01 nginx-1.24.0]# ll /opt/
total 0
lrwxrwxrwx 1 root root 18 May 21 11:52 nginx -> /opt/nginx-1.24.0/

9、添加环境变量
[root@m01 nginx-1.24.0]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@m01 nginx-1.24.0]# vim /etc/profile.d/nginx.sh #这里会打开一个空文件,将如下内容写入文件即可
export NGINX_PATH=/opt/nginx/sbin
export PATH=$PATH:$NGINX_PATH

10、生效环境变量
[root@m01 nginx-1.24.0]# source /etc/profile

11、检查环境变量
[root@m01 nginx-1.24.0]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/opt/nginx/sbin

12、启动Nginx,并检查启动是否成功
[root@m01 nginx-1.24.0]# nginx
[root@m01 nginx-1.24.0]# ps -aux |grep nginx
root 24355 0.0 0.1 46004 1140 ? Ss 11:58 0:00 nginx: master process nginx
nobody 24356 0.0 0.1 46452 1888 ? S 11:58 0:00 nginx: worker process
root 24358 0.0 0.0 112812 980 pts/2 R+ 11:58 0:00 grep --color=auto nginx
[root@m01 nginx-1.24.0]# netstat -lntup|grep 80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 24355/nginx: master

访问10.0.0.61页面

image-20240521120431273

注意:

1
2
3
4
5
#如果nginx起不来。可以查看是否有老版本存在,并将老版本移除
[root@m01 nginx-1.24.0]# rpm -qa |grep nginx
yum remove nginx

不加环境变量就用/opt/nginx/sbin/nginx这个命令执行,nginx也可以启动

卸载源码安装的nginx

1
2
3
4
5
6
7
8
9
10
11
12
13
14
1、关闭nginx
nginx -s stop
[root@m01 ~]# ps -aux|grep nginx
root 24741 0.0 0.0 112812 976 pts/2 R+ 15:09 0:00 grep --color=auto nginx

2、输入以下指令全局查找nginx相关的文件:
[root@m01 nginx-1.24.0]# sudo find / -name "nginx*"

3、删除查找出来的所有nginx相关文件
[root@m01 nginx-1.24.0]# sudo find / -name "nginx*"|xargs rm -rf

4、尝试启动nginx 不能启动代表卸载成功
[root@m01 ~]# /opt/nginx/sbin/nginx
-bash: /opt/nginx/sbin/nginx: No such file or directory