系统安全及应用

发布时间:2024年01月05日

系统安全及应用

一、账号安全基本措施

1、系统账号清理

1.1 将用户设置为无法登录
usermod -s /sbin/nologin    #将非登录用户的Shell设为/sbin/nologin

image-20240105150902603

1.2 锁定长期不使用的账号
usermod -L 用户名    #锁定用户账户

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

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

image-20240105151710507

1.3 删除无用的账户
userdel -r 用户名    #删除用户及其宿主目录

image-20240105152637109

1.4 清空一个账号密码
passwd -d 用户名    #清空账户密码

image-20240105152843353

1.5 锁定账户文件passwd、shadow
chattr +i /etc/passwd  /etc/shadow    #锁定文件

lsattr /etc/passwd   /etc/shadow    #查看文件状态

chattr -i /etc/passwd /etc/shadow    #解锁文件

image-20240105155551623

2、密码安全控制

设置密码有效期
  • 对于新建用户,可以修改 /etc/login.defs 文件里的内容来设置密码规则

    vim /etc/login.defs

image-20240105154945458

  • 对于已有用户可以使用chage命令
chage [选项] 用户名
-m:密码可更改的最小天数。为零时代表任何时候都可以更改密码
-M:密码保持有效的最大天数
-w:用户密码到期前,提前收到警告信息的天数
-E:帐号到期的日期。过了这天,此帐号将不可用
-d:上一次更改的日期
-i:停滞时期。如果一个密码已过期这些天,那么此帐号将不可用
-l:例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期

image-20240105160615659

3、命令历史限制

3.1 减少命令记录条数
  • 概述: /etc/profile 是系统全局变量配置文件,可以通过系统或者执行 source /etc/profile命令使文件被刷新重载
vim /etc/profile       #编剧全局变量配置文件

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

source /etc/profile     #刷新重载
3.2 登录时自动清空历史命令
  • 概述:~/.bashrc文件中的命令会在每次打开新的bash shell时(也包括登录系统)被执行

  • vim .bash_logout      #退出后清除
    echo " " >~/.bash_history   #(一定要加空格)
    
    vim ~/.bashrc   #开机后清除(自己对自己生效)
    echo " " > ~/.bashrc_history
    

4、终端自动注销

  • 限制600秒后自动注销
vi /etc/profile    #(对所有用户生效)

export TMOUT=600    #设置超过600秒后自动退出登录

source /etc/profile    #刷新重载

二、使用su命令切换用户

1、切换用户

su命令即 switch user,命令可以切换用户身份,并且以指定用户的身份执行命令

  • su 目标用户:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录,即不完全切换
  • su - 目标用户:登录式切换,会读取目标用户的配置文件,切换至自已的家目录,即完全切换

2、密码验证

  • root ->任意用户,不验证密码
  • 普通用户->其他用户,验证目标用户密码

su 切换新用户后,使用 exit 退回至旧的用户身份,而不要再用 su 切换至旧用户,否则会生成很多的bash子进程,环境可能会混乱。

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

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

image-20240105163711241

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

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

image-20240105164035674

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

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

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

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

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

三、Linux中的PAM安全认证

1、su命令的安全隐患

  • 默认情况下,任何用户都允许使用 su命令,有机会反复尝试其他用户(如root)的登录密码,带来安全风险
  • 为了加强su 命令的使用控制,可借助于PAM认证模块,只允许极个别用户使用su命令进行切换

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

  • 是一种高效而且灵活的用户级别的认证方式
  • 也是当前Linux服务器普遍使用的认证方式

3、PAM相关文件夹

  • /usr/lib64/security :存放功能模块
  • /etc/pam.d/ :配置文件
  • /etc/security :复杂的配置文件

3、PAM认证原理

当用户来访问某一程序的时候,如果这个程序启用了pam模块,会先去读取配置文件,然后按照配置文件调用模块,进行操作。

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

4、PAM认证的构成

  • 查看某个程序是否支持PAM认证,可以用ls命令
  • 格式:ls /etc/pam.d | grep su
  • 查看su的PAM配置文件:cat /etc/pam.d/su

5、PAM安全认证流程

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

  • required:一票否决,如果失败,最后一定会失败,但是会继续验证
  • requisite:一票否决,如果失败,会立即结束验证,反馈失败
  • sufficient:验证成功则立即返回,不再继续,否则忽略结果并继续
  • optional:不用于验证,只显示信息(通常用于session类型)

image-20240105142829009

6、limit

功能:在用户级别实现对其可使用的资源的限制,例如:可打开的文件数量,可运行的进程数量,可用内存空间

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 -c1025 -n 2000 http://192.168.10.11/    #使用压力测试工具进行测试  打开的文件数

vim /etc/security/limits.conf   #永久修改不用重启(软硬一起设置可以直接使用-)

image-20240105165807768

image-20240105170641417

四、使用sudo机制提升权限

1、sudo命令的特性

  • sudo能够授权指定用户在指定主机上运行某些命令。如果未授权用户尝试使用 sudo,会提示联系管理员
  • sudo提供了丰富的日志,详细地记录了每个用户干了什么。它能够将日志传到中心主机或者日志服务器
  • sudo使用时间戳文件来执行类似的“检票”系统。当用户调用sudo并且输入它的密码时,用户获得了一张存活期为5分钟的票
  • sudo的配置文件是sudoers文件,它允许系统管理员集中的管理用户的使用权限和使用的主机。它所存放的位置默认是在/etc/sudoers,属性必须为0440

