系统安全及应用

系统安全及应用


 

一、账号安全基本措施

1、系统账号清理

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

    

2) 锁定长期不使用的账号

      usermod -L  用户名             锁定用户账户

      passwd  -l  用户名               锁定账户密码

      passwd -S  用户名               查看用户状态

 3)删除无用的账户

      userdel [-r]    用户名          删除用户及其宿主目录

4)清空一个账号密码

      passwd -d  用户名             清空账户密码

5)锁定账户文件passwd、shadow

     chatte +i /etc/passwd    /etc/shadow         锁定文件

     lsatter  /etc/passwd      /etc/shadow         查看文件状态

     chatter  -i /etc/passwd  /etc/shadow         解锁文件

 2、密码安全控制

1)设置密码有效期

      vi   /etc/login.defs

     PASS_MAX_DAYS N(天数)

    chage -M 30 用户

    cat /etc/shadow | grep 用户

 

2)要求用户下次登录修改密码

chage -d 0 用户

cat /etc/shadow | grep 用户

chage -M 日期 用户     设置用户密码和有效期

chage -E   xxxx-xx-xx   设置账号过期日期

 3、命令历史限制

1)减少命令记录条数

①、概述: /etc/profile 是系统全局变量配置文件,可以通过系统或者执行 source /etc/profile命令使文件被刷新重载

②、格式:vi  /etc/profile                 编剧全局变量配置文件

                  export HISTSIZE=x       输入需要的命令条数

                 source /etc/profile         刷新重载

 2)登录时自动清空历史命令

①、概述:~/.bashrc文件中的命令会在每次打开新的bash shell时(也包括登录系统)被执行

②、格式:vi ~/.bashrc

                  echo“ ” > ~/.bashrc_history

 4、终端自动注销

1)限制600秒后自动注销

格式:vi  /etc/profile

          export TMOUT=600

          source /etc/profile

 二、使用su命令切换用户

1、用途及用户

1)用途:Substitute User,切换用户

2)格式:su - 目标用户 

2、密码验证

1)root ->任意用户,不验证密码

2)普通用户->其他用户,验证目标用户密码

3)格式: su - 用户名         带-选项表示将使用目标用户的登录 shell环境

3、限制使用su命令的用户

1)将允许使用su命令的用户加入wheel组

2)在/etc/pam.d/su文件中设置禁止用户使用su命令

格式:vim /etc/pam.d/su

 注:①、以上两行是默认状态(即开启第一行,注释第二行),这种状态下是允许虽有用户使用su命令进行切换的

        ②、两行都注释也是允许所有用户都能使用su命令,但root下使用su切换到其他普通用户需要输入密码;如果第一行不注释,则root使用su切

换普通用户就不需要输入密码

(pam_rootok.so模块的主要作用是使uid为0的用户,即 root用户能够直接通过认证而不用输入密码)

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

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

实验验证:

步骤一,新建AYHT/BYHT普通用户,使用su命令实现root->普通用户的切换,且将普通用户AYHT加入wheel组中

 步骤二、进入/etc/pam.d/su文件中设置禁止用户使用su命令,选择文件第六行,将行前注释#删除,启用该字段

步骤三、重新进行用户切换,发现加入wheel组中用户AYHT正常切换,而未加入wheel组中的用户BYHT切换失败,显示su:拒绝权限

 注:启用 pam_wheel认证后,未加入到wheel组中的其他用户无法使用su命令

三、Linux中的PAM安全认证

1、su命令的安全隐患

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

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

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

1)、是一种高效而且灵活的用户级别的认证方式

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

3、PAM认证原理

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

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

3)用户访问服务器时,服务器的某一个服务程序把用户的请求发送到PAM模块进行认证,不同的应用程序所对应的PAM模块是不同的

4、PM认证的构成

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

2)格式:ls /etc/pam.d | grep su

3)查看su的PAM配置文件:cat /etc/pam.d/su

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

      每一行可以区分为三个字段:认证类型、控制类型、pam模块及其参数

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

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

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

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

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

②、第二列代表PAM控制标记

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

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

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

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

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

③、第三列代表PAM模块,默认实在/lib64/security/目录下,若不在此默认路径下,要填写绝对路径。

同一个模块,可以出现在不同的模块类型中,它在不同的类型中所执行的操作都不相同,这是由于每个模块针对不同的模块类型编制了不同的执行函数

④、第四列代表PAM模块的参数,这个需要根据所使用的模块来添加

传递给模块的参数,参数可以有多个,之间用空格分隔开

5、PAM安全认证流程

控制类型也称作Control Flags,用于PAM验证类型的返回结果

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

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

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

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

四、使用sudo机制提升权限

1、sudo命令的用途及用法

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

2、配置sudo授权

    visudo或vi /etc/sudoers #此文件的默认权限为440,保存退出时必须执行“wq!”,强制保存退出

3、语法格式:

      用户 主机名=命令程序列表

      用户 主机名=(用户) 命令程序列表

用户:直接授权指定的用户名,或采用“%组名”的形式(授权一个组的所有用户)。

主机名:使用此规则的主机名。没配置过主机名时可用localhost(默认主机名),有配过主机名则用实际的主机名,ALL则代表所有主机

(用户):用户能够以何种身份来执行命令。此项可省略,缺省时以root用户的身份来运行命令

命令程序列表:允许授权的用户通过sudo方式执行的特权命令,需填写命令程序的完整路径,多个命令之间以逗号“,”进行分割。ALL则代表系统中的所有命令

 

