Linux系统安全及应用

Linux系统安全及应用

  • 前言
  • 一、账号安全控制
    • (1)基本安全措施
      • ①设置非登录用户
      • ②删除冗余账号
      • ③锁定账号
      • ④锁定账号文件
    • (2)密码安全控制
    • (3)命令历史限制
      • ①减少记录历史命令条数
      • ②只修改当前用户
      • ③注销时自动清空命令
    • (4)终端自动注销
  • 二、用户切换与提权
    • (1)su——切换用户
    • (2)sudo——权限提升
      • ①添加用户授权
      • ②添加别名授权
    • (3)PAM安全认证
      • ①PAM作用
      • ②PAM认证原理
      • ③PAM认证的构成
  • 三、系统引导和登录控制
    • (1)限制更改GRUB引导参数
    • (2)限制用户登录
      • ①限制root用户登录
      • ②限制普通用户登录
  • 三、弱口令检测、端口扫描
    • ①弱口令检测
    • ②网络扫描
  • 总结

前言

用户账号与网络端口与我们的系统安全是息息相关的,无论是用户的限制登录还是密码限制以及端口限制等都是我们常用的一些操作。

一、账号安全控制

(1)基本安全措施

①设置非登录用户

在 Linux 系统中,除了用户手动创建的各种账号之外,还包括随系统或程序安装过程而生成的其他大量账号除了超级用户 root 之外,其他大量账号只是用来维护系统运作、启动或保持服务器进程,一般是不允许登录的,因此也称为非登录用户为了确保系统安全,这些系统的登录 shell 通常是 /sbin/nologin,表示禁止终端登录,应确保不被人为改动
Linux系统安全及应用_第1张图片
Linux系统安全及应用_第2张图片

②删除冗余账号

各种非登录用户中,还有相当一部分是很少用到的,这些账号可以视为冗余账号,直接删除即可除此之外,还有一些随应用程序安装的用户账号,若程序卸载以后未能自动删除,则需要管理员手动进行清理

Linux系统安全及应用_第3张图片

③锁定账号

对于 Linux 服务器中长期不用的用户账号,若无法确认是否应该删除,可以暂时将其锁定

  • usermod -L 用户名 #锁定用户账号
  • passwd -l 用户名 #锁定用户密码,锁定的用户将无法再登录系统
  • passwd -u 用户名 #解锁用户账号
  • usermod -U 用户名 #解锁用户账号
    usermod和passwd可以互相解锁

Linux系统安全及应用_第4张图片

④锁定账号文件

如果服务器中的用户账号已经固定,不再更改,还可以采取锁定账号配置文件的方法
chattr +i /etc/passwd /etcadow #锁定文件
lsattr /etc/passwd /etcadow #查看为锁定的状态
lsattr /etc/passwd /etcadow #查看为解锁的状态
Linux系统安全及应用_第5张图片

(2)密码安全控制

在生产环境中我们的密码往往会设置固定更改时间,30、90天多为常见,60天相对较少。

  • chage -M 60 test3 #这种方法适合修改已经存在的用户
    chage -M 0 用户名 # 强制用户下次登录时更换密码
  • ​vim /etc/login.defs #这种适合以后添加新用户
    PASS_MAX_DAYS 30

Linux系统安全及应用_第6张图片
Linux系统安全及应用_第7张图片

(3)命令历史限制

Shell 环境的命令历史机制为用户提供了极大的便利,但另一方面也给用户带来了潜在的风险 只要获得用户的命令历史文件,该用户的命令操作过程将会一览无余,如果层间在命令行输入铭文的密码,则无意之中服务器的安全壁垒又多了一个缺口 在 Bash 终端环境中,历史命令的记录条数由变量 HISTSIZE 控制,默认为 1000 条

  • 通过修改 /etc/profile 文件中的 HISTSIZR 变量值,可以影响系统中的所有用户
  • 限制命令历史意义1、减少记录命令的条数 2、注销时自动情况命令历史

①减少记录历史命令条数

  • vim /etc/profile #进入配置文件
  • HISTSIZE=200 #修改命令记录条数,默认是1000条
  • source /etc/peofile #刷新配置文件

