第十章 系统安全及应用【☆】

2024-04-30 07:36

本文主要是介绍第十章 系统安全及应用【☆】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

​​​​​一、账号安全管理

1.禁止用户登录

2.锁定并且禁用长期不使用的用户

3.删除无效用户 

4.禁止账号和密码的修改

5.密码安全

6.历史命令限制

7. 终端自动注销

二、用户切换与提权

1. su用户切换

限制普通用户使用su切换用户

2. 使用sudo机制提升权限【☆】

三、系统安全控制

1.开关机安全控制

2.终端安全控制

①限制root只在安全终端登录

​编辑

②禁止所有普通用户登录

③禁止单个普通用户登录

3.系统弱口令检测

1)网络端口扫描NMAP

如何查看某个进程是否已经开启?

如何通过端口号查看进程号?

2)密码工具破解密码

①john密码工具(官网www.openwall.com/john下载源码软件包)

​编辑

②hydra密码工具(可yum安装)

四、服务器初始化操作

1. 对服务器做过哪些初始化操作?

2. 对服务器初始化后做过哪些安全加固?

五、故障案例以及处理方法

1.CPU使用率一直处于高峰值,怎么排查?

2.硬盘读写慢,如何排查?

3.如何搭建堡垒机——jumpserver

4.15秒修复系统启动故障


​​​​​一、账号安全管理

1.禁止用户登录

usermod -s /sbin/nologin 用户名

2.锁定并且禁用长期不使用的用户

passwd -l 用户名    #锁定用户
usermod -L 用户名   #锁定用户
passwd -s 用户名    #查看锁定状态

3.删除无效用户 

userdel -r 用户名

4.禁止账号和密码的修改

chattr +i /etc/passwd /etc/shadow    #锁定文件
chattr -i /etc/passwd /etc/shadow    #解锁文件
lsattr 文件名                        #查看文件锁定状态

5.密码安全

chage -M 天数 用户名                    #针对已存在的用户设置密码有效期
chage -d 0 用户名                       #强制用户下一次登录修改密码
echo xxxxxx | passwd --stadin 用户名    #无交互修改密码
vim /etc/login.defs ---> 修改文件中PASS_MAX_DAYS 天数   #针对新建用户设置密码有效期

天数为99999表示永不过期,程序用户可以设为永不过期。

补充:结合pam模块做ssh安全加固,远程登录时输入3次密码错误则锁定用户600秒,可以防止暴力破解密码(root用户同样限制)。在服务端服务器操作:vim /etc/pam.d/sshd

第二行添加:

auth  required  pam_tally2.so  deny=3  unlock_time=600  even_deny_root  root_unlock_time=600

补充:设置密码最小长度为8位,密码必须包含大小写字符与数字的策略

vim /etc/pam.d/system-auth

6.历史命令限制

history                  #查看历史命令
history -c               #临时清空当前环境的历史命令

①Linux系统默认1000条历史命令,如何修改历史命令数量?

第一步:vim /etc/profile --->改写原来HISTSIZE的值,或写入export HISTSIZE=n  #export表示全局变量,在所有shell环境中都有效

第二步:source /etc/profile 等于. /etc/profile       #加载,立即生效

echo $HISTSIZE                                                      #可查看历史命令数量

②如何设置所有用户登录时清空所有历史命令?

vim /etc/profile ---> 写入echo >  ~/.bash.history           #echo省略效果一样          

或vim ~/.bashrc  ---> 写入echo >  ~/.bash_history

7. 终端自动注销

第一步:vim /etc/profile ---> 写入export TMOUT=n   #表示n秒钟没有操作,窗口自动退出。

第二步:​​​​​source /etc/profile 等于./etc/profile                #立即生效

二、用户切换与提权

1. su用户切换

限制普通用户使用su切换用户

1.将允许使用su命令的用户加入wheel组:gpasswd wheel -a 用户名,表示为把信任的用户加入wheel组(wheel组是系统默认存在的一个组);

