55、深入理解Linux安全基础:从物理安全到密码保护

深入理解Linux安全基础:从物理安全到密码保护

1. 物理安全与灾难恢复

物理安全是Linux系统安全的基础防线,它涉及到服务器所在环境的多个方面。首先,在服务器房间的门上应张贴“禁止未经授权进入”的标识,明确限制人员的进出。同时,要制定详细的访问政策,规定清洁人员、服务器管理员等不同群体可以进入房间的时间和条件。

物理安全还包括环境控制。服务器机房必须配备适当的灭火系统,以防止火灾对服务器造成损害;同时,要确保良好的通风条件,保证服务器在适宜的温度和湿度环境下运行。

灾难恢复计划是保障数据安全的重要措施,它应涵盖以下几个关键要素:
- 备份数据内容 :明确哪些数据需要进行备份,确保重要数据不被遗漏。
- 备份存储位置 :确定备份数据的存储地点,可以选择本地存储设备或远程存储服务器。
- 备份保存时长 :规定备份数据需要保存的时间,以便在需要时能够恢复到特定时间点的数据。
- 备份介质轮换 :制定备份介质的轮换策略,确保备份数据的可靠性和可用性。

在进行灾难恢复规划时,备份数据、介质和软件都应列入访问控制矩阵清单。同时,要根据数据的重要性确定每个对象需要保留的备份副本数量。

Linux系统提供了多种备份工具,常见的有:
- amanda :高级马里兰自动网络磁盘存档器,具有很高的灵活性,甚至可以备份Windows系统,但通常不会默认安装。如需更多信息,可访问 www.amanda.org
- cpio :通常预装在Ubuntu系统中。
- dump/restore :用于数据备份和恢复。
- tar :常用于文件和目录的打包和压缩。
- rsync :一个简单而有效的网络数据备份工具,可通过设置cron作业定期备份选定目录的数据,或在远程机器上创建目录的精确副本。

2. 用户账户安全管理

用户账户是用户进入Linux系统的重要环节,合理的用户账户管理可以显著提高系统的安全性。以下是一些增强用户账户安全的规则:

2.1 一人一号

每个用户账户应仅对应一个用户,以确保责任的明确性。如果多人共享一个账户,就无法确定具体是哪个用户执行了某项操作。

2.2 限制root账户访问

多个用户登录root账户会导致无法追踪个人使用情况,容易出现抵赖行为。为了实现对root账户使用的追踪,应制定使用sudo命令代替直接登录root账户的政策。Ubuntu系统默认不提供root用户的登录凭证,以减少root账户的使用。

使用sudo命令具有以下安全优势:
- 无需泄露root密码 :避免了root密码的泄露风险。
- 精确控制命令访问 :可以根据用户需求,精确分配对特定命令的访问权限。
- 详细记录使用情况 :所有sudo命令的使用信息(包括使用者、执行的命令和时间)都会记录在 /var/log/auth.log 文件中,近期的Linux系统还会将这些信息存储在systemd日志中,可通过 journalctl -f 命令实时查看。
- 限制root访问 :在授予用户sudo权限后,可以通过 visudo 命令编辑 /etc/sudoers 文件,尝试限制用户对某些命令的root访问权限。但需要注意的是,一旦用户获得了一定的root权限,就有可能找到绕过限制的方法,获取系统的完全控制权。

为了防止管理员滥用root权限,可以将 /var/log/auth.log 文件中的安全消息发送到本地管理员无法访问的远程日志服务器,这样任何滥用root权限的行为都会被记录下来,且无法被掩盖。

2.3 设置临时账户过期日期

对于顾问、实习生或临时员工等临时用户,为他们的账户设置过期日期是非常必要的。这样可以在他们不再需要访问系统时,自动禁用账户,避免账户被滥用。

设置账户过期日期可以使用 usermod 命令,格式为 usermod -e yyyy-mm-dd user_name 。例如,要将用户 tim 的账户设置为2021年1月1日过期,可以使用以下命令:

# usermod -e 2021-01-01 tim

为了验证账户是否已正确设置过期日期,可以使用 chage 命令。 chage 命令主要用于查看和更改用户账户的密码老化信息,但也可以获取账户过期信息。使用 -l 选项可以列出 chage 命令可访问的各种信息,通过管道将输出传递给 grep 命令并搜索“Account”,可以只显示用户账户的过期日期:

# chage -l tim | grep Account
Account expires                                   :  Jan  01,  2021

定期审查所有用户账户的过期日期,有助于消除潜在的安全漏洞。

2.4 删除未使用的用户账户

保留过期或未使用的账户会带来安全风险,恶意用户可能会利用这些账户重新获得系统访问权限。因此,当用户离开组织后,应按照以下步骤删除他们的账户和相关数据:
1. 查找账户拥有的文件 :使用 find / -user username 命令查找系统中由该账户拥有的所有文件。
2. 过期或禁用账户 :可以使用 usermod 命令设置账户过期日期或禁用账户。
3. 备份文件 :对账户拥有的文件进行备份,以防数据丢失。
4. 处理文件 :可以选择删除文件或将其重新分配给新的所有者。
5. 删除账户 :使用 deluser 命令从系统中删除账户。

如果忘记执行最后一步,过期或禁用的账户仍然存在于系统中,就可能被恶意利用。

要查找过期账户,可以通过搜索 /etc/shadow 文件来实现。该文件中每个记录的第八个字段表示账户的过期日期,但以自1970年1月1日以来的天数表示。可以使用以下两步方法自动查找过期账户:
1. 设置当前日期变量 :使用以下命令将当前日期转换为自1970年1月1日以来的天数,并存储在变量 TODAY 中:

$ TODAY=$(echo $(($(date --utc --date "$1" +%s)/86400)))
$ echo $TODAY
16373
  1. 查找过期账户 :使用 gawk 命令从 /etc/shadow 文件中提取账户信息,并筛选出过期账户:
# gawk -F: '{if (($8 > 0) && ($TODAY > $8)) print $1}' /etc/shadow
Consultant
Intern

找到过期账户后,使用 deluser 命令将其删除。

3. 密码安全保障

密码是现代操作系统最基本的安全工具,但也是最容易受到攻击的安全特性。用户通常倾向于选择容易记忆的密码,但这往往也意味着密码容易被猜测。常见的暴力破解方法就是尝试使用流行的密码,一些常见的弱密码包括:
- 123456
- Password
- princess
- rockyou
- abc123

通过互联网搜索引擎可以轻松找到常见密码列表,恶意攻击者也可以利用这些列表进行密码破解。因此,选择一个好的密码对于系统安全至关重要。

3.1 选择强密码

一个好的密码应具备以下特点:
- 难以猜测 :避免使用与个人信息相关的内容,如登录名、全名、电话号码、地址、家人或宠物的名字等。
- 非常见词汇 :不要使用字典中的单词、专有名词或网站名称。
- 无键盘连续字符 :避免使用键盘上连续的字母或数字,如“qwerty”或“asdfg”。
- 不重复使用 :不要在多个账户中使用相同的密码。

强密码应满足以下两个主要条件:
- 长度要求 :密码长度至少为15到25个字符,密码越长,安全性越高。组织可以根据自身安全需求确定最小密码长度。
- 字符类型要求 :密码应包含小写字母、大写字母、数字和特殊字符(如 ! $ % * ( ) - + = , < > : : ” ’ )。

选择强密码可能具有一定难度,可以采用以下方法:从一个容易记忆的句子中提取每个单词的首字母,并添加数字、特殊字符和大小写变化。例如,选择一个只有自己知道且不公开的句子,然后按照上述规则生成密码。

在实际应用中,构建既强大又容易记忆的密码几乎是不可能的。一种更好的选择是使用四个随机的五字母单词,如“HorseTabletMarchBound”。根据相关研究,这样的密码破解难度极高,在量子计算机广泛应用之前,可以提供较高的安全性。

