运维随笔

笔记


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 搜索

云主机安全加固

发表于 2022-01-12 | 更新于: 2022-10-24 | 分类于 Linux
字数统计: 4.7k | 阅读时长 ≈ 21

1 用户安全策略调整

1.1 限制root登陆和 SSH登陆超时设置

1
2
3
4
5
6
7
8
9
10
11
# 创建用户
useradd ghjs
# 设置密码
passwd ghjs
# 加入wheel组(sudo)
usermod -G wheel ghjs
# 限制root登陆/etc/ssh/sshd_config
PermitRootLogin no
# 第一行表示每60秒检测一次,第二行表示检测到5次不活动就断开连接
ClientAliveInterval 60
ClientAliveCountMax 5

1.2 普通用户口令锁定策略

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 密码锁定策略/etc/pam.d/sshd
# 添加下边一行策略------------------------------
auth required pam_tally2.so onerr=fail deny=6 unlock_time=300

-----------补充说明------------------
# onerr=fail 表示定义了当出现错误时的缺省返回值;
# deny 表示设置普通用户和root用户连续错误登陆的最大次数,超过最大次数,则锁定该用户;
# unlock_time 表示设定普通用户锁定后,多少时间后解锁,单位是秒;
# even_deny_root 表示也限制root用户;
# root_unlock_time 表示设定root用户锁定后,多少时间后解锁,单位是秒;
# 锁定用户
passwd -l $user
# 查看用户状态
passwd -S $user
# 解锁用户
passwd -u $user

1.3 口令生存周期(维护人员使用的账号)

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
# 表示将此用户的密码最长使用天数设为180,最短使用天数设为0,过期前15天警告用户。
chage -d 0 -m 0 -M 90 -W 15 ghjs
# 查看账号过期时间
chage -l ghjs
------------
[root@localhost ghjs]# chage -l ghjs
最近一次密码修改时间 :密码必须更改
密码过期时间 :密码必须更改
密码失效时间 :密码必须更改
帐户过期时间 :从不
两次改变密码之间相距的最小天数 :0
两次改变密码之间相距的最大天数 :1
在密码过期之前警告的天数 :15
------------
选项:
-d, --lastday 最近日期 将最近一次密码设置时间设为“最近日期”
-E, --expiredate 过期日期 将帐户过期时间设为“过期日期”
-h, --help 显示此帮助信息并推出
-I, --inactive INACITVE 过期 INACTIVE 天数后,设定密码为失效状态
-l, --list 显示帐户年龄信息
-m, --mindays 最小天数 将两次改变密码之间相距的最小天数设为“最小天数”
-M, --maxdays MAX_DAYS set maximum number of days before password
change to MAX_DAYS
-R, --root CHROOT_DIR chroot 到的目录
-W, --warndays 警告天数 将过期警告天数设为“警告天数”

1.4 口令重复次数限制

1
2
3
# /etc/pam.d/system-auth
# 禁止过去使用5次的密码,大概15行位置末尾添加 remember=5
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=5

1.5 空密码账号

1
2
3
# 空密码账号检查
awk -F: '($2=="")' /etc/shadow
# 查看UID为0的账号:awk -F: '($3==0)' /etc/passwd,确认UID为0的账号只有root

1.6 无关账号删除或禁用

1.7 关闭telnet服务,默认没装

2 服务安全漏洞修复

2.1系统ssl+ssh

TLS protocol中间人攻击漏洞(CVE-2015-4000)

处理方案

升级openssl版本3.0.3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 安装gcc
yum install gcc -y
# 安装perl 5 (安装openssl会提示缺少)
tar -zxvf perl-5.28.0.tar.gz
cd perl-5.28.0
./configure.gnu -des -Dprefix=$HOME/localperl
make
make test
make install
# 安装openssl
tar -zxvf openssl-3.0.3.tar.gz
cd openssl-3.0.3
./config --prefix=/usr/local/openssl/
make
make install
# 卸载历史openssl
yum erase -y openssl openssl-devel
ln -sf /usr/local/openssl/bin/openssl /usr/bin/openssl
# 查看版本报错 openssl version
openssl: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory
# 创建so文件软连接
ln -s /usr/local/openssl/lib/libssl.so.3 /usr/lib64/libssl.so.1.1
ln -s /usr/local/openssl/lib/libcrypto.so.3 /usr/lib64/libcrypto.so.1.1

