账户安全控制

1.基本措施

系统账号清理

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

系统安全及应用_root用户

系统安全及应用_配置文件_02

锁定长期不使用的账号

系统安全及应用_配置文件_03

删除无用的账号

系统安全及应用_配置文件_04

锁定账号文件passwd,shadow

系统安全及应用_配置文件_05

密码安全控制

设置密码有效期:chage -M 30 用户名

系统安全及应用_配置文件_06

要求用户下次登录时修改密码:chage -d 0 用户名

系统安全及应用_配置文件_07

命令历史限制


减少记录 的命令条数(历史记录默认1000条)

1.

系统安全及应用_主机名_08

2.系统安全及应用_root用户_09

3.注销时自动清空命令历史

进入编辑器 输入代码echo

系统安全及应用_配置文件_10

终端自动注销


闲置600秒后自动注销

系统安全及应用_配置文件_11

使用su命令切换用户

su -用户名 用途:切换用户

密码验证:root--任意用户,不验证密码;普通用户--其他用户,验证目标用户的密码

限制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为o的用户,即root用户能够直接通过认证而不用输入密码。)

【2关,6关:root切换用户需要输入密码】

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

【2开,6开:root和wheel组可以su】

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

【2关,6开:只有wheel组可以su】

限制使用su命令的用户,启用pam_wheel认证模块

gpasswd -a 用户名 wheel : 添加授权用户,将用户添加到wheel组

grep wheel /etc/group :确认wheel组成员

auth required pam wheel.so use_uid 去掉此行开头#号

启用pam_wheel认证后,未加入wheel组内的其他用户将无法使用su命令,尝试进行切换时将提示“拒绝权限”,从而将切换用户的权限控制在最小范围内。【普通用户切换登录测试 验证,使用su命令切换用户的操作将会记录到安全日志/var/log/secure文件中】

Linux中的PAM安全认证

su命令的安全隐患

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

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

PAM(Pluggable Authentication Modules)可插拔式认证模块

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

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

PAM认证原理

1一般遵循的顺序:

Service(服务)→PAM(配置文件)→pam_*.so

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

3.用户访问服务器时,服务器的某一个服务程序把用户的

请求发送到PAM模块进行认证

4.不同的应用程序所对应的PAM模块是不同的

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

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

PAM认证各列含义

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

auth: 对用户身份进行识别,如提示输入密码,判断是否为root。

account:对账号各项属性进行检查,如是否允许登录系统,帐号是否已经过期,是否达到最大用户数等。

password:使用用户信息来更新数据,如修改用户密码。

session:定义登录前以及退出后所要进行的会话操作管理,如登录连接信息,用户数据的打开和关闭,挂载文件系统。

第二列代表PAM控制标记

required:表示需要返回一个成功值,如果返回失败,不会立刻将失败结果返回,而是继续进行同类型的下一验证,所有此类型的模块都执行完成后,再返回失败。

requisite:与required类似,但如果此模块返回失败,则立刻返回失败并表示此类型失败。

sufficient:如果此模块返回成功,则直接向程序返回成功,表示此类成功,如果失败,也不影响这类型的返回值。

optional:不进行成功与否的返回,一般不用于验证,只是显示信息(通常用于session类型),

include:表示在验证过程中调用其他的PM配置文件。比如很多应用通过完整调用/etc/pam.d/system-auth(主要负责用户登录系统的认证工作)来实现认证而不需要重新逐一去写配置项。

第三列代表PAM模块,默认是在/lib64/security/目录下,如果不在此默认路径下,要填写绝对路径。同一个模块,可以出现在不同的模块类型中,它在不同的类型中所执行的操作都不相同,

这是由于每个模块针对不同的模块类型编制了不同的执行函数。

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

PAM实例:




用户1

用户2

用户3

用户4

auth

required

模块1

pass

fail

pass

pass

auth

sufficient

模块2

pass

pass

fail

pass

auth

required

模块3

pass

pass

pass

fail



结果

pass

fail

pass

pass