3.2 设置和更改密码

用户可以使用 passwd 命令设置或更改自己的密码。执行 passwd 命令后,系统会提示输入旧密码,为了防止他人窥视,输入的密码不会显示。输入正确的旧密码后,系统会要求输入新密码。新密码会通过 cracklib 工具进行检查,以确定其是否符合要求。非root用户如果选择的密码不符合要求,需要重新选择。只有root用户可以分配不符合要求的密码。

当新密码通过检查后,系统会要求再次输入新密码以确认输入无误。

如果以root用户身份运行 passwd 命令,可以直接为其他用户更改密码,无需输入旧密码。例如,要为用户 joe 更改密码,可以使用以下命令:

# passwd joe
Changing password for user joe.
New UNIX password: ********
Retype new UNIX password: ********
passwd: all authentication tokens updated successfully.

3.3 强制执行最佳密码实践

为了确保用户使用强密码,可以通过Pluggable Authentication Modules(PAM)设施来定义密码要求。例如,要确保密码长度至少为12个字符,包含至少2个数字、3个大写字母和2个小写字母,且与前4个密码不同,可以在 /etc/pam.d/common-password /etc/pam.d/common-auth 文件中添加以下行:

password requisite pam_cracklib.so minlen=12, dcredit=2, ucredit=3, lcredit=2, difok=4 

为了让用户定期更改密码,可以通过 /etc/login.defs 文件设置默认值,其中影响密码老化和长度的设置包括:
- PASS_MAX_DAYS :密码必须更改的最大天数,例如设置为30天。组织可以根据账户设置情况调整该值,如果是一人一号的组织,该值可以适当增大;如果存在共享账户或多人知道root密码,则应缩短密码更改周期。
- PASS_MIN_DAYS :密码再次更改的最小天数,设置为大于0的值可以防止用户频繁更改密码后又改回原密码。
- PASS_MIN_LEN :密码的最小长度。
- PASS_WARN_AGE :在密码过期前提醒用户更改密码的天数,例如设置为7天。

对于已经创建的账户,可以使用 chage 命令控制密码老化。 chage 命令的常用选项如下表所示:
| 选项 | 描述 |
| ---- | ---- |
| -M | 设置密码需要更改的最大天数,相当于 /etc/login.defs 中的 PASS_MAX_DAYS 。 |
| -m | 设置密码再次更改的最小天数,相当于 /etc/login.defs 中的 PASS_MIN_DAYS 。 |
| -W | 设置用户在被迫更改账户密码前被警告的天数,相当于 /etc/login.defs 中的 PASS_WARN_AGE 。 |

以下是使用 chage 命令设置用户 tim 密码老化参数的示例:

# chage -l tim | grep days
Minimum number of days between password change         : 0
Maximum number of days between password change         : 99999
Number of days of warning before password expires      : 7
# chage -M 30 -m 5 -W 7 tim
# chage -l tim | grep days
Minimum number of days between password change         : 5
Maximum number of days between password change         : 30
Number of days of warning before password expires      : 7

此外, chage 命令还可以用于基于密码过期的账户过期设置,结合 -M -I 选项可以锁定账户。

通过以上物理安全、用户账户管理和密码安全等方面的措施,可以有效提高Linux系统的安全性,保护数据和系统免受潜在的威胁。

4. 安全措施总结与流程梳理

4.1 整体安全措施总结

为了更清晰地展示Linux系统安全的各项措施,下面以表格形式进行总结:
| 安全方面 | 具体措施 |
| ---- | ---- |
| 物理安全 | 张贴“禁止未经授权进入”标识;制定不同群体的访问政策;配备灭火系统和良好通风设备 |
| 灾难恢复 | 明确备份数据内容、存储位置、保存时长和介质轮换策略;将备份相关信息列入访问控制矩阵清单 |
| 用户账户安全 | 一人一号;限制root账户访问,使用sudo命令;设置临时账户过期日期;删除未使用的用户账户 |
| 密码安全 | 选择强密码;使用 passwd 命令设置和更改密码;通过PAM设施和 chage 命令强制执行最佳密码实践 |

