当前位置:   article > 正文

Linux系统安全及应用_linux 功能安全风险评估

linux 功能安全风险评估

引言

linux系统是以安全、高效稳定得以广泛的应用,linux系统中提供了多种机制来确保账号的安全使用。

一、账号安全基本措施

1、系统账号清理

  • 将非登录用户的Shell设为/sbin/nologin
  • 锁定长期不使用的账号
  • 删除无用的账号
  • 锁定账号文件passwd、shadow
chattr +i /etc/passwd   ###锁定文件

lsattr /etc/passwd       ###查看状态

chattr -i /etc/passwd   ###解锁文件
  • 1
  • 2
  • 3
  • 4
  • 5

举例:
1、锁定文件并查看状态
在这里插入图片描述

2、锁定/etc/passwd之后还能修改密码,因为密码由/etc/shadow管理
在这里插入图片描述
3、把/etc/shadow锁上之后,就不能修改密码了
在这里插入图片描述

2、密码安全控制

  • 设置密码有效期
  • 要求用户下次登录时修改密码

举例:
1、新建用户libai,进入vi /etc/login.defs,修改密码有效期,查看两个用户修改密码的最大间隔。
在这里插入图片描述
在这里插入图片描述
进入vi /etc/login.defs,修改密码有效期
在这里插入图片描述

2、修改用户密码的最大间隔在这里插入图片描述
3、强制在下次登录时更改密码
在这里插入图片描述

3、命令历史限制

  • 减少记录的命令条数
  • 注销时自动清空历史命令
source /etc/profile   ###刷新

 ./etc/profile   ###另一种刷新方式

vim ~/.bash_history  ###历史命令记录存储在.bash_history里

echo " " > .bash_history   ###清空历史命令记录 .bash_history

history -c   ###临时删除

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

环境变量的读取:
用户登录-》加载~/.bash_profile --》bash_profile中的配置首先是使 ~/.bashrc生效
用户登出–》.bash_logout 运行logout配置文件

举例:
1、进入vi /etc/profile,修改histsize,后面的数字表示保留的条数
在这里插入图片描述
2、用户登出时清除命令
plan1:
在这里插入图片描述

在这里插入图片描述
plan 2:
在这里插入图片描述

在这里插入图片描述

4、终端自动注销

  • 闲置600秒后自动注销
vi /etc/profile

###进入写入  export TMOUT=600

wq保存退出

source /.bash_logout   刷新
或者
 . /etc/profile   ###刷新
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

二、使用su命令切换用户

1、用途及用法

  • 用途:Substitute User,切换用户
  • 格式:su - 目标用户

2、密码验证

  • root -->任意用户,不验证密码
  • 普通用户–>其他用户,验证目标用户的密码

在这里插入图片描述

3、限制使用su命令的用户

  • 将允许使用su命令的用户加入wheel组
  • 启用pam_wheel认证模块
  • 查看su操作记录
    • 安全日志文件/var/log/secure

默认情况下,任何用户都允许使用su命令,从而有机会反复尝试其他用户(如root)的登录密码,这样带来了安全风险。为了加强su命令的使用控制,可以借助于pam_wheel认证模块,只允许极个别用户使用su命令进行切换。实现过程如下:将授权使用su命令的用户添加到 wheel组,修改/etc/pam.d/su认证配置以启用 pam_wheel 认证。

在这里插入图片描述

在/etc/ pam.d/su文件里设置禁止用户使用su命令
vim /etc/pam.d/ su

2 # auth sufficient pam_ rootok.so