2.修改su的PAM认证配置文件,vim /etc/pam.d/su --->第二行sufficient pam_rootok.so表示root使用su切换任何用户无密码认证,一般默认都是开启的;第六行pam_wheel认证模块取消注释 auth required pam_wheel.so use_uid 表示只有加入wheel组中其他用户才能执行su命令(#auto表示不启用,auto表示启用)

PAM认证原理(理解)

ls /etc/pam.d | grep <程序名>   

#查看某个程序是否支持PAM模块认证,配置文件为 /etc/pam.d/<程序名>

第一列表示pam认证模块的类型

  • auth为认证模块、account为账户模块,passwd为密码模块,session为会话模块;

第二列表示pam控制标记

  • required表示该模块必须认证通过整个认证才算成功,但这个模块认证失败不会立刻反馈结果,等所有模块都认证完才会提示。
  • requisite表示该模块必须认证通过整个认证才算成功,认证失败会立刻反馈失败结果。
  • sufficient表示该模块认证成功,且之前的required模块也认证成功则不需要继续验证其他模块。如果认证失败,则继续验证下面的模块,只要后面的模块认证通过也能通过。
  • include表示引用其他模块的配置

第三列表示pam模块

第四列表示pam模块参数

pam实例
用户1用户2用户3用户4
authrequired模块一passfailpasspass
authsufficient模块二passpassfailpass
authrequired模块三passpasspassfail
结果passfailpasspass

2. 使用sudo机制提升权限【☆】

用途

  • sudo命令是给普通用户做提权的

添加可以授权给普通用户的命令

  • visudo添加命令,root用户可以直接wq保存退出;
  • vim /etc/sudoers添加命令,效果与visudo一样。但此文件root没有写的权限,需要wq!强制保存)

用法

  • sudo 授权命令

vim /etc/sudoers配置格式

用户名 主机名=程序列表 或 组名 主机名=程序列表