Linux系统安全及应用_第8张图片
在这里插入图片描述

②只修改当前用户

  • export HISTSIZE=200 #修改当前用户历史命令条数

在这里插入图片描述

③注销时自动清空命令

  • vim ~/.bashrc #编辑变量配置文件
  • echo “” >~/.bashrc_history #输入空字符到
    Linux系统安全及应用_第9张图片

(4)终端自动注销

在生产中,我们可以设置一个闲置超时自动注销账号时间。当用户无操作超过指定时间后,会自动注销终端,这样就可以避免用户不在时,其他人对服务器的操作风险。

  • 闲置超时由变量 TMOUT 来控制,默认单位为秒
    • vim /etc/profile #编辑全局变量配置文件
    • vim .bash_profile #编辑配置文件(只对当前用户)
    • export TMOUT=60 #设置闲置注销时间
    • echo $TMOUT #查看注销时间

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • export TMOUT=600 #不在配置文件中输入,则只对当前用户生效

在这里插入图片描述

二、用户切换与提权

在生产环境中,往往会限制用户以root身份登录,以防止误操导致的破坏和密码泄露导致的网络风险。

(1)su——切换用户

Linux系统在默认情况下,会允许所有用户使用su命令,这样就会导致有人可以反复尝试其他用户包括root的登录密码,而导致的密码泄露。

  • su - 用户名 #切换用户
    在这里插入图片描述

我们可以使用pam_wheel认证模块,设置只允许个别用户使用su。方法如下:将用户添加到wheel组中,修改/etc/pam.d/su配置文件启用认证。

  • gpasswd -a wangwu wheel #将用户添加到组
  • vim /etc/pam.d/su #进入pam认证配置文件
  • auth required pam_wheel.so use_uid #取消注释

在这里插入图片描述

Linux系统安全及应用_第10张图片

  • 其中这里的第二行开启表示允许所有用户使用su命令,#注释则所有用户都不允许;
  • 第六行开启表示只允许whee组用户使用su命令。#注释则表示wheel组以外的也可以使用;
  • 我们常常将两行组合使用:
    • ①开启第二行、注释第六行表示所有用户都可使用su
    • ②开启第六行、注释第二行表示只允许wheel组使用su,root用户也不能使用
    • ③都开启的时候表示只允许wheel组和root用户可以使用
    • ④都注释也是只允许wheel和root用户使用但root用户需要输入密码

(2)sudo——权限提升

①添加用户授权

  • visudo 或者 vim /etc/sudoers #配置sudo授权
  • sudo 机制的配置文件为 /etc/sudoers,文件的默认权限为 440
  • 语法格式:用户 主机名=命令程序列表

在这里插入图片描述
在这里插入图片描述

②添加别名授权