6 #auth required pam_ wheel.so use__uid
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  1. 以上两行是默认状态(即开启第一行,注释第二行),这种状态下是允许所有用户间使用su命令进行切换的。
  2. 两行都注释也是运行所有用户都能使用su命令,但root下使用su切换到其他普通用户需要输入密码;如果第一行不注释,则root使用su切换普通用户就不需要输入密码(pam_rootok.so模块的主要作用是使uid为o的用户,即root用户能够直接通过认证而不用输入密码。
  3. 如果开启第二行,表示只有root用户和wheel组内的用户才可以使用su命令
  4. 如果注释第一行,开启第二行,表示只有wheel组内的用户才能使用su命令,root用户也被禁用su命令。

举例:
1、把zhangbin添加到wheel组中,然后确认wheel组成员
在这里插入图片描述

2、启用pam认证,加入组的可以使用,未加入组的无法使用
在这里插入图片描述
3、启用pam_wheel认证以后,未加入到wheel组内的其他用户将无法使用su命令,尝试进行切换时将提示“拒绝权限”,从而将切换用户的权限控制在最小范围内。
在这里插入图片描述
4、普通用户切换登录测试验证,使用su命令切换到用户的操作将会记录到安全日志/var/log/secure文件中,可以根据需要查看。
在这里插入图片描述

4、PAM安全认证

控制类型也称做Control Flags,用于PAM验证类型的返回结果

  1. required验证失败时仍然继续,但返回Fail
  2. requisite验证失败则立即结束整个验证过程,返回Fail
  3. suffcient验证成功则立即返回,不再继续,否则忽略结果并继续
  4. optional不用于验证,只显示信息(通常用于session)

在这里插入图片描述

4.1 PAM认证原理

  1. PAM认证一般遵循的顺序:service (服务) -->PAM(配置文件)–> pam*.so;
  2. PAM认证首先要确定哪一项应用服务,然后加载相座的PAM的配置文件(位于/etc/pam.d下),最后调用认证模块(位于/ lib64 / security/ 下)进行安全认证。
  3. 用户访问服务器的时候,服务器的某一个服务程序把用户的请求发送到PAw模块进行认证。不同的应用程序所对应的PAM模块也是不同的。如果想查看某个程序是否支持PAM认证,可以用ls命令进行查看/etc/pam.d/
  4. PAM的配置文件中的每一行都是一个独立的认证过程,它们按从上往下的顺序依次由PAM模块调用

数据流向
用户登录su—》su服务-----》调用PAM模块中su-----》读取模块中的配置文件

4.2 PAM配置文件

PAM的配置文件中的每一行都是一个独立的认证过程,它们按从上到下的顺序一次由PAM模块调用
在这里插入图片描述

第一列代表PAM认证模块类型

  • auth:对用户身份进行识别,如提示输入密码,判断是否为root。
  • account:对账号各项属性进行检查,如是否允许登录系统,帐号是否已经过期,是否达到最大用户数等。
  • password:使用用户信息来更新数据,如修改用户密码。
  • session:定义登录前以及退出后所要进行的会话操作管理,如登录连接信息,用户数据的打开和关闭,挂载文件系统。

第二列代表PAM控制标记

  • required:表示需要返回一个成功值,如果返回失败,不会立刻将失败结果返回,而是继续进行同类型的下一验证,所有此类型的模块都执行完成后,再返回失败。
  • requisite:与required类似,但如果此模块返回失败,则立刻返回失败并表示此类型失败。
  • sufficient:如果此模块返回成功,则直接向程序返回成功,表示此类成功,如果失败,也不影响这类型的返回值。
  • optional:不进行成功与否的返回,一般不用于验证,只是显示信息(通常用于 session 类型)。
  • include:表示在验证过程中调用其他的PAM配置文件。比如很多应用通过完整调用/etc/pam.d/system-auth(主要负责用户登录系统的认证工作)来实现认证而不需要重新逐一去写配置项。

第三列代表PAM模块,默认是在/lib64/security/目录下,如果不在此默认路径下,要填写绝对路径。

第四列代表PAM模块的参数,这个需要根据所使用的模块来添加。传递给模块的参数,参数可以有多个,之间用空格分隔开。

三、使用sudo机制提升权限

1、sudo命令的用途及用法

  • 用途:以其他用户身份(如root)执行授权的命令
  • 用法:sudo 授权命令

2、sudo参数命令

sudo  [参数选项]   命令

-l:列出用户在主机上可用的和被禁止的命令;一般配置好/etc/sudoers后,要用这个命令来查看和测试是不是配置正确的;

-v:验证用户的时间戳;如果用户运行sudo后,输入用户的密码后,在短时间内可以不用输入口令来直接进行sudo操作

-v:可以跟踪最新的时间戳;

-u:指定以以某个用户执行特定操作

-k删除时间戳,下一个sudo命令要求用求提供密码;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

3、配置sudo授权

visudo
或
vi /etc/sudoers (此文件的默认权限为440,保存退出时必须执行:"wq!" 命令来强制操作)
  • 1
  • 2
  • 3

记录格式

用户  主机名=命令程序表

用户  主机名=(用户)命令程序表


用户:直接授权指定的用户名,或采用”组名”的形式(授权一个组的所有用户)。

主机名:使用此规则的主机名。没配置过主机名时可用localhost,有配过主机名则用实际的主机名,ALL则代表所有主机

(用户):用户能够以何种身份来执行命令。此项可省略,缺省时以root用户的身份来运行命

命令程序列表:允许授权的用户通过sudo方式执行的特权命令,需填写命令程序的完整路径多个命令之间以逗号""进行分隔。ALL则代表系统中的所有命令
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

示例:

zhangsan ALL=/sbin/ifconfig  
lisi localhost=/sbin/*,!/sbin/reboot,!/sbin/poweroff    #通配符"*"表示所有、取反符号"!"表示排除 

wheel ALL=NOPASSWD:ALL
#表示wheel组成员无需验证密码即可使用sudo执行任何命令 

Mike ALL=(root)NOPASSWD:/bin/kill,/usr/bin/killall 
gpasswd-M lisi wheel##李四加入wheel组
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

4、启用sudo操作日志

启用sudo操作日志
visudo
Defaults logfile="/var/log/sudg"

sudo日志记录以备管理员查看,应在/etc/sudoers文件中增加"Defaults logfile"设置如果已经启用sudo日志,则可以从/var/log/sudo文件中看到用户的sudo操作记录。

注:启用日志:Defaults loqfile=/var/log/sudo

另外一个方法是/var/log/secure日志可查看到sudo操作用户步骤

sudo-l#查看当前用户获得哪些sudo授权
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

在这里插入图片描述

5、实验

例1:需求:在张三用户里创建李四用户
创建张三用户----》进入张三用户-----》在张三用户里创建李四用户------》权限不够
在这里插入图片描述
进入visudo,给张三用户提升权限(可以在所有主机中添加用户,修改用户账号的属性)
在这里插入图片描述
给张三提升权限后,进入张三用户,用sudo命令创建李四用户,查看id看是否创建成功
在这里插入图片描述

例2:

创建用户不用密码,修改要密码
在这里插入图片描述
在这里插入图片描述
例3:用户可以临时创建网卡

在这里插入图片描述
设置Z组里的人不需要密码查看ifconfig
在这里插入图片描述
王五不在Z组里,所以无法查看ifconfig
在这里插入图片描述

在这里插入图片描述

四、用户别名

  • 当使用相同授权的用户较多,或者授权的命令较多时,可以采用集中定义的别名。
  • 用户、主机、命令部分都可以定义为别名(必须为大写),分别通过关键字User_Alias、Host_Alias、Cmnd_A.ias来进行设置。
  • 别名必须大写


用户别名的语法格式:

1、User_Alias

用户别名:包含用户、用户组(%组名(使用%引导))、还可以包含其他其他已经用户的别名User_Alias OPERATORS=zhangsan,tom, lisi

2、Host_Alias

主机别名:主机名、IP、网络地址、其他主机别名!取反Host_Alias MAILSVRS=smtp, pop

3、Cmnd_Alias

命令路劲、目录(此目录内的所有命令)、其他事先定义过的命令别名cmnd_Alias PKGTOOLS=/ bin/ rpm,/ usr/bin/yum

用户           改成  别名用户         目的为了可以操作多个用户和组 
主机名         改成  别名主机         目的为了可以操作设置主机的多个名称或者主机取反
命令操作列表    改成  别名命令列表     目的是所有命令可以做操作也就是所有命令集合
  • 1
  • 2
  • 3

示例

例1:
进入visudo编辑,设置张三,李四用户可以使用安装命令
在这里插入图片描述
王五不在sudo里,没有权限使用安装命令
在这里插入图片描述
例2:
进入visudo编辑,设置只有李四和Z组里的人能添加用户,不能更改用户命令
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

五、开关机安全控制

调整BIOS引导设置

  • 将第一引导设备设为当前系统所在硬盘
  • 禁止从其他设备(光盘、U盘网络)引导系统
  • 将安全级别设为setup,并设置管理员密码

GRUB限制

  • 使用grub2-mkpasswd-pbkdf2生成密钥

  • 修改/etc/grubd/00header文件中,添加密码记录

  • 生成新的grubcfg配置文件

1、限制更改GRUB引导参数

通常情况下在系统开机进入GRUB菜单时,按e键可以查看并修改GRUB引导参数,这对服务器是一个极大的威胁。可以为GRUB菜单设置一个密码,只有提供正确的密码才被允许修改引导参数。

plan1:

grub2-mkpasswd-pbkdf2    #根据提示设置GRUB菜单的密码

PBKDF2 hash of your password is grub . pbkd.. . ..#省略部分内容为经过加密生成的密码字符串

#备份配置文件
cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bak
cp letc/grub.d/00_header /etc/grub.d/00_header.bak

#配置设置用户和密码文件
vim /etc/grub.d/00_header

cat << EOF
set superusers="root”     #设置用户名为root
password pbkdf2 root grub. pbkd2. . . .
#设置密码,省略部分内容为经过加密生成的密码字符串
EOF

#生成行grub.cfg
grub2-mkconfig -o /boot/grub2/grub.cfg   #生成新的grub.cfg文件

重启系统进入GRtB菜单时,按e键将需要输入账号密码才能修改引导参数。


plan2:一步到位
grub2-setpassword

  • 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

举例:
限制更改GRUB引导参数
在这里插入图片描述
重启之后按e键

2、终端登录安全控制

限制root只在安全终端登录

  • 安全终端配置:/etc/securetty

禁止普通用户登录

  • 建立/etc/nologin文件
  • 删除nologin文件或重启后即恢复正常

六、系统弱口令检测

John the Ripper,简称为JR

  • 一款密码分析工具,支持字典式的暴力破解
  • 通过对shadow文件的口令分析,可以检测密码强度
  • 官方网站:http://wwwopenwall.com/john/
    在这里插入图片描述
    安装JR工具
  • 安装方法:make clean 系统类型
  • 主程序文件为john

检测弱口令账号

  • 获得Linux/Unix服务器的shadow文件
  • 执行john程序,将shadow文件作为参数

密码文件的暴力破解

  • 准备好密码字典文件,默认为password.lst
  • 执行john程序,结合–wordlist=字典文件
弱口令检测 -John the Ripper.

JohntheRipper是一-款开源的密码破解工具,可使用密码字典(包含各种密码组合的列表文件)来进行暴力破解)

解压工具包
cd  /opt
tar zxf john-1.8.0.tar.gz

安装软件编译工具
yum install_-y gcc gcc-c++ make

换到src子自录
cd /opt/john-1.8.0/ src

#进行编译安装
make clean linux-x86-64

#准备待破解的密码文件
cp /etc/shadow  /opt/ shadow .txt

#执行暴力破解
cd /opt/john-1.8.0/ run
./ john / opt/ shadow .txt

#查看已破解出的账户列表
./john --show / opt/ shadow .txt

#使用密码字典文件
> john. pot

#清空己破解出的账户列表,以便重新分析
./john --wordlist=./ password.1st / opt/ shadow.txt
#使用指定的字典文件进行破解
  • 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

七、网络端口扫描-NMNP

1、控制位

SYN        建立连接位
ACK        确认位
FIN         结束断开位
PSH       急迫位          传送0     数据缓存       上层应用协议
RST       重置位
URG      紧急位
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2、安装nmap

rpm -qa |grep nmap      查看nmap

yum install -y nmap      安装nmap
  • 1
  • 2
  • 3

举例:
1、安装nmap
在这里插入图片描述
在这里插入图片描述

2、当yum.pid被锁定时无法安装软件,先删除yum.pid,再安装软件
在这里插入图片描述
在这里插入图片描述

3、nmap命令常用选项

-p:指定扫描的端口。
 
n:禁用反向DNS解析(以加快扫描速度)

S:TCP的SYN扫描(半开扫描),只向目标发出SYN数据包,如果收到SYN/ACK响应包就认为目标端口正在监听,并立即断开连接;否则认为目标端口并未开放。

-sT:TCP连接扫描,这是完整的TCP扫描方式(默认扫描类型)用来建立一个TCP连接,如果成功则认为目标端口正在监听服务。否则认为目标端口并未开放。

-sF:TCP的FIN扫描,开放的端口会忽略这种数据包,关闭的端口会回应RST数据包。许多防火墙只对sYN数据包进行简单过。而忽略了其他形式的TCP攻击包。这种类型的扫描可间接检测防火墙的健壮性。

-sU:UDP扫描,探测目标主机提供哪此UDP服务,UDP扫描的速度会比较慢。

-sP:ICMP扫描,类似于pina检测,快速判断目标主机是否存活,不做其他扫描。

-P0:跳过ping检测,这种方式认为所有的目标主机是存活的,当对方不响应ICMP请求时,使用这种方式可以避免因无法 ping通而放弃扫描。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

举例:
1、查看UDP端口
在这里插入图片描述
2、查看TCP端口
在这里插入图片描述
3、查看是否有80端口
在这里插入图片描述
4、扫描端口
在这里插入图片描述

八、总结

今天我学会了账号的四种基本安全措施,分别是系统账号清理、密码安全控制、命令历史清理、自动注销。知道如何使用su命令切换用户,以及如何使用sudo机制提升权限。当使用相同授权的用户较多时,可以采用集中定义用户别名。大致了解了开关机的安全控制,可以限制更改GRUB引导参数,为GRUB菜单设置一个密码,只有提供正确的密码才被允许修改引导参数。使用系统弱口令检测暴力破解密码文件,使用端口扫描NMAP来检测端口。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/634704
推荐阅读
相关标签
  

闽ICP备14008679号