PAM认证的构成

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

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

ls /etc/pam.d | grep su

查看su的PAM配置文件: cat letc/pam.d/su

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

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

认证类型

控制类型

PAM模块及其参数

7)PAM认证流程

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

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

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

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

**使用sudo机制提升权限(重点)

su命令的缺点

sudo命令的用途及用法

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

用法:sudo 授权命令

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/ki1l,/usr/bin/killall gpasswd -M lisi wheel

##李四加入wheel组

sudo [参数选项]命令vim /etc/sudoers

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

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

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

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

案列一

wangliu 用户可以使用useradd usermod

需求: wangliuroot用户下的权限useradd usermod

配置

visudo

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

如wangliu ALL= (root) NOPASSWD:/usrsn1n/useraad,EnSomi / us/oan

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

验证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/bashtom: x :1006:1006: : / home/tom: / bin/ bash

用户别名案例

当使用相同授权的用户较多,或者授权的命令较多时,可以采用集中定义的别名。用户、

主机、命令部分都可以定义为别名(必须为大写),分别通过关键字User_Alias、Host_Alias、Cand_Alias来进行设置。

#查看组下面的用户

grep "wheel" letcl group用户别名的语法格式:

1) User_Alias 用户别名:包含用户、用户组(%组名(使用3引导))、还可以包含其他其他已经用户的别名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

案例一用户别名

使用关键字user_ Alias、Host_ Alias、Cmnd Alias来进行设置别名(别名必须为大写)

1)

Host_Alias MYHOSTS = kgc , localhost

User_Alias MYUSERS zhangsan , wangwu , lisi

Cmnd_Alias MYCMNDs = /sbin/*, ! / sbin/reboot, !/sbin/poweroff, ! /sbin/init, ! /usr/bin/rm

MYUSERS MYHOSTS=NOPASSWWW D :MYCMNDS

2)

User_Alias USERS=Tom,Jerry,MikeHost Alias HOSTs=localhost, bogon

Cmnd _Alias cMNDS=/sbin/ifconfig,/usr/sbin/useradd,/usr/sbin/userdel

USERS HOSTs=CMNDS

案列二

用户别名

例如,以下操作通过别名方式来添加授权记录,允许用户wangliu、wangliu组、useradmin组并且定义命令别名。在主机smtp、pop 中执行rpm、yum命令

user_Alias USERADMIN = wangliu, 8wangliu , suseradmin

cmnd _Alias USERADMINCMND=/uSr/sbin/useradd,/usr/sbin/usermod, /usr/sbin/userdel,/usr/bin/passwd, ! /usr/bin/passwd root#取反的优先级最高

USERADMIN ALL=(root) NOPASSwD: USERADMINCMND

验正别名以及命令路径

注bug

sudo passwd root测试

解决方法

cmnd_alias USBRADMINCMND =/usr/sbin/useradd,/usr/sbin/usermod, /usr/sbin/userdel,/usr/bin/passwd

[A-Za-z]*,! lusr/ bin/passwd root

启用sudo操作日志

visudo

Defaults logfile = " / var/ log/sudo"

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

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

sudo -1#查看当前用户获得哪些sudo授权

限制更改GRUB引导参数

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

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

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

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

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

vim letc/grub.d/ 00_header

cat <<EOF

set superusers="root"#设置用户名为root

password_pbkdf2 root grub. pbkd2 ....-

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

EOF

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

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

一步到位

grub2-setpassword

开关机安全控制

调整BIOS引导设置

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

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

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

GRUB限制

使用grub2-mkpasswd-pbkdf2生成密钥

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

生成新的grub.cfg配置文件

弱口令检测

系统弱口令检测

弱口令检测一 -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

#使用指定的字典文件进行破解l

网络端口扫描

控制位.

SYN建立链接

ACK确认

FIN结束断开

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

RST重置

URG紧急

rpm -qa |grep nmap 查看nmap

yum install -y nmap

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

-p:指定扫描的端口。

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

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

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

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

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

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

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

再扩展

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

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