系统安全及应用

一.账号安全控制

二.系统引导和登录控制

三.弱口令检测

四.端口扫描

五.总结

 

 

.账号安全控制

 

1.账号安全基本措施

 

1.1系统账号清理

 

  将非登录用户的shell设为/sbin/nologin

 

  锁定长期不使用的账号

 

  删除无用的账号

 

  锁定账号文件passwd、shadow

 

 

1.2密码安全控制

  设置密码有效期

  要求用户下次登录时修改密码

 

 

 

1.3命令历史限制

  减少记录的命令条数

  注销时自动情况命令历史

 

 

 

 

1.4终端自动注销

  闲置600秒后自动注销

 

 

2.使用SU命令切换用户

2.1用途及用法

  用途:substitute user,切换用户

  格式:su - 目标用户

2.2密码验证

  Root→任意用户,不验证密码

  普通用户→其他用户,验证目标用户的密码

 

 

2.3限制使用su命令的用户

  将允许使用su命令的用户加入wheel组

  启用pam_wheel认证模块

 

 

 

限制su命令用户

认情況下,任何用户都允许使用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

 

a)以上两行是默认状(即开启第一行,注释第二行),这种状下是允许所有用户间使用su命令进行切换的。

b)两行都注释也是运行所有用户都能使用su命令,但root下使用su切換到其他普通用户需要输入密码;如果第一行不注释,则root使用su切换普通用户就不需要输入密码( pam rootok,so模块的主要作用是使uid为0的用户,即root用户能够直接通过认证而不用输入密码。

c)如果开启第二行,表示只root用户wheel组内的用户才可以使用su命令

d)如果注释第一行,开启第二行,表示有wheel组内的用户才能使用su命令,root用户也被禁用su命令。

 

[root@localhost ~]# gpasswd - a zhangsan wheel   添加授权用户 zhangsan

正在将用户 zhangsan"加入到” wheel“组中

[root@localhost ~]# grep wheel /etc/ group  确认wheel 组成员

wheel: x: 10: zhangsan

[root@localhost ~]#  vim  /etc/pam.d/su

#%PAM-1.0

auth sufficient pam_rootok.so

auth  required pam_wheel.so use_uid   去掉此行开头的#号

启用pam_wheel 认证以后,未加入到wheel组内的其他用户将无法使用su命令,尝试进行切换时将提示“拒绝权限”,从而将切换用户的权限控制在最小范围之内

 

普通用户切换登录测试验证

使用su命令切换用户的操作将会记录到安全日志/var/log/secure文件中,可以根据需要进行查看。

2.4查看su操作记录

  安全日志文件:/var/log/secure

 

Linux中的PAM安全认证

1.Su命令的安全隐患

  默认情况下,任何用户都允许使用su命令,有机会反复尝试其他用户(如root)的登录密码,带来安全风险

为了加强su命令的使用控制,可借助于PAM认证模块,只允许极个别用户使用su命令进行切换

2.PAM 可插拔式认证模块

  是一种高效而且灵活便利的用户级别的认证方式

  也是当前Linux服务器普通使用的认证方式

3.PAM认证原理

3.1 PAM认证一般遵循的顺序: Service(服务)--> PM(配置文件)-->pam_*.so;

3.2 PAM认证首先要确定哪一项应用服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证模块(位于/1ib64/ security/下)进行安全认证。

3.3 用户访问服务器的时候,服务器的某一个服务程序把用户的请求发送到PAM模块进行认证。不同的应用程序所对应的PAM模块也是不同的。

如果想查看某个程序是否支持PAM认证,可以用ls命令进行查看/etc/pam.d/

 

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模块的参数,这个需要根据所使用的模块来流加。

传递给模块的参数。参数可以有多个,之间用空格分隔开

 

 

控制标记的补充说明:

required:表示该行以及所涉及模块的成功是用户通过鉴别的[必要条件]。换句话说,只有当对应于应用程序的所有带

required:标记的模块全部成功后,该程序才能通过鉴別。同时,如果任何带 required标记的模块出现了错误,PAM并不立刻将错误消息返回给应用程序,而是在所有此类型模块都调用完毕后才将错误消息返回调用他的程序。反正说白了,就是必须将所有的此类型模块都执行一次,其中任何一个模块验证出错,验证都会继续进行,并在执行完成之后才返回错误信息。这样做的目的就是不让用户知道自己被哪个模块拒绝,通过一种隐避的方式来保护系统服务。就像设置防火墙规则的时候将拒绝类的规则都设置为drop-样,以致于用户在访问网络不成功的时候无法准确判断到底是被拒绝还是目标网络不可达。

