56、深入理解Linux基础安全

深入理解Linux基础安全

1. 账户密码设置

在Linux系统中,账户密码的设置对于系统安全至关重要。以 tim 账户为例,我们可以使用 chage 命令来查看和设置账户的密码相关信息。
- 查看密码设置信息

# chage -l tim | grep Password
Password expires                 : never
Password inactive                : never

从输出可以看出, tim 账户的密码没有设置过期时间和非活动时间。
- 设置账户锁定时间
如果我们仅使用 -I 选项来设置账户在密码过期后5天锁定,如下所示:

# chage -I 5 tim
# chage -l tim | grep Password
Password expires                 : never
Password inactive                : never

可以发现设置没有生效。这是因为没有设置密码过期时间, -I 选项就不会起作用。因此,我们需要使用 -M 选项来设置密码过期的最大天数,再设置密码非活动时间。

# chage -M 30 -I 5 tim
# chage -l tim | grep Password
Password expires                 : Mar 03, 2017
Password inactive                : Mar 08, 2017

现在, tim 账户的密码将在2017年3月3日过期,过期后5天(即3月8日)账户将被锁定。这种设置在员工离职但用户账户尚未删除的情况下非常有用。

2. 理解密码文件和密码哈希

早期的Linux系统将密码存储在 /etc/passwd 文件中,这些密码是经过哈希处理的。哈希是一种单向的数学过程,一旦生成哈希值,就无法从哈希值还原出原始密码。
- 密码验证过程 :当用户输入账户密码时,Linux系统会对输入的密码进行重新哈希处理,然后将结果与 /etc/passwd 文件中的原始哈希值进行比较。如果匹配,用户将被认证并允许进入系统。
- /etc/passwd 文件的安全问题 :查看 /etc/passwd 文件的权限:

# ls -l /etc/passwd
-rw-r--r--. 1 root root 1644 Feb  2 02:30 /etc/passwd

可以看到,该文件的权限是所有人都可以读取。虽然密码是经过哈希处理的,但恶意人员可以使用彩虹表(一种包含大量可能密码及其哈希值的字典)来破解密码。例如,流行密码“Password”的哈希值如下:

$6$dhN5ZMUj$CNghjYIteau5xl8yX.f6PTOpendJwTOcXjlTDQUQZhhy
V8hKzQ6Hxx6Egj8P3VsHJ8Qrkv.VSR5dxcK3QhyMc.
  • /etc/shadow 文件的出现 :为了解决 /etc/passwd 文件的安全问题,多年前,哈希密码被转移到了新的配置文件 /etc/shadow 中。查看该文件的权限:
# ls -l /etc/shadow
-rw-r----- 1 root shadow 1320 Apr  3 19:50 /etc/shadow

只有root用户和 shadow 组的成员可以查看该文件,从而保护了哈希密码的安全。例如,查看 /etc/shadow 文件的末尾部分:

# tail -2 /etc/shadow
johndoe:$6$jJjdRN9/qELmb8xWM1LgOYGhEIxc/:15364:0:99999:7:::
Tim:$6$z760AJ42$QXdhFyndpbVPVM5oVtNHs4B/:15372:5:30:7:16436::

可以看到,每个用户记录中都有一长串无意义的字符串,这些就是哈希密码。
- /etc/shadow 文件的其他信息 :除了账户名和哈希密码外, /etc/shadow 文件还存储了以下信息:
- 自1970年1月1日以来密码更改的天数
- 密码可以更改之前的天数
- 密码必须更改之前的天数
- 密码必须更改之前警告用户的天数
- 密码过期后账户被禁用的天数
- 自1970年1月1日以来账户被禁用的天数

3. 确保文件系统安全
3.1 管理危险的文件系统权限

如果为Linux系统上的每个文件都赋予 rwxrwxrwx (777)的完全访问权限,将会导致系统混乱。同样,如果不严格管理设置用户ID(SUID)和设置组ID(SGID)权限,也会引发类似的问题。
- SUID权限 :具有SUID权限的文件,在所有者类别中具有该权限,并且在其他类别中具有执行权限,允许任何人在文件在内存中执行时临时成为文件的所有者。如果文件的所有者是root,这种情况风险最大。
- SGID权限 :具有SGID权限的文件,在组类别中具有该权限,并且在其他类别中具有执行权限,允许任何人在文件在内存中执行时临时成为文件所属组的成员。SGID也可以设置在目录上,这将使在该目录中创建的任何文件的组ID设置为目录的组ID。
- 示例命令 :查看 passwd sudo 命令的权限:

$ ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 28804 Aug 17 20:50 /usr/bin/passwd
$ ls -l /usr/bin/sudo
---s--x--x. 2 root root 77364 Nov 3 08:10 /usr/bin/sudo

passwd sudo 命令是设计为SUID程序的。虽然这些命令以root用户身份运行,但普通用户只能使用 passwd 更改自己的密码,并且只有在 /etc/sudoers 文件中被授予权限时才能使用 sudo 提升到root权限。而如果黑客创建了一个SUID的 bash 命令,任何运行该命令的人都可以有效地更改系统上具有root访问权限的所有内容。
- 查找SUID和SGID命令 :可以使用 find 命令搜索系统中是否存在隐藏或不适当的SUID和SGID命令:

# find / -perm /6000 -ls
4597316 52 -rwxr-sr-x 1 root games 51952 Dec 21 2013 /usr/bin/atc
4589119 20 -rwxr-sr-x 1 root tty   19552 Nov 18 2013 /usr/bin/write
4587931 60 -rwsr-xr-x 1 root root  57888 Aug  2 2013 /usr/bin/at
4588045 60 -rwsr-xr-x 1 root root  57536 Sep 25 2013 /usr/bin/crontab
4588961 32 -rwsr-xr-x 1 root root  32024 Nov 18 2013 /usr/bin/su
...
5767487 85 -rwsrwsr-x 1 root  root 68928 Sep 13 11:52 /var/.bin/myvi
...

从输出可以看出, find 命令可以发现普通用户为了特定原因提升权限而运行的SUID和SGID命令。在这个例子中,还有一个用户试图隐藏的文件 myvi ,这是 vi 命令的一个副本,由于权限和所有权的原因,可以更改root拥有的文件。

3.2 保护密码文件
  • /etc/passwd 文件 :该文件用于检查用户账户信息,其权限设置应该如下:
  • 所有者:root
  • 组:root
  • 权限:(644) 所有者:rw- 组:r– 其他:r–
    查看 /etc/passwd 文件的权限:
# ls -l /etc/passwd
-rw-r--r--. 1 root root 1644 Feb  2 02:30 /etc/passwd

这些设置允许用户登录系统并查看与用户ID和组ID号关联的用户名,但用户不应该能够直接修改 /etc/passwd 文件。例如,如果授予其他用户写访问权限,恶意用户可能会向文件中添加新账户。
- /etc/shadow 文件 :该文件与 /etc/passwd 文件密切相关,用于登录认证过程。其权限设置应该如下:
- 所有者:root
- 组:root
- 权限:(640) 所有者:-rw- 组:r– 其他:—
查看 /etc/shadow 文件的权限:

# ls -l /etc/shadow
-rw-r----- 1 root shadow 1320 Apr  3 19:50 /etc/shadow

可以看到, /etc/shadow 文件的访问权限比 /etc/passwd 文件严格得多。虽然只有root用户可以查看该文件,但用户可以使用 passwd 命令更改自己的密码。 passwd 命令使用了特殊的SUID权限:

# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 28804 Aug 17 20:50 /usr/bin/passwd

当用户运行 passwd 命令时,在命令执行期间,用户将临时成为root用户,从而可以写入 /etc/shadow 文件,但只能更改自己的密码相关信息。
- /etc/group 文件 :该文件包含Linux系统上的所有组,其文件权限应设置为与 /etc/passwd 文件相同:
- 所有者:root
- 组:root
- 权限:(644) 所有者:rw- 组:r– 其他:r–

3.3 锁定文件系统

/etc/fstab 文件是文件系统表,用于在启动时挂载存储设备到文件系统,也被 mount dump fsck 命令使用。其权限设置应该如下:
- 所有者:root
- 组:root
- 权限:(644) 所有者:rw- 组:r– 其他:r–

在文件系统表中,有一些重要的安全设置需要审查。除了根分区、引导分区和交换分区外,文件系统选项默认情况下是比较安全的。还可以考虑以下设置:
- /home 目录 :通常将 /home 子目录(用户目录所在的位置)放在单独的分区上。在 /etc/fstab 中添加挂载选项时,可以设置 nosuid 选项,以防止具有SUID和SGID权限的可执行程序在该目录中运行;设置 nodev 选项,使该目录中的设备文件不会被识别;设置 noexec 选项,禁止在该目录中运行可执行程序。
- /tmp 目录 :将 /tmp 子目录(临时文件所在的位置)放在单独的分区上,并使用与 /home 目录相同的选项设置: nosuid nodev noexec
- /usr 目录 :将 /usr 子目录(用户程序和数据所在的位置)放在单独的分区上,并设置 nodev 选项,使该目录中的设备文件不会被识别。安装软件后, /usr 目录通常很少或没有变化,有时为了安全起见,甚至将其挂载为只读。
- /var 目录 :如果系统配置为服务器,可能需要将 /var 目录放在单独的分区上。该目录会随着日志消息和Web、FTP等服务器内容的添加而增长,可以使用与 /home 目录相同的挂载选项: nosuid nodev noexec

