本次该篇博客将有关Liunx系统中(所有实验基于Centos 7)安全方面的各个知识分别由七个实验来实际阐述。
目录:
- 账户文件控制(加锁)
- 控制历史记录
- 账户密码时效管理
- 账户安全切换
- SUDO命令提权
- GRUB菜单管理
- NMAP扫描
一、账户文件控制(加锁)
账户文件控制实际上就是对用户账户(密码)文件的加锁与解锁,一旦将账户和密码文件上锁,该服务器将无法创建新的用户。
实现步骤:
1、查看上锁前的账户文件状态,输入:
[root@localhost ~]# lsattr /etc/passwd /etc/shadow
2、将账户文件上锁并查看加锁后的状态,输入:
[root@localhost ~]# chattr +i /etc/passwd /etc/shadow
[root@localhost ~]# lsattr /etc/passwd /etc/shadow
3、使用添加用户命令(useradd),会发现无法新增用户。
[root@localhost ~]# useradd tasetplayer
二、控制历史记录
在Linux中,历史记录会完整的保存之前输入的命令,这是非常危险,一旦获取到历史记录就能通过历史记录推断出之前执行的操作。所以我们要对历史记录表的容量进行限制。
实现步骤:
1、修改配置文件——针对整个系统:
[root@localhost ~]# vim /etc/profile
2、在配置文件中找到“HISTSIZE”将后面的数字进行修改
3、这时候虽然完成了配置文件的修改,但实际上并没有执行,需要重启或者输入:
[root@localhost ~]# source /etc/profile
1、修改配置文件——针对某个用户
[root@localhost ~]# vim /home/zhy/.bash_logout
2、在用户的配置文件中手动添加:
history -c
clear
三、账户密码时效管理
实验一:
设置密码有效期
要求用户下次登录时修改密码
[root@localhost ~]# vim /etc/login.defs
......
PASS_MAX_DAYS 30(适用于新建用户,原用户有效期不会变化)
[root@localhost ~]# vim /etc/shadow(该条命令可以修改已有用户的有效期)
[root@localhost ~]# chage -d 0 wangwu(强制在下次登录时更改密码)
强烈建议不要使用这条命令!!!!因为你的新密码基本不会设置成功(即使满足密码复杂性的要求),会有各种各样的问题出现!!
四、账户安全切换
通常情况下,哪怕是普通用户也可以使用“su”命令在多个账户间进行切换,从而有机会反复尝试其他用户(如root)的登录密码,带来非常大的安全风险。
为了加强su命令的使用控制,可借助pam_wheel认证模块,只允许个别用户使用su命令(在wheel组中的用户)进行切换。
实现过程:
1、将想要授权的用户移入wheel,输入命令:
[root@localhost ~]# gpasswd -a zhaosi wheel
[root@localhost ~]# cat /etc/group | grep wheel
2、修改/etc/pam.d/su认证配置,用来启用pam_wheel认证
[root@localhost ~]# vim /etc/pam.d/su
......
auth sufficient pam_rootok.so
......
#auth required pam_wheel.so use_uid(将该行前面的#去掉以启用认证模块)
......3、配置完成后,我们只是将“zhaosi”加入wheel组中,所以其它用户将无法使用su命令进行用户之间的切换
[wangwu@localhost ~]$ su - root
密码:
su: 拒绝权限
[wangwu@localhost ~]$ (切换失败,仍为原来用户)五、sudo命令提权
在Liunx中,说到既可以让普通用户拥有一部分的管理权限,又可以不知道root密码的命令。那说的一定就是sudo命令了!!只要管理员提前进行授权,就可以让指定的普通用户拥有一部分管理权限。
1、在配置文件/etc/sudoers中添加授权(也可以直接使用visudo工具直接进行授权)
[root@localhost ~]# visudo
......
wangwu localhost=/usr/sbin/ifconfig(为wangwu提供ifconfig命令的授权)
:wq
2、通过sudo执行特权命令
对于已授权的用户,通过sudo执行时,只要在正常的命令之前加上sudo即可。
[wangwu@localhost ~]$ /sbin/ifconfig ens33 192.168.1.11/24(未用sudo的情况)
SIOCSIFADDR: 不允许的操作
SIOCSIFFLAGS: 不允许的操作
SIOCSIFNETMASK: 不允许的操作
[wangwu@localhost ~]$ sudo /sbin/ifconfig ens33 192.168.1.11/24(使用sudo的情况)
......
[sudo] wangwu 的密码:
[wangwu@localhost ~]$ ifconfig (验证执行结果)
ens33: flags=4163mtu 1500
inet 192.168.1.11 netmask 255.255.255.0 broadcast 192.168.1.255
六、grub菜单管理
GRUB菜单作为启动过程的必备项,一旦遭到破坏便会导致无法进入系统。通常情况下,grrub菜单不会出现大的问题。但在之前的博客中曾经介绍过通过修改grub引导参数进入单用户模式来修复系统问题,这种方法可以绕开开机密码进入系统,并且拥有root权限。
方法虽好,但从安全角度来说,任何人都可以通过修改grub参数来获取root权限,本身对服务器就是一个极大的威胁。所以为了防止这种情况的发生,我们可以为GRUB菜单设置一个单独的密码。
1、分别将grub菜单文件和它的头文件进行备份,以防实验失败造成无法开机
[root@localhost ~]# cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bak
[root@localhost ~]# cp /etc/grub.d/00_header /etc/grub.d/00_header.bak
2、生成设置grub菜单所需的密码哈希(Hash)值
[root@localhost ~]# grub2-mkpasswd-pbkdf2
3、设置grub菜单头文件
[root@localhost ~]# vim /etc/grub.d/00_header
按下G定位到头部文件末尾,并按o在下一行输入
输入“cat << EOF”
输入“set superusers=”root””
最后一行输入“passwd_pbkdf2 root之前计算出的哈希值”
:wq(保存退出)
4、重新创建grub的配置
[root@localhost ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
到此就完成GRUB菜单密码的设置,下次想要进入GRUB设置就必须输入密码才能进入了。
七、NMAP扫描——端口扫描
NMAP的扫描语法
格式:nmap [扫描类型] [选项] <扫描目标…>
常用的扫描类型:
-aS:TCP SYN扫描
-sT:TCP连接扫描
-sF:TCP FIN扫描
-sU:UDP扫描
-sP:检测ping
-P0:跳过ping检测
实验步骤:
1、安装NMAP扫描工具
[root@localhost ~]# yum install nmap -y
2、通过该工具查看本机对外开启的具体端口服务
TCP端口开启的服务
[root@localhost ~]# nmap -sT 127.0.0.1
UDP端口开启的服务
[root@localhost ~]# nmap -sU 127.0.0.1