一.账号安全控制
1.基本安全措施
1.1 系统账号的清理
1.1.1 将非登录用户的Shell类型设为 /sbin/nologin
在我们使用Linux系统时,除了用户创建的账号之外,还会产生系统或程序安装过程中产生的许多其他账号,除了超级用户root外,其他账号都是用来维护系统运作的,一般不允许登录,常见的非登录用户有bin、adm、mail、lp、nobody、ftp等。
usermod -s /sbin/nologin 用户名
1.1.2 锁定长期不使用的账号
[root@localhost ~]# usermod -L xyl 锁定用户账号方法一
[root@localhost ~]# passwd -l xyl 锁定用户账号方法二
[root@localhost ~]# usermod -U xyl 解锁用户账号方法一
[root@localhost ~]# passwd -u xyl 解锁用户账号方法二
1.1.3 删除无用的账号
[root@localhost ~]# userdel wangwu
[root@localhost ~]# userdel -r wangwu //加上 -r 直接把家目录下的用户目录一起删除了
1.1.4 锁定账号文件passwd、shadow
[root@localhost ~]# chattr +i /etc/passwd /etc/shadow 锁定文件,包括root也无法修改
[root@localhost ~]# chattr -i /etc/passwd /etc/shadow 解锁文件
[root@localhost ~]# lsattr /etc/passwd /etc/shadow 查看文件状态属性
小问题:
中病毒怎么办?
先ps top 命令查找到这个异常进程,通过进程pid号找到proc文件夹下exe 文件,找到文件的真是位置。
然后将他删除,如果不可以,自己建一个和病毒同名的文件,加上 chattr +i 锁定文件,就操作不了了!
1.2 密码安全控制
1.2.1 设置密码有效期
1.[root@localhost ~]# chage -M 20 wangwu 修改 wangwu 的密码期限为20天
这种方法适合修改已经存在的用户
2.[root@localhost ~]# vim /etc/login.defs 这种适合以后添加新用户,
PASS_MAX_DAYS 20 //密码有效期为20天
PASS_MIN_DAYS 0
PASS_MIN_LEN 5
PASS_WARN_AGE 7
方法一:
方法二:
新建一个用户wangwu03,查看到他的密码有效期就是修改后的20天
1.2.2 要求用户下次登录时修改密码
[root@localhost ~]# chage -d 0 wangwu03 强制要求用户下次登陆时修改密码
变化的字符是 最后一次修改密码的时间
1.3 命令历史、自动注销
减少记录命令的条数:
1.[root@localhost ~]# vim /etc/profile 进入配置文件修改限制命令条数。适合新用户
HISTSIZE=200 修改限制命令为200条,系统默认是1000条profile
[root@localhost ~]# source /etc/profile 刷新配置文件,使文件立即生效
2.[root@localhost ~]# export HISTSIZE=200 适用于当前用户
[root@localhost ~]# source /etc/profile
[root@localhost ~]# source /etc/profile 刷新配置文件,使文件立即生效
3. 开机时自动清空命令:
[root@localhost ~]# vim ~/.bashrc
echo "" > ~/.bash_history
history -c 临时清掉历史命令
1.3.1 减少记录的命令条数
① 配置文件修改记录history命令的条数(默认1000)
② 适用于当前用户
1.3.2 注销时自动清空命令历史
也就是将命令写入配置文件,然后开机自动运行
1.3.3 终端用户自动注销
闲置600秒后自动注销:
[root@localhost ~]#vim .bash_profile 进入配置文件
export TMOUT=60 //全局声明超过60秒闲置后自动注销终端
[root@localhost ~]# source .bash_profile //刷新
[root@localhost ~]# echo $TMOUT //查看自动注销时间
[root@localhost ~]# export TMOUT=600
//如果不在配置文件输入这条命令,那么是对当前用户生效
[root@localhost ~]#vim .bash_profile
# export TMOUT=60 //注释掉这条命令,就不会自动注销了
① 进入配置文件修改
② 仅对当前用户生效
2.用户切换与提权
2.1 su - 切换用户
1.用途及用法
用途:Substitute User,切换用户
格式:su - 目标用户 (横杠" - "代表切换到目标用户的家目录)
root ------------------> 任意用户,不验证密码
普通用户 ------------------> 其他用户,验证目标用户的密码
带 " - " 表示将使用目标用户的登录Shell环境
su 不加 - 不完全的切换
su 加 - 是完全的切换
2.查看 su 操作记录
安全日志文件:/var/log/secure
3.whoami确定当前用户是谁
4. 限制使用 su 命令的用户
将允许使用 su 命令的用户加入wheel组
gpasswd -a wangwu wheel //正在将wangwu加入到"wheel"组中
5. vim /etc/pam.d/su //进入到su里面
auth sufficient pam_rootok.so //注释掉这行,root 切用户也需要密码了
默认情况下,使用root切换不需要密码
auth required pam_wheel.so use_uid //取消这行注释之后,不在这个组的用户不能使用 su 指令
pam_rootok.so //root不需要密码
pam_wheel.so //只有wheel组才可以切换
不在 wheel 组,不能使用 su 指令
修改完之后,不能使用 su
将wangwu03 加入到 wheel 组之后,su 指令又可以使用了
root 用户切换其他用户也需要密码
2.2 sudo 提升执行权限
sudo命令的用途及用法:
用途:以其他用户身份(如root)执行授权命令
用法:sudo 授权命令
1.
配置sudo授权
visudo //自带语法检查功能(建议使用)
或者 vim /etc/sudoers
记录格式:
root ALL=(ALL) ALL
解析:
root 哪个用户要使用命令
ALL 哪台主机
(ALL) 以谁的身份运行
ALL 所有命令
所有命令里面可以使用通配符" * "号任意值和" !"号进行取反操作。
visudo -c //检查语法是否正确
%在前表示组
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
wheel组表示管理员组是比较特殊的一个组,在wheel组中的成员可以使用任何命令
2.
配置/etc/sudoers文件,可以授权用户较多的时使用,相当于设置了别名
Host_Alias MYHOST= localhost,XXX //主机名
User_Alias USERS = wangwu01,wangwu02,lisi //需要授权的用户
Cmnd_Alias MYCMD =/usr/bin/* //授权
USERS MYHOST= NOPASSWD : MYCMD //授权格式
3.查看sudo操作记录
需启用Defaults logfile
配置默认日志文件:
visudo 进入编辑模式
添加以下内容:
Defaults logfile = "/data/sudo.log"
输入 visudo ,找到这一行,按照模板进行编辑
建议将root那一行注释掉
在命令行加上NOPASSWD: 就不再需要输入命令
使用通配符的注意事项
也就是后面只能出现一个文件,不能空格隔开。如果有空格隔开的文件,那个隔开的文件就差看不了!
② 配置/etc/sudoers文件,可以授权用户较多的时使用,相当于设置了别名
注意别名的格式:必须大写字母,数字可以使用但是不能放在开头!
③ 启用日志操作
3.PAM安全认证
-
su命令的安全隐患
-
默认情况下,任何用户都允许使用su命令,有机会反复尝试其他用户(如root) 的登录密码,带来安全风险;
-
为了加强su命令的使用控制,可借助于PAM认证模块,只允许极个别用户使用su命令进行切换。
-
3.1 什么是PAM?
-
PAM(Pluggable Authentication Modules)可插拔式认证模块
-
是一种高效而且灵活便利的用户级别的认证方式;
-
也是当前Linux服务器普遍使用的认证方式。
-
PAM提供了对所有服务进行认证的中央机制,适用于login,远程登陆,su等应用。
-
系统管理员通过PAM配置文件来制定不同的应用程序的不同认证策略。
① PAM认证一般遵循的顺序: Service (服务) --> PAM (配置文件) --> pam_*.so
② PAM认证首先要确定哪一项应用服务,然后加载相应的PAM的配置文件(位于/etc/pam.d),最后调用认证文件(位于/lib64/security/)进行安全认证。
③ 用户访问服务器的时候,服务器的某一个服务程序把用户的请求发送到PAM模块进行认证。不同的应用程序所对应的PAM模块也是不同的。
④ 如果想查看某个程序是否支持PAM认证,可以用ls命令进行查看/etc/pam.d/
ls /etc/pam.d/ | grep su
⑤ PAM的配置文件中的每一行都是一个独立的认证过程,它们按从上往下的顺序依次由PAM模块调用。
3.3 基本认知
认知几个模块:
/usr/lib64/security 存放功能模块
/etc/pam.d 存放配置文件
/etc/security 复杂的配置文件
看看 /etc/pam.d 下面的sshd
当用户来访问某一程序的时候,如果这个启用了pam模块,会先去读取配置文件,然后按照配置文件调用模块,进行操作。
① 第一段 模块类型(type)
-
Auth 账号的认证和授权
-
Account 帐户的有效性,与账号管理相关的非认证类的功能,如:用来限制/允许用户对某个服务的访问时间,限制用户的位置(例如:root用户只能从控制台登录)
-
Password 用户修改密码时密码复杂度检查机制等功能
-
Session 用户会话期间的控制,如:最多打开的文件数,最多的进程数等
-
-type 表示因为缺失而不能加载的模块将不记录到系统日志,对于那些不总是安装在系统上的模块有用
② 第二段 控制位 (control)
required 一票否决 如果失败 最后一定失败,但是会继续进行验证
requistite 一票否决 如果失败 会立即结束验证,反馈失败
sufficient 验证成功则立即返回,不再继续,否则忽略结果并继续
optional 不用于验证,只显示信息,可选项
③ 第三段 代表PAM模块
默认是在/lib64/security/目录下,如果不在此默认路径下,要填写绝对路径。
同一个模块,可以出现在不同的模块类型中,它在不同的类型中所执行的操作都不相同,这是由于每个模块针对不同的模块类型编制了不同的执行函数。
概述:
每一行都是一个独立的认证过程;
每一行可以区分为三个字段: 认证类型 控制类型 PAM 模块及其参数
PAM 认证类型包括四种:
认证管理(authentication management):接受用户名和密码,进而对该用户的密码进行认证。
帐户管理(account management):检查帐户是否被允许登录系统,帐号是否已经过期,帐号的登录是否有时间段的限制等。
密码管理(password management):主要是用来修改用户的密码。
会话管理(session management):主要是提供对会话的管理和记账。
① shell类型 模块
功能:检查有效的shell
帮助: man 8 pam 模块名
如果不知道怎么使用
实例:
不允许使用/bin/csh的用户本地登录
模块: pam_shells.so 只允许 规定的shell类型通过, 是在/etc/shells 文件中存在的 类型通过
因为删掉了 /etc/shells 中的 /bin/csh,然后又给 su 命令添加了pam.shells认证,所以导致shell类型为 /bin/csh 的 lisi 用户无法使用 su 命令。
② securetty 模块
功能:只允许root用户在 /etc/securetty 列出的安全终端上登陆
关闭两边的防火墙和防护
远程登录对方机器,登陆成功!
③ pam_nologin.so 模块
功能:如果 /etc/nologin 文件存在,将导致非root用户不能登陆,当该用户登陆时,会显示 /etc/nologin 文件内容,并拒绝登陆。
④ limit 模块
功能:控制进程占用资源,在用户级别实现对其可使用的资源的限制,例如:可打开的文件数量,可运行的进程数量,可用内存空间等。
实例:
修改完之后,需要退出重新切换 lisi 用户,建议用 su - 用户名 ,完全切换
limits 一些建议设置
临时修改:
ulimit命令
ulimit是linux shell的内置命令,它具有一套参数集,用于对shell进程及其子进程进行资源限制。
ulimit的设定值是 per-process 的,也就是说,每个进程有自己的limits值。使用ulimit进行修改,立即生效。
ulimit只影响shell进程及其子进程,用户登出后失效。
可以在profile中加入ulimit的设置,变相的做到永久生效
-H 设置硬件资源限制.
-S 设置软件资源限制.
-a 显示当前所有的资源限制.
-c size:设置core文件的最大值.单位:blocks
-d size:设置数据段的最大值.单位:kbytes
-f size:设置创建文件的最大值.单位:blocks
-l size:设置在内存中锁定进程的最大值.单位:kbytes
-m size:设置可以使用的常驻内存的最大值.单位:kbytes
-n size:设置内核可以同时打开的文件描述符的最大值.单位:n
-p size:设置管道缓冲区的最大值.单位:kbytes
-s size:设置堆栈的最大值.单位:kbytes
-t size:设置CPU使用时间的最大上限.单位:seconds
-u size:最大用户进程数
-v size:设置虚拟内存的最大值.单位:kbytes
unlimited 是一个特殊值,用于表示不限制
④ 压力测试:
如果 ab 命令不可用,就请先安装 httpd-tools ,然后开启 httpd 服务
测的是同一时间 192.168.44.20 这个服务器可以接待多少次的访问
二.系统引导和登录控制
1.开关机安全控制
1.1 调整 BIOS 引导设置原则
-
将第一引导设备设为当前系统所在硬盘;
-
禁止从其他设备(光盘、 U盘、网络)引导系统;
-
将安全级别设为setup,并设置管理员密码。
禁用重启热键:Ctrl+Alt+Delete 避免因用户误操作重启
1.2 GRUB 菜单设置
-
未经授权禁止修改启动参数
-
未经授权禁止进入指定系统
1.3 GRUB限制的实现
通常情况下在系统开机进入GRUB菜单时,按e键可以查看并修改GRUB引导参数,这对服务器是一个极大的威胁。可以为GRUB菜单设置一个密码,只有提供正确的密码才被允许修改引导参数。
法一:
1. 使用grub2-mkpasswd-pbkdf2生成密钥并复制,然后备份两个配置文件。
2. 修改/etc/grub.d/00_ header文件中, 添加密码记录,并存并退出
太复杂
法二:
直接设置grub2---setpasswd 设置grub密码
生成新的grub.cfg文件,然后重启系统
验证结果
方法一:直接设置修改密码
方法二:太复杂(不建议使用)
三.弱口令检测、端口扫描
1.弱口令检测 (暴力破解)
-
一款密码分析工具,支持字典式的暴力破解;
-
通过对shadow文件的口令分析,可以检测密码强度;
实例:
- 把下载好的安装包用过rz命令下到目录opy下(sz可以把linux系统中的文件传到自己的windows系统中):
[root@localhost ~]#cd /opt
[root@localhost ~]#rz
[root@localhost opt]#ls
john-1.8.0.tar.gz
直接把压缩包拖进即可
- 解压
[root@localhost opt]#tar zxvf john-1.8.0.tar.gz
- 安装软件编译工具
[root@localhost src]#yum install gcc pcre-devel openssl-devel zlib-devel openssl openssl-devel -y
- 进行编译安装
[root@localhost src]#make clean linux-x86-64
- 准备待破解的密码文件
[root@localhost src]#cd .. 切换至上级目录
[root@localhost src]#cp /etc/shadow /opt/shadow.txt 准备密码文件
- 执行暴力破解
[root@localhost src]#cd /opt/john-1.8.0/run/
[root@localhost run]#./john /opt/shadow.txt
7.查看已经破解出的密码
[root@localhost run]#./john --show /opt/shadow.txt
> john. pot
#使用密码字典文件
#清空已破解出的账户列表,以便重新分析
./john --wordlist=./password.1st /opt/shadow.txt
#使用指定的字典文件进行破解
2. 网络扫描 - NMAP
- 一款强大的网络扫描、安全 检测工具
控制位 | |
---|---|
SYN | 建立链接 |
ACK | 确认 |
FIN | 结束断开 |
PSH | 传送 0 数据缓存 上层应用协议 |
RST | 重置 |
URG | 紧急 |
① 常用格式:
nmap [扫描类型] [选项] <扫描目标>
netstat natp #查看正在运行的使用TCP协议的网络状态信息
netstat -natp | grep httpd #实际操作(httpd换成80也可以)
netstat -naup #查看正在运行的使用UDP协议的网络状态信息
[root@localhost run]#rpm -qa|grep nmap 查看nmap
[root@localhost run]#yum install -y nmap 安装nmap
|-------|--------------------------------------------------------------------------------------------------|
| 常见的选项 | 选项的作用 |
| -p | 指定扫描的端口 |
| -n | 禁用反向DNS解析(以加快扫描速度) |
| -sS | TCP的SYN扫描(半开扫描),只向目标发出SYN数据包,如果收到SYNACK响应包就认为目标端口正在监听,并立即断开连接; 否则认为目标端口并未开放。 |
| -sT | TCP连接扫描,这是完整的TCP扫描方式(默认扫描类型),用来建立一个TCP连接,如果成功则认为目标端口正在监听服务,否 则认为目标端口并未开放。 |
| -sF | TCP的FIN扫描,开放的端口会忽略这种数据包,关闭的端口会回应RST数据包。许多防火墙只对SYN数据包进行简单过滤,而 忽略了其他形式的TCP攻击包。这种类型的扫描可间接检测防火墙的健壮性。 |
| -sU | UDP扫描,探测目标主机提供哪些UDP服务,UDP扫描的速度会比较慢。 |
| -sP | ICMP扫描,类似于ping检测,快速判断目标主机是否存活,不做其他扫描。 |
| -P0 | 跳过ping检测,这种方式认为所有的目标主机是存活的,当对方不响应ICMP请求时,使用这种方式可以避免因无法ping通而放 弃扫描。 |
| | |
|-------------|------------------------------------|
| natstat常用选项 | 作用 |
| -a | 显示主机中所有活动的网络连接信息(包括监听、非监听状态的服务端口)。 |
| -n | 以数字的形式显示相关的主机地址、端1等信息。 |
| -t | 查看TCP相关的信息。 |
| -u | 显示UDP协议相关的信息。 |
| -p | 显示与网络连接相关联的进程号、进程名称信息(该选项需要root权限) |
| -r | 显示路由表信息。 |
| -l | 显示处于监听状态的网络连接及端口信息。 |
示例:
查看本机开启的 TCP端口、UDP端口
检测192.168.44.0/24 网段有哪些存活主机