OpenSSH用户枚举(CVE-2018-15473)【POC】

OpenSSH <7.5

OpenSSH sshd拒绝服务漏洞(CVE-2016-10708)

OpenSSH设计漏洞(CVE-2017-15906)

OpenSSH用户枚举漏洞(CNVD-2018-20962)(CVE-2018-15919)

OpenSSH 命令注入漏洞

OpenSSH CBC模式信息泄露漏洞(CVE-2008-5161)

处理方案

升级openssh到8.9p1版本

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
# 备注:先升级openssl再升级openssh
# 警告:升级期间一定不要断开ssh窗口连接,否则无法重新连接,提前建立ssh和sftp连接。(高风险)
# 1) 关闭sshd
systemctl stop sshd
# 2) 备份旧版配置文件
mv /etc/ssh /etc/ssh.bak
# 3) 卸载旧版openssh
rpm -qa | grep openssh-*
yum erase -y openssh-clients openssh-server openssh
# 4) 完成卸载
ssh -V
无版本输出
# 5) 安装依赖
yum install -y pam-devel zlib zlib-devel openssl-devel
# 6) 安装openssh
tar -zxvf openssh-8.9p1.tar.gz
cd openssh-8.9p1
# --with-ssl-dir 指向openssl的安装目录,否则报错configure: error: *** working libcrypto not found
./configure --prefix=/usr/ --sysconfdir=/etc/ssh --with-openssl-includes=/usr/local/include --with-ssl-dir=/usr/local/openssl --with-zlib --with-md5-passwords --with-pam
make
make install
ssh -V # 确定openssh和openssl为安装版本
# 7) 配置服务及启动
cp -a openssh-8.9p1/contrib/redhat/sshd.init /etc/init.d/sshd
chmod +x /etc/init.d/sshd
chkconfig --add sshd
systemctl start sshd
systemctl status sshd
systemctl enable sshd
chkconfig sshd on
# 8) 修改sshd_config配置,否则无法登陆
vim /etc/ssh/sshd_config
添加如下配置
---------------
# 允许密码登录
PasswordAuthentication yes
# 允许root远程登录
PermitRootlogin yes
# 解决此报错信息 error: Could not get shadow information for <user>
UsePAM yes
---------------
# 9) 修改/etc/pam.d/sshd文件,否则无法登陆
vim /etc/pam.d/sshd

文件内容如下
-----------------------------------------------
# %PAM-1.0
auth required pam_sepermit.so
auth substack password-auth
auth include postlogin
# Used with polkit to reauthorize users in remote sessions
-auth optional pam_reauthorize.so prepare
account required pam_nologin.so
account include password-auth
password include password-auth
# pam_selinux.so close should be the first session rule
session required pam_selinux.so close
session required pam_loginuid.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session required pam_selinux.so open env_params
session required pam_namespace.so
session optional pam_keyinit.so force revoke
session include password-auth
session include postlogin
# Used with polkit to reauthorize users in remote sessions
-session optional pam_reauthorize.so prepare
-----------------------------------------------
# 10) 重启sshd
systemctl restart sshd
# 11) 验证ssh登陆

image-20220622113703460

启用 SSH 弱密钥交换算法

SSH SHA-1 HMAC 算法已启用

处理方案

1
2
3
4
5
# sshd_config添加如下配置
Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,arcfour
MACs hmac-sha2-256,hmac-sha2-256-etm@openssh.com
# 重启sshd
systemctl restart sshd

2.2 nginx

HTTP/2实现安全漏洞(CVE-2019-9516)

nginx拒绝服务漏洞(CNVD-2016-00982)(CVE-2016-0746)

HTTP/2实现安全漏洞(CVE-2019-9511)

nginx拒绝服务漏洞(CNVD-2018-22805)(CVE-2018-16843)

