各位小伙伴大家好,本次和大家分享的是Linux系统中的系统安全及应用的相关理论知识及操作。我将通过以下几点和相关的实验进行分析说明:(接上篇)

五.使用su命令切换用户:

1、用途及方法

  • 用途:Substitute User,切换用户
  • 格式:su -目标用户(bash环境)
    2、密码验证
  • root→任意用户,不验证密码
  • 普通用户→其他用户,验证目标用户的密码

    [jerry@localhost~]$su -root(带-选项 表示将使用目标用户的登录Shell环境)br/>口令:
    [root@localhost~]#whoami
    root

限制使用su命令的用户:
1、将允许使用su命令的用户加入wheel组
2、启用pam_wheel认证模块,格式如下:

[root@localhost~]#vi /etc/pam.d/su
#%PAM-1.0
auth sufficient pam_rootok.so
auth required pam_wheel.so use_uid

六.Linux中的PAM安全认证

su命令的安全隐患
1、默认情况下,任何用户都允许使用su命令,从而有机会反复尝试其他用户(如root)的登陆密码,带来安全风险
2、为了加强su命令的使用控制,可以借助于PAM认证模块,只允许极个别用户使用su命令进行切换
3、PAM(Pluggable Authentication Modules)可插拔式认证模块,它是一种高效而且灵活便利的用户级别的认证方式,它也是当前Linux服务器普遍使用的认证方式。

PAM认证原理:
1、PAM认证一般遵循的顺序:Service(服务)→PAM(配置文件)→pam_*.so
2、PAM认证首先要确定哪一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证文件(位于/lib/security下)进行安全认证
3、用户访问服务器的时候,服务器的某一个服务程序把用户的请求发送到PAM模块进行认证
4、不同的应用程序所对应的PAM模块也是不同的

PAM认证的构成:
1.查看某个程序是否支持PAM认证,可以使用ls命令进行查看,例如查看su是否支持PAM模块认证

  • ls /etc/pam.d | grep su
    2.查看su的PAM配置文件:cat /etc/pam.d/su
  • 每一行都是一个独立的认证过程
  • 每一行可以区分为三个字段
    ①认证类型
    ②控制类型
    ③PAM模块及其参数

PAM安全认证流程
控制类型也可以称作Control Flags,用于PAM验证类型的返回结果

  1. required验证失败时仍然继续,但返回Fail
  2. requisite验证失败则立即结束整个验证过程,返回Fail
  3. sufficient验证成功则立即返回,不在继续,否则忽略结果并继续
  4. optional不用于验证,只显示信息(通常用于session类型)
    具体图示过程如下:
    解析Linux中的系统安全及应用(二)

账户安全切换实验:

输入:ls /etc/pam.d(查看独立配置文件)
解析Linux中的系统安全及应用(二)
输入:ls /etc/security/(查看安全配置文件)
解析Linux中的系统安全及应用(二)
在CentOS终端登录一个账户,例如zhangsan账户,登录进去后打开终端界面:
输入:grep “bash$” /etc/passwd(此时账户有两个:root、zhangsan)
输入:useradd lisi(创建新用户lisi)
输入:passwd lisi(设置密码123123)
输入:su - root(切换超级管理员用户)
默认情况下知道root密码就可以进入权限,其实这种情况下是不安全的,所以我们需要进行设定:
输入:vim /etc/pam.d/su(进入pam文件)
其中:pam_wheel.so为控制模块,前面为#号状态为未开启
解析Linux中的系统安全及应用(二)
光标移至#号处,按x删除#号,这样就改变状态为开启了
解析Linux中的系统安全及应用(二)
输入:wq(保存退出)
输入:vim /etc/group(查看组信息)
这时候我们能够看到wheel中有zhangsan用户
解析Linux中的系统安全及应用(二)
此时zhangsan用户出去安全组wheel中,但是lisi用户不在其中,那么我们来验证一下两个普通用户账户,在都知道root的密码情况下,是否都可以切换到root账户权限中:
具体操作如下图所示:
解析Linux中的系统安全及应用(二)
此时得出结论:被添加到wheel组中的用户知道root密码可以切换登录,如果不在wheel组中的用户即使知道root密码也会被提示拒绝权限,无法切换!
此时如果我们想让lisi账用户也可以和root用户进行切换,呢么就需要通过root把lisi账户添加到wheel组当中,具体操作如下图所示:
解析Linux中的系统安全及应用(二)

七.使用sudo机制提升权限:

