一、账号安全控制
1 账号安全基本措施
(1)系统账号清理
:将非登录用户的Shell设为/sbin/nologin
:锁定长期不使用的账号
:删除无用的账号
:锁定账号文件passwd、shadow(passwd放用户的参数、shadow是密码的内用差数)
[root@FBC ~]# chattr +i /etc/passwd /etc/shadow #锁定文件并查看状态
[root@FBC ~]# lsattr /etc/passwd /etc/shadow
----i----------- /etc/passwd
----i----------- /etc/shadow
示例一:将非用户的shell设为/sbin/nologin
(1)首先创建一个用户,用usermod -s 设置用户不能登录shell
(2)tail -1 查看刚刚创建的用户账号信息
示例二:锁定长期不使用的账户
(1)创建一个用户设置为可登录shell并查看
(2)usermod -L 账户名 :锁定账户
示例三:删除无用账号
示例四:锁定账号文件passwd、shadow
(1)先lsattr /etc/passwd /etc/shadow #查看 passwd 和shadow的状态
(2)chattr +i /etc/passwd #锁定passwd 在次查看状态
(3)尝试删除以存在用户的账号是不可行的,但是可以修改密码因为密码在shadow文件中。
(4)chattr -i /etc/passwd 解锁并查看passwd状态,就可以执行删除用户的操作了。
(1)设置密码有效日期
:要求用户下次登录时修改密码
[root@FBC ~]# vi /etc/login.defs #设用于新建用户
......
PASS_MAX_DAYS 30
[root@FBC ~]# chage -M 30 lisi #设用于已有用户
示例:
(1)vim /etc/login.defs #进入编辑用户修改密码的时间只设用于新建的用户。设置为99天
PASS_MIN_DAYS:两次修改密码间隔时间
PASS_MIN_LEN :密码最小长度
PASS_WARN_AGE:密码到期前多少天警告
(2)查看我设置之前的用户的修改密码的时间。
(3)新建一个用户,并查看两次改变密码之间相距的最大天数
现在时间就变成了99。
示例二:强制用户在下次登录时更改密码
(1)设置用户的下次登录必须修改密码,并查看。
(2)用创建的用户登录系统,提示修改密码。
(1) :减少记录的命令条数
[root@FBC ~]#vi /etc/profile
HISTSIZE=250 # 最多保存250条历史命令
(2) : 注销时自动清空命令历史
[root@FBC ~]#vi ~/.bash_logout
history -c
clear
示例:登出以后清楚命令
(3) : 终端自动注销
闲置300秒自动注销
步骤:
用户登录-->加载~/.bash_profile-->bash.profile中的配置首先是使~/.bashrc生效
用户登出-->.bash_logout 运行logout配置文件
[fbc@FBC ~]$ echo "" >.bash_history
[fbc@FBC ~]$ history #登陆时清空历史
(1)用途及用法
用途:Substitute User,切换用户
格式:su - 目标用户
(2)密码验证
root -->任意用户,不验证密码
普通用户-->其他用户,验证目标用户的密码
:将允许使用su命令的用户加入wheel组
:启用pam_wheel认证模块
示例:创建一个用户加入组wheel中 ,启用pam_wheel认证模块
(1)vim进入/etc/pam.d/su 编辑文本
(2)开启认证模块只有组中的成员才能使用su命令
(3)将创建的用户加入组中并确认
(4)切换到zhuxuan用户下在使用su命令切换是hanxu用户下可以看到是可以使用的因为zhuxuan用户在wheel组中
(5)切换到hanxu目录下在切换到zhuxuan目录下 su命令是不可用的因为hanxu用户不在wheel组中,没有使用权限。
:安全日志文件:/var/log/secure
默认情况下,任何用户都允许使用su命令,有机会反复尝试其他用户(如root)的登录密码,带来安全风险为了加强su命令的使用控制,可借助于PAM认证模块只允许极个别用户使用su命令进行切换
2. Linux-PAM,是linux可插拔认证模块,是一套可定制、可动态加载的共享库,使本地系统管理员可以随意选择程序的认证方式。
PAM使用/etc/pam.d/下的配置文件,来管理对程序的认证方式。应用程序调用相应的PAM配置文件,从而调用本地的认证模块,模块放置在/1ib64/security下,以加载动态库的形式进行认证。比如使用su命令时,系统会提示输入root用户的密码,这就是su命令通过调用PAM模块实现的。
(2).PAM认证首先要确定哪一项应用服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证模块(位于/lib64/securitv/下)进行安全认证。
(3).用户访问服务器的时候,服务器的某一个服务程序把用户的请求发送到PAM模块进行认证。不同的应用程序所对应的PAM模块也是不同的。
总结:PAM(Pluggable Authentication Modules)可插拔式认证模块:是一种高效而且灵活便利的用户级别的认证方式,也是当前Linux服务器普遍使用的认证方式.
(1)查看某个程序是否支持PAM认证,可以用ls命令
示例:查看su是否支持PAM模块认证
(2) 查看su的PAM配置文件:cat /etc/pam.d/su
每一行都有一个独立的认证过程
每一行可以区分为三个字段:认证类型
:控制类型
:PAM模块及其参数
5.PAM安全认证流程
(1)控制类型也称做Control Flags,用于PAM验证类型的返回类型的返回结果
1.required验证失败时任然继续,但返回Fail
2.requisite验证失败则立即结束整个验证过程,返回Fail
3.sufficient验证成功则立即返回,不再继续。否则忽略结果并继续
4.optional不用于验证,只显示信息。(通常用于session类型)
(2)PAM验证流程图
PAM的配置文件中的每一行都是一个独立的认证过程,它们按从上往下的顺序依次由PAM模块调用
第一列代表PAM认证模块类型
auth:对用户身份进行识别,如提示输入密码,判断是否为root。
account:对账号各项属性进行检查,如是否介许登录系统,帐号是否已经过期,是否达到最大用户数等。
password:使用用户信息来更新数据,如修改用户密码。
session:定义登录前以及退出后所要进行的会话操作管理,如登录连接信息,用户数据的打开和关闭,挂载文件系统
第二列代表PAM控制标记
required:表示需要返回一个成功值,如果返回失败,不会立刻将失败结果返回,而是继续进行同类型的下一验证,所有此类型的模块都执行完成后,再返回失败。
requisite:与required类似,但如果此模块返回失败,则立刻返回失败并表示此类型失败。
sufficient:如果此模块返回成功,则直接向程序返回成功,表示此类成功,如果失败,也不影响这类型的返回值。
optional:不进行成功与否的返回,一般不用于验证,只是显示信息(通常用于session类型)
include:表示在验证过程中调用其他的PAM配置文件。比如很多应用通过完整调用/etc/pamd/system-auth(主要负责用户登录系统的认证工作)来实现认证而不需要重新逐一去写配置项。
第三列代表PAM模块
默认是在/1ib64/security/目录下,如果不在此默认路径下,要填写绝对路径。同一个模块,可以出现在不同的模块类型中,它在不同的类型中所执行的操作都S是由于每个模块针对不同的模块类型编制了不同的执行函数。
第四列代表PAM模块
的参数,这个需要根据所使用的模块来添加。传递给模块的参数。参数可以有多个,之间用空格分隔开
控制标记的补充说明:
required:表示该行以及所涉及模块的成功是用户通过鉴别的[必要条件]。换句话说,只有当对应于应用程序的所有带
required:标记的模块全部成功后,该程序才能通过鉴别。同时,如果任何带requi red标记的模块出现了错误,PAM并不立刻将错误消息返回给应用程序,而是在所有此类型模块都调用完毕后才将错误消息返回调用他的程序。反正说白了,就是必须将所有的此类型模块都执行一次,其中任何一个模块验证出错,验证都会继续进行,并在执行完成之后才返回错误信息。这样做的目的就是不让用户知道自己被哪个模块拒绝,通过一种隐蔽的方式来保护系统服务。就像设置防火墙规则的时候将拒绝类的规则都设置为drop-样,以致于用户在访问网络不成功的时候无法准确判断到底是被拒绝还是目标网络不可达。
requisite:与required相仿,只有带此标记的模块返回成功后,用户才能通过鉴别。不同之处在于其一旦失败 就不再执行堆中后面的其他模块,并且鉴别过程到此结束,同时也会立即返回错误信息。 quired相比,似乎要显得更光明正大一些。
sufficient:表示该行以及所涉及模块验证成功是用户通过鉴别的[充分条件]。也就是说只要标记为sufficient的模块
日验证成功,那么PAM便立即向应用程序返回成功结果而不必尝试任何其他模块。即便后面的层叠模块使用了requisite或者required控制标志也是一样。当标记为sufficient的模块失败时,sufficient模块会当做optional对待。因此拥有su fficient标志位的配营项在执行验证出错的时候并不会导致整个验证失败,但执行验证成功之时则大门敞开。所以该控制位的使用务必慎重。
optional:他表示即便该行所涉及的模块验证失败用户仍能通过认证。在PAM体系中,带有该标记的模块失败后将继续处理下一模块。也就是说即使本行指定的模块验证失败,也允许用户享受应用程序提供的服务。使用该标志,PAM框架会忽略这个模块产生的验证错误,继续顺序执行下一个层叠模块。
su命令的缺点
sudo命令的用途及用法:用途以其他用户身份(如root)(执行授权的命令)
:用法 sudo 授权命令
visudo
vi /etc/sudoers (此文件的默认权限为440,保存退出时必须执行“:wq!”命令来强制操作!)
:visudo或者vi /etc/sudoers (此文件的默认权限为440,保存退出时必须执行“:wq!”命令来强制操作)
sudo参数:-l :列出用户在主机上可用的和被静止的命令
-v:验证用户的时间戳
-u:指定以某个用户执行特定的操作
-k:删除时间戳
语法格式:用户 主机名列表=命令程序列表
用户:直接授权指定的用户名,或采用“%组名”的形式(授权一个组的所有用户)
主机名:使用此规则的主机名。没配置过主机名时可用localhost,有配置过则使用实际主机名,ALL代表所有主机。
(用户):用户能够以何种身份来执行命令。可以省略,缺省时以root用户的身份来运行命令。
命令程序列表:允许授权的用户通过sudo方式执行的特权命令,需填写命令程序的完整路径
多个命令之间以逗号""进行分隔。ALL则代表系统中的所有命令。
示例:
[root@FBC ~]#visudo
......
%wheel ALL=NOPASSWD:ALL
jerry localhost=/sbin/ifconfig
hanxu localhost=/sbin/*,!/sbin/ifconfig,!/sbin/route #可以使用通配符*、取反符号!
列题一:给用户hanxu用sudo授权一个useradd权限
(1)创建用户 切换到hanxu系统下用useradd创建用户,系统会提示权限不够
(2)visudo进入编辑按在文本最后一行输入用户 主机名=要添加给用户的权限保存并退出
(3) 切换到hanxu用户下 用sudo useradd 创建的用户名 系统提示输入密码这里输入hanxu的密码。用户创建成功。可以用id查看创建用户的信息
拓展:命令前输入NOPASSWD 用户执行命令时不要输入密码。加PSSWD则表示要输入密码。
列题二:创建一个组在组中加入组成员并给组提升权限
(1)创建一个组并向组中添加成员
(2)给组提升ifconfig权限
(3)进入组成员的系统验证一下
2.1作用当使用相同授权的用户较多,或者授权的命令较多时,可以采用集中定义的别名。用户、主机、命令部分都可以定义为别名(必须为大写),分别通过关键字User_ Alias、Host Alias、Cmnd Alias来进行设置。
2.2用户别名的语法格式:
(1)User_Alias
用户别名:包含用户、用户组(%组名(使用%引导))、还可以包含其他其他已经用户的别名
列:User Alids OPERATORS=zhangsan,tom,lisi
(2)Host Alias
主机别名:主机名、IP、网络地址、其他主机别名!取反
列:Host_ Alias MAILSVRS=smtp,pop
(3)Cmnd_Alias
命令路劲、目录(此目录内的所有命令)、其他事先定义过的命令别名
Cmnd_Alias PKGTOOLS=/bin/rpm,/usr/bin/yum
2.3案列一:用户别名使用关键字User_Alias、Host_Alias、Cmnd_Alias来进行设置别名(别名必须为大写)
(2)切换用户下验证
2.4案例:二用户别名使用关键字User_Alias、Host_Alias、Cmnd_Alias来进行设置别名(别名必须为大写)加入组成员,加入取反符号并验证。
(1)进入visudo编辑
(2)切换到用户系统,使用使用拓展权限useradd创建用户
(3)给创建的用户添加密码,系统提示权限不够,因为取反的优先级最高。
2.5 启用sudo操作日志
#visudo
#Defaults logfile = "/var/log/sudo"
#tail /var/log/sudo ###查看日志信息记录sudo操作过程
sudo日志记录以备管理员查看,应在/etc/sudoers文件中增加"Defaults logfile”设置如果已经启用sudo日志,则可以从/var/log/sudo文件中看到用户的sudo 操作记录。
注:启用日志:Defaults logfile=/var/log/sudo
另外一个方法是/var/log/secure日志可查看到sudo操作用户步骤
sudo-1 #查看当前用户获得哪些sudo授权
将第一引导设备设为当前系统所在硬盘
禁止从其他设备(光盘、U盘、网络)引导系统
将安全级别设为setup,并设置管理员密码
使用grub2-mkpasswd-pbkdf2生成密钥
修改/etc/grub.d/00_header文件中,添加密码记录
生成新的grub.cfg配置文件
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 << EOF
set superusers="root" #设置用户名为root
password pbkdf2 root qrub.pbkd2.....
#设置密码,省略部分内容为经过加密生成的密码字符串
EOF
##生成行grub.cfg
grub2-mkconfig -o /boot/grub2/grub.cfg# 生成新的grub.cfg文件
重启系统进入GRUB菜单时,按e键将需要输入账号密码才能修改引导参数。
grub2—setpassword #一步到位
安全终端配置:/etc/securetty
建立etc/nologin文件
删除nologin文件或者重启后恢复正常
安装方法 (make clean 系统类型)
主程序文件为john
(2)检测弱口令账号
获得Linux/Unix服务器的shadow文件
执行john程序,将shadow文件作为参数
(3)密码文件的暴力破解
准备好密码字典文件,默认为password.Ist
执行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 #准备待破解的密码文件
cpetc/shadow /opt/shadow.txt #执行暴力破解
cd/opt/john-1.8.0/run./john /opt/shadow.txt#查看已破解出的账户列表
./john--show /opt/shadow.txt #使用密码字典文件
> john. pot #清空已破解出的账户列表,以便重新分析
./iohn --wordlist=/password.1st /opt/shadow.txt#使用指定的字典文件进行破解6
NMAP一款强大的网络扫描、安全检测工具,官方网站:http://nmaporg/
CentOS 7.7光盘中安装包nmap-6.40-7el7.x86 64.rpm
控制位
SYN 建立链接
ACK 确认
FIN 结束断开
PSH 传送0数据缓存 上层应用协议
RST 重置
URG 紧急
rpm -galgrep nmap查看nmap
yum install -y nmap
nmap命令常用的选项和描类型
-p:指定扫描的端口。
-n:禁用反向DNS解析(以加快扫描速度)
-sS:TCP的SYN扫描(半开扫描),只向目标发出SY数据包,如果收到SYN/ACK响应包就认为目标端口正在监听,并立即断开连接:否则认为目标端口并未开放。
-sT:TCP连接扫描,这是完整的TcP扫描方式(默认扫描类型),用来建立一个TCP连接,如果成功则认为目标端口正在监听服务,否则认为目标端口并未开放。
-sF:TCP的FIN扫描,开放的端口会忽略这种数据包,关闭的端口会回应RST数据包。许多防火墙只对sYN数据包进行简单过诚。而勿略了让他形式的TCP攻击包,这种米刑的扫描可间接检洲防水墙的健升性 中
-sU:UDP扫描,探测目标主机提供哪些UDP服务,UDP扫描的速度会比较慢。
-sP:ICMP 扫描,类似于ping检测,快速判断目标主机是否存活,不做其他扫描。
-P0:跳过pina检测,这种方式认为所有的目标主机存活的,当对方不响应ICMP请求时,使用这种方式可以避免因无法 ping通而放弃扫描。
1、账号基本安全措施
系统账号清理、密码安全控制、命令历史清理、自动注销
2、用户切换与提权 su、sudo
3、开关机安全控制
BIOS引导设置、禁止Ctrl+Alt+Del快捷键、GRUB菜单设置密码
4、终端控制
John the Ripper工具
namp命令