requisite:required相仿,只有带此标记的模块返回成功后,用户才能通过鉴別。不同之处在于其一旦失败就不再执行堆中后面的其他模块,并且鉴別过程到此结束,同时也会立即返回错误信息。与上面的 required相比,似乎要显得更光明正大一些。

sufficient:表示该行以及所渉及模块验证成功是用户通过鉴别的[充分条件」。也就是说只要标记为suff icient的模块,一旦验证成功,那么PAM立即向应用程序返回成功结果而不必尝试任何其他模块。即便后面的层叠模块使用了 requisite或者 required控制标志也是一样。当标记为 sufficient的模块失败时, sufficient模块会当 optional对待。此拥有sufficient标志位的配置项在执行验证出错的时候并不会导致整个验证失败,但执行验证成功之时则大门敞开。所以该控制位的使用务必慎重。

optional:他表示即便该行所涉及的模块验证失败用户仍能通过认证。在PAM体系中,带有该标记的模块失后将继续处理下一模块。也就是说即使本行指定的模块验证失敗,也允许用户享受应用程序提供的服务。使用该标志,PAM框架会忽

略这个模块产生的验证错误,继续顺序执行下一个层叠模块。

 

PAM实例

 

用户1       用户2     用户3   用户4

 

 Auth required   模块1      pass        fail      pass     pass

 

 Auth sufficient 模块2      pass        pass      fail     pass

 

 Auth requlred   模块3      pass        pass      pass     fail

 

结果       pass        fail      pass     pass

 

4.PAM认证的构成

 4.1查看某个程序是否支持PAM认证,可以用ls命令

  示例:查看su是否支持PAM模块认证

   ls /etc/pam.d | grep su

4.2查看su的pam配置文件:cat/etc/pam.d/su

  每一行都是一盒独立的认证过程

  每一行可以区分为三个字段

   认证类型

   控制类型

   PAM模块及其参数

5.PAM安全认证流程

 

 

使用sudo机制提升权限

1.Su命令的缺点

2.Sudo命令的用途及用法

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

  用法:sudo授权命令

  1. 配置sudo授权

  Visdo或者vi/etc/sudoers

  记录格式 用户 主机名列表=命令程序列表

 

 

Visudo 或 Vi /etc/ sudoers(此文件的默认限为440,保存退出时必须执行”:wq!”命令来强制操作)

语法格式:

用户主机名=命令程序列表

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

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

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

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

命令程序列表:允许授权的用户通过sudo方式执行的特权命令,需填写命令程序的完整路径,多个命令之间以逗号“,”进行分隔。ALL则代表系統中的所有命令

 

示例

Tom ALL=/sbin/ifconfig

Jerry 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组

 

4.查看sudo操作记录

  需启用defaults logfile 配置

  默认日志文件:/var/log/sudo

 

 

 

 

5.sudo[参数选项]命令

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

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

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

-k:删除时间戳,下一个sudo命令要求用求提供密码;

 

 

案列:一

wangliu用户可以使用 useradd usermod

需求:wangliu   root用户下的权限 useradd usermod

 

配置

visudo

wangliu ALL=(root )/usr/sbin/useradd,/usr/sbin/usermod

wangliu ALL=(root) NOPASSWD: /use/sbin/useradd,PASSWD: /use/sbin/usermod

前面不需要输入密码,后面需要输入密码

 

验证1

[wangliu@kgc root]$  sudo /usr/sbin/useradd  tom

[sudo] wangliu的密码:

[wangliu@kgc root]$ tail -2 /etc/passwd

wangliu: x: 1005: 1005: /home/wangliu: /bin/bash

tom: x: 1006: 1006:  /home/tom: /bin/bash

 

案列二.用户别名

例如,以下操作通过別名方式来添加授权记录,允许用户wangliu、wangliut组、 useradmin组并且定义命令别名

在主机smtp、pop中执行rpm、yum命令

User_Alias USERADMIN = wangliu, &wangliu &useradmin

Cmnd_Alias USERADMINCMND

/usr/sbin/useradd,/usr/sbin/usermod,/usr/sbin/userdel,/usr/bin/passwd,!/usr/bin/passwd  

root取反的优先级最高

USERADMIN ALL=(root) NOPASSWD: USERADMINCMND

验证别名以及命令路径 sudo passwd root測试

 

解决方法

Cmnd_Alias USERADMINCMND

=/usr/sbin/useradd, /usr/sbin/usermod, /usr/sbin/userdel,/usr/bin/passwd [A-za-z]*,! /usr/bin/passwd  root

 

6.启用sudo操作日志 

visudo

Defaults logfile ="/var/log/sudq"

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

:启用日志: Defaults logfile = /var/1og/sudo

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

Sudo -l 査看当前用户获得哪些sudo授权

 

 限制更改GRUB引导参数

 

通常情况下在系统开机进入GRUB菜单时,按e键可以查看并改GRUB引导参数,这对服务器是一个极大的威胁。

可以为GRUB菜单设置一个密码,只有提供正确的密码才被允许修改引导参数。

grub2-mkpasswd-pbkdr2 提据提示设置GRUB菜单的密码

PBKDF2 hash of your password is grub . pbkd......

省略部分内容为经过加密生成的密码字符串

 

cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bak

cp /etc/grub,d/00_header /etc/grub.d/00_header.bak

vim /etc/grub.d/00_header cat << BOF

set superusers= root设置用名为root

Password_pbkdf2 root grub.pakd2......

设置密码,省略部分内容为经过加密生成的密码符串  EOF

grub2- mkconfig -o /boot/grub2/grub.cfq生成新的grub.cfq文件

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

 

一步到位

grub2-setpassword

 

开关机安全控制

调整BIOS引导设置

  将第一引导设备设为当前系统所在硬盘

  禁止从其他设备(光盘 U盘 网络)引导系统

  将安全级别设为setup,并设置管理员密码

GRUB限制

  使用grub2-mkpasswd-pbkdf2生成密钥

  修改/etc/grub.d/00_header文件中,添加密码记录

  生成新的grub.cfg配置文件

 

 

终端登录安全控制

  限制root只在安装终端登录

   安全终端配置:/etc/securetty

禁止普通用户登录

 建立/etc/nologin文件

 删除nologin文件或重启后即恢复正常

 

 

 

 

.系统弱口令检测

John the Ripper,简称为JR

 一款密码分析工具,支持字典式的暴力破解

 通过对shadow文件的口令分析,可以检测密码强度

 官方网站:http//www.openwall.com/john/

 

1.系统弱口令检测

安装JR工具

  安装方法  make clean 系列类型

  主程序文件为john

2.检测弱口令账号

  获得Linux/Unix服务器的shadow文件

  执行john程序,将shadow文件作为参数

密码文件的暴力破解

准备好密码字典文件,默认为password.lst

执行john程序,结合--wordlist=字典文件  

3.系统弱口令检测- 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.lst  /opt/shadow. txt

 

 

.网络端口扫描

NMAP的扫描  nmap [扫描类型] [选项]<扫描目标...>

常用的扫描类型

-sS  -sT  -sF  -sU  -sP  -PO

示例1

分别查看本机开放的TCP端口.UDP端口

示例2

检测192.168.4.0/24网段有哪些主机提供FTP服务

示例3

检测192.168.4.0/24网段有哪些存活主机

 

控制位

SYN        建立链接

ACR        确认

FIN        结束断开

PSH        传送0数据缓存  上层应用协议

RST        重置

URG        紧急

 

rpm -qa | grep nmap查看nmap

yum install -y nmap

nmap命令常用的选项和描类型

-p:指定扫描的端口。

-n:禁用反向DNS解析(以加快打描速度)

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

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

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

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

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

-P0:跳过ping检测,这种方式认为所有的目标主机是存活的,当对方不响应ICMP请求时,使用这种方式可以避免因无法ping通面放弃扫描。

 

示例:

分別查看本机开放的TCP端口UDP端口

nmap - sT 127.0.0.1

nmap -sU 127.0.0.1

检测192.168.80.0/24网段有哪些主机提供HTTP服务

nmap -p 80 192.168.80.0/24

检测192.168.80.0/24网段有哪些存活主机

nmap -n -aP 192.168.80.0/24

 

再扩展

通过pam模块来防止暴力破解ssh

[root@benet~]# vim /etc/pam.d/sshd

在第一行下面添加一:

auth  required  pam_tally2.so  deny=3  unlock time=600 even_deny_root

root_unlock_time=1200

说明:尝试登陆失敗超过3次,普通用户600秒解锁,root用广1200秒解锁

手动解除锁定:

查看某一用户错误登陆次数:

pam_tally2  --user

例如,查看work用户的错误登陆次数:

pam_tally2  - -user work

清空某一用户错误登陆次数: 

pam_tally2  --user  --reset

例如,清空work用户的错误登陆次数,

pam_tally2  --user  work  --reset

 

.总结

1.账号基本安全措施:系统账号清理、密码安全控制、命令历史清理、自动注销

2.用户切换与提权su、sudo

3.开关机安全控制:BIOS引导设置、禁止Ct+At+Del快捷键、GRUB菜单设置密码

4.终端控制:John the Ripper工具,namp命令

 

posted @   零六零一  阅读(171)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示