Linux系统安全及应用

目录

前言

一.账号安全控制

  1.1系统账号清理

  1.2密码安全控制

  1.3命令历史限制

  1.4终端自动注销

二.限制su命令用户

  2.1su命令用途及用法

  2.2密码验证

  2.3限制使用su命令用户

三.Linux中的PAM安全认证

  3.1su命令的安全隐患

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

  3.3PAM安全认证流程

  3.4PAM认证原理

  3.5PAM认证的构成

四.使用sudo机制提升权限

五.开关机安全控制 

  5.1调整BIOS引导设置

  5.2GRUB限制

六.终端登录安全控制 

  6.1限制root只在安全终端登录

  6.2禁止普通用户登录

七.系统弱口令检测

八.网络端口扫描

总结


前言

    作为一种开放源代码的操作系统,Linux服务器以其安全、高效和稳定的显著优势而得以广泛应用。

    本文主要从账号安全控制、系统引导和登录控制的角度,讲诉Linux系统安全优化的点点滴滴;还将学习基于 Linux环境的弱口令检测、网络扫描等安全工具的构建和使用,帮助管理员查找安全隐患,及时采取有针对性的防护措施。

一.账号安全控制

  1.1系统账号清理

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

      ●锁定长期不使用的账号

      ●删除无用的账号

      ●锁定账号文件passwd、shadow

Linux系统安全及应用

  1.2密码安全控制

      ●设置密码有效期

      ●要求用户下次登录时修改密码

Linux系统安全及应用

 Linux系统安全及应用

  1.3命令历史限制

      ●减少记录的命令条数

      ●注销时自动清空命令历史

Linux系统安全及应用

  1.4终端自动注销

      ●闲置600秒后自动注销

Linux系统安全及应用

二.限制su命令用户

  2.1su命令用途及用法

      ●用途:Substitute User,切换用户

      ●格式:su - 目标用户

  2.2密码验证

      ●root→任意用户,不验证密码

      ●普通用户→其他用户,验证目标用户的密码

Linux系统安全及应用

  2.3限制使用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

1).以上两行是默认状态(即开启第一行,注释第二行),这种状态下是允许所有用户间使用su命令进行切换的。
2).两行都注释也是运行所有用户都能使用su命令,但root'下使用su切换到其他普通用户需要输入密码;如果第一行不注释,则root使用su切换普通用户就不需要输入密码(pam rootok. so模块的主要作用是使uid为0的用户,即root用户能够直接通过认证而不用输入密码。)
3).如果开启第二行,表示只有root用户和wheel组内的用户才可以使用su命令
4).如果注释第一行,开启第二行,表示只有whee1组内的用户才能使用su命令,root用户也被禁用su命令。 

root@localhost ~]# gpasswd -a zhangsan wheel   #添加授权用户 zhangsan 正在将用户“zhangsan”加入到“wheel”组中 [root@localhost ~]# grep wheel /etc/group #确认 wheel 组成员 wheel:x:10:zhangsan  [root@localhost ~]# vi /etc/pam.d/su #%PAM-1.0  auth sufficient pam_rootok.so auth required pam_wheel.so use_uid    #去掉此行开头的 # 号

启用 pam_wheel 认证以后,未加入到 wheel 组内的其他用户将无法使用 su 命令,尝 试进行切换时将提示“拒绝权限”,从而将切换用户的权限控制在最小范围内。

普通用户切换登录测试验证
使用 su 命令切换用户的操作将会记录到安全日志/var/log/secure 文件中,可以根据需要 进行查看。

三.Linux中的PAM安全认证

  3.1su命令的安全隐患

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

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

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

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

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

      ●PAM使用/etc/pam.d/下的配置文件,来管理对程序的认证方式。应用程序调用相应的PAM配置文件,从而调用本地的认证模块,模块放置在/1ib64/security下,以加载动态库的形式进行认证。比如使用su命令时,系统会提示输入root用户的密码,这就是su命令通过调用PAM模块实现的。

  3.3PAM安全认证流程

Linux系统安全及应用

  3.4PAM认证原理

1.PAM认证一般遵循的顺序: Service (服务) --> PAM (配置文件) --> pam_ *.so;

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

3.用户访问服务器的时候,服务器的某一个服务程序把用户的请求发送到PAM模块进行认证。

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

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

  3.5PAM认证的构成

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

Linux系统安全及应用 Linux系统安全及应用 Linux系统安全及应用

第一列代表PAM认证模块类型
auth: 对用户身份进行识别,如提示输入密码,判断是否为root。
account: 对账号各项属性进行检查,如是否允许登录系统,帐号是否已经过期,是否达到最大用户数等。
password: 使用用户信息,用户数据的打开和关闭,挂载文件系统。

第二列代表PAM控制标记
required:表示需要返回一个成功值,如果返回失败,不会立刻将失败结果返回,而是继续进行同类型的下一验证,所有此类型的模块都执行完成后,再返回失败。
requisite:与required类似,但如果此模块返回失败,则立刻返回失败并表示此类型失败。
sufficient:如果此模块返回成功,则直接向程序返回成功,表示此类成功,如果失败,也不影响这类型的返回值。
optional: 不进行成功与否的返回,一般不用于验证,只是显示信息(通常用于session类型),
include:表示在验证过程中调用其他的PAM配置文件。比如很多应用通过完整调用/etc/pam.d/system-auth(主要负责用户登录系统的认证工作)来实现认证而不需要重新逐一去写配置项。

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

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

Linux系统安全及应用

四.使用sudo机制提升权限

su命令有缺点:用户有可能会出问题,有风险,不一定值得信任

sudo命令的用途及用法:

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

用法:sudo 授权命令,如下

visudo

