59、本地安全管理与审计指南

本地安全管理与审计指南

在系统管理中,本地安全管理至关重要,它涉及用户访问审计、资源限制设置以及特殊权限文件的管理等多个方面。以下将详细介绍相关的管理和审计方法。

1. 用户访问审计

在很多情况下,我们需要查看系统用户的访问情况,比如排查潜在的安全漏洞、为公司人力资源部门进行调查或者在系统关机前确定是否还有用户登录等。下面介绍几种常用的命令行工具。

1.1 确定当前登录用户

可以使用 who w 这两个主要命令来确定当前登录到系统的用户。
- who 命令 :该命令简单地显示当前登录到系统的用户信息,包括用户名、当前终端和登录时间。示例如下:

$ who
Christine tty2         2015-11-10 11:53
Timothy   tty3         2015-11-10 12:33
Rich      tty4         2015-11-10 12:36
[...]
$

使用 -a 选项可以获取更多信息:

$ who -a
           system boot  2015-11-11 08:17
           run-level 5  2015-11-11 08:17
Christine + tty2         2015-11-11 11:53 00:38        1569
Timothy  +  tty3         2015-11-11 12:33 00:41        1571
Rich     +  tty4         2015-11-11 12:36 00:39        3086
LOGIN       tty5         2015-11-11 08:17              1576 id=5
LOGIN       tty6         2015-11-11 08:17              1578 id=6
[...]
$

第一行显示系统启动时间,第二行显示当前系统运行级别(这里是5)。接下来的几行显示当前登录的用户、登录时间和进程ID(PID)。可以使用 ps 命令结合列出的PID来了解特定程序或登录用户的更多信息,例如:

$ ps 1576
  PID TTY      STAT   TIME COMMAND
 1576 tty5     Ss+    0:00 /sbin/mingetty /dev/tty5
$

who 命令从 /var/run/utmp /run/utmp 文件中获取数据,具体取决于你的发行版。要确定你的发行版使用哪个文件,可以使用超级用户权限在命令行中输入 locate utmp
- w 命令 :默认情况下, w 命令虽然简短,但会显示有关登录用户的大量信息:

$ w
 13:24:25 up  5:07,  4 users,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU   WHAT
Christin tty2     -                11:53   48:00   1.83s  1.83s  -bash
Timothy  tty3     -                12:33   50:32   0.31s  0.31s  -bash
Rich     tty4     -                12:36   48:20   0.11s  0.11s  -bash
[...]
$

w 命令不仅显示登录到系统的用户,还显示他们正在做的事情以及有关CPU使用的统计信息。 JCPU 列显示当前连接到特定虚拟控制台终端的任何进程使用的所有CPU时间, PCPU 列显示 WHAT 列中列出的程序当前消耗的所有CPU时间。 w 命令使用 utmp 文件数据进行显示,同时也使用 /proc/ 目录中的信息。

可以通过查看 w who 命令的手册页来了解更多信息。需要注意的是,这两个命令仅显示当前信息。如果需要特定用户的历史数据,则需要使用其他命令。

1.2 确定用户最后一次访问系统的时间

last 命令可以提供有关用户登录和退出系统的当前和历史数据。要显示信息,只需在命令行中输入 last 。由于可能有大量信息需要显示,建议将输出通过管道传递给分页器,如 less

$ last
# 输出大量信息,可通过管道传递给less查看
$ last | less

显示的数据来自 /var/log/wtmp 文件, last 命令首先显示最新数据。因此,应该可以看到当前登录到系统的用户,标记为 still logged in 。每个用户记录中显示的日期和时间表示用户登录和退出系统的时间。在某些情况下,用户在系统关闭时仍处于登录状态,用 down 关键字表示。
如果 /var/log/wtmp 文件被 logrotate 实用程序轮转,可以使用 last 命令的 -f 选项查看旧版本的文件。例如,如果要查看名为 /var/log/wtmp.1 的旧版本文件,可以输入:

$ last -f /var/log/wtmp.1

如果只想查看特定用户的登录和退出活动,可以将用户名作为参数传递。例如,要查看是否有人直接访问 root 账户,可以输入:

$ last root
root     tty3                  Wed Nov 12 09:32 - 09:35  (00:02)
root     pts/0  192.168.56.1   Fri Nov  7 10:38 - 13:04  (02:25)
root     tty2                  Wed Oct 29 11:37 - down   (02:36)
root     tty3                  Fri Oct 10 08:03 - down   (02:20)
root     tty2                  Tue Sep 30 09:44 - down   (02:29)
wtmp begins Tue Mar 18 15:25:03 2015
$

注意,远程访问也会被记录,同时显示其源地址。还可以看到 /var/log/wtmp 文件的开始时间。需要注意的是,使用 su - root 身份登录的尝试不会记录在这些文件中,这也是建议使用 sudo 来维护系统不可抵赖环境的另一个原因。

失败的登录尝试存储在 /var/log/btmp 文件中。可以使用 last 命令并添加 -f 选项来查看失败的登录尝试:

$ sudo last -f /var/log/btmp
[sudo] password for Christine:
root     tty3              Wed Nov 12 09:35    gone - no logout
root     tty3              Wed Nov 12 09:35 - 09:35  (00:00)
[...]
btmp begins Sat Nov  8 15:11:24 2015
$

更简单的方法是使用 lastb 命令,它显示所有失败的登录尝试,并且使用与 last 命令相同的所有选项:

$ sudo lastb
[sudo] password for Christine:
root     tty3              Wed Nov 12 09:35 - 09:35  (00:00)
root     tty3              Wed Nov 12 09:35 - 09:35  (00:00)
[...]
btmp begins Sat Nov  8 15:11:24 2015
$

使用 last lastb 命令显示失败的登录尝试时,必须具有超级用户权限,因为 /var/log/btmp 文件通过权限进行保护,以防止攻击者更改失败的登录信息。

一些发行版有 dump-utmp 实用程序,可以将本节涉及的任何文件以人类可读的格式导出,包括 utmp 文件、 /var/log/wtmp 文件和 /var/log/btmp 文件。该工具有助于使用shell脚本生成审计报告。要了解有关此实用程序的更多信息,可以在命令行中输入 man dump-utmp

另一个有用的命令是 lastlog ,它从 /var/log/lastlog 文件中提取数据。可以通过添加 -u username 选项来确定特定用户最后一次登录系统的时间:

$ lastlog -u Christine
Username    Port     From        Latest
Christine   tty3                 Wed Nov 12 10:20:36 -0500 2015
$

需要注意的是,如果特定用户多次登录系统, lastlog 不会显示多个登录条目,它只显示用户最后一次登录系统的时间。查看每个账户的 /var/log/lastlog 条目有助于确定是否有不应登录的账户被访问。例如:

$ lastlog
Username         Port     From     Latest
root             tty3              Wed Nov 12 09:32:51 -0500 2015
[...]
sshd                               **Never logged in**
tcpdump                            **Never logged in**
Christine        tty3              Wed Nov 12 10:20:36 -0500 2015
sally                              **Never logged in**
Rich             tty4              Tue Nov 11 12:36:01 -0500 2015
Timothy          tty3              Tue Nov 11 12:33:08 -0500 2015
[...]
$
2. 设置登录、进程和内存限制

有时需要对用户的登录次数、CPU时间消耗和内存使用等进行限制。可以通过 pam_limits 模块和 ulimit 命令来实现。

2.1 使用 pam_limits 模块