1.su命令的缺点
2.sudo命令的用途及方法

  • 用途:以其他用户身份(如root)执行授权的命令
  • 用法:sudo授权命令
    3.配置sudo授权
  • visudo或者vi /etc/sudoers
  • 记录格式:用户 主机名列表=命令程序列表

    [root@localhot~]#visudo
    ……
    %wheel ALL=NOPASSWD:ALL
    jerry localhost=/sbin/ifconfig
    syrianer localhost=/sbin/*,!/sbin/ifconfig,!/sbin/route
    Cmnd_Alias PKGTOOLS=/bin/rpm,/ysr/bin/yum
    mike localhost=PKGTOOLS

4.查看sudo操作记录

  • 需启用Defaults logfile配置
  • 默认日志文件:/var/log/sudo

    [root@localhost~]#visudo
    ……
    Defaults logfile = “/var/log/sudo”
    [root @localhost~]#tail /var/log/sudo
    ……
    Aug 24 23:59:44 : jerry : TTY=pts/0 ; PWD=/home/jerry ;USER=root ;
    COMMAND=/sbin/ifconfig ens33:0 192.168.1.11/24
    Aug 25 00:00:46 : syrianer : TTY=pts/1 ; PWD=/home/syrianer ;
    USER=root ; COMMAND=list (启动日志配置以后,sudo操作过程才会被记录)

提权实验:

输入:useradd wangwu(添加新用户wangwu)
输入:passwd wangwu(设置密码)
因为没有进行相关设置,所以wangwu账户不属于wheel组
我们在CentOS终端,使用用户wangwu登录进入系统:
解析Linux中的系统安全及应用(二)
进入终端,输入:ifconfig(查看网卡信息)
解析Linux中的系统安全及应用(二)
输入:ifconfig ens33 192.168.195.182(修改ens33网卡IP地址)
提示不允许操作,因为权限不足
解析Linux中的系统安全及应用(二)
这个时候我们可以使用sudo提权试试看可不可以?
输入:sudo ifconfig ens33 192.168.195.182(提权修改IP地址)
此时提示需要输入wangwu账户的密码
输入:123123
此时就会提示:该账户不在sudoers文件中 没有给到sudo的权限,所以没有修改成功
解析Linux中的系统安全及应用(二)
我们之前看到的zhangsan和lisi两个用户都是在wheel组中的,通过实验来验证他们是否可以通过提权进行修改IP的操作。
注销系统后,使用zhangsan账户登录,打开终端界面,进行提权修改IP地址,具体操作如下图所示:
解析Linux中的系统安全及应用(二)
如何让wangwu能够提权修改IP地址:
输入:visudo
光标移动到空白行
输入:wangwu localhost /sbin/ifconfig
输入:wq
解析Linux中的系统安全及应用(二)
注销系统,使用wangwu登录,此时验证是否具有提权修改IP的权限,具体验证过程如下图:
解析Linux中的系统安全及应用(二)
此时IP地址修改成功 ,说明wangwu用户获得了sudo权限。

八.开关机安全控制:

1、调整BIOS引导设置

  • 将第一引导设备设为当前系统所在硬盘
  • 禁止从其他设备(光盘、U盘、网络)引导系统
  • 将安全级别设为setop,并设置管理员密码
    2、GRUB限制
  • 使用grub2-mkpasswd-pbkdf2生成秘钥
  • 修改/etc/grub.d/00_heard文件中,添加秘钥记录
  • 生成新的grub.cfg配置文件

grub菜单控制实验:

开机时,眼疾手快按:e进入grub菜单界面
解析Linux中的系统安全及应用(二)
在grub菜单界面中是可以进行直接编辑的,也是很不安全的,所以需要进行设置
如果想要修改可以,但是必须要知道管理员的账户和密码才可以访问
接下来我们进行如下操作:
在CentOS终端使用root用户登录系统,先进行备份:
输入:cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bak
输入:cp /etc/grub.d/00_header /etc/grub.d/00_header.bak(备份头文件)
输入:grub2-mkpasswd-pbkdf2(进行哈希秘钥加密,生成密文)
提示输入口令:123456(接下来重复输入)
生成密文后,有用的部分为password is后面的内容
解析Linux中的系统安全及应用(二)
接下来进行复制,,设置头文件
输入:vim /etc/grub.d/00_header(进入头文件设置)
按:大G到末行,输入:cat << EOF
输入:set superusers=“root”
转下行粘贴刚刚复制的密文,光标移动到密文的最前部,按空格空出后
输入人:password_pbkdf2 root(意思为:针对于root用户密码是)
输入:wq(保存退出,此时头文件设置完成)
解析Linux中的系统安全及应用(二)
输入:grub2-mkconfig -o /boot/grub2/grub.cfg(创建grub中的配置)
输入:init 6(重启验证)
在开机界面按e进入编辑界面
解析Linux中的系统安全及应用(二)
不能直接修改,需要输入用户名才能进入编辑界面
此处输入用户名:root,密码:123123
按Enter进入编辑界面
解析Linux中的系统安全及应用(二)
解析Linux中的系统安全及应用(二)

1.限制root只在安全终端登录:

  • 安全终端配置:/etc/securetty,示例如下:

    禁止root用户从终端tty5、tty6登录
    [root@localhost~]#vi /etc/securetty
    ……
    #tty5
    #tty6

2.禁止普通用户登录:

  • 建立/etc/nologin文件
  • 删除nologin文件或重启后即恢复正常

    以上示例如下:
    [root@localhost~]#touch /etc/nologin(禁止普通用户登录)
    [root@localhost~]#rm -rf /etc/nologin(取消上述登录限制)

九.系统弱口令检测

1.Joth the Ripper,简称为JR

密码侦测实验:

输入:vim /etc/shadow目录下,用户的密码都是以密文显示,我们无法知道其真实内容
解析Linux中的系统安全及应用(二)
我们可以用密码侦测,来检测一下这些账户的弱口令(前提,账户的密码是简单的组合,容易破解的)
首先需要有john-1.8.0.tar.gz的工具包,在此为大家贴上工具包的压缩文件链接,大家可以直接点击下载,方便后续操作。
链接:https://pan.baidu.com/s/1DlLvCOk6K3YwzAEBxJz4jw
提取码:cc9j

输入:smbclient -L //192.168.100.3/(查看共享)
此时我们放置john工具包的LAMP目录被共享出来
解析Linux中的系统安全及应用(二)
接下来我们需要进行挂载
输入:mount.cifs //192.168.100.3/LAMP /mnt/(进行挂载)
输入:df -hT(查看挂载此时LAMP目录挂载到mnt目录下成功)
解析Linux中的系统安全及应用(二)
输入:cd /mnt/(进入mnt目录可以看到john的压缩工具包在此目录中)
输入:tar zxvf john-1.8.0.tar.gz -C /opt/(将工具压做包解压缩到opt目录下)
解析Linux中的系统安全及应用(二)
此时在opt目录中可以看到john文件,
输入:cd /opt/
输入:ls(查看详细信息)
输入:cd john-1.8.0/(进入john文件)
输入:ls(查看详细信息,run运行文件,src源码包)
输入:cd run/(进入运行文件)
输入:ls(查看详细信息,此时其中还没有生成我们可以执行的工具,运行的脚本需要我们进行配置,需要根据源码进行配置)
输入:cd sre/(进入源码包,此时可以发现其中都是以“.c”为结尾的文件,是c语言的文件,所以我们需要安装编译器)
输入:yum install gcc gcc-c++ -y(免交互安装编译器工具)
过程如下图:
解析Linux中的系统安全及应用(二)
安装完成之后在src源码路径下执行:make linux-x86-64(进行编译)
输入:cd ../run/(进入到run目录)
输入:ls(查看详情就可以看到我们需要用到的john的脚本执行文件)
解析Linux中的系统安全及应用(二)
输入:./john /etc/passwd /etc/shadow(利用john工具分析账户和密码文件)
我们可以看到root和zhangsan用户的密码被明文显示出来,工具能够解析出密码是因为其中有密码字典可以进行筛选
解析Linux中的系统安全及应用(二)
输入:vim password.list(查看此字典)
解析Linux中的系统安全及应用(二)
从上述实验结果中可以看出,利用密码解析工具就可以破解出简单的密码组合,所以像“123123这类的简单密码是很容易侦测到的,所以为了安全起见各位看官还是需要把密码设置的复杂一些(前提是自己要能记得住!!!)

十.网络端口扫描:

NMAP的扫描语法

格式:nmap [扫描类型] [选项] <扫描目标…>

常用的扫描类型:

-aS:TCP SYN扫描
-sT:TCP连接扫描
-sF:TCP FIN扫描
-sU:UDP扫描
-sP:检测ping
-P0:跳过ping检测

扫描工具实验:

输入:yum install nmp -y(免交互安装工具)
输入:netstat -ntap(查看tcp端口)
解析Linux中的系统安全及应用(二)
输入:netstat -nuap(查看udp端口)
解析Linux中的系统安全及应用(二)
我们也可以检测到对外提供的可以被连接的端口服务:
输入:nmap -sT 127.0.0.1(显示出对外连接的端口)
解析Linux中的系统安全及应用(二)
我们输入:ifconfig可以查看到自己的网段是在192.168.195网段
此时我们可以输入:nmap -sP 192.168.195.0/24检测该网段有哪些存活主机(此处需提前开好至少两个以上的虚拟机客户端) ,结果如下图:
解析Linux中的系统安全及应用(二)
输入:nmap -sT 192.168.195.129(可以检测到对应端口主机开启的服务)
解析Linux中的系统安全及应用(二)
通过上述实验我们可以知道NMAP是一款端口扫描类工具,可以用来检查目标主机、网络开放的端口/服务等信息。