zhangsan ALL=/sbin/*,/bin/*, !/sbin/reboot 

等于:zhangsan ALL=(root) /sbin/*,/bin/*, !/sbin/reboot 

都表示为zhangsan除了reboot命令,sbin和bin目录的所有命令都能以root用户身份执行。

②%XX组 ALL=/sbin/*

表示XX组中的用户能够执行sbin目录下的所有命令

③别名设置

用户别名:User_Alias 自定义=用户1,用户2...

主机别名:Host_Alias 自定义=主机名1,主机名2...

命令别名:Cmnd _Alias 自定义=命令路径1,命令路径2...

用户别名 主机别名=命令别名

三、系统安全控制

1.开关机安全控制

        还记得root密码忘记找回密码的方法中有一种在开机grub加载时按e键进入修改,意味着谁都可以更改,root密码,风险很大。想要避免可以修改gurb配置,添加密码验证。

第一步:设置进入gurb引导设置需要的密码,并生成密钥

grub-mkpasswd-pbkdf2

第二步:在/etc/grub.d/00_header中添加配置

vim /etc/gurb.d/00_header 
在最后添加以下内容:cat << EOFset superusers="admin"passwd_pbkdf2 admin [密钥]EOF

第三步:备份/boot/grub2/grub.cfg后重新生成一个配置文件

/boot/grub2/grub.cfg                      #备份
grub2-mkconfig -o /boot/grub2/grub.cfg    #重新生成配置文件

2.终端安全控制

①限制root只在安全终端登录
vim /etc/securetty           #默认开启,加#为关闭
②禁止所有普通用户登录
touch /etc/nologin         #创建后所有普通用户都无法登陆

重启或者删掉/etc/nologin文件即可取消禁止

③禁止单个普通用户登录

passwd -l 指定用户

usermod -L 指定用户

usermod -s /sbin/nologin 指定用户

pkill -9 -u 指定用户

3.系统弱口令检测

1)网络端口扫描NMAP

        nmap命令可以扫描哪些主机开启了什么端口,可以用来进行加固或攻击,使用yum本地源或在线源都可以直接安装。

nmap选项格式说明
-pnmap -p 80 192.168.170.0/24检测目标网段有哪些主机使用HTTP80端口并显示端口状态
nmap -p 1-80
nmap -p 80,3389,22,21
-sPnmap -n -sP 192.168.170.0/24快速扫描目标网段有哪些主机开启哪些端口,不做DNS反向查询

-sT

nmap -sT 127.0.0.1查看指定IP开放的TCP端口
-sUnmap -sU 127.0.0.1查看指定IP开放的UDP端口
-sFnmap -sF 127.0.0.1通过FIN探测扫描
-sSnmap -sS 127.0.0.1通过SYN半连接扫描
netstat

-natp

数字形式查看正在运行的使用TCP协议的网络状态信息,包含相关联的进程号、进程名称
-naup以数字形式查看正在运行的UDP协议的网络状态信息,包含相关联的进程号、进程名称
-r显示路由表信息
-l显示处于监听状态的网络连接及端口信息

如何查看某个进程是否已经开启?

①systemctl通过进程名查看进程状态和进程号

systemctl status httpd                                 

②ps通过进程名或端口号过滤查看进程状态信息

ps -elf | grep httpd     

ps aux | grep httpd  :80   

③netstat通过进程名或端口号过滤查看进程状态信息

netstat -lntup | grep httpd 或 :80 

④ss通过进程名或端口号过滤查看进程状态信息,用法和netstat一样,但是更详细更全面

ss -lntup | grep httpd 或 :80 

lsof -i :80  

如何通过端口号查看进程号?

netstat -lntup grep :端口号

ss -lntup | grep :端口号

lsof -i :80 #查看端口进程状态

2)密码工具破解密码
①john密码工具(官网www.openwall.com/john下载源码软件包)

第一步:上传软件包到/opt目录下并解压,切换到/opt/john-1.8.0/src/目录,在src目录下,make clean进行编译安装,我当前的系统类型为linux-x86-64,然后run目录自动生成名为john的二进制文件。make clean安装后会自动在run目录下生成程序文件和密码文件,密码文件可自己补充。

make clean linux-x86-64 

第二步:进入/opt/john-1.8.0/run目录下,复制当前系统中/etc/shadow文件到run目录下,并保存为shadow。执行JR破解并查看结果(破解密码是根据字典内容进行破解的,字典内没有的字段,破解不出来)

cp /etc/shadow /opt/john-1.8.0/run/shadow     #复制密码文件
./john shadow --wordlist=./password.list      #执行john,根据密码词典破解密码
./john shadow --show shadow                   #查看破解后的shadow密码文件(包含密码)

补充:JR破解到的密码信息保存在/opt/john-1.8.0/run/john.pot文件中

②hydra密码工具(可yum安装)

第一步:使用在线yum源安装epel扩展源、安装hydra程序

yum install -y epel-release        #安装扩展源
yum install -y hydra               #安装hydra  

第二步:准备用户文件和密码文件,准备爆破

第三步:爆破

四、服务器初始化操作

当拿到一台新的服务器,需要对度武器做初始化才能用于生产。

1. 对服务器做过哪些初始化操作?

①重装操作系统(操作系统最小化安装的好处是体积小,软件少,以为着可攻击的面小。)

②设置网络:比如网卡IP、网关、路由、DNS服务器地址、物理机会做双网卡绑定(物理机会用两张网卡绑定,或者做组备,mode做负载均衡,需要有交换机做端口聚合来支持。加载bonding模块,双网卡绑定-bond)

③设置主机名、语言、字符集:hostnamectl set-hostname主机名

④ntp时间同步   ntpd  chronyd  ntpdare

⑤防火墙selinux      设置iptables或firewalld防火墙规则,关闭selinux功能     setenforce 0  vim/etc/selinux/config

⑥设置yum仓库镜像源   /etc/yum.repos.d/

⑦磁盘使用lvm或raid做磁盘管理

⑧精简开机启动服务:systemctl enable/disable crond rsrslog network sshd

⑨升级内核到新版本:集群升级内核yum install -y kernel-lt kernel-lt-devel

2. 对服务器初始化后做过哪些安全加固?

①禁止root用户远程登录    /etc/ssh/ssh_config  --->PermitRootLogin no

②修改连接公网的ssh端口号      /etc/ssh/ssh_config  --->port

③限制普通用户限制su切换用户

④普通用户使用t通过sudo授权管理   visudo   /etc/sudoers

⑤锁定关键的系统文件 chattr +i,比如 /etc/shadow

⑥设置历史命令保存条数    /etc/profile    --->  HISTSIZE

⑦设置账户超时时间      /etc/profile    --->   TMOUT

⑧限制用户登录次数防止爆破 /etc/pam.d/sshd

⑨设置用户密码强度  /etc/pam.d/system-auth

⑩接入堡垒机或跳板机(一般服务器置于内网环境中,通过VPN做网络穿透不安全,可以搭建堡垒机一头接外网一头接内网,堡垒机多个安全审查功能 jumpserver

五、故障案例以及处理方法

1.CPU使用率一直处于高峰值,怎么排查?

①top命令或者free -m先分析CPU内存指标,第三行能看到CPU的总的使用率(或者还可以用htop查看,更直观)②确定占用高的进程ID以及执行的命令 ③perf top -p PID,分析进程里是哪些系统调用、调用共享库、哪些模块造成该进程CPU占用过高(top -H PID 查看线程CPU使用情况)④第一种情况:访问量少但占用CPU多,可能是存在一些无限循环bug、Java不停的GC,找开发解决;业务量大导致的,解决办法即增加硬件配置或组件服务器集群。

2.硬盘读写慢,如何排查?

第一步:top命令查看硬盘是否繁忙,其中第三行“wa”表示iowait,值比较大表示硬盘繁忙,硬盘正有大量读写操作(0.1、0.2、0.3这种都还在正常范围,大于1就需要关注了)

第二步:iotop命令查看是哪些占用带宽高的进程,进一步可通过lsof命令查看占用带宽高的几个进程在进行什么操作会产生这么高的磁盘IO操作

第三步:lsof -p PID指定查看该进程打开了什么文件,显示文件描述符,从而排查出该进程到底哪个文件持续在读写,大量占用磁盘的写操作。

第四步:通过badblocks命令检查硬盘是否存在坏道,如果有坏道可以尝试修复或者更换硬盘

3.如何搭建堡垒机——jumpserver

        堡垒机是一个资源集中管理的平台,相比跳板机它更加安全,且可以快速定位责任人。

第一步:官网复制安装脚本在系统中安装jumpserver

第二步:访问官网,默认账户admin,基础设置:设置密码,添加资产、添加用户、全部资产授权给admin、资产授权给其他用户、用户登录设置、命令管理。

第三步:工作台可进行文件管理、执行历史等操作,需要设置一下web终端(相当于本地终端直接登录服务器)。如果只加了website但没有在系统中维护远程应用的话,在这一步内部系统还是无法操作的。

第四步:远程应用建议使用Windowsserver2016或2019操作系统。远程应用创建应用发布机,IP选择一个Windows服务器的IP,添加账号,设置创建账号数量池,Core服务地址可以填写局域网IP或公网IP。创建成功后点击发布机部署,初始化部署。回到上一步中的内部系统,就可以访问内网地址了。

4.15秒修复系统启动故障

        根据开机报错提示,找到挂载失败的分区。vim /etc/fstab文件,不让系统在开机时自动挂载出错的分区。如果解决不了,对于一些简单的逻辑损坏那就使用修复命令,ext4文件系统可以通过fsck.ext4 -a /dev/sda2,xfs文件系统可以通过xfs_repair -v -L /dev/sda1进行修复。

这篇关于第十章 系统安全及应用【☆】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/948251

相关文章

SpringBoot中四种AOP实战应用场景及代码实现

《SpringBoot中四种AOP实战应用场景及代码实现》面向切面编程(AOP)是Spring框架的核心功能之一,它通过预编译和运行期动态代理实现程序功能的统一维护,在SpringBoot应用中,AO... 目录引言场景一:日志记录与性能监控业务需求实现方案使用示例扩展:MDC实现请求跟踪场景二:权限控制与

C语言中位操作的实际应用举例

《C语言中位操作的实际应用举例》:本文主要介绍C语言中位操作的实际应用,总结了位操作的使用场景,并指出了需要注意的问题,如可读性、平台依赖性和溢出风险,文中通过代码介绍的非常详细,需要的朋友可以参... 目录1. 嵌入式系统与硬件寄存器操作2. 网络协议解析3. 图像处理与颜色编码4. 高效处理布尔标志集合

Java中的Lambda表达式及其应用小结

《Java中的Lambda表达式及其应用小结》Java中的Lambda表达式是一项极具创新性的特性,它使得Java代码更加简洁和高效,尤其是在集合操作和并行处理方面,:本文主要介绍Java中的La... 目录前言1. 什么是Lambda表达式?2. Lambda表达式的基本语法例子1:最简单的Lambda表

Python结合PyWebView库打造跨平台桌面应用

《Python结合PyWebView库打造跨平台桌面应用》随着Web技术的发展,将HTML/CSS/JavaScript与Python结合构建桌面应用成为可能,本文将系统讲解如何使用PyWebView... 目录一、技术原理与优势分析1.1 架构原理1.2 核心优势二、开发环境搭建2.1 安装依赖2.2 验

Java字符串操作技巧之语法、示例与应用场景分析

《Java字符串操作技巧之语法、示例与应用场景分析》在Java算法题和日常开发中,字符串处理是必备的核心技能,本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字... 目录引言1. 基础操作1.1 创建字符串1.2 获取长度1.3 访问字符2. 字符串处理2.1 子字

SpringShell命令行之交互式Shell应用开发方式

《SpringShell命令行之交互式Shell应用开发方式》本文将深入探讨SpringShell的核心特性、实现方式及应用场景,帮助开发者掌握这一强大工具,具有很好的参考价值,希望对大家有所帮助,如... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定

SpringBoot应用中出现的Full GC问题的场景与解决

《SpringBoot应用中出现的FullGC问题的场景与解决》这篇文章主要为大家详细介绍了SpringBoot应用中出现的FullGC问题的场景与解决方法,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录Full GC的原理与触发条件原理触发条件对Spring Boot应用的影响示例代码优化建议结论F

MySQL 分区与分库分表策略应用小结

《MySQL分区与分库分表策略应用小结》在大数据量、复杂查询和高并发的应用场景下,单一数据库往往难以满足性能和扩展性的要求,本文将详细介绍这两种策略的基本概念、实现方法及优缺点,并通过实际案例展示如... 目录mysql 分区与分库分表策略1. 数据库水平拆分的背景2. MySQL 分区策略2.1 分区概念

Spring Shell 命令行实现交互式Shell应用开发

《SpringShell命令行实现交互式Shell应用开发》本文主要介绍了SpringShell命令行实现交互式Shell应用开发,能够帮助开发者快速构建功能丰富的命令行应用程序,具有一定的参考价... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定义S

C语言函数递归实际应用举例详解

《C语言函数递归实际应用举例详解》程序调用自身的编程技巧称为递归,递归做为一种算法在程序设计语言中广泛应用,:本文主要介绍C语言函数递归实际应用举例的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录前言一、递归的概念与思想二、递归的限制条件 三、递归的实际应用举例(一)求 n 的阶乘(二)顺序打印