当使用相同授权的用户较多,或者授权的命令较多时,可以采用集中定义的别名
用户、主机、命令部分都可以定义为别名(必须为大写),分别通过 User_Alias(用户别名)、Host_Alias(主机别名)、Cmnd_Alias(命令别名) 来进行设置

  • 配置/etc/sudoers文件,授权用户多时使用
  • 格式:
    • Host_Alias MYHOST= localhost 主机名
    • User_Alias MYUSER = yxp,zhangsan,lisi 需要授权的用户
    • Cmnd_Alias MYCMD = /sbin/*,/usr/bin/passwd 授权
    • MYUSER MYHOST = NOPASSWD : MYCMD 授权格式

案例:
在这里插入图片描述
Linux系统安全及应用_第11张图片

(3)PAM安全认证

  • PAM(Pluggable Authenticcation Modules),是 Linux 系统可插拔认证模块
  • 是一套可定制、 可动态加载的共享库,使本地系统管理员可以随意选择程序的认证方式
  • 是一种高效而且灵活便利的用户级别的认证方式
  • 也是当前Linux服务器普遍使用的认证方式

①PAM作用

  • PAM提供了对所有服务进行认证的中央机制,适用于login,远程登陆,su等应用
  • 系统管理员通过PAM配置文件来制定不同的应用程序的不同认证策略

②PAM认证原理

  • PAM认证一般遵循的顺序: Service (服务) --> PAM (配置文件) --> pam_ *.so
  • PAM认证首先要确定哪一项应用 服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证模块(位于/lib64/security/下)进行安全认证。
  • 用户访问服务器的时候,服务器的某一个服务程序把用户的请求发送到PAM模块进行认证。不同的应用程序所对应的PAM模块也是不同的。
  • 如果想查看某个程序是否支持PAM 认证,可以用ls命令进行查看/etc/pam.d/
  • PAM的配置文件中的每一行都是一个独立的认证过程,它们按从上往下的顺序依次由PAM模块调用

认证过程:用户去访问服务——》访问su——》PAM认证下面的su的配置文件(/etc/pam.d/)——》去调用wheel.so模块

Linux系统安全及应用_第12张图片
控制类型也可以称作 Control Flags,用于 PAM 验证类型的返回加过程

  • required 验证失败时仍然继续,但返回 Fail
  • requisite 验证失败则立即结束整个验证过程,返回 Fail
  • sufficient 验证成功则立即返回,不再继续,否则忽略结果并继续
  • optional 不用于验证,只是显示信息(通常用于 session 类型)

查看命令是否支持PAM认证

Linux系统安全及应用_第13张图片

③PAM认证的构成

每一行都是一个独立的认证过程,从上到下,依次有PAM模块调用
Linux系统安全及应用_第14张图片

  • 第一列代表PAM认证模块类型
认证模块类型 作用
auth 对用户身份进行识别,如提示输入密码,判断是否为 root
account 对账号各项属性进行检查,如是否允许登录系统,帐号是否已经过期,是否达到最大用户数等
password 使用用户信息来更新数据,如修改用户密码
session 定义登录前以及退出后所要进行的会话操作管理,如登录连接信息,用户数据的打开和关闭,挂载文件系统
  • 第二列PAM根据控制类型来处理判断各个模块的返回值
控制类型 作用
required 需要返回一个成功值,如果返回失败,不会立刻将失败结果返回,而是继续进行同类型的下一验证,所有此类型的模块都执行完成后,再返回失败。该行以及所涉及模块的成功是用户通过鉴别的必要条件
requisite 与 required 类似,但如果此模块返回失败,则立刻返回失败并表示此类型失败
sufficient 如果此模块返回成功,则不管后面的验证,直接向程序返回成功,表示验证通过,如果返回失败,则可以看成 optional(慎用)
optional 不进行成功与否的返回,一般不用于验证,只是显示信息(通常用于 session 类型);不管成功、失败,继续下一模块的验证,且此模块的服务也能享用
include 表示在验证过程中调用其他的 PAM 配置文件;比如很多应用通过完整调用 /etc/pam.d/system-auth(主要负责用户登录系统的认证工作)来实现认证而不需要重新逐一去写配置项
  • 第三列—代表PAM模块,默认是在/lib64/security/目录下,如不在此默认路径下,要填写绝对路径
    同一个模块,可以出现在不同的模块类型中,它在不同的类型中所执行的操作都不相同,这是由于每个模块针对不同的模块类型编写了不同的执行函数
  • 第四列—代表PAM模块的参数,这个需要根据所使用的模块来添加

三、系统引导和登录控制

(1)限制更改GRUB引导参数

通常情况下在系统开机进入GRUB菜单时,按e键可以查看并修改GRUB引导参数,这对服务器是一个极大的威胁。为了加强对引导过程的安全控制,可以为GRUB菜单设置一个密码,只有提供正确的密码才被允许修改引导参数。

  • 使用grub2-mkpasswd-pbkdf2获得加密字符串
  • 修改/etc/grub.d/00_ header文件中, 添加密码记录
  • 生成新的grub.cfg配置文件
    方法一:
    生成密钥,复制选中部分Linux系统安全及应用_第15张图片
    备份文件
    Linux系统安全及应用_第16张图片
    在/etc/grub.d/00_header下添加密钥保存退出
    在这里插入图片描述
    方法二:一个命令直接修改
    Linux系统安全及应用_第17张图片

(2)限制用户登录

①限制root用户登录

在 Linux 系统中,login 程序会读取 /etc/securetty 文件,以决定允许 root 用户从哪些终端(安全终端)登录系统若要限制 root 用户从指定终端登录,可以修改 /etc/securetty 文件
注释指定终端:
Linux系统安全及应用_第18张图片

②限制普通用户登录

建立 /etc/nologin 文件即可,login 程序会检查 /etc/nologin 文件是否存在,如果存在则拒绝普通用户登录系统root 用户不受此限制
限制普通文件登录
在这里插入图片描述
运允许普通用户登录
在这里插入图片描述

三、弱口令检测、端口扫描

①弱口令检测

  • John the Ripper 是一款开源的密码破解工具,能够在已知密文的情况下快速分析 出明文的密码字串
  • 支持 DES,MD5 等多种加密算法,允许使用密码字典(包含各种密码组合的列表文件)来进行暴力破解
  • 通过使用 John the Ripper,可以检测 Linux/UNIX 系统用户的密码强度
    1、将文件拖到/opt下
    Linux系统安全及应用_第19张图片
    2、解压工具包
    Linux系统安全及应用_第20张图片
    3、安装编译工具
    Linux系统安全及应用_第21张图片
    4、切换至src目录下编译安装

Linux系统安全及应用_第22张图片
5、准备密码文件
Linux系统安全及应用_第23张图片
6、执行破解密码操作

Linux系统安全及应用_第24张图片

②网络扫描

  • NMAP 是一个强大端口扫描类安全评测工具,NAMP 被设计为检测主机数量众多的巨大网络,支持 ping 扫描、多端口检测、OS 识别等多种技术
  • 使用 NAMP 定期扫描内部网络,可以找出网络中不可控的应用服务,及时关闭不安全的服务,减小安全风险~
    控制位
SYN 建立链接
ACK 确认
FIN 结束断开
PSH 传送0数据缓存上层应用协议
RST 重置
URG 紧急

常用格式:
nmap [扫描类型] [选项] <扫描目标>
metstat natp #查看正在允许使用的TCP协议的网络状态信息
netstat -natp | grep httpd #实际操作
netstat -naup #查看正在运行的使用UDP协议网络状态

常用选项 对应扫描类型
-p 指定扫描的端口
-n 禁用反向DNS解析(以加快扫描速度)
-sS TCP的SYN扫描(半开扫描),只向目标发出SYN数据包,如果收到SYNACK响应包就认为目标端口正在监听,并立即断开连接; 否则认为目标端口并未开放
-sT TCP连接扫描,这是完整的TCP扫描方式(默认扫描类型),用来建立一个TCP连接,如果成功则认为目标端口正在监听服务,否 则认为目标端口并未开放~
-sF TCP的FIN扫描,开放的端口会忽略这种数据包,关闭的端口会回应RST数据包。许多防火墙只对SYN数据包进行简单过滤,而 忽略了其他形式的TCP攻击包。这种类型的扫描可间接检测防火墙的健壮性
-sU UDP扫描,探测目标主机提供哪些UDP服务,UDP扫描的速度会比较慢
-sP ICMP扫描,类似于ping检测,快速判断目标主机是否存活,不做其他扫描
-P0 跳过ping检测,这种方式认为所有的目标主机是存活的,当对方不响应ICMP请求时,使用这种方式可以避免因无法ping通而放 弃扫描
natstat常用选项 作用
-a 显示主机中所有活动的网络连接信息(包括监听、非监听状态的服务端口)
-t 查看TCP相关的信息
-u 显示UDP协议相关的信息
-p 显示与网络连接相关联的进程号、进程名称信息(该选项需要root权限)
-n 以数字的形式显示相关的主机地址、端1等信息
-r 显示路由表信息
-l 显示处于监听状态的网络连接及端口信息

1、检查是否安装nmap软件
Linux系统安全及应用_第25张图片
2、查看本机开放的TCP、UDP端口
Linux系统安全及应用_第26张图片
3、检测网段存活主机

Linux系统安全及应用_第27张图片

总结

在本篇的内容里,有很多命令是我们常用的,包括限制用户登录,su、sudo等命令以及pam认证怎么使用,在日常生产中root用户往往是不允许登录的,我们往往会使用sudo命令来提示我们的权限,用pam认证来限制一些用户的权限。

你可能感兴趣的:(linux,网络,云计算,运维)