4.2 关键操作流程梳理

以下是几个关键操作的流程图,帮助大家更好地理解操作步骤。

4.2.1 删除未使用用户账户流程
graph TD;
    A[用户离开组织] --> B[查找账户拥有的文件:find / -user username];
    B --> C[过期或禁用账户:usermod -e yyyy-mm-dd user_name];
    C --> D[备份文件];
    D --> E[处理文件:删除或重新分配];
    E --> F[删除账户:deluser user_name];
4.2.2 设置用户密码老化参数流程
graph TD;
    A[确定用户账户] --> B[查看当前密码老化信息:chage -l username | grep days];
    B --> C[设置参数:chage -M max_days -m min_days -W warn_days username];
    C --> D[再次查看确认:chage -l username | grep days];

4.3 安全措施实施建议

在实施上述安全措施时,建议按照以下步骤进行:
1. 评估需求 :根据组织的安全需求和业务特点,确定各项安全措施的具体参数,如密码长度、备份保存时长等。
2. 制定计划 :制定详细的安全实施计划,明确各项任务的责任人、时间节点和操作步骤。
3. 培训人员 :对相关人员进行安全培训,确保他们了解安全措施的重要性和操作方法。
4. 逐步实施 :按照计划逐步实施安全措施,避免一次性引入过多变化导致系统不稳定。
5. 监控和评估 :定期监控系统的安全状况,评估安全措施的有效性,及时调整和改进。

5. 常见问题解答与注意事项

5.1 常见问题解答

5.1.1 如何判断我的密码是否足够强?

可以使用 cracklib 工具在设置密码时进行检查,如果密码不符合要求,系统会提示重新选择。同时,参考前面提到的强密码选择规则,确保密码长度、字符类型等符合要求。

5.1.2 如果忘记了root密码怎么办?

可以通过单用户模式或恢复模式重置root密码。具体操作步骤因Linux发行版而异,一般需要进入系统的恢复环境,挂载根文件系统,然后修改 /etc/shadow 文件中的root密码信息。

5.1.3 chage 命令在什么情况下不能使用?

如果不使用 /etc/shadow 文件存储账户密码, chage 命令将无法正常工作。但在大多数Linux系统中, /etc/shadow 文件默认用于存储密码信息。

5.2 注意事项

  • 操作谨慎 :在进行涉及系统核心设置的操作时,如修改 /etc/sudoers 文件、删除用户账户等,一定要谨慎操作,最好在操作前进行备份,以免造成不可挽回的损失。
  • 定期更新 :及时更新系统软件和安全补丁,以修复已知的安全漏洞,提高系统的安全性。
  • 数据备份 :定期进行数据备份,并验证备份数据的可用性,确保在发生灾难时能够及时恢复数据。

6. 总结与展望

通过对Linux系统物理安全、灾难恢复、用户账户管理和密码安全等方面的深入探讨,我们了解到了一系列保障系统安全的重要措施和方法。这些措施相互配合,形成了一个完整的安全防护体系,可以有效保护Linux系统免受各种潜在威胁。

在未来,随着信息技术的不断发展,Linux系统面临的安全挑战也将不断变化。例如,量子计算机的发展可能会对现有密码体系造成威胁,需要我们不断研究和探索新的安全技术和方法。同时,随着云计算、物联网等技术的广泛应用,Linux系统的安全边界也在不断扩大,需要我们更加注重系统的整体安全性和协同防护能力。

总之,保障Linux系统安全是一个长期而复杂的任务,需要我们不断学习和实践,紧跟技术发展的步伐,及时调整和完善安全策略,以确保系统的稳定运行和数据的安全。希望本文所介绍的内容能够为大家在Linux系统安全方面提供一些有益的参考和帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值