HTTP/2实现安全漏洞(CVE-2019-9513)

nginx 安全漏洞(CVE-2021-23017)

nginx拒绝服务漏洞(CVE-2016-0747)

nginx ngx_http_mp4_module组件内存泄露漏洞(CVE-2018-16845)

Nginx 环境问题漏洞(CVE-2019-20372)

处理方案

升级nginx到1.21.6版本


Web服务器错误页面信息泄露

Web服务器HTTP头信息公开

处理方案

1
2
3
4
5
6
# nginx配置
server {
listen 8080;
...
server_tokens off; #添加
}

image-20220622111333256


HTTP响应头使用X-XSS-Protection

处理方案

1
2
3
4
5
6
7
8
9
# nginx.conf添加如下配置
http {
add_header X-Xss-Protection "1; mode=block";
...
}

• 0:禁用XSS保护;
• 1:启用XSS保护;
• 1; mode=block:启用XSS保护,并在检查到XSS攻击时,停止渲染页面(例如IE8中,检查到攻击时,整个页面会被一个#替换)

image-20220622112226841


HTTP响应头部使用X-Frame-Options

HTTP响应头X-Content-Options:nosniff

处理方案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# nginx.conf配置添加
# 该配置取消,影响页面嵌套
http {
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;

...
}

# 赋值有如下三种:

(1)DENY:不能被嵌入到任何iframe或frame中。

(2)SAMEORIGIN:页面只能被本站页面嵌入到iframe或者frame中。

(3)ALLOW-FROM uri:只能被嵌入到指定域名的框架中。

image-20220622114310329


2.3 docker

Docker Remote API 未授权访问漏洞【POC】

处理方案:

1
2
# docker启动命令配置修改只允许本机访问
-H tcp://127.0.0.1:4243

image-20220622114832945

2.4 tomcat

Apache Tomcat 代码问题漏洞(CVE-2020-9484)

Apache Tomcat 8.5.38 < 8.5.79 安全漏洞

Apache Tomcat 安全漏洞(CVE-2020-13943)

Apache Tomcat servlet / JSP容器默认文件

Apache Tomcat 8.5.0 < 8.5.68 漏洞

Apache Tomcat HTTP / 2请求标头混淆漏洞(CVE-2020-17527 )

更新到8.5.81版本

Apache ServerToken的信息披露

Apache HTTP Server版本

https://blog.51cto.com/meiling/2069452

https://wenku.baidu.com/view/0792e11e463610661ed9ad51f01dc281e53a56b1.html

1
2
3
在tomcat部署⽬录下lib中新建⽂件夹
/org/apache/catalina/util/
并在util中新建在 ServerInfo.properties⽂件,⽂件添加 server.info=Apache Tomcat

2.5 mysal

暂不处理

2.6 apache

Apache HTTP Server 安全漏洞(CVE-2021-33193)

Apache 2.4.x < 2.4.47 多个漏洞

Apache 2.4.x < 2.4.53 多个漏洞

Apache HTTP Server 代码问题漏洞(CVE-2021-40438)

升级到2.4.54版本

隐藏版本信息

2.7 consul

Hashicorp Consul Web UI和API访问

处理方案:

容器禁止端口暴漏,通过容器名连接。

2.8 mapserv

不存在的页面(404)物理路径披露

jQuery跨站脚本漏洞(CNVD-2019-11839)(CVE-2019-11358)

更新gdw.lua

移除mapdata/client目录

2.9 redis

Redis服务器不受密码认证的保护【POC】

配置redis密码验证。

3 日志审计

3.1 postgresql开启日志审计

1、审计清单说明

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
logging_collector   # 是否开启日志收集开关,默认off,推荐on

log_destination -- 日志记录类型,默认是stderr,只记录错误输出,推荐csvlog,总共包含:`stderr, csvlog, syslog, and eventlog,`

log_directory # 日志路径,默认是$PGDATA/pg_log,

log_filename # 日志名称,默认是postgresql-%Y-%m-%d_%H%M%S.log

log_file_mode # 日志文件类型,默认为0600

log_truncate_on_rotation # 默认为off,设置为on的话,文件内容覆盖方式:off后面附加,on:清空再加

log_rotation_age # 保留单个文件的最大时长,默认是1d,也有1h,1min,1s

log_rotation_size # 保留单个文件的最大尺寸,默认是10MB

log_error_verbosity # 默认为default,verbose表示冗长的

log_connections # 用户session登陆时是否写入日志,默认off,推荐为on

log_disconnections # 用户session退出时是否写入日志,默认off,推荐为on

log_statement --`记录用户登陆数据库后的各种操作`

1. none,即不记录
2. ddl(记录create,drop和alter)
3. mod(记录ddl+insert,delete,update和truncate)
4. all(mod+select)

log_min_duration_statement = 2s -- `记录超过2秒的SQL`
log_checkpoints = on # 检查点和重启点被记录再服务器日志中。一些统计信息也被包括再日志消息中,包括写入缓冲区的数据和写他们呢所花的时间。这个参数智能在postgresql.conf文件中或在服务器命令行上设置。默认是关闭(off)
log_lock_waits = on # 如果一个会话等待某个类型的锁的时间超过deadlock_timeout的值,该参数决定是否在数据库日志中记录这个信息。
deadlock_timeout = 1s # 数据库的锁通常可以在pg_locks这个系统表里找,但这只是当前的锁表/行信息,如果你想看一天内有多少个超过死锁时间的锁发生,可以在日志里设置并查看,log_lock_waits 默认是off,可以设置开启。这个可以区分SQL慢是资源紧张还是锁等待的问题。

2、推荐的设置参数

1
2
3
4
5
6
7
8
9
10
11
12
13
logging_collector = on
log_destination = 'csvlog'
log_truncate_on_rotation = on
log_connections = on
log_disconnections = on
log_error_verbosity = verbose
log_statement = ddl

# 这部分是postgresql.conf文件中没有的
log_min_duration_statement = 60s # 记录超过60s的SQL
log_checkpoints = on
log_lock_waits = on
deadlock_timeout = 1s
1
2
3
# 查看日志目录和日志文件名
show log_directory;
show log_filename;

3、参数修改方法

直接修改配置文件

postgresql.conf默认位于$PGDATA目录下。

vim /usr/data/pgsql/data/postgresql.conf

用超级用户运行:postgres=# SELECT pg_reload_conf();

show命令可以查询当前状态

4、 参考文档

http://t.zoukankan.com/tiandi-p-13568675.html

3.2 postgresql设置密码复杂度校验

阅读全文 »

Elasticsearch导入导出数据-Elasticdump

发表于 2022-01-12 | 更新于: 2022-06-05 | 分类于 Linux
字数统计: 402 | 阅读时长 ≈ 2

1 导入/导出

阅读全文 »

ubuntu20.04安装NVIDIA显卡驱动+CUDA

发表于 2022-01-12 | 更新于: 2022-03-31 | 分类于 Linux
字数统计: 1.3k | 阅读时长 ≈ 5

1 安装驱动

1.1 查看显卡的型号

打开终端,输入指令以查看电脑的显卡型号:·

阅读全文 »

Ansible Tower 安装

发表于 2021-11-02 | 更新于: 2022-08-09 | 分类于 Linux
字数统计: 1.1k | 阅读时长 ≈ 5

一、ansible-tower简介

阅读全文 »

postgresql+repmgr高可用

发表于 2021-08-17 | 更新于: 2022-06-05 | 分类于 Linux
字数统计: 5.3k | 阅读时长 ≈ 28

1 参考文档

阅读全文 »
1…678…32
OperationMAN

OperationMAN

日常运维文档整理。

157 日志
9 分类
107 标签
E-Mail GitHub 码云 Linux命令大全 鸟哥的私房菜 RUNOOB.com 陈沙克日志 Bitnami Font Awesome
友情链接
  • Next优化
  • Next深度优化
已运行2941天09小时34分34秒
© 2023 OperationMAN | 豫ICP备 17032296 号