注:可使用通配符“ * ”表示所有,取反符号“!”表示排除

例如:Jerry localhost=/sbin/*,!/sbin/poweroff

表示jerry用户操作localhost主机可使用sbin目录下的除poweroff以外的所有命令

注:Jerry仍可使用init、shutdown等命令执行关机操作,因此限制命令需做到全面无漏,否则限制影响十分有限。

4、设置别名

    使用关键字User_Alias、Host_Alias、Cmds_Alias来进行设置别名(别名必须为大写)

     User_Alias USERS=Tom,Jerry,Mike

     Host_Alias HOSTS=localhost,bogon

     Cmnd_Alias CMDS=/sbin/ifconfig,/usr/sbin/useradd,/usr/sbin/userdel

     USERS HOST=CMDS

5、密码验证

1)正常情况下,第一次使用sudo命令需输入密码验证,有效期为五分钟,过期后使用sudo需再次输入密码验证。

2)可以设置特定用户无需密码验证

     Mike ALL=(ROOT)NOPASSWD:/bin/kill,/usr/bin/killall

3)也可设置组用户无需密码验证

      %wheel ALL=NOPASSWD:ALL

4)以及所有用户无需密码验证

      USERS HOSTS=NOPASSWD:CMDS

6、查看sudo操作记录

  • 需启用Defaults logfile配置
  • 默认日志文件:/var/log/sudo
  • visudo #进入sudo配置文件
  • Defaults logfile="/var/log/sudo" #启动Defaults logfile
  • tail /var/log/sudo #查看sudo末尾10行记录

7、查询授权的sudo操作

1)格式:sudo -l

2)例:

五、系统引导和登录控制

1、开关机安全控制

1)调整BIOS引导设置

  • 将第一引导设备设为当前系统所在硬盘
  • 禁止从其他设备(光盘、U盘、网络)引导系统
  • 将安全级别设为setup,并设置管理员密码

2)GRUB限制

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

    使用grub2-mkpasswd-pbkdf2生成密钥

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

    生成新的grub.cfg配置文件

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

    PBKDF2 hash of your password is grub.pbkdf2……               #  省略部分内容为加密生成的密码字符串

    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.pbkdf2……                                 #  设置密码,省略部分内容为经过加密生成的密码字符串

    EOF

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

   完成配置修改工作,重启后进入GRUB菜单时,按e键将需要输入账号密码才能修改引导参数。

2、终端登录安全控制

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

①、安全终端配置:/etc/securetty

                               vi /etc/securetty

②、将tty5,tty6前加“#”将其注释,表示禁止root用户从终端tty5、tty6登录

2)禁止普通用户登录

①、建立/etc/nologin

       touch /etc/nologin

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

        rm -rf /etc/nologin

六、弱口令检测

1、暴力破解工具-JR

John the Ripper是一款开源的密码破解工具,可使用密码字典(包含各种密码组合的列表文件)来进行暴力破解。通过对shadow文件的口令分析,可以检测密码强度。
官方网站:http://www.openwall.com/john/

2、安装JR工具

1)安装方法:make clean 系统类型

2)主程序文件为john

3、检测弱口令账号

1)获得Linux/Unix服务器的shadow文件

2)执行john程序,将shadow文件作为参数

4、密码文件的暴力破解

1) 准备好密码子弹文件,默认为password.lst

2) 执行john程序,结合--wordlist=字典文件

5、模拟暴破步骤

1)解压工具包

     cd /opt

     tar zxf john-1.8.0.tar.gz

2)安装软件编译工具

      yum install -y gcc gcc-c++ make

3)切换到src子目录

      cd /opt/john-1.8.0/src

4)进行编译安装

      make clean linux-x86-64

5)准备待暴破的密码文件

      cp /etc/shadow /opt/shadow.txt

6)执行暴力破解

      cd /opt/john-1.8.0/run

      ./john /opt/shadow.txt

7)查看已破解出的账户列表

     ./john --show /opt/shadow.txt

8)使用密码字典文件

     使用> john.pot #清空已破解出的账户列表以便重新分析

      ./john --wordlist=./password.list /opt/shadow.txt #使用指定的字典文件进行破解

9)添加字典内容

      若密码无法被暴力破解说明字典中没有该密码记录,可以进入字典文件(/opt/john-1.8.0/run/password.list)中手工输入添加,字典内容的丰富程度与破解能力成正比

七、端口扫描

1、网络扫描工具-NMAP

      NMAP是一个强大的端口扫描类安全评测工具,支持ping扫描、多端口检测等多种技术。

2、安装NMAP软件包

       rpm -qa | grep nmap #检查是否已安装

      yum install -y namp #若未安装,进行yum安装

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

4、常规检测方式:netstat

     netstat -natp                      #  查看正在运行的使用TCP协议的网络状态信息

     netstat -naup                     #  查看正在运行的使用UDP协议的网络状态信息

1) 分别查看本机/其他主机开放的TCP、UDP端口

    nmap -sT 127.0.0.1

    nmap -sU 127.0.0.1

2)检测192.168.80.0/24网段有哪些主机提供HTTP服务

      nmap -p 80 192.168.80.0/24

3)检测192.168.80.0/24网段有哪些存活主机

      nmap -n -sP 192.168.80.0/24

5、netstat命令常用选项

posted @ 2021-06-29 11:38  YhtWeirdo  阅读(320)  评论(0编辑  收藏  举报