将上述挂载选项添加到 /etc/fstab 文件中,示例如下:

/dev/sdb1    /home   ext4    defaults,nodev,noexec,nosuid   1 2
/dev/sdc1    /tmp    ext4    defaults,nodev,noexec,nosuid   1 1
/dev/sdb2    /usr    ext4    defaults,nodev                 1 2
/dev/sdb3    /var    ext4    defaults,nodev,noexec,nosuid   1 2

这些挂载选项将有助于进一步锁定文件系统,增加对恶意意图的防护。管理各种文件权限和 fstab 选项应该是安全策略的一部分,具体实施的项目应根据组织的安全需求来确定。

4. 管理软件和服务
  • 更新软件包 :除了删除不必要的服务和软件外,保持当前软件的更新对于安全至关重要。通过软件更新可以获得最新的错误修复和安全补丁。软件包更新应该定期进行,具体的更新频率和时间取决于组织的安全需求。可以轻松地自动化软件更新,但在更新生产Linux系统之前,最好先在测试环境中测试更新。
  • 关注安全公告 :当Linux软件中发现安全漏洞时,通用漏洞披露(CVE)项目会跟踪这些漏洞,并帮助Linux社区快速修复这些漏洞。像Canonical这样的公司会提供更新的软件包来修复安全漏洞并进行分发。可以在Ubuntu网站的安全通知页面(usn.ubuntu.com/)上了解Ubuntu中安全更新的处理方式,也可以在people.canonical.com/~ubuntu-security/cve页面上搜索CVE和相关软件包。
5. 监控系统

如果系统的安全规划和实施做得好,大多数恶意攻击将被阻止。但如果发生攻击,需要能够识别它。监控是一项需要持续进行的活动,包括监视日志文件、用户账户和文件系统本身。
- 监控日志文件 :理解消息日志的记录方式对于维护和故障排除Linux系统至关重要。在使用 systemd 收集消息到 systemd 日志之前,内核和系统服务生成的消息被定向到 /var/log 目录中的文件。现在,仍然可以通过 rsyslogd 服务将大部分 /var/log 目录中的文件从 systemd 日志定向到该目录。大多数日志文件可以使用 cat head tail more less 命令显示,但有一些文件需要特殊命令来查看,如下表所示:

Filename View Command
btmp dump-utmp btmp
dmesg dmesg
lastlog lastlog
wtmp dump-utmp wtmp

使用 journalctl 命令可以直接从 systemd 日志中查看日志消息。例如,分页查看内核消息:

