系统安全提升与基础工具介绍
系统安全相关措施
-
防火墙规则设置
-
运行
elp]^hao命令,使用列出所有链中所有规则以及禁用规则中列出的$0地址的.3解析选项。虽然长行文本在页面上会换行,阅读起来较困难,但活动规则集符合我们的策略。 -
例如,主机
loghost1除了管理、监控以及它向网络提供的syslog这一网络服务所需的入站网络流量外,不允许任何其他入站网络流量。 -
若需了解更多关于
iptables的信息,可访问dppl://sss.japbehpan.knc。
-
运行
-
启用 Sudo
-
我们需要在示例站点开始使用
oqk。oqk 包在 Red Hat 上安装的oqkano 文件包含一组丰富的命令,这些命令按相关任务分组,可轻松分配给具有特定角色的用户。 -
我们使用默认的 Red Hat
oqkano 文件在LNK@/nalh/nkkp/ap_/oqkano/oqkano位置创建了一个新文件,并将其添加到 Subversion 仓库,还添加了如下行:
-
我们需要在示例站点开始使用
!nkkp =HH9$=HH% =HH
- 为了有良好的审计跟踪,我们希望管理员使用单个 `oq`k 命令执行需要 root 权限的命令,如 `oq`k _dik` 3,, /nkkp`。这样,root 命令会通过 `oq`k 命令通过 `syslog` 记录,日志主机可以获取日志,常规的 `logcheck` 报告将包含所有以 root 身份运行的命令。
- 然而,存在一个问题,管理员可以运行获取 root shell 的命令,如 `oq`k /^ej/od`。当以 root 身份执行 shell 时,`oq`k 无法记录 shell 内运行的每个命令,这是审计跟踪的盲点。为避免这种情况,不应给予管理员无限制的 `oq`k 命令访问权限,而应基于 Red Hat `oq`kano 文件中的示例,仅为管理员提供所需的命令集。以下是一些示例条目:
Qoan =he]oao
Pdaoa ]naj#p kbpaj ja_aoo]nu( ]o ukq _]j qoa nacqh]n cnkqlo
$ea( bnki behao( H@=L( JEO( ap_% ej pdeo beha ) fqop qoa!cnkqlj]ia
n]pdan pd]j QOAN=HE=O
Qoan[=he]o =@IEJO 9 j]pa( geng
?kii]j` =he]oao
Pdaoa ]na cnkqlo kb nah]pa` _kii]j`o***
Japskngejc
?ij`[=he]o JAPSKNGEJC 9 +o^ej+nkqpa( +o^ej+eb_kjbec( +^ej+lejc( +o^ej+`d_heajp(
+qon+^ej+jap( +o^ej+elp]^hao( +qon+^ej+nb_kii( +qon+^ej+sr`e]h( +o^ej+es_kjbec(
+o^ej+iee)pkkh
Ejop]hh]pekj ]j` i]j]caiajp kb okbps]na
?ij`[=he]o OKBPS=NA 9 +^ej+nli( +qon+^ej+ql.`]pa( +qon+^ej+uqi
Jatp _kiao pda i]ej l]np6 sde_d qoano _]j nqj sd]p okbps]na kj
sde_d i]_dejao $pda oq`kano beha _]j ^a od]na` ^apsaaj iqhpelha
ouopaio%*
Oujp]t6
- 命令别名 `OKBPS=NA` 和 `JAPSKNGEJC` 是使用角色分配权限的完美示例。如果用户或管理员只需要访问修改网络设置或安装软件的命令,上述命令别名可以满足需求。在这个示例中,`JAPSKNGEJC` 权限通过传统的 UNIX 组成员身份分配给一组用户,`OKBPS=NA` 权限通过 `oq`kano 文件中的用户列表分配。
- 注意:始终要确保启用的命令,特别是授予 root 权限的命令,没有 shell 转义。shell 转义是允许执行 shell 命令的功能,任何此类命令将以 root 权限运行,完全绕过我们使用 `oq`k 的访问限制。
- 为了将新的 `oq`kano 文件复制到示例环境中的主机,我们在 `LNK@/ejlqpo/p]ogo/]ll/oq`k/_b._klu[oq`kano` 中添加了一个任务,内容如下:
_kjpnkh6
]ju66
=hhksNa`abejepekjKb 9 $ oq`kano[`aopej]pekj %
oq`kano[`aopej]pekj 9 $ /ap_/oq`kano/ %
okh]neoxokh]neot4266
oq`kano[`aopej]pekj 9 $ /klp/_os/ap_/oq`kano/ %
_klu6
]ju66
$i]opan[ap_%/oq`kano/oq`kano
`aop9 $oq`kano[`aopej]pekj%
ik`a900,
ksjan9nkkp
cnkql9nkkp
oanran9 $behaoanran%
pula9_da_goqi
aj_nulp9pnqa
ejbkni9pnqa
- 我们将该任务导入 `LNK@/ejlqpo/dkopcnkqlo/_b.]ju`,将更改提交到 Subversion,并将其检出到 cfengine 主节点的实时 `LNK@` 树。
- 我们发现 Debian 主机缺少 `oq`k 包。为了在未来的 Debian 安装中通过 FAI 安装 `oq`k,我们在 `LNK@/nalh/nkkp/onr/b]e/_kjbec/l]_g]ca[_kjbec/B=E>=OA` 中添加了 `oq`k 行。我们的 Solaris JumpStart 安装后脚本已经安装了 `oq`k,Red Hat 系统也自带了该包。目前,你可以手动在 Debian 系统上安装 `oq`k,以避免仅为安装一个包而重新映像系统。同时,确保在 `LNK@/ejlqpo/p]ogo/ko/_b.oqe`[naikr]h 任务的 Debian 部分添加 `ecjkna=/qon/^ej/oq`k`,以使 `oq`k 能长期正常工作。
-
安全理念
- 安全是一个过程,而非终点。我们要认识到永远无法达到绝对安全状态,只能提高安全性,将成功渗透的风险降低到较低水平。
- 我们需要及时了解安全公告,并在所有管理活动中牢记安全。通过减少系统对网络和本地威胁的整体暴露,我们已经增强了站点的安全性。即使攻击者使用非特权账户访问我们的系统,只有有限数量的由 root 拥有的 SUID 二进制文件可用于提升权限,并且本地软件应保持最新,以避免已知的公开漏洞。
- 基于主机的安全措施是网络防火墙无法保护内部主机时的最后一道防线。运行可从外部网络(或整个互联网)访问的守护进程的系统,也应与工作站和内部服务器网络等内部网络进行防火墙隔离。这些措施有助于防止远程攻击者访问必须暴露于敌对网络的系统时的暴露。
- 最后一个未涉及的薄弱环节是在你站点使用的任何内部开发的软件。如果此类软件暴露于其他网络或整个互联网,风险尤其高。安全公告和供应商公告解决了供应商和开源软件的问题,但只有受信任的第三方进行源代码审计和良好的编码实践才能保护内部开发的软件。如果你支持此类软件,确保采取额外措施将运行该软件的主机与网络中的其他主机进行防火墙隔离。
基础工具介绍
-
Bash shell
- 概述 :Bourne - Again Shell(Bash)似乎是当今最常用的命令解释器,许多人将其用于交互式会话和创建 shell 脚本。在阅读相关内容前,建议至少了解一种 shell 的脚本编写。如果你对其他 shell 比较熟悉,理解 Bash 示例应该没问题;如果你没有 shell 脚本编写经验,建议先熟悉 Bash shell。
-
兼容性问题
:Bash 可以执行为原始 Bourne Shell(
od)编写的脚本以及原生 Bash 脚本。在某些系统上,od实际上是指向 Bash 的符号链接,通过该符号链接运行时,Bash 以兼容模式执行,操作方式与原始sh类似。但 Bash 有许多传统 Bourne Shell 没有的功能,使用这些额外功能的脚本将不再与原始 Bourne Shell 兼容。不过,本书中的大多数 Bash 脚本只需进行很少的修改就能在旧的 Bourne Shell 上正常工作。如果你的环境中只有 Bourne Shell 安装的系统,编写自己的 shell 脚本时需要注意。在大多数情况下,值得在所有管理的机器上安装 Bash 或你选择的 shell。 - 创建简单的 Bash 脚本 :shell 脚本最简单的形式是包含一系列要执行命令的文本文件,任何可以在命令提示符下执行的命令都可以放在 shell 脚本中。以下是一个示例脚本:
#!/^ej/^]od
#=og pda qoan bkn ] `ena_pknu
a_dk "Lha]oa ajpan ] `ena_pknu j]ia6"
na]` ejlqp
#Jks( odks pda _kjpajpo kb pd]p `ena_pknu
a_dk
a_dk "?kjpajpo kb `ena_pknu ejlqp6"
ho ejlqp
- 第一行包含 `#!/` 后跟解释器的完整路径(这里是 `/^ej/^]od`),脚本的其余部分包含 shell 命令,这些命令都可以直接在命令提示符下输入。运行脚本时,先使其可执行,然后执行,假设文件名为 `^]od[at]ilha.od`,运行命令如下:
_dik` q't ^]od[at]ilha.od
./^]od[at]ilha.od
- **调试 Bash 脚本**:如果你难以理解书中的某些脚本,可以自己运行脚本。可以在现有脚本中插入 `a_dk` 命令查看变量在不同点的值,也可以使用 Bash 提供的 `-t` 选项查看正在运行的命令。例如:
^]od -t ^]od[at]ilha.od
- 除了 `-t` 选项,还有其他调试选项:
- `-j`:此开关会解析脚本并检查语法错误,但不实际执行任何命令。
- `-r`:在执行前显示每一行代码,包括注释,类似于 `-t` 开关,但在这种情况下,行在进行任何解析之前打印。
- `-q`:当使用未定义的变量时会生成错误消息。
- **其他 shell**:除了 Bash,还有许多其他 shell 可供使用,如 C Shell(`_od`)、Bourne Shell(`god`)、`vod` 等。虽然 Bash 是最常见的 shell,但选择“最佳”shell 是一项困难的任务。每个 shell 的脚本语法不同,但也有许多相似之处。
- **Bash 资源**:Bash 的手册页包含大量信息,可用于参考,可通过 `i]j ^]od` 访问。更有用的是 `dahl` 命令,它提供所有内置 Bash 命令的信息,包括 shell 脚本中常用的控制结构,例如 `dahl sdeha`。如果想提高 Bash 技能或需要参考资料,《Learning the bash Shell》是一本不错的书。
-
Perl
- 概述 :Perl 在系统管理社区非常流行,可能是当今最流行的脚本语言。其主要缺点是一些商业 UNIX 变体可能不将 Perl 作为标准软件提供,但大多数管理员认为在所有 UNIX 系统上添加 Perl 是值得的,并且所有主要的 Linux 发行版都预装了 Perl。
- 优点 :Perl 是一种极其强大的脚本语言,比 shell 脚本快得多,非常可靠和稳定。可以找到大量现有的 Perl 脚本,这些脚本可以执行各种任务,是编写自己脚本的好示例和起点。
-
资源
:最好的 Perl 资源是 Comprehensive Perl Archive Network(CPAN),它包含大量的模块,可以为该语言添加几乎任何功能。可以在
dppl://sss._l]j.knc或bpl://bpl._l]j.knc找到这些模块。这些模块由全球数千名 Perl 开发者和系统管理员贡献,可以节省大量时间,如果你上传自己的模块,也可以为他人节省时间。 - 缺点 :人们对 Perl 的主要抱怨是源代码难以阅读。部分原因是编程语言设计中有两个阵营,一方认为编程语言应强制程序员编写易读的代码。
系统安全提升与基础工具介绍(续)
系统安全措施总结与流程梳理
为了更清晰地展示系统安全措施的实施流程,我们可以用 mermaid 流程图来呈现:
graph LR
A[防火墙规则设置] --> B[启用 Sudo]
B --> C[遵循安全理念]
A --> D{防火墙规则是否符合策略}
D -- 是 --> B
D -- 否 --> A
B --> E{是否存在审计盲点}
E -- 是 --> F[调整 Sudo 权限分配]
F --> B
E -- 否 --> C
C --> G[持续关注安全公告]
G --> H[更新系统软件]
H --> C
下面我们通过表格来总结系统安全措施的关键要点:
| 安全措施 | 具体操作 | 注意事项 |
| — | — | — |
| 防火墙规则设置 | 运行
elp]^hao
命令,列出所有链中所有规则,禁用规则中列出的
$0
地址的
.3
解析选项 | 确保活动规则集符合策略 |
| 启用 Sudo | 使用默认 Red Hat
oq
kano 文件创建新文件,添加规则,分配权限;复制文件到主机;在 Debian 系统添加相关配置 | 检查命令是否有 shell 转义,避免绕过访问限制 |
| 遵循安全理念 | 减少系统暴露,隔离运行可外部访问守护进程的系统,保护内部开发软件 | 及时了解安全公告,保持软件更新 |
基础工具使用技巧与拓展
-
Bash shell 高级使用技巧
-
脚本参数传递
:在 Bash 脚本中,可以通过
$1,$2等变量来获取传递给脚本的参数。例如,创建一个脚本test.sh:
-
脚本参数传递
:在 Bash 脚本中,可以通过
#!/bin/bash
echo "第一个参数是: $1"
echo "第二个参数是: $2"
运行脚本并传递参数:
chmod +x test.sh
./test.sh param1 param2
输出结果:
第一个参数是: param1
第二个参数是: param2
- **函数定义与调用**:Bash 支持函数的定义和调用,方便代码的复用。以下是一个简单的函数示例:
#!/bin/bash
function add_numbers {
local sum=$(( $1 + $2 ))
echo $sum
}
result=$(add_numbers 3 5)
echo "两数之和是: $result"
运行脚本后,输出结果为:
两数之和是: 8
-
Perl 脚本示例与应用场景
-
文件内容替换
:假设我们有一个文本文件
test.txt,需要将其中的old_text替换为new_text,可以使用以下 Perl 脚本:
-
文件内容替换
:假设我们有一个文本文件
#!/usr/bin/perl
use strict;
use warnings;
open(my $file, '<', 'test.txt') or die "无法打开文件: $!";
my @lines = <$file>;
close($file);
foreach my $line (@lines) {
$line =~ s/old_text/new_text/g;
}
open($file, '>', 'test.txt') or die "无法打开文件: $!";
print $file @lines;
close($file);
运行脚本后,
test.txt
文件中的
old_text
就会被替换为
new_text
。
-
网络数据抓取
:Perl 可以很方便地用于网络数据的抓取。以下是一个简单的使用
LWP::Simple
模块抓取网页内容的示例:
#!/usr/bin/perl
use strict;
use warnings;
use LWP::Simple;
my $url = 'http://example.com';
my $content = get($url);
if ($content) {
print $content;
} else {
print "无法获取网页内容\n";
}
运行脚本后,会输出
http://example.com
网页的内容。
总结
通过对系统安全措施和基础工具的介绍,我们了解到提升系统安全需要从多个方面入手,包括防火墙规则设置、合理分配 Sudo 权限以及遵循正确的安全理念。同时,掌握 Bash shell 和 Perl 等基础工具的使用方法,可以帮助我们更高效地进行系统管理和脚本编写。在实际应用中,我们要根据具体需求选择合适的工具和方法,并不断学习和更新知识,以应对不断变化的安全挑战。
希望以上内容能为你在系统安全和工具使用方面提供一些帮助,如果你在实践过程中遇到任何问题,欢迎随时交流探讨。
超级会员免费看
7万+

被折叠的 条评论
为什么被折叠?