大多数主要的Linux发行版将 pam_limits 模块作为其标准PAM配置的一部分,通常不需要添加它,但需要对其进行配置。通过编辑其配置文件 /etc/security/limits.conf 来进行配置,该文件包含注释(以 # 开头)和由四个字段组成的限制行:
| 字段 | 说明 |
| ---- | ---- |
| domain | 描述限制适用的实体,可以是用户名、组名(格式为 @groupname )或通配符 * (匹配所有用户)。 |
| type | 指定限制是硬限制还是软限制。硬限制由系统管理员施加,在任何情况下都不能超过;而用户可以暂时超过软限制。也可以使用 - 表示限制既是硬限制又是软限制。 |
| item | 指定要限制的项目类型,例如 core (核心文件大小)、 data (程序数据区域大小)、 fsize (用户创建的文件大小)、 nofile (打开的数据文件数量)、 rss (常驻集大小)、 stack (堆栈大小)、 cpu (单个进程的CPU时间,以分钟为单位)、 nproc (并发进程数量)、 maxlogins (同时登录的数量)和 priority (进程优先级)等。数据、 rss stack 项目都与程序消耗的内存有关,这些和其他数据容量的度量单位是千字节。 |
| value | 指定要应用于限制的值。 |

例如,对于某些用户应该能够登录并执行有限数量的操作,但不能无限期登录并消耗大量CPU时间的系统,可以使用以下配置:

@limited  hard  cpu  2

此配置将 limited 组的CPU硬限制设置为2分钟。该组的成员可以登录并运行程序,但如果其中一个程序消耗的CPU时间超过两分钟,它将被终止。需要注意的是,CPU时间和总系统访问时间是完全不同的概念。CPU时间是根据CPU积极处理用户数据的时间计算的,空闲时间(例如,当用户的shell处于活动状态但没有运行CPU密集型任务时)不计入。因此,即使硬CPU时间限制非常低,用户也可以登录并保持登录数小时。此限制旨在防止在不适合运行CPU密集型程序的系统上因用户运行此类程序而导致的问题。

2.2 使用 ulimit 命令

ulimit 是一个bash内置命令,因此它仅影响bash及其启动的程序。其语法如下:

ulimit [options [limit]]

选项定义了要限制的内容:
- 核心文件限制 -c 选项限制核心转储文件的大小,这些文件是在某些类型的程序崩溃时为调试目的创建的。
- 文件限制 -f 选项限制shell可以创建的文件大小, -n 限制打开的文件描述符数量(不过大多数系统不遵守 -n 限制)。
- 进程限制 -u 选项限制用户可以运行的进程数量, -t 限制总CPU时间(以秒为单位)。
- 内存限制 -v 选项设置shell可用的虚拟内存总量, -s 设置最大堆栈大小, -m 设置最大常驻集大小, -d 限制程序的数据集大小, -l 设置可以锁定到内存中的最大大小。
- 硬限制和软限制 -H -S 选项修改其他选项,分别将它们设置为硬限制或软限制。硬限制随后不能增加,但软限制可以。如果未提供任何选项, ulimit 将为指定的功能设置硬限制和软限制。
- 当前设置 :传递 -a 会使 ulimit 报告其当前设置。

limit 变量通常是与限制关联的数值。 ulimit 命令经常出现在系统或用户的bash启动脚本中,通常为 ulimit -c 0 ,以防止创建可能会使文件系统混乱的核心文件。如果用户进行软件开发,可能需要确保不设置此限制,或者至少将其设置为软限制(如 ulimit -Sc 0 ),以便用户在必要时可以覆盖它。

由于 ulimit 是bash内置命令,其作为系统安全工具的实用性有限。如果用户可以访问GUI登录工具或以任何绕过bash的方式登录系统(例如通过SSH,具体取决于其配置), ulimit 施加的限制将变得毫无意义。因此,应将 ulimit 视为防止因意外而非故意滥用系统而导致问题的一种方式。

2.3 使用 /etc/nologin 文件

如果存在 /etc/nologin 文件,只有 root 可以登录计算机。其他用户在尝试登录时将看到该文件的内容。在很多方面,使用 /etc/nologin 就像为所有其他用户将关键系统限制设置为0。该文件在没有常规控制台或远程shell用户的专用服务器系统上很有用。

3. 定位SUID/SGID文件

SUID和SGID位是可以应用于可执行程序文件的特殊标志。这些标志使Linux将程序视为由程序文件的所有者(对于SUID)或文件的组(对于SGID)运行,而不是由实际运行程序的个人运行。例如,如果程序的SUID位被设置,并且程序文件由 bruce 拥有,那么任何人运行该程序时,都将能够访问 bruce 拥有的所有文件,并表现得就像 bruce 在运行它一样。

SUID和SGID位通常与 root 账户相关联,以使其能够执行需要特殊权限的任务。例如, passwd 程序是SUID root,因为只有 root 可以修改Linux密码数据库。因此,对于普通用户来说,要更改密码,必须有一种机制以 root 身份运行进程,在 passwd 的情况下,这种机制就是SUID位。

然而,SUID和SGID位可能存在安全风险。例如,如果 rm 程序的SUID位被设置,由于该程序通常由 root 拥有,那么任何用户都可以删除计算机上的任何文件!虽然没有Linux发行版默认设置 rm 的SUID位,但SUID位可能会被不恰当地设置或被攻击者设置。因此,应该定期审计系统以查找所有SUID和SGID程序,并在必要时更改它们的权限设置。

可以使用 find 命令来查找SUID和SGID文件,特别是使用 -perm mode 选项,该选项搜索具有指定权限模式的文件。要搜索SUID和SGID文件,应传递模式值 +6000 ,SUID和SGID位的符号表示为 6000 ,加号 + 告诉 find 查找任何设置了指定位的文件。还可以传递 -type f 选项,将搜索限制为常规文件(目录使用SUID和SGID位的方式不同)。因此,要在整个计算机上搜索SUID和SGID程序,可以输入以下命令:

$ sudo find / -perm +6000 -type f
[sudo] password for Christine:
/lib64/dbus-1/dbus-daemon-launch-helper
/home/Christine/bigprogram.sh
/sbin/pam_timestamp_check
/sbin/netreport
/sbin/unix_chkpwd
[...]
$

可以通过传递 +4000 -u=s 单独搜索SUID文件,通过传递 +2000 -g=s 单独搜索SGID文件。

结果是一个文件列表,每行一个,显示设置了SUID或SGID位的文件。此列表中可能存在的程序包括 su ping mount passwd umount sudo 等,这些程序都有合理的配置需求。大多数系统还有其他SUID和SGID程序,其中一些可能看起来微不足道。如果对某个程序是否真的需要SUID或SGID状态有疑问,应该进一步调查。可以尝试使用包管理工具验证包的完整性,并在网上搜索该程序名称和SUID或SGID相关信息。还可以尝试使用 chmod 命令更改程序的SUID状态,并查看普通用户运行时它是否仍然按预期工作。

如果发现不应该是SUID或SGID root的程序,可能表示系统已被入侵。攻击者可能会以这种方式重新配置程序,以便更轻松地制造麻烦。因此,如果发现此类程序,应调查系统的整体完整性。

通过以上方法,可以有效地管理本地系统的安全,包括用户访问审计、资源限制设置和特殊权限文件的管理,从而提高系统的安全性和稳定性。

本地安全管理与审计指南(续)

4. 安全管理流程总结与建议

为了更好地管理本地系统安全,我们可以将上述的各项操作整合为一个安全管理流程。以下是一个简单的 mermaid 流程图,展示了这个流程:

graph LR
    classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
    classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px;

    A([开始]):::startend --> B(用户访问审计):::process
    B --> C{是否发现异常?}:::decision
    C -->|是| D(深入调查异常情况):::process
    C -->|否| E(设置资源限制):::process
    D --> E
    E --> F(定位SUID/SGID文件):::process
    F --> G{是否有异常权限文件?}:::decision
    G -->|是| H(调查并修复权限):::process
    G -->|否| I(定期重复流程):::process
    H --> I
    I --> B

这个流程图展示了一个循环的安全管理流程,从用户访问审计开始,若发现异常则进行深入调查,然后设置资源限制,接着定位 SUID/SGID 文件,对异常权限文件进行处理,最后定期重复整个流程,以确保系统安全。

以下是根据这个流程给出的具体操作建议:
1. 定期进行用户访问审计
- 每周至少使用 last lastb 命令查看用户登录和失败登录记录,及时发现异常登录行为。
- 每月使用 lastlog 命令检查所有用户的最后登录时间,确保不应该登录的账户没有被访问。
2. 合理设置资源限制
- 根据系统的实际使用情况和用户需求,在 /etc/security/limits.conf 文件中设置合理的用户资源限制,如 CPU 时间、内存使用等。
- 在用户的 bash 启动脚本中使用 ulimit 命令设置基本的资源限制,防止意外的资源滥用。
3. 定期检查 SUID/SGID 文件
- 每月使用 find 命令查找系统中的 SUID 和 SGID 文件,检查是否有异常权限的文件。
- 对于不确定是否需要特殊权限的文件,进行详细调查,必要时使用包管理工具验证其完整性。

5. 常见问题解答

在进行本地安全管理过程中,可能会遇到一些常见问题,以下是一些解答:

问题 解答
who 命令和 w 命令显示的信息有什么不同? who 命令简单显示当前登录的用户、终端和登录时间; w 命令除了这些信息外,还显示用户正在做的事情以及 CPU 使用统计信息。
last 命令和 lastb 命令有什么区别? last 命令显示用户登录和退出系统的当前和历史数据; lastb 命令专门显示失败的登录尝试。
pam_limits ulimit 的作用有什么不同? pam_limits 通过配置文件 /etc/security/limits.conf 对系统中的用户或组设置资源限制,适用于整个系统; ulimit 是 bash 内置命令,仅影响 bash 及其启动的程序。
如何确定 who 命令使用的是哪个 utmp 文件? 使用超级用户权限,在命令行中输入 locate utmp 来确定。
如果发现 SUID 或 SGID 权限被不恰当地设置,应该怎么做? 首先使用包管理工具验证程序所在包的完整性,然后在网上搜索该程序名称和 SUID 或 SGID 相关信息,了解其是否真的需要特殊权限。如果不需要,可以使用 chmod 命令更改其权限。
6. 总结

本地系统的安全管理是一个复杂而重要的任务,涉及多个方面的操作和配置。通过用户访问审计,我们可以及时发现潜在的安全威胁,如异常登录行为;合理设置登录、进程和内存限制,可以防止用户过度消耗系统资源,避免因资源滥用导致的系统性能下降或安全问题;定期定位和检查 SUID/SGID 文件,可以确保系统中没有不恰当的特殊权限设置,防止攻击者利用这些权限进行破坏。

在实际操作中,我们需要根据系统的具体情况和需求,灵活运用各种工具和方法,建立一个完善的安全管理流程,并定期进行检查和维护。同时,要不断学习和了解新的安全知识和技术,以应对不断变化的安全威胁,保障系统的安全稳定运行。

希望以上内容能够帮助你更好地管理本地系统的安全,如果你在操作过程中遇到任何问题,可以参考上述的常见问题解答或进一步查阅相关资料。通过持续的努力和关注,你可以有效地提高系统的安全性,为系统的正常运行提供坚实的保障。

【3D应力敏感度分析拓扑优化】【基于p-范数全局应力衡量的3D敏感度分析】基于伴随方法的有限元分析和p-范数应力敏感度分析(Matlab代码实现)内容概要:本文档介绍了基于伴随方法的有限元分析p-范数全局应力衡量的3D应力敏感度分析,并结合拓扑优化技术,提供了完整的Matlab代码实现方案。该方法通过有限元建模计算结构在载荷作用下的应力分布,采用p-范数对全局应力进行有效聚合,避免传统方法中应力约束过多的问题,进而利用伴随法高效求解设计变量对应力的敏感度,为结构优化提供关键梯度信息。整个流程涵盖了从有限元分析、应力评估到敏感度计算的核心环节,适用于复杂三维结构的轻量化高强度设计。; 适合人群:具备有限元分析基础、拓扑优化背景及Matlab编程能力的研究生、科研人员工程技术人员,尤其适合从事结构设计、力学仿真多学科优化的相关从业者; 使用场景及目标:①用于实现高精度三维结构的应力约束拓扑优化;②帮助理解伴随法在敏感度分析中的应用原理编程实现;③服务于科研复现、论文写作工程项目中的结构性能提升需求; 阅读建议:建议读者结合有限元理论优化算法知识,逐步调试Matlab代码,重点关注伴随方程的构建p-范数的数值处理技巧,以深入掌握方法本质并实现个性化拓展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值