vi /etc/sudoers (此文件的默认权限为440, 保存退出时必须执行":wq!"命令来强制操作)

语法格式:
用户 主机名=命令程序列表
用户 主机名=(用户)命令程序列表

Linux系统安全及应用
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 [参数选项] 命令
-l 列出用户在主机上可用的和被禁止的命令;一般配置好/etc/sudoers后,要用这个命令来查看和测试是不是配置正确的;
-v 验证用户的时间戳;如果用户运行sudo 后,输入用户的密码后,在短时间内可以不用输入口令来直接进行sudo 操作;用-v 可以跟踪最新的时间戳;
-u 指定以以某个用户执行特定操作;
-k 删除时间戳,下一个sudo 命令要求用求提供密码;

案列一 wangliu 用户可以使用useradd usermod 需求:wangliu     root用户下的权限 useradd usermod  配置 visudo wangliu ALL=(root) /usr/sbin/useradd,/usr/sbin/usermod 如wangliu ALL=(root) NOPASSWD:/usr/sbin/useradd,PASSWD:/usr/sbin/usermod  #前面不需要输入密码 ,后面需要输入密码   验证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/bash tom:x:1006:1006::/home/tom:/bin/bash
案列二 用户可以临时创建网卡    visudo Tom  kgc=(root) NOPASSWD:/usr/sbin/ifconfig  验证2 su - Tom [Tom@kgc root]$ ifconfig  ens33:0 192.168.1.11/24 #初次使用sudo时需验证当前用户的密码,默认超时时长为5分钟,在此期间不再重复验证密码。 sudo - l #查看当前用户获得哪些sudo授权

五.开关机安全控制 

  5.1调整BIOS引导设置

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

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

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

  5.2GRUB限制

      ●使用grub2-mkpasswd-pbkdf2生成密钥

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

      ●生成新的grub.cfg配置文件

通常情况下在系统开机进入GRUB菜单时,按e键可以查看并修改GRUB引导参数,这对服务器是一个极大的威胁。 可以为GRUB菜单设置一个密码,只有提供正确的密码才被允许修改引导参数。 grub2-mkpasswd-pbkdf2     #根据提示设置GRUB菜单的密码 PBKDF2 hash of your password is grub . pbkd.....      #省略部分内容为经过加密生成的密码字符串 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 grub. pbkd2.....      #设置密码,省略部分内容为经过加密生成的密码字符串 EOF grub2-mkconfig -o /boot/grub2/grub.cfg #生成新的grub.cfg 文件 重启系统进入GRUB菜单时,按e键将需要输入账号密码才能修改引导参数。

六.终端登录安全控制 

  6.1限制root只在安全终端登录

        ●安全终端配置:/etc/securetty

Linux系统安全及应用

  6.2禁止普通用户登录

     ●建立/etc/nologin文件

     ●删除nologin文件或重启后即恢复正常

Linux系统安全及应用

七.系统弱口令检测

    John the Ripper,简称为JR:

          ●—款密码分析工具,支持字典式的暴力破解

          ●通过对shadow文件的口令分析,可以检测密码强度

          ●Linux系统安全及应用

破解密码流程:

Linux系统安全及应用
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 #使用指定的字典文件进行破解

八.网络端口扫描

    NMAP:

        ●—款强大的网络扫描、安全检测工具

        ●官方网站: http://nmap.orgl

        ●CentOS 7.7光盘中安装包nmap-6.40-7.el7.x86_64.rpm

Linux系统安全及应用

rpm -qa|grep nmap  查看nmap
yum install -y nmap
nmap命令常用的选项和描类型
-p:指定扫描的端口。
-n:禁用反向DNS解析(以加快扫描速度)
-sS: SYN数据包,如果收到SYN/TCP连接扫描,这是完整的TCP扫描方式(默认扫描类型),用来建立一个TCP连接,如果成功则认为目标端口正在监
听服务,否则认为目标端口并未开放。
-sF:TCP的FIN扫描,开放的端口会忽略这种数据包,关闭的端口会回应RST数据包。许多防火墙只对sYN数据包进行简单
过滤,而忽略了其他形式的TCP攻击包。这种类型的扫描可间接检测防火墙的健壮性。
-sU: UDP服务,UDP扫描的速度会比较慢。
-sP: ICMP 扫描,类似于ping检测,快速判断目标主机是否存活,不做其他扫描。
-P0:跳过ping检测, 这种方式认为所有的目标主机是存活的,当对方不响应ICMP请求时,使用这种方式可以避免因无法
ping通而放弃扫描。

注:控制位
       SYN  建立链接
       ACK  确认
       FIN  结束断开
       PSH  传送 0 数据缓存   上层应用协议
       RST  重置
       URG  紧急

#分别查看本机开放的TCP端口、UDP端口 nmap -sT 127.0.0.1 nmap -sU 127.0.0.1 #检测192.168.80.0/24网段有哪些主机提供HTTP服务 nmap -p 80 192.168.80.0/24 #检测192.168.80.0/24网段有哪些存活主机 nmap -n -sP 192.168.80.0/24 
通过pam 模块来防止暴力破解ssh [root@benet ~]# 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 

总结

本文讲诉的内容可以归纳为以下几点:

①:账号基本安全措施
        ●系统账号清理、密码安全控制、命令历史清理、自动注销

②:用户切换与提权
        ●su、sudo

③:开关机安全控制
        ●BIOS引导设置、禁止Ctrl + Alt + Del快捷键、GRUB菜单设置密码

④:终端控制

⑤:John the Ripper工具

⑥:namp命令

希望能够帮到有需要的朋友解决问题。

版权声明:玥玥 发表于 2021-08-21 16:27:11。
转载请注明:Linux系统安全及应用 | 女黑客导航