2、配置sudo授权

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

3、语法格式

  • 用户 主机名=命令程序列表
  • 用户 主机名=(用户) 命令程序列表
  1. 用户:直接授权指定的用户名,或采用“%组名”的形式(授权一个组的所有用户)。

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

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

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

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

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

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

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

4、设置别名

别名格式:必须大写字母,数字可以使用但是不能放在开头

使用关键字User_Alias(用户)、Runas_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

root  ALL=(ALL)  ALL
用户   主机名ip=    命令

5、密码验证

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

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

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

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

    %wheel ALL=NOPASSWD:ALL

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

    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操作

  • 格式:sudo -l

五、系统引导和登录控制

1、开关机安全控制

1.1 调整BIOS引导设置
  • 将第一引导设备设为当前系统所在硬盘
  • 禁止从其他设备(光盘、U盘、网络)引导系统
  • 将安全级别设为setup,并设置管理员密码
1.2 GRUB限制
  • 通常情况下,在系统开机进入GRUB菜单时,按e键可以查看并修改GRUB引导参数,也可进入急救模式修改用户密码,这对服务器是一个极大的安全威胁。为此,可以为GRUB菜单设置一个密码,只有提供正确的密码才被允许修改引导参数。

在/etc/grub.d/00_header文件中添加用户和PBKDF2加密口令的格式如下

  1. 使用grub2-mkpasswd-pbkdf2生成密钥

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

  3. 生成新的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键将需要输入账号密码才能修改引导参数。

grub2-setpassword    #直接设置密码

2、终端登录安全控制

2.1 限制root只在安全终端登录
  • 安全终端配置

    /etc/securetty

    vi /etc/securetty

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

2.2 禁止普通用户登录
  • 建立/etc/nologin

    touch /etc/nologin

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

    rm -rf /etc/nologin

六、弱口令检测

1、暴力破解工具-JR

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

2、安装JR工具

  • 安装方法:make clean 系统类型
  • 主程序文件为john

3、检测弱口令账号

  • 获得Linux/Unix服务器的shadow文件
  • 执行john程序,将shadow文件作为参数

4、密码文件的暴力破解

  • 准备好密码子弹文件,默认为password.lst
  • 执行john程序,结合–wordlist=字典文件

5、模拟暴破步骤

cd /opt
tar zxf john-1.8.0.tar.gz    #解压工具包

yum install -y gcc gcc-c++ make    #安装软件编译工具

cd /opt/john-1.8.0/src    #切换到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.list /opt/shadow.txt #使用指定的字典文件进行破解

添加字典内容

  • 若密码无法被暴力破解说明字典中没有该密码记录,可以进入字典文件(/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命令常用的选项和扫描类型

常用选项/扫描类型说明
-p指定扫描的端口
-n禁用反向DNS解析(以加快扫描速度) ip转换成 域名 12222 2www.baidu.com
-sSTCP的SYN扫描 (半开扫描),只向目标发出SYN数据包,如果收到SYN/ACK响应包就认为目标端口正在监听,并立即断开连接;否则认为目标端口并未开放
-sTTCP连接扫描,这是完整的TCP扫描方式(默认扫描类型),用来建立一个TCP连接,如果成功则认为目标端口正在监听服务,否则认为目标端口并未开放
-sFTCP的FIN扫描,开放的端口会忽略这种数据包,关闭的端口会回应RST数据包。许多防火墙只对sYN数据包进行简单过滤,而忽略了其他形式的TCP攻击包。这种类型的扫描可间接检测防火墙的健壮性
-sUUDP扫描,探测目标主机提供哪些UDP服务,UDP扫描的速度会比较慢
-sPICMP 扫描,类似于ping检测,快速判断目标主机是否存活,不做其他扫描
-PO跳过ping检测, 这种方式认为所有的目标主机是存活的,当对方不响应ICMP请求时,使用这种方式可以避免因无法ping通而放弃扫描

4、常规检测方式:netstat

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

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

nmap -sT 127.0.0.1    #查看本机开放的TCP端口

nmap -sU 127.0.0.1    #查看本机开放的UDP端口

nmap -p 80 192.168.80.0/24    #检测192.168.80.0/24网段有哪些主机提供HTTP服务

nmap -n -sP 192.168.80.0/24    #检测192.168.80.0/24网段有哪些存活主机

5、netstat命令常用选项

image-20240105143039073

服务端口号
HTTP80
HTTPS443
Telnet23
FTP21
SSH(安全登录)、SCP(文件传输)、端口重定向22
SMTP25
POP3110
WebLogic7001
TOMCAT8080
WIN2003远程登录3389
Oracle数据库1521
MS SQL* SEVER数据库sever1433
23
FTP21
SSH(安全登录)、SCP(文件传输)、端口重定向22
SMTP25
POP3110
WebLogic7001
TOMCAT8080
WIN2003远程登录3389
Oracle数据库1521
MS SQL* SEVER数据库sever1433
MySQL 数据库sever3306
文章来源:https://blog.csdn.net/2301_81272194/article/details/135417966
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。