$ journalctl -k
-- Logs begin at Tue 2019-05-07 09:16:36 EDT, end at Tue 2020-04-07 
12:25:01 EDT
Apr 07 07:49:08 workstation kernel: Linux version 5.3.0-46-generic 
(buildd@lcy01
Apr 07 07:49:08 workstation kernel: Command line: BOOT_IMAGE=/boot/
vmlinuz-5.3.0
Apr 07 07:49:08 workstation kernel: KERNEL supported cpus:
Apr 07 07:49:08 workstation kernel:   Intel GenuineIntel
Apr 07 07:49:08 workstation kernel:   AMD AuthenticAMD
Apr 07 07:49:08 workstation kernel:   Hygon HygonGenuine
Apr 07 07:49:08 workstation kernel:   Centaur CentaurHauls
Apr 07 07:49:08 workstation kernel:   zhaoxin   Shanghai  
Apr 07 07:49:08 workstation kernel: x86/fpu: Supporting XSAVE feature 
0x001: 'x8
Apr 07 07:49:08 workstation kernel: x86/fpu: Supporting XSAVE feature 
0x002: 'SS
Apr 07 07:49:08 workstation kernel: x86/fpu: Supporting XSAVE feature 
0x004: 'AV
Apr 07 07:49:08 workstation kernel: x86/fpu: xstate_offset[2]:  576, 
xstate_size
Apr 07 07:49:08 workstation kernel: x86/fpu: Enabled xstate features 
0x7, contex
Apr 07 07:49:08 workstation kernel: BIOS-provided physical RAM map:
Apr 07 07:49:08 workstation kernel: BIOS-e820: [mem 
0x0000000000000000-0x0000000
...

要查看与特定服务相关的消息,可以使用 -u 选项后跟服务名称:

$ journalctl -u NetworkManager.service
$ journalctl -u apache2.service
$ journalctl -u avahi-daemon.service

如果认为正在发生安全漏洞,可以使用 -f 选项实时跟踪所有或选定的消息(按Ctrl+C停止):

$ journalctl -k -f
$ journalctl -f -u apache2.service

在规划系统部署时,还需要了解一些其他重要的安全主题,如加密、可插拔认证模块(PAM)和AppArmor等,这些高级主题将在后续文章中详细介绍。通过合理的安全设置、软件管理、服务监控和日志查看,可以大大提高Linux系统的安全性,有效抵御各种潜在的安全威胁。

深入理解Linux基础安全

6. 高级安全主题概述

在规划Linux系统部署时,除了前面提到的基础安全措施,还有一些高级安全主题需要我们关注,这些主题包括加密技术、可插拔认证模块(PAM)以及AppArmor。虽然这些内容较为复杂和深入,但对于构建更安全的Linux系统至关重要。
- 加密技术 :加密是保护数据安全的重要手段。在Linux系统中,加密可以应用于多个层面,如文件系统加密、网络通信加密等。通过加密,可以确保数据在存储和传输过程中的保密性和完整性,防止数据被未授权的访问和篡改。
- 可插拔认证模块(PAM) :PAM是一种灵活的认证机制,它允许系统管理员根据不同的需求配置认证方式。PAM可以用于多种服务,如登录、sudo等,通过插入不同的认证模块,可以实现不同的认证策略,如密码认证、指纹认证等。
- AppArmor :AppArmor是一种强制访问控制(MAC)系统,它通过为每个应用程序定义访问控制策略,限制应用程序的行为。AppArmor可以防止应用程序执行未授权的操作,如访问敏感文件、网络连接等,从而提高系统的安全性。

7. 系统监控的重要性及方法

系统监控是保障Linux系统安全的重要环节。即使我们在系统安全方面进行了全面的规划和实施,仍然可能会面临各种潜在的安全威胁。因此,持续的系统监控可以帮助我们及时发现并应对这些威胁。
- 日志文件监控 :日志文件是系统活动的记录,通过监控日志文件,可以发现系统中的异常活动。如登录失败记录、系统错误信息等。前面已经介绍了如何查看不同类型的日志文件,这里再次强调日志监控的重要性。例如,通过定期查看 /var/log/btmp 文件,可以发现是否有异常的登录尝试;通过查看 /var/log/syslog 文件,可以了解系统的整体运行情况。
- 用户账户监控 :监控用户账户的活动也是系统监控的重要内容。要关注用户账户的创建、删除、权限变更等操作,防止恶意用户创建非法账户或提升自身权限。可以通过定期检查 /etc/passwd /etc/shadow 文件,查看是否有异常的用户账户信息。
- 文件系统监控 :文件系统的完整性和安全性直接关系到系统的稳定运行。可以使用工具如 tripwire 来监控文件系统的变化,当文件被修改、删除或创建时, tripwire 会生成相应的报告,帮助我们及时发现异常情况。

8. 安全策略制定与实施

制定合理的安全策略是保障Linux系统安全的关键。安全策略应该根据组织的安全需求和系统的实际情况进行制定,并在系统中进行有效实施。
- 确定安全目标 :首先要明确系统的安全目标,如保护敏感数据、防止非法访问、保障系统的可用性等。根据这些目标,制定相应的安全策略。
- 制定访问控制策略 :访问控制是安全策略的核心内容之一。通过设置文件和目录的权限,限制用户和进程的访问权限。例如,对于重要的配置文件,只允许root用户进行读写操作;对于敏感数据文件,限制只有特定用户或用户组可以访问。
- 实施安全审计 :安全审计是对系统安全策略执行情况的检查和评估。通过定期的安全审计,可以发现安全策略中存在的问题,并及时进行调整和改进。可以使用工具如 auditd 来记录系统的安全事件,并进行审计分析。

9. 应对安全事件的流程

当系统发生安全事件时,需要有一套完善的应对流程,以减少事件对系统造成的影响。

graph LR
    A[发现安全事件] --> B[评估事件影响]
    B --> C[隔离受影响的系统或服务]
    C --> D[收集证据]
    D --> E[分析事件原因]
    E --> F[制定解决方案]
    F --> G[实施解决方案]
    G --> H[恢复系统正常运行]
    H --> I[总结经验教训,改进安全策略]
  • 发现安全事件 :通过系统监控可以发现安全事件的迹象,如异常的登录尝试、文件系统的异常变化等。当发现安全事件时,要及时进行记录和报告。
  • 评估事件影响 :评估安全事件对系统的影响程度,包括数据是否泄露、系统是否瘫痪等。根据评估结果,确定应对措施的优先级。
  • 隔离受影响的系统或服务 :为了防止安全事件的扩散,需要及时隔离受影响的系统或服务。如关闭受攻击的网络端口、停止受感染的服务等。
  • 收集证据 :收集与安全事件相关的证据,如日志文件、系统快照等。这些证据将有助于分析事件的原因和责任认定。
  • 分析事件原因 :通过对收集到的证据进行分析,找出安全事件发生的原因。如是否是由于软件漏洞、配置错误或人为疏忽等原因导致的。
  • 制定解决方案 :根据事件原因,制定相应的解决方案。如修复软件漏洞、调整系统配置、加强用户培训等。
  • 实施解决方案 :按照制定的解决方案,对系统进行修复和改进。在实施过程中,要注意备份重要数据,防止数据丢失。
  • 恢复系统正常运行 :在解决安全事件后,要及时恢复系统的正常运行。如重新启动服务、恢复数据等。
  • 总结经验教训,改进安全策略 :对安全事件进行总结,分析事件发生的原因和处理过程中存在的问题。根据总结结果,改进安全策略,防止类似事件的再次发生。
10. 安全意识培训

除了技术层面的安全措施,提高用户的安全意识也是保障Linux系统安全的重要因素。用户是系统的直接使用者,如果用户缺乏安全意识,可能会因为误操作或泄露密码等原因导致系统安全事件的发生。
- 定期培训 :定期组织用户进行安全意识培训,向用户传授安全知识和技能。如如何设置强密码、如何避免点击可疑链接、如何正确使用系统资源等。
- 安全宣传 :通过安全宣传海报、邮件通知等方式,向用户宣传系统安全的重要性和常见的安全威胁。提高用户对安全问题的关注度和警惕性。
- 案例分析 :通过实际的安全案例分析,让用户了解安全事件的后果和影响。如介绍一些知名的黑客攻击事件,分析事件发生的原因和防范措施,让用户从中吸取教训。

通过以上对Linux系统安全各个方面的介绍,我们可以看到,保障Linux系统安全是一个综合性的工作,需要从多个层面进行考虑和实施。从账户密码设置、文件系统安全管理、软件和服务更新,到系统监控、安全策略制定和用户安全意识培训,每个环节都至关重要。只有全面地做好这些工作,才能构建一个安全可靠的Linux系统,有效抵御各种潜在的安全威胁。

基于径向基函数神经网络RBFNN的自适应滑模控制学习(Matlab代码实现)内容概要:本文介绍了基于径向基函数神经网络(RBFNN)的自适应滑模控制方法,并提供了相应的Matlab代码实现。该方法结合了RBF神经网络的非线性逼近能力和滑模控制的强鲁棒性,用于解决复杂系统的控制问题,尤其适用于存在不确定性和外部干扰的动态系统。文中详细阐述了控制算法的设计思路、RBFNN的结构与权重更新机制、滑模面的构建以及自适应律的推导过程,并通过Matlab仿真验证了所提方法的有效性和稳定性。此外,文档还列举了大量相关的科研方向和技术应用,涵盖智能优化算法、机器学习、电力系统、路径规划等多个领域,展示了该技术的广泛应用前景。; 适合人群:具备一定自动控制理论基础和Matlab编程能力的研究生、科研人员及工程技术人员,特别是从事智能控制、非线性系统控制及相关领域的研究人员; 使用场景及目标:①学习和掌握RBF神经网络与滑模控制相结合的自适应控制策略设计方法;②应用于电机控制、机器人轨迹跟踪、电力电子系统等存在模型不确定性或外界扰动的实际控制系统中,提升控制精度与鲁棒性; 阅读建议:建议读者结合提供的Matlab代码进行仿真实践,深入理解算法实现细节,同时可参考文中提及的相关技术方向拓展研究思路,注重理论分析与仿真验证相结合。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值