引言

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

一、账号安全基本措施

1、系统账号清理

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

  • 锁定长期不使用的账号

  • 删除无用的账号

  • 锁定账号文件passwd、shadow

chattr +i /etc/passwd   ###锁定文件

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

chattr -i /etc/passwd   ###解锁文件

举例:

  1. 锁定文件并查看状态

锁定passwd文件后你,就无法创建新用户

2、锁定/etc/passwd之后还能修改密码,因为密码由/etc/shadow管理

3、把/etc/shadow锁上之后,就不能修改密码了

2、密码安全控制

  • 设置密码有效期

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

举例:

1、新建用户aaa,进入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   ###临时删除

环境变量的读取:

用户登录-》加载~/.bash_profile –》bash_profile中的配置首先是使 ~/.bashrc生效

用户登出–》.bash_logout 运行logout配置文件

举例:

1、进入vi /etc/profile,修改histsize,后面的数字表示保留的条数

2、退出当前终端将命令清除

vim .bash_logout

3、开机后当前将终端命令清除

vim .bashrc

4、设置登录超时时间

闲置600秒后自动注销

vi /etc/profile

###进入写入 TMOUT=600

wq保存退出

source 刷新

二、使用su命令切换用户

1、用途及用法

用途:Substitute User,切换用户

格式:su – 目标用户

su UserName:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录,即不完全切换

su – UserName:登录式切换,会读取目标用户的配置文件,切换至自已的家目录,即完全切换

2、密码验证

root –>任意用户,不验证密码

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

(TIPS) su 切换新用户后,使用 exit 退回至旧的用户身份,而不要再用 su 切换至旧用户,

否则会生成很多的bash子进程,环境可能会混乱。

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

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

启用pam_wheel认证模块

vim /etc/pam.d/su

:set number 取消第六行注释

gpasswd -a aaa wheel #将aaa用户添加到wheel组中,不在组里的用户不能使用su命令

查看su操作记录

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

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

举例:

  1. 把aaa添加到wheel组中,然后确认wheel组成员

2、启用pam认证,加入组的可以使用,未加入组的无法使用

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

4、普通用户切换登录测试验证,使用su命令切换到用户的操作将会记录到安全日志/var/log/secure文件中,可以根据需要查看。

4、PAM安全认证

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

required验证失败时仍然继续,但返回Fail

requisite验证失败则立即结束整个验证过程,返回Fail

suffcient验证成功则立即返回,不再继续,否则忽略结果并继续

optional不用于验证,只显示信息(通常用于session)

PAM认证原理

  1. PAM认证一般遵循的顺序:service (服务) –>PAM(配置文件)–> pam*.so;

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

  1. 用户访问服务器的时候,服务器的某一个服务程序把用户的请求发送到PAw模块进行认证。不同的应用程序所对应的PAM模块也是不同的。如果想查看某个程序是否支持PAM认证,可以用ls命令进行查看/etc/pam.d/

  1. PAM的配置文件中的每一行都是一个独立的认证过程,它们按从上往下的顺序依次由PAM模块调用

数据流向

用户登录su—》su服务—–》调用PAM模块中su—–》读取模块中的配置文件

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命令要求用求提供密码;

3、配置sudo授权

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

记录格式

用户  主机名=命令程序表

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


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

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

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

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

示例:

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组

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授权

5、实验

例1:需求:在zhangsan用户的终端里创建lisi用户

创建张三用户—-》进入张三用户—–》在张三用户里创建李四用户——》权限不够

进入visudo,给张三用户提升权限(可以在所有主机中添加用户,修改用户账号的属性)

例2:创建用户不用密码,修改要密码

zhansan ALL=(root)NOPASSWD:/user/sbin/useradd.PASSWD:/user/sbin/usermod

例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:

进入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

举例:

限制更改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
#使用指定的字典文件进行破解

七、网络端口扫描-NMNP

1、控制位

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

2、安装nmap

rpm -qa |grep nmap      查看nmap
yum install -y nmap      安装nmap

举例:

  1. 安装nmap

2、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通而放弃扫描。

八、总结

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

转自:
https://blog.csdn.net/yunxi115/article/details/129294879