0


Linux系统安全及应用


文章目录


1账号安全基本措施

系统账号清理

  • 将非登录用户的Shell设为/sbin/nologin禁止非登录用户通过Shell访问系统usermod-s /sbin/nologin 用户名
  • 锁定长期不使用的账号对长期不活跃的账号进行锁定,避免潜在的安全风险。usermod-L 用户名 # 锁定用户passwd-l 用户名 # 锁定密码passwd-S 用户名 # 查看账号状态
  • 删除无用的账号清理无用的账号,保持系统用户列表的简洁和安全。userdel[-r] 用户名 # 使用-r选项同时删除用户的主目录
  • 锁定账号文件passwd、 shadow锁定关键系统文件以防止未授权的更改。chattr +i /etc/passwd /etc/shadow # 锁定文件lsattr /etc/passwd /etc/shadow # 查看文件属性chattr -i /etc/passwd /etc/shadow # 解锁文件

密码安全控制

  • 设置密码有效期强制用户定期更新密码,提升密码的安全性。新建用户: 修改全局密码策略,适用于所有新建用户。[root@localhost ~]# vi /etc/login.defs # 修改配置文件PASS_MAX_DAYS 30# 密码有效期为30天已有用户: 针对特定用户设置密码有效期。[root@localhost ~]# chage -M 30 lisi # 设置用户lisi密码有效期为30天[root@localhost ~]# cat /etc/shadow | grep lisi # 查看用户lisi的密码信息
  • 要求用户下次登录时修改密码强制用户在下次登录时更新密码,提升安全性。[root@localhost ~]# chage -d 0 zhangsan # 将用户zhangsan的密码修改日期设置为0[root@localhost ~]# cat /etc/shadow | grep zhangsan # 验证更改

命令历史限制

  • 减少记录的命令条数限制历史命令记录数量,减少敏感信息的暴露。[root@localhost ~]# vi /etc/profileexportHISTSIZE=200# 设置历史记录条数为200[root@localhost ~]# source /etc/profile # 使更改生效
  • 登录时自动清空历史在每次登录时自动清空命令历史记录,防止命令泄露。[root@localhost ~]# vi ~/.bashrc##在文件中插入:输入空字符覆盖文件实现清空echo""> ~/.bash_history

终端自动注销

  • 闲置600秒后自动注销设置终端闲置600秒后自动注销,防止长时间未操作的会话被利用。
[root@localhost ~]# vi /etc/profileexportTMOUT=600# 设置超时时间为600秒[root@localhost ~]# source /etc/profile  # 使更改生效

拓展:两个profile文件的问题修复过程

  1. 注销时间设置太短导致无法输入命令****解决办法:在另一台机器上使用scp命令,将本机正常机器profile传输覆盖到故障机器的同名文件。scp /etc/progile [email protected]:/etc/profile
  2. 误删了profile文件,除最基础命令外其余命令都无法使用****解决办法:同样方式,复制使用另一台机器的文件,在本机操作,拷贝正常机器的profile文件到本机再source。scp /etc/progile [email protected]:/etc/profile

2使用su命令切换用户

用途

su是Substitute User的缩写,用于切换用户身份

格式

su - 目标用户  # 使用目标用户的登录shell环境

密码验证

  • root用户:任意用户切换到root时,不验证密码
  • 普通用户:切换到其普通用户时,需要验证目标用户的密码
##带-选项表示将使用目标用户的登录shell环境[test@localhost ~]# su - root  # 切换到root用户[root@localhost ~]# whoami
root  # 验证当前用户为root、

3限制使用su命令的用户

  • 将允许使用su命令的用户加入wheel组仅允许wheel组内的用户使用su命令切换到其他用户。
  • 启用pam_wheel认证模块(PAM系统相关的认证权限管理)通过PAM模块控制su命令的使用权限[root@localhost ~]# vi /etc/pam.d/su#%PAM-1.0auth sufficient pam_rootok.so # 如果是root用户,直接通过auth required pam_wheel.so use_uid # 仅允许wheel组成员使用su
  • 查看su操作记录su命令的操作记录保存在安全日志文件/var/log/secure中。

4Linux中的PAM安全认证

介绍

  • PAM(Pluggable Authentication Modules),可插拔式认证模块
  • 是一种高效而且灵活便利的用户级别的认证方式
  • 也是当前Linux服务器普遍使用的认证方式
  • 配置文件每一行配置定义了一个认证过程,这些认证过程按照从上往下的顺序依次执行
  • PAM 通过模块化的设计,使得系统管理员可以灵活地配置和定制认证过程,以满足不同的安全需求

su命令的安全隐患

安全隐患

默认情况下,任何用户都允许使用 su 命令

其他用户有机会反复尝试其他用户(如root) 的登录密码,带来安全风险

解决办法

使用 PAM 认证模块限制 su 命令的使用

为了加强 su 命令的使用控制,借助于PAM认证模块,只允许极个别用户使用 su 命令切换用户身份,减少安全风险

PAM认证原理和构成

  • 认证流程流程大致为:Service(服务)→PAM(配置文件)→pam_*.soPAM模块的认证流程一般遵循以下步骤顺序:1. 确定服务程序2. 加载相应的PAM配置文件PAM(位于/etc/pam.d下)3. 调用认证模块(位于/lib64/security下)进行安全认证

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

  • 查看某个程序是否支持PAM认证,可以用ls命令ls /etc/pam.d |grepsu# 检查 su 是否支持 PAM 认证
  • 查看su的PAM配置文件可以通过查看 /etc/pam.d/su 文件了解具体的 PAM 认证过程。文件中的每一行代表一个独立的认证过程,通常分为以下三个字段:- 认证类型(auth, account, password, session)- 控制类型(required, requisite, sufficient, optional)- PAM 模块及其参数(如 pam_wheel.so)

PAM安全认证流程

控制类型(Control Flags)

用于指定PAM验证模块的返回结果出来方式:

  1. required:验证失败时仍然继续,但返回 Fail 。
  2. requisite:验证失败则立即结束整个验证过程,返回 Fail 。
  3. sufficient:验证成功则立即返回,不再继续,否则继续执行其他认证。
  4. optional:用于会话控制(session),不直接用于验证,只显示信息。

在这里插入图片描述

PAM 配置文件结构说明

  1. 第一列:PAM 模块类型- auth:用于用户身份验证,比如输入密码并验证是否是 root 用户。- account:检查用户账号的属性,例如是否允许登录、账号是否过期、用户数量是否达到上限等。- password:处理用户密码的更新,例如修改密码。- session:管理用户会话,例如记录登录信息、挂载文件系统等。
  2. 第二列:PAM 控制标记- required:该标记的模块必须成功才能继续认证。如果失败,认证过程不会立刻停止,而是执行该类型的所有模块后返回失败信息。这种方式隐藏了哪个模块失败,以增强安全性。- requisite:类似 required,但如果此模块失败,认证过程立即停止并返回失败信息。- sufficient:如果此模块成功,立即返回成功,不再执行后续的相同类型的模块。如果失败,不影响最终结果。- optional:无论此模块成功与否,认证过程都将继续。通常用于非关键的认证操作。- include:在当前配置文件中包含其他 PAM 配置文件的内容。例如,可以调用 /etc/pam.d/system-auth 来处理系统认证。
  3. 第三列:PAM 模块- 指定使用的 PAM 模块。通常位于 /lib64/security/ 目录下,如果在其他路径,需要提供绝对路径。- 同一个模块可以出现在不同类型中,每个类型调用该模块时的行为可能不同。
  4. 第四列:PAM 模块的参数- 传递给模块的参数,可以根据所使用的模块配置多个参数,参数之间用空格分隔。

PAM 控制标记的补充说明

  • required:该标记的模块必须成功才能通过认证,即所有带 required 标记的模块都必须成功,否则认证失败。但错误信息会在所有此类型模块执行完成后返回。
  • requisite:如果此模块失败,认证过程立即停止并返回错误信息,不再执行后续模块。
  • sufficient:只要此模块成功,认证立即返回成功结果,并跳过后续模块。如果失败,认证过程继续但不影响最终结果。
  • optional:无论此模块成功与否,认证过程都将继续,因此不影响最终认证结果。

PAM 实例

以下是 PAM 认证过程中,使用不同控制标记对用户进行身份验证的示例:
模块类型控制标记模块用户1用户2用户3用户4authrequired模块1passfailpasspassauthsubstack模块2passpassfailpassauthrequired模块3passpasspassfail结果passfailpasspass
在上表中,不同用户经过不同模块的认证后,最终结果为

pass

fail

,这取决于每个模块的认证结果和控制标记的作用。

5使用sudo机制提升权限

su命令的缺点

  • 使用 su 命令切换用户时,可能暴露用户密码,且没有详细的操作记录。

sudo命令的用途及用法

  • 用途通过 sudo 以其他用户身份(如 root )执行授权的命令。
  • 用法sudo 授权命令 # 以指定身份执行命令

配置sudo授权

  • 编辑 sudoers 文件使用 visudo 命令或者 vi /etc/sudoers 修改 /etc/sudoers 文件。修改后保存时,如果使用 vi,需要强制保存(:wq!)以避免权限问题。
  • 语法格式用户 主机名=命令程序列表用户 主机名=(用户) 命令程序列表字段解释- 用户:直接授权指定的用户名,或采用“%组名”的形式(授权一个组的所有用户)。- 主机名:使用此规则的主机名。没配置过主机名时可用localhost,有配过主机名则用实际的主机名,ALL则代表所有主机- (用户):用户能够以何种身份来执行命令。此项可省略,缺省时以root用户的身份来运行命令- 命令程序列表:允许授权的用户通过sudo方式执行的特权命令,需填写命令程序的完整路径,多个命令之间以逗号“,”进行分隔。ALL则代表系统中的所有命令
  • 示例1[root@localhost ~]# visudo## 为wheel组成员设置权限,允许组内成员无需密码即可执行任何命令%wheel ALL=NOPASSWD:ALL## 为用户jerry授权,只允许在本地主机上使用ifconfig命令jerry localhost=/sbin/ifconfig## 为用户syrianer授权,允许其使用/sbin目录下的所有命令,## 除了reboot和poweroff命令syrianer localhost=/sbin/*,!/sbin/reboot,!/sbin/poweroff## 定义命令别名Cmnd_Alias PKGTOOLS=/bin/rpm,/usr/bin/yum## 为用户mike授权,只允许使用定义的PKGTOOLS命令别名中的命令mike localhost=PKGTOOLS
  • 示例2****为特定用户设置 sudo 权限## 允许用户 Tom 在所有主机上执行 ifconfig 命令Tom ALL=/sbin/ifconfig## 允许用户 Jerry 在 localhost 主机上执行 /sbin 目录下的所有命令,## 但排除 reboot 和 poweroff 命令Jerry localhost=/sbin/*,!/sbin/reboot,!/sbin/poweroff为组设置 sudo 权限## 允许 wheel 组的所有成员无需密码验证即可使用 sudo 执行任何命令%wheel ALL=NOPASSWD: ALL为特定用户设置 root 权限的命令## 允许用户 Mike 以 root 身份执行 kill 和 killall 命令,且无需密码Mike ALL=(root) NOPASSWD: /bin/kill, /usr/bin/killall使用别名配置为了简化管理,可以使用别名来定义用户、主机和命令,必须使用大写字母。## 定义用户别名User_Alias USERS=Tom,Jerry,Mike## 定义主机别名Host_Alias HOSTS=localhost,bogon## 定义命令别名Cmnd_Alias CMNDS=/sbin/ifconfig,/usr/sbin/useradd,/usr/sbin/userdel## 为定义的用户组在指定主机上授权指定命令USERS HOSTS=CMNDS
  • 使用 sudo 执行命令在配置完 sudo 权限后,用户可以使用 sudo 命令执行特权操作。例如:## 使用 Tom 用户登录并配置网络接口su - Tom/sbin/ifconfig ens33:0 192.168.1.11/24## 使用 sudo 执行 ifconfig 命令(需验证用户密码)sudo /sbin/ifconfig ens33:0 192.168.1.11/24## 查看当前用户的 sudo 权限sudo-l注意:初次使用 sudo 时,系统会提示用户输入密码。默认情况下,密码的验证结果会在 5 分钟内保持有效,期间执行的后续 sudo 命令无需再次输入密码。

查看sudo操作记录

  • 启用 Defaults logfile 配置(启用 sudo 操作日志)需要在 /etc/sudoers 文件中启用日志记录功能。使用 visudo 命令来编辑 sudoers 文件,以避免语法错误。[root@localhost ~]# visudo## 配置日志文件路径(默认)Defaults logfile ="/var/log/sudo"启用日志配置后,所有使用 sudo 执行的命令都会被记录在指定的日志文件中。[root@localhost ~]# tail /var/log/sudo## 查看最近的sudo操作记录## 2023年8月24日23:59:44,用户jerry以root身份执行了ifconfig命令Aug 2423:59:44 : jerry :TTY=pts/0;PWD=/home/jerry :USER=root;COMMAND=/sbin/ifconfig ens33:0 192.168.1.11/24## 2023年8月25日00:00:46,用户syrianer以root身份执行了自定义命令listAug 25 00:00:46 syrianer :TTY=pts/1;PWD=/home/syriader;USER=root;COMMAND=list
  • 查询授权的sudo操作使用 sudo -l 命令来查看当前用户被授权执行的命令列表,以及在什么情况下可以使用这些命令。示例:显示当前用户的所有 sudo 权限,包括可以执行的命令和是否需要密码等信息。## 查询当前用户的sudo权限[user@localhost ~]$ sudo-l

6终端登录安全控制

限制root只在安全终端登录

  • 安全终端配置:/etc/securetty 文件通过编辑 /etc/securetty 文件,可以指定允许 root 用户登录的终端设备。有助于增强系统安全性,防止未经授权的设备获取 root 权限。[root@localhost ~]# vi /etc/securetty## 允许 root 用户通过 tty1 和 tty2 终端登录tty1 tty2 ## 禁止通过 tty5 和 tty6 登录#tty5#tty6

禁止普通用户登录

  • 建立/etc/nologin文件
  • 删除nologin文件或重启后即恢复正常(限制解除)## 创建 /etc/nologin 文件以禁止普通用户登录[root@localhost ~]# touch /etc/nologin## 删除 /etc/nologin 文件以取消登录限制[root@localhost ~]# rm -rf /etc/nologin

7限制更改 GRUB 引导参数

在系统开机进入 GRUB 菜单时,按

e

键可以查看并修改 GRUB 引导参数。这对于服务器安全构成了一定的威胁。为了防止未经授权的修改,可以为 GRUB 菜单设置密码,只有提供正确的密码才允许更改引导参数。

1. 生成 GRUB 密码

首先,使用

grub2-mkpasswd-pbkdf2

命令生成加密密码:

grub2-mkpasswd-pbkdf2

根据提示设置密码,系统会生成一段类似如下的加密字符串:

PBKDF2 hash of your password is grub.pbkdf2.sha512.10000.……

2. 备份重要配置文件

在继续之前,建议备份 GRUB 配置文件和相关文件,以防出现问题:

cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bak
cp /etc/grub.d/00_header /etc/grub.d/00_header.bak

3. 编辑 GRUB 配置文件

编辑

/etc/grub.d/00_header

文件,添加用户和密码配置:

vim /etc/grub.d/00_header

## 在文件中添加以下内容cat<<EOF
set superusers="root"                 # 设置 GRUB 的超级用户,用户名为 root
password_pbkdf2 root grub.pbkdf2……    # 设置超级用户的密码(此处为加密后的密码字符串)
EOF

将上述代码中的

grub.pbkdf2……

替换为实际生成的加密字符串。

4. 生成新的 GRUB 配置文件

完成编辑后,生成新的 GRUB 配置文件以应用更改:

grub2-mkconfig -o /boot/grub2/grub.cfg

5. 验证设置

重新启动系统,进入 GRUB 菜单时,按

e

键尝试修改引导参数。此时,系统会要求输入配置的用户名和密码,才能进行进一步操作。

8系统弱口令检测-Joth the Ripper工具

介绍

  • (国内不太用)
  • John the Ripper (简称JR)是一款强大的密码分析工具,广泛用于检测系统中的弱口令。它通过分析 /etc/shadow 文件中的密码哈希值,尝试使用字典或暴力破解方法来检测密码强度。
  • 使用时可以对目标文件进行不同类型的攻击,包括字典攻击、混合攻击和暴力攻击等。
  • 官网:http://www.openwall.com/john/

流程步骤

#解压工具包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.lst /opt/shadow.txt        #使用指定的字典文件进行破解

9网络端口扫描-NMAP工具

介绍

  • 一款用于网络发现和安全审计的工具。支持多种扫描技术,能够快速探测网络中的主机和服务(检测暴露的端口)。
  • 官网:http://nmap.org/
  • CentOS 7.3光盘中安装包为:nmap-6.40-7.el7.x86_64.rpm
  • 也可使用 YUM 直接安装

格式

nmap [扫描类型][选项]<扫描目标...>

常用的扫描类型

  • 如:-sS、-sT、-sF、-sU、-sP、-P0

示例

  • 分别查看本机开放的TCP端口、UDP端口nmap -sT127.0.0.1 ## TCP连接扫描nmap -sU127.0.0.1 ## UDP扫描
  • 检测192.168.4.0/24网段有哪些主机提供FTP服务nmap -p21192.168.4.0/24
  • 检测192.168.4.0/24网段有哪些存活主机nmap -n-sP192.168.4.0/24

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

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


本文转载自: https://blog.csdn.net/qq_44421043/article/details/141141033
版权归原作者 shyuu_ 所有, 如有侵权,请联系我们删除。

“Linux系统安全及应用”的评论:

还没有评论