首页 > 系统相关 >Linux-安全实战秘籍-全-

Linux-安全实战秘籍-全-

时间:2024-05-16 19:40:56浏览次数:17  
标签:实战 文件 秘籍 Linux 系统 命令 使用 我们

Linux 安全实战秘籍(全)

原文:zh.annas-archive.org/md5/9B7E99EE96EAD6CC77971D4699E9954A

译者:飞龙

协议:CC BY-NC-SA 4.0

前言

在设置 Linux 系统时,安全性应该是所有阶段的重要组成部分。对 Linux 基础知识的良好了解对于在机器上实施良好的安全策略至关重要。

Linux 作为发行的时候并不完全安全,管理员有责任配置机器,使其更加安全。

《实用 Linux 安全食谱》将作为管理员的实用指南,并帮助他们配置更安全的机器。

如果您想了解内核配置、文件系统安全、安全身份验证、网络安全以及 Linux 的各种安全工具,那么这本书适合您。

Linux 安全是一个庞大的主题,并不是一本书就能涵盖所有内容。不过,《实用 Linux 安全食谱》将为您提供许多保护您机器的方法。

本书涵盖内容

第一章,Linux 安全问题,涵盖了与 Linux 相关的各种漏洞和利用。它还讨论了可以针对这些漏洞实施的安全类型。主题包括为密码保护和服务器安全准备安全策略和安全控制,以及执行 Linux 系统的漏洞评估。它还涵盖了 sudo 访问的配置。

第二章,配置安全和优化内核,侧重于配置和构建 Linux 内核及其测试的过程。涵盖的主题包括构建内核的要求、配置内核、内核安装、定制和内核调试。本章还讨论了使用 Netconsole 配置控制台。

第三章,本地文件系统安全,探讨了 Linux 文件结构和权限。它涵盖了查看文件和目录详细信息、使用 chmod 处理文件和文件权限以及实施访问控制列表等主题。本章还向读者介绍了 LDAP 的配置。

第四章,Linux 本地身份验证,探讨了在本地系统上进行用户身份验证并保持安全性。本章涵盖的主题包括用户身份验证日志记录、限制用户登录能力、监视用户活动、身份验证控制定义,以及如何使用 PAM。

第五章,远程身份验证,讨论了在 Linux 系统上远程对用户进行身份验证。本章涵盖的主题包括使用 SSH 进行远程服务器访问、禁用和启用 root 登录、在使用 SSH 时限制远程访问、通过 SSH 远程复制文件以及设置 Kerberos。

第六章,网络安全,提供有关网络攻击和安全的信息。它涵盖了管理 TCP/IP 网络、使用 Iptables 配置防火墙、阻止欺骗地址和不需要的传入流量。本章还向读者介绍了配置和使用 TCP Wrapper。

第七章,安全工具,针对可以用于 Linux 系统安全的各种安全工具或软件。本章涵盖的工具包括 sXID、PortSentry、Squid 代理、OpenSSL 服务器、Tripwire 和 Shorewall。

第八章,Linux 安全发行版,向读者介绍了一些与安全和渗透测试相关的著名 Linux/Unix 发行版。本章涵盖的发行版包括 Kali Linux、pfSense、DEFT、NST 和 Helix。

第九章,补丁 Bash 漏洞,探讨了 Bash shell 最著名的漏洞,即 Shellshock。它使读者了解了 Shellshock 漏洞以及其存在可能引发的安全问题。该章还告诉读者如何使用 Linux 补丁管理系统来保护他们的机器,并使他们了解在 Linux 系统中如何应用补丁。

第十章,安全监控和日志记录,提供了有关在 Linux 上监控日志的信息,包括本地系统和网络。本章讨论的主题包括使用 Logcheck 监控日志,使用 Nmap 进行网络监控,使用 Glances 进行系统监控,以及使用 MultiTail 监控日志。还讨论了一些其他工具,包括 Whowatch、stat、lsof、strace 和 Lynis。

您需要为这本书做好准备

为了充分利用本书,读者应该对 Linux 文件系统和管理有基本的了解。他们应该熟悉 Linux 的基本命令,并且了解信息安全将是一个额外的优势。

本书将包括使用 Linux 内置工具以及其他可用的开源工具进行 Linux 安全的实际示例。根据配方,读者将需要安装这些工具,如果它们尚未安装在 Linux 中。

这本书适合谁

实用 Linux 安全食谱适用于所有那些已经了解 Linux 文件系统和管理的 Linux 用户。您应该熟悉基本的 Linux 命令。了解信息安全及其对 Linux 系统的风险也有助于更容易地理解配方。

然而,即使您对信息安全不熟悉,也能轻松地跟随和理解所讨论的配方。

由于实用 Linux 安全食谱采用了实用的方法,按照步骤非常容易。

章节

在本书中,您会经常看到几个标题(准备好、如何做、工作原理、还有更多、另请参阅)。

为了清晰地说明如何完成一个配方,我们使用以下部分:

准备好

本节告诉您在配方中可以期待什么,并描述如何设置配方所需的任何软件或任何预备设置。

如何做...

本节包含了跟随配方所需的步骤。

工作原理...

本节通常包括对前一节发生的事情的详细解释。

还有更多...

本节包含了有关配方的额外信息,以便使读者对配方更加了解。

另请参阅

本节提供了有关配方的其他有用信息的链接。

约定

在本书中,您会发现许多区分不同类型信息的文本样式。以下是这些样式的一些示例及其含义的解释。

文本中的代码词、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 句柄显示如下:“md5sum命令然后会在一行中打印出计算出的哈希值。”

任何命令行输入或输出都以以下形式书写:

telinit 1

新术语重要单词以粗体显示。例如,屏幕上看到的菜单或对话框中的单词会以这种形式出现在文本中:“导航到主菜单 | 回溯 | 利用工具 | 网络利用工具 | Metasploit 框架 | Msfconsole。”

注意

警告或重要提示会以这样的方式出现在一个框中。

提示

提示和技巧会以这种形式出现。

读者反馈

我们始终欢迎读者的反馈。让我们知道您对本书的看法——您喜欢或不喜欢的地方。读者的反馈对我们很重要,因为它可以帮助我们开发您真正能从中受益的标题。

要向我们发送一般反馈,只需发送电子邮件至<[email protected]>,并在主题中提及书名。

如果您在某个专题上有专业知识,并且有兴趣撰写或为书籍做出贡献,请参阅我们的作者指南www.packtpub.com/authors

客户支持

现在您是 Packt 书籍的自豪所有者,我们有一些东西可以帮助您充分利用您的购买。

下载示例代码

您可以从您在www.packtpub.com的帐户中下载本书的示例代码文件。如果您在其他地方购买了本书,您可以访问www.packtpub.com/support并注册,以便文件直接发送到您的电子邮件。

您可以按照以下步骤下载代码文件:

  1. 使用您的电子邮件地址和密码登录或注册我们的网站。

  2. 将鼠标指针悬停在顶部的支持选项卡上。

  3. 点击代码下载和勘误

  4. 搜索框中输入书名。

  5. 选择您要下载代码文件的书。

  6. 从下拉菜单中选择您从哪里购买了这本书。

  7. 点击代码下载

您还可以通过在 Packt Publishing 网站上的书页上点击代码文件按钮来下载代码文件。可以通过在搜索框中输入书名来访问此页面。请注意,您需要登录到您的 Packt 帐户。

下载文件后,请确保使用以下最新版本的软件解压或提取文件夹:

  • WinRAR / 7-Zip for Windows

  • Zipeg / iZip / UnRarX for Mac

  • 7-Zip / PeaZip for Linux

下载本书的彩色图片

我们还为您提供了一个 PDF 文件,其中包含本书中使用的屏幕截图/图表的彩色图片。彩色图片将帮助您更好地理解输出中的变化。您可以从www.packtpub.com/sites/default/files/downloads/PracticalLinuxSecurityCookbook_ColoredImages.pdf下载此文件。

勘误

尽管我们已经尽一切努力确保内容的准确性,但错误还是会发生。如果您在我们的书中发现错误——可能是文本或代码中的错误——我们将不胜感激,如果您能向我们报告。通过这样做,您可以帮助其他读者避免挫败感,并帮助我们改进本书的后续版本。如果您发现任何勘误,请访问www.packtpub.com/submit-errata报告,选择您的书,点击勘误提交表链接,并输入您的勘误详情。一旦您的勘误经过验证,您的提交将被接受,并且勘误将被上传到我们的网站或添加到该书的勘误部分下的任何现有勘误列表中。

要查看先前提交的勘误,请转到www.packtpub.com/books/content/support,并在搜索框中输入书名。所需信息将出现在勘误部分下。

盗版

互联网上侵犯版权材料的盗版是所有媒体的持续问题。在 Packt,我们非常重视版权和许可的保护。如果您在互联网上发现我们作品的任何非法副本,请立即向我们提供位置地址或网站名称,以便我们采取补救措施。

请通过链接<[email protected]>与我们联系,提供涉嫌盗版材料的链接。

我们感谢您在保护我们的作者和我们为您带来有价值的内容的能力方面的帮助。

问题

如果您对这本书的任何方面有问题,您可以通过<[email protected]>与我们联系,我们将尽力解决问题。

第一章:Linux 安全问题

在本章中,我们将讨论以下内容:

  • Linux 的安全策略

  • 配置密码保护

  • 配置服务器安全性

  • 使用校验和对安装介质进行完整性检查

  • 使用 LUKS 磁盘加密

  • 使用 sudoers – 配置 sudo 访问

  • 使用 Nmap 扫描主机

  • 在易受攻击的 Linux 系统上获取 root 权限

介绍

Linux 机器的安全性取决于管理员的配置。一旦我们完成了 Linux 操作系统的安装,并在安装完成后删除了不必要的软件包,我们可以开始处理软件的安全性以及 Linux 机器提供的服务方面。

Linux 的安全策略

安全策略是定义了组织中设置计算机网络安全的规则和实践。安全策略还定义了组织应该如何管理、保护和分发敏感数据。

制定安全策略

在制定安全策略时,我们应该牢记它应该对所有用户简单易懂。政策的目标应该是在保护数据的同时保持用户的隐私。

它应该围绕这些要点展开:

  • 对系统的可访问性

  • 系统上的软件安装权限

  • 数据权限

  • 从故障中恢复

在制定安全策略时,用户应该只使用已获得许可的服务。不允许的任何事物都应该在政策中受到限制。

配置密码保护

在任何系统中,密码在安全方面起着非常重要的作用。弱密码可能导致组织资源被 compromise。密码保护政策应该被组织中的每个人遵守,从用户到管理员级别。

如何做到…

在选择或保护密码时,请遵循给定的规则。

对于创建策略,请遵循以下规则:

  • 用户不应该在组织中的所有账户上使用相同的密码。

  • 所有与访问相关的密码都不应该相同

  • 任何系统级别的账户的密码都应该与同一用户拥有的其他账户不同

对于保护策略,请遵循以下规则:

  • 密码是需要被视为敏感和机密信息的东西。因此,不应该与任何人分享。

  • 密码不应该通过电子通信(如电子邮件)分享。

  • 永远不要在电话或问卷调查中透露密码。

  • 不要使用可能为攻击者提供线索的密码提示。

  • 永远不要与任何人分享公司密码,包括管理人员、经理、同事,甚至家人。

  • 不要在办公室的任何地方以书面形式存储密码。如果在移动设备上存储密码,始终使用加密。

  • 不要使用应用程序的“记住密码”功能。

  • 如果怀疑密码被 compromise,立即报告事件并尽快更改密码。

对于更改策略,请遵循以下规则:

  • 所有用户和管理员必须定期更改密码,或者至少每季度更改一次

  • 组织的安全审计团队必须进行随机检查,以检查任何用户的密码是否可以被猜测或破解。

它是如何运作的…

通过前述要点的帮助,确保密码在创建或更改时不容易被猜测或破解。

配置服务器安全性

对 Linux 服务器进行恶意攻击的一个主要原因是安全性实施不当或现有的漏洞。在配置服务器时,安全策略需要得到适当的实施,并且需要承担责任以便正确定制服务器。

如何做到…

一般政策:

  • 组织内所有内部服务器的管理是专门团队的责任,该团队还应该密切关注任何合规性。如果发生任何合规性,团队应相应地实施或审查安全策略。

  • 在配置内部服务器时,必须以这样的方式注册服务器,以便可以根据以下信息识别服务器:

  • 服务器的位置

  • 操作系统版本及其硬件配置

  • 正在运行的服务和应用程序

  • 组织管理系统中的任何信息都必须始终保持最新。

配置策略:

  • 服务器上的操作系统应按照 InfoSec 批准的指南进行配置。

  • 尽可能禁用未使用的任何服务或应用程序。

  • 对服务器上的所有服务和应用程序的所有访问都应进行监控和记录。它们还应通过访问控制方法进行保护。这方面的示例将在第三章中进行介绍,本地文件系统安全

  • 系统应保持更新,并且应尽快安装任何最近的安全补丁(如果有的话)。

  • 尽量避免使用 root 帐户。最好使用需要最少访问权限来执行功能的安全原则。

  • 任何特权访问必须尽可能通过安全通道连接(SSH)进行。

  • 应在受控环境中访问服务器。

监控策略:

  • 服务器系统上的所有与安全相关的操作必须记录,并且审计报告应保存如下:

  • 所有与安全相关的日志应在线保存 1 个月

  • 在 1 个月的时间内,应保留每日备份以及每周备份

  • 至少保留 2 年的完整月度备份

  • 任何与安全有关的事件应报告给 InfoSec 团队。然后他们将审查日志并向 IT 部门报告事件。

  • 一些与安全相关的事件的示例如下:

  • 与端口扫描相关的攻击

  • 未经授权访问特权帐户

  • 由于主机上存在特定应用程序而导致的异常事件

工作原理…

遵循前述政策有助于对组织拥有或运营的内部服务器进行基本配置。有效实施该政策将最大程度地减少对敏感和专有信息的未经授权访问。

还有更多内容…

在谈论 Linux 安全时,还有一些其他要发现的事情。

安全控制

当我们谈论保护 Linux 机器时,应始终从遵循清单开始,以帮助加固系统。清单应该是这样的,遵循它将确认适当的安全控制的实施。

使用校验和对安装介质进行完整性检查

每当我们下载任何 Linux 发行版的镜像文件时,都应始终检查其正确性和安全性。可以通过将下载的镜像的 MD5 校验和与正确镜像的 MD5 值进行比较来实现这一点。

这有助于检查下载文件的完整性。通过 MD5 哈希比较可以检测到文件的任何更改。

每当下载文件发生更改时,MD5 哈希比较可以检测到。文件越大,文件更改的可能性就越高。建议对诸如光盘上的操作系统安装文件之类的文件进行 MD5 哈希比较。

准备工作

大多数 Linux 发行版通常已安装了 MD5 校验和,因此不需要安装。

操作步骤…

  1. 首先打开 Linux 终端,然后使用ubuntu@ubuntu-desktop:~$ cd Downloads命令将目录更改为包含下载的 ISO 文件的文件夹。

注意

Linux 区分大小写,请为文件夹名称输入正确的拼写。在 Linux 中,Downloadsdownloads不同。

  1. 切换到Downloads目录后,键入以下命令:
md5sum ubuntu-filename.iso

  1. 然后,md5sum命令将以单行打印计算出的哈希,如下所示:
8044d756b7f00b695ab8dce07dce43e5 ubuntu-filename.iso

现在,我们可以将前面命令计算的哈希与 UbuntuHashes 页面上的哈希进行比较(help.ubuntu.com/community/UbuntuHashes)。打开 UbuntuHashes 页面后,我们只需要在浏览器的查找框中复制前面计算的哈希(按下Ctrl + F)。

工作原理…

如果计算出的哈希与 UbuntuHashes 页面上的哈希匹配,则下载的文件没有损坏。如果哈希不匹配,则可能是下载的文件或下载的服务器出了问题。尝试重新下载文件。如果问题仍然存在,建议您向服务器管理员报告问题。

另请参阅

如果您想要额外的东西,可以尝试一下 Ubuntu 可用的 GUI 校验和计算器

有时,使用终端执行校验和真的很不方便。您需要知道已下载文件的正确目录以及确切的文件名。这使得很难记住确切的命令。

作为解决方案,有一个名为GtkHash的非常小型和简单的软件。

您可以从gtkhash.sourceforge.net/下载该工具,并使用此命令进行安装:

sudo apt-get install gtkhash

使用 LUKS 磁盘加密

在小型企业和政府办公室等企业中,用户可能需要保护其系统以保护其私人数据,包括客户详细信息、重要文件、联系方式等。为此,Linux 提供了大量的加密技术,可用于保护硬盘或可移动介质上的数据。其中一种加密技术使用Linux 统一密钥设置-磁盘格式(LUKS)。该技术允许对 Linux 分区进行加密。

LUKS 具有以下功能:

  • 可以使用 LUKS 对整个块设备进行加密。它非常适合保护可移动存储介质或笔记本电脑硬盘驱动器上的数据。

  • 一旦加密,加密块设备的内容就是随机的,因此对于加密交换设备非常有用。

  • LUKS 使用现有的设备映射器内核子系统。

  • 它还提供了一个口令强化器,有助于防范字典攻击。

准备就绪

为了使以下过程工作,需要在安装 Linux 时在单独的分区上创建/home

提示

警告

使用给定的步骤配置 LUKS 将删除正在加密的分区上的所有数据。因此,在开始使用 LUKS 的过程之前,请务必将数据备份到外部来源。

如何操作…

要手动加密目录,请按照以下步骤进行:

  1. 切换到运行级别 1。在 shell 提示符或终端中键入以下命令:
telinit 1

  1. 现在,使用此命令卸载当前的/home分区:
umount /home

  1. 如果有任何控制/home的进程,前面的命令可能会失败。使用fuser命令找到并终止任何此类进程:
fuser -mvk /home

  1. 检查确认/home分区现在未挂载:
grep home /proc/mounts

  1. 现在,将一些随机数据放入分区:
shred -v --iterations=1 /dev/MYDisk/home

  1. 前面的命令可能需要一些时间才能完成,所以请耐心等待。所花费的时间取决于您设备的写入速度。

  2. 一旦前面的命令完成,初始化分区:

cryptsetup --verbose --verify-passphrase luksFormat /dev/MYDisk/home

  1. 打开新创建的加密设备:
cryptsetup luksOpen /dev/MYDisk/home 

  1. 检查确认设备是否存在:
ls -l /dev/mapper | grep home

  1. 现在创建文件系统:
mkfs.ext3 /dev/mapper/home

  1. 然后,挂载新的文件系统:
mount /dev/mapper/home /home

  1. 确认文件系统仍然可见:
df -h | grep home

  1. /etc/crypttab文件中输入以下行:
home /dev/MYDisk/home none

  1. /etc/fstab文件中进行更改,删除/home的条目并添加以下行:
/dev/mapper/home /home ext3 defaults 1 2

  1. 完成后,运行此命令以恢复默认的 SELinux 安全设置:
/sbin/restorecon -v -R /home

  1. 重新启动机器:
shutdown -r now

  1. 重启后,系统将在启动时提示我们输入 LUKS 密码。您现在可以以 root 身份登录并恢复您的备份。

恭喜!您已成功创建了一个加密分区。现在,即使计算机关闭,您也可以保持所有数据的安全。

工作原理…

我们首先进入运行级别 1 并卸载/home分区。卸载后,在/home分区中填充一些随机数据。然后,我们使用cryptsetup命令对分区进行初始化并加密。

加密完成后,我们再次挂载文件系统,然后在/etc/crypttab文件中添加分区的条目。此外,编辑/etc/fstab文件以添加前面加密的分区的条目。

完成所有步骤后,我们已恢复了 SELinux 的默认设置。

这样做,系统将始终在启动时要求输入 LUKS 密码。

利用 sudoers – 配置 sudo 访问权限

每当系统管理员希望为受信任的用户提供对系统的管理访问权限,而不共享 root 用户的密码时,他们可以使用sudo机制来实现。

一旦用户使用sudo机制获得访问权限,他们可以通过在命令前加上sudo来执行任何管理命令。然后,用户将被要求输入他们自己的密码。之后,管理命令将以与 root 用户相同的方式执行。

准备工作

由于配置文件是预定义的,使用的命令是内置的,在开始这些步骤之前不需要额外配置。

操作步骤…

  1. 我们将首先创建一个普通帐户,然后给予它sudo访问权限。完成后,我们将能够从新帐户使用sudo命令,然后执行管理命令。按照给定的步骤配置sudo访问权限。首先,使用 root 帐户登录系统。然后,使用useradd命令创建用户帐户,如下图所示:操作步骤…

在前面的命令中,用任何您选择的名称替换USERNAME

  1. 现在,使用passwd命令为新用户帐户设置密码。操作步骤…

  2. 通过运行visudo编辑/etc/sudoers文件。使用sudo命令时应用的策略由/etc/sudoers文件定义。操作步骤…

  3. 一旦文件在编辑器中打开,搜索以下允许test组中的用户使用sudo访问的行:操作步骤…

  4. 我们可以通过删除第二行开头的注释字符(#)来启用给定的配置。一旦更改完成,保存文件并退出编辑器。现在,使用usermod命令,将先前创建的用户添加到test组。操作步骤…

  5. 我们需要检查前面截图中显示的配置是否允许新用户帐户使用sudo运行命令。

  6. 使用su选项切换到新创建的用户帐户。操作步骤…

  7. 现在,使用groups命令确认test组中存在用户帐户。操作步骤…

最后,使用新帐户从sudo运行whoami命令。由于我们是第一次使用新用户帐户执行使用sudo的命令,sudo命令将显示默认的横幅消息。屏幕还会要求输入用户帐户密码。

操作步骤…

  1. 前面输出的最后一行是whoami命令返回的用户名。如果sudo配置正确,这个值将是root

您已成功配置了一个具有sudo访问权限的用户。您现在可以登录到这个用户帐户,并使用sudo来运行命令,就像您从根用户那里一样。

它是如何工作的…

当我们创建一个新帐户时,它没有权限运行管理员命令。但是,在编辑/etc/sudoers文件并对新用户帐户授予sudo访问的适当条目后,我们可以开始使用新用户帐户运行所有管理员命令。

还有更多…

以下是您可以采取的额外措施,以确保总体安全。

漏洞评估

漏洞评估是通过审计我们的网络和系统安全性来了解我们网络的机密性、完整性和可用性的过程。漏洞评估的第一阶段是侦察,这进一步导致了系统准备阶段,我们主要检查目标中所有已知的漏洞。下一个阶段是报告,我们将所有发现的漏洞分为低、中和高风险的类别。

使用 Nmap 扫描主机

Nmap 是 Linux 中包含的最流行的工具之一,可用于扫描网络。它已经存在多年,迄今为止,它是收集有关网络信息的最可取的工具之一。

Nmap 可以被管理员用于他们的网络上找到任何开放的端口和主机系统。

在进行漏洞评估时,Nmap 无疑是一个不可或缺的工具。

准备就绪

大多数 Linux 版本都安装了 Nmap。第一步是使用以下命令检查您是否已经拥有它:

nmap –version

如果 Nmap 存在,你应该看到类似于这里显示的输出:

准备就绪

如果尚未安装 Nmap,可以从nmap.org/download.html下载并安装它

如何做…

按照以下步骤使用 Nmap 扫描主机:

  1. Nmap 最常见的用途是找到给定 IP 范围内的所有在线主机。用于执行此操作的默认命令需要一些时间来扫描完整的网络,这取决于网络中存在的主机数量。但是,我们可以优化这个过程,以便更快地扫描范围。

以下截图向您展示了一个例子:

如何做…

  1. 在前面的例子中,扫描完成所用的时间为 6.67 秒,扫描了 100 个主机。如果要扫描特定网络的整个 IP 范围,将需要更多的时间。

  2. 现在,让我们试着加快这个过程。n开关告诉 Nmap 不执行 IP 地址的 DNS 解析,从而使过程更快。T开关告诉 Nmap 以什么速度运行。在这里,T1是最慢的,T5是最快的。max-rtt-timeout选项指定等待响应的最长时间。

现在,相同的命令在这个例子中显示如下:

如何做…

这一次,Nmap 在 1.97 秒内扫描了完整的 IP 范围。相当不错,对吧?

  1. 使用 Nmap 进行端口扫描有助于我们发现在线的服务,比如找到 FTP 服务器。要做到这一点,使用以下命令:如何做…

Nmap 的前面的命令将列出所有开放端口 21 的 IP 地址。

  1. 不仅 FTP,其他服务也可以通过匹配它们运行的端口号来发现。例如,MySQL 运行在端口 3306 上。命令现在将如下所示:如何做…

它是如何工作的…

Nmap 通过测试最常见的网络通信端口来检查正在监听的服务。这些信息有助于网络管理员关闭任何不需要或未使用的服务。前面的例子向您展示了如何使用端口扫描和 Nmap 作为研究我们周围网络的强大工具。

另请参阅

Nmap 还具有脚本功能,可以编写自定义脚本。这些脚本可以与 Nmap 一起使用,自动化和扩展其扫描能力。您可以在其官方主页nmap.org/上找到有关 Nmap 的更多信息。

在易受攻击的 Linux 系统上获得 root 权限

学习如何扫描和利用 Linux 机器时,我们遇到的一个主要问题是在哪里学习。为此,Metasploit 团队开发并发布了一个名为Metasploitable的 VMware 机器。这台机器被故意制作成易受攻击,并且有许多未打补丁的服务在运行。因此,它成为了一个练习或开发渗透测试技能的绝佳平台。在本节中,您将学习如何扫描 Linux 系统,然后使用扫描结果找到一个有漏洞的服务。利用这个有漏洞的服务,我们将获得对系统的 root 访问权限。

准备工作

本节将使用 Backtrack 5R2 和 Metasploitable VMware 系统。Metasploitable 的镜像文件可以从sourceforge.net/projects/metasploitable/files/Metasploitable2/下载。

操作步骤…

按照以下步骤获得对易受攻击的 Linux 系统的 root 访问权限:

  1. 首先,通过以下菜单在 backtrack 系统上打开 Metasploit 控制台:导航到Main Menu | Backtrack | Exploitation Tools | Network Exploitation Tools | Metasploit Framework | Msfconsole

  2. 接下来,我们需要使用 Nmap 扫描目标(在本例中是192.168.0.1):

这张图片显示了执行的命令的输出:

如何操作…

在上述命令中,-Ss选项允许我们执行隐蔽扫描,-A选项尝试发现操作系统和服务的版本信息。

此外,在上述命令中,我们可以看到许多服务在不同的端口上运行。其中包括运行在端口 139 和 445 上的 Samba。

注意

请注意,Samba 是一个为 Windows 系统提供 SMB 文件和打印服务的服务。

  1. 一旦我们能够找到 Samba 服务,我们现在将专注于它。从上述输出中,我们可以看到 Samba 运行的是 3.x 版本。现在,我们将尝试获取有关服务的更具体信息。为此,我们将使用 Metasploit 的任何辅助模块,比如扫描器部分,并寻找 SMB 协议。如何操作…

  2. 我们可以看到扫描器部分有一个 SMB 版本检测器。现在,我们将使用 SMB 检测程序获得 Samba 的确切版本。如果我们在线搜索特定版本的 Samba 的所有漏洞,我们将找到用户名 map script。

  3. 我们现在可以在 Metasploit 提供的漏洞列表中搜索map script用户名是否存在漏洞,使用search samba命令。如何操作…

  4. 我们已经找到了 map script 用户名的一个漏洞利用,并且它的评分非常优秀,这意味着我们可以使用这个漏洞利用。

  5. 现在,使用 map script 用户名在系统中获得 root 级别的 shell。如何操作…

现在,我们将使用上述漏洞利用获得对系统的 root 级别访问权限。一旦我们选择了漏洞利用并配置了目标 IP 地址(在本例中是192.168.0.1),我们将执行一个命令来运行漏洞利用。这将在目标系统上创建并给我们一个远程会话,并打开一个命令 shell。现在,在远程 shell 中运行id命令。这将给出一个结果—uid=0(root)gid=0(root)。这证实我们已经对目标系统具有远程 root 访问权限。

它是如何工作的

我们首先执行了 Nmap 扫描,以检查运行的服务和开放的端口,并发现 Samba 服务正在运行。然后,我们尝试找到 SMB 服务的版本。一旦获得这些信息,我们就搜索了 Samba 的任何利用。使用利用漏洞,我们试图攻击目标系统,并在其中获得了 root shell。

还有更多…

让我们了解一些特有于 Linux 的更多利用和攻击。

在本节中,我们将介绍 Linux 容易受到的一些常见利用和攻击。但是,在本节中,我们不会涵盖任何处理攻击的方法。本节只是让您了解 Linux 中常用的利用。

空密码或默认密码

通常,管理员使用供应商提供给他们的默认密码,或者甚至将管理密码留空。这主要发生在配置设备(如路由器)和 BIOS 时。甚至一些在 Linux 上运行的服务可能包含默认的管理员密码。建议您始终更改默认密码,并设置一个只有管理员知道的新密码。

IP 欺骗

攻击者可以在我们的系统和服务器上找到漏洞,并利用这些漏洞安装后台程序或攻击网络。如果攻击者以一种使其看起来像是本地网络中的一个节点的方式连接他的系统到我们的网络,就可以实现这一点。在执行 IP 欺骗时,有各种工具可用于帮助黑客。

窃听

攻击者可以通过窃听来收集在网络上进行通信的两个活动节点之间传递的数据。这种类型的攻击主要适用于 Telnet、FTP 和 HTTP 等协议。这种攻击可以在远程攻击者已经可以访问网络上的任何系统时进行。这可以通过其他攻击,如中间人攻击来实现。

服务漏洞

如果攻击者能够发现网络系统上运行的任何服务的缺陷或漏洞,他们可以 compromise 整个系统及其数据以及网络上的其他系统。

管理员应该及时了解网络系统上运行的任何服务或应用程序的可用补丁或更新。

拒绝服务(DoS)攻击

当攻击者向目标系统发送未经授权的数据包(可以是服务器、路由器或工作站),并且数量很大时,会导致资源对合法用户不可用。

攻击者发送的数据包通常是伪造的,这使得调查过程变得困难。

第二章:配置安全和优化内核

在本章中,我们将讨论以下内容:

  • 构建和使用内核的要求

  • 创建 USB 引导介质

  • 检索内核源代码

  • 配置和构建内核

  • 安装和引导内核

  • 测试和调试内核

  • 使用 Netconsole 配置控制台进行调试

  • 引导时调试内核

介绍

对于包括 Ubuntu、CentOS 和 Fedora 在内的所有 Linux 发行版,内核都是至关重要的。在大多数 Linux 版本安装操作系统时,默认安装内核,因此我们通常不必编译内核。即使需要安装内核的关键更新,也可以在 Linux 系统上使用apt-getyum来完成。

但是,可能会有一些情况需要我们自己从源代码编译内核。以下是其中的一些情况:

  • 启用内核中的实验性功能

  • 启用新的硬件支持

  • 调试内核

  • 探索内核源代码

构建和使用内核的要求

在我们开始构建 Linux 内核之前,我们必须确保 Linux 系统存在工作的引导介质。如果引导加载程序未正确配置,可以用它来引导进入 Linux 系统。您将学习如何创建 USB 引导介质,检索内核源代码,配置和构建内核,并执行内核的安装和引导。

创建 USB 引导介质

可以在格式为 ext2、ext3 或 VFAT 的任何 USB 存储介质上创建 USB 引导介质。还要确保设备上有足够的可用空间,从传输发行版 DVD 映像需要 4GB,传输发行版 CD 映像需要 700MB,或者只需 10MB 来传输最小的引导介质映像。

做好准备

在执行这些步骤之前,我们需要有 Linux 安装光盘的映像文件,我们可以将其命名为boot.iso,以及一个 USB 存储设备,如前所述。

如何做…

要创建 USB 引导介质,我们需要以 root 身份执行这些命令:

  1. 首先,我们需要通过在 USB 存储设备上执行以下命令来安装syslinux引导加载程序:
syslinux /dev/sdb1

  1. 现在,通过执行以下命令为boot.iso文件和 USB 存储设备创建挂载点:
mkdir /mnt/isoboot /mnt/diskboot

  1. 接下来,将boot.iso文件挂载到为其创建的挂载点上:
mount –o loop boot.iso /mnt/isoboot

在上述命令中,使用-o loop选项创建一个伪设备,它充当基于块的设备。它将文件视为块设备。

  1. 接下来,我们将挂载为其创建的挂载点上的 USB 存储设备:
mount /dev/sdb1 /mnt/diskboot

  1. 一旦boot.iso和 USB 存储设备都被挂载,我们将从boot.iso复制isolinux文件到 USB 存储设备:
cp /mnt/isoboot/isolinux/* /mnt/diskboot

  1. 接下来,运行命令,使用boot.iso中的isolinux.cfg文件作为 USB 存储设备的syslinux.cfg文件:
grep –v local /mnt/isoboot/isolinux/isolinux.cfg > /mnt/diskboot/syslinux.cfg

  1. 完成上一个命令后,卸载boot.iso和 USB 存储设备:
unmount /mnt/isoboot /mnt/diskboot

  1. 现在,重新启动系统,然后尝试使用 USB 引导介质引导系统,以验证我们能够使用它引导。

它是如何工作的…

当我们从boot.iso文件复制所需的文件到 USB 存储介质,并使用 USB 存储介质中的isolinux.cfg文件作为syslinux.cfg文件时,它将 USB 存储介质转换为可引导的介质设备,可用于引导 Linux 系统。

检索内核源代码

大多数 Linux 发行版都包含内核源代码。但是,这些源代码可能会有点过时。因此,在构建或自定义内核时,我们可能需要获取最新的源代码。

做好准备

大多数 Linux 内核开发社区使用Git工具来管理源代码。即使 Ubuntu 也已经集成了 Git 用于其自己的 Linux 内核源代码,因此使内核开发人员能够更好地与社区互动。

我们可以使用以下命令安装git软件包:

sudo apt-get install git

如何做…

Linux 内核源代码可以从各种来源下载,我们将讨论从这些来源下载的方法:

  • 我们可以在 Linux 内核的官方网页www.kernel.org上找到完整的 tarball 形式的 Linux 源代码,也可以找到增量补丁形式的源代码。

  • 除非有特定原因要使用旧版本,否则建议使用最新版本。

  • Ubuntu 的内核源代码可以在 Git 下找到。内核的每个发行代码都在自己的 Git 存储库中单独维护,位于kernel.ubuntu.com上:

git://kernel.ubuntu.com/ubuntu/ubuntu-<release>.gitkernel.ubuntu.com/git-repos/ubuntu/

  • 我们可以使用 Git 克隆存储库以获得本地副本。命令将根据我们感兴趣的 Ubuntu 版本进行修改。

  • 要获取精确的树,请执行以下截图中显示的命令:如何做…

  • 使用前面图像中的命令将下载精确的树。要下载任何其他树,命令的语法将是:git clone git://kernel.ubuntu.com/ubuntu/ubuntu-<release>

  • 下载的文件可能是 GNU zip(.gzip)格式或.bzip2格式。下载源文件后,我们需要解压缩它。如果 tarball 是.bzip2格式,使用以下命令:

tar xvjf linux-x.y.z.tar.bz2

如果它是以压缩的 GNU .gz格式,使用以下命令:

tar xvzf linux-x.y.z.tar.gz

工作原理…

使用前面部分提到的不同方法,我们能够下载 Linux 内核的源代码。使用任何选项取决于用户的选择和偏好。

配置和构建内核

由于许多原因可能需要配置内核。我们可能希望调整内核以仅运行必要的服务,或者可能需要对其进行补丁以支持内核先前不支持的新硬件。这对于任何系统管理员来说可能是一项艰巨的任务,在本节中,我们将看看如何配置和构建内核。

准备工作

在任何系统的引导分区中,建议为内核留有充足的空间。我们可以选择整个磁盘安装选项,或者为引导分区留出至少 3GB 的磁盘空间。

在安装 Linux 发行版并在系统上配置开发包后,还需要为我们的用户帐户启用 root 帐户以及 sudo。

现在,在我们开始安装任何软件包之前,运行以下命令来更新系统:

sudo apt-get update && sudo apt-get upgrade

之后,检查build-essential软件包是否已安装。如果没有安装,可以使用以下命令进行安装:

sudo apt-get install build-essential

这个软件包用于在 x86_64 系统上构建 Linux 内核。

我们还需要一些其他要求来编译内核:

  • 使用以下命令安装最新版本的gcc
sudo apt-get install gcc

  • 使用以下命令安装ncurses开发包:
sudo apt-get install libncurses5-dev

  • 还可能需要一些其他软件包来交叉编译 Linux 内核:
sudo apt-get install binutils-multiarch
sudo apt-get install alien

  • 接下来,安装ncurses-dev,这是运行 make menuconfig所需的:
sudo apt-get install ncurses-dev

如何做…

完成准备工作部分的步骤后,我们可以继续进行配置和构建内核的过程。这个过程会花费很多时间,所以要有所准备:

  1. 通过访问www.kernel.org下载 Linux 内核,如下图所示:如何做…

  2. 也可以使用以下命令进行下载:

wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.1.5.tar.xz

如何做…

  1. 下载完成后,转到下载保存的目录。

  2. 如果下载的文件已保存在Downloads文件夹中,则应执行以下命令:如何做…

  3. 现在,使用以下命令将下载的.tar文件提取到/usr/src/位置:如何操作…

  4. 接下来,切换到使用以下命令进行提取的目录:如何操作…

  5. 现在,运行命令配置 Linux 内核,以便可以在系统上进行编译和安装。如何操作…

  6. 如果您的帐户没有管理员权限,执行上述命令之前可能需要使用sudo

  7. 执行上述命令后,将会弹出一个窗口,其中包含一个菜单列表。选择新配置的项目。如何操作…

  8. 您需要检查文件系统菜单。如何操作…

  9. 在其中,检查是否选择了ext4,如下截图所示。如果没有选择,现在需要选择它。如何操作…

  10. 然后,保存配置。如何操作…

  11. 现在,编译 Linux 内核。编译过程将需要大约 40 到 50 分钟的时间,具体取决于系统配置。运行如下命令:

make -j 5

如何操作…

工作原理…

首先下载 Linux 内核源代码,然后在特定位置提取它,为编译过程配置内核。

安装和从内核引导

在花费了大量时间配置和编译内核之后,我们现在可以开始在本地系统上安装内核的过程。

准备工作

在开始安装内核之前,请确保在系统上备份所有重要数据。此外,将/boot/复制到以 FAT32 文件系统格式化的外部存储设备。如果安装过程因任何原因失败,这将有助于修复系统。

如何操作…

在内核编译完成后,我们可以开始遵循安装内核所需的命令。

  1. 通过运行以下命令安装驱动程序:如何操作…

上述命令将把模块复制到/lib/modules 的子目录中。

  1. 现在,运行以下命令来安装实际的内核:
make install

如何操作…

  1. 此命令执行/sbin/installkernel

  2. 新内核将安装在/boot/vmlinuz-{version}中。

如果/boot/vmlinuz已经存在符号链接,它将通过将/boot/vmlinuz链接到新内核来刷新。

先前安装的内核将作为/boot/vmlinuz.old可用。configSystem.map文件也将在相同位置可用。

  1. 接下来,我们将通过运行此命令将内核复制到/boot目录中:
cp -v arch/x86/boot/bzImage /boot/vmlinuz-4.1.6

如何操作…

  1. 现在构建初始 RAM 磁盘。如何操作…

  2. 接下来,我们需要复制包含内核符号及其对应地址列表的System.map。为此,请运行以下命令,将内核的名称附加到目标文件。如何操作…

  3. 接下来,创建symlink /boot/System.map,它将指向/boot/System.map-YourKernelName,如果/boot位于支持符号链接的文件系统上。如何操作…

  4. 如果/boot位于不支持符号链接的文件系统上,只需运行此命令:

cp /boot/System.map-YourKernelName /boot/System.map

工作原理…

在内核配置和编译完成后,我们开始安装内核的过程。第一个命令将把模块复制到/lib/modules 的子目录中。

第二个命令执行/sbin/installkernel。同时,新内核将安装在/boot/vmlinuz-{version}中。在执行此操作时,如果/boot/vmlinuz已经存在符号链接,它将通过将/boot/vmlinuz链接到新内核来刷新。先前安装的内核将作为/boot/vmlinuz.old可用。相同的操作也适用于configSystem.map文件。

一切都完成后,我们可以重新启动系统以从新内核引导。

测试和调试内核

任何开放或封闭的软件开发周期SDC)的重要部分是测试和调试。这也适用于 Linux 内核。测试和调试的最终目标是确保内核在安装新的内核源代码后仍然像以前一样工作。

使用 Netconsole 配置用于调试的控制台

如果我们想捕获内核恐慌,一旦系统重新启动,就会变得困难,因为没有为此创建日志。为了解决这个问题,我们可以使用 Netconsole。

内核模块通过 UDP 记录内核打印消息,当登录到磁盘失败时,这对于调试问题非常有帮助。

准备就绪

在开始配置 Netconsole 之前,我们需要知道将发送 UDP 数据包的系统的 MAC 地址。这个系统被称为接收者,它可能在同一个子网中,也可能在不同的子网中。这两种情况在这里描述:

  1. 第一种情况是接收者在同一个子网中。

  2. 在本例中,接收者的 IP 地址是192.168.1.4。我们将向此 IP 地址发送 UDP 数据包。准备就绪

  3. 现在,让我们通过执行此命令找到接收系统的 MAC 地址。在这种情况下,IP 地址是接收系统的。准备就绪

正如我们在上面的例子中看到的那样,90:00:4e:2f:ac:ef是我们需要的 MAC 地址。

  1. 第二种情况是接收者不在同一个子网中。在这种情况下,我们需要首先找到默认网关。为此,我们运行此命令:准备就绪

  2. 在这里,默认网关是192.168.1.1

  3. 我们需要找到默认网关的 MAC 地址。首先,以这种方式向默认网关发送一个数据包:准备就绪

  4. 现在,让我们找到 MAC 地址。准备就绪

在这里,c0:3f:0e:10:c6:be是我们需要的默认网关的 MAC 地址。

现在我们有了接收者的 MAC 地址,我们可以开始配置 Netconsole 的过程。

如何做…

首先,我们需要在启动时更改内核选项。如果您使用 Grub 作为引导加载程序,默认情况下会使用quiet splash选项引导内核。但是,我们不希望这种情况发生。因此,我们需要更改内核选项。

  1. 首先,使用以下屏幕截图中显示的命令在/etc/default/grub位置创建 Grub 的备份:如何做…

  2. 现在,打开您选择的任何编辑器以编辑/etc/default/grub如何做…

  3. 找到GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"一行,并将其替换为GRUB_CMDLINE_LINUX_DEFAULT="debug ignore_loglevel"如何做…

  4. 现在,运行此命令相应地更新 Grub:如何做…

  5. 实施了上述命令后,我们需要在启动时初始化 Netconsole。为此,我们首先需要知道发送系统的 IP 地址和接口。可以使用以下屏幕截图中显示的命令来完成:如何做…

  6. 我们还需要接收系统的 IP 地址和 MAC 地址,这是我们在准备就绪部分中看到的。

  7. 现在,让我们开始初始化 Netconsole。首先,让我们通过将模块添加到/etc/modules 中,使netconsole在启动时加载。如何做…

  8. 接下来,我们将确保它也配置了适当的选项。为此,我们将将模块选项添加到/etc/modprobe.d/netconsole.conf文件,并运行此屏幕截图中显示的命令:如何做…

  9. 在上述命令中,以 Netconsole 开头的部分具有以下语法:

netconsole=<LOCAL_PORT>@<SENDER_IP_ADDRESS>/<SENDER_INTERFACE>,<REMOTE_PORT>@<RECEIVER_IP_ADDRESS>/<STEP_1_MAC_ADDRESS>

我们已经为<LOCAL_PORT><REMOTE_PORT>都使用了6666

  1. 接下来,我们需要设置接收者。

根据用作接收方的 Linux 版本,用于设置它的命令可能会有所不同:

netcat -l -u 192.168.1.4 6666 | tee ~/netconsole.log

如果上述命令不起作用,尝试设置接收方而不使用 IP 地址:

netcat -l -u 6666 | tee ~/netconsole.log

  1. 如果您使用的是具有不同版本 Netcat 的 Linux 变体,则在尝试使用上述命令时将打印以下错误消息:如何操作…

  2. 如果您收到上述错误消息,可以尝试执行此截图中显示的命令:如何操作…

  3. 现在,让上述命令继续运行。

  4. 接下来,我们需要检查一切是否正常工作。重新启动发送系统,然后执行此截图中显示的命令:如何操作…

  5. 现在,您需要检查接收系统,看看内核消息是否已经接收到。

  6. 一切都完成后,按下Ctrl + C。然后,您可以在~/netconsole.log中检查消息。

它是如何工作的

为了捕获内核恐慌消息,我们配置 Netconsole,通过网络记录消息。为此,我们需要在网络上再有一个作为接收方的系统。首先,我们尝试找到接收系统的 MAC 地址。然后,我们更改内核引导选项。更新 Grub 后,在我们要调试的发送系统上启动 Netconsole。最后,我们设置接收系统开始接收内核消息。

更多内容…

如果您正在使用 Windows 系统作为接收方,则可以使用 Windows 的Netcat,可在joncraton.org/files/nc111nt.zip下载。执行以下步骤设置 Windows 接收方:

  1. 从给定链接下载文件,并将其解压缩到指定位置(即C:\Users\Tajinder\Downloads\nc>)。

  2. 现在,打开命令提示符。然后,转到您提取 Netcat 的文件夹。更多内容…

  3. 接下来,运行此命令:更多内容…

  4. 这里的192.168.1.3<RECEIVER_IP_ADDRESS>相同。

  5. 让上述命令继续运行,并继续执行第 9 步中提到的命令。完成后,按下Ctrl + C。您将在netconsole.txt中找到消息。

在引导时调试内核

有时,您的系统可能无法在内核中引导更改。因此,在创建有关这些故障的报告时,包括有关调试的所有适当信息非常重要。这将对内核团队解决问题非常有用。

如何操作…

如果您尝试捕获引导过程中出现的错误消息,最好删除quietsplash选项来引导内核。这有助于您查看屏幕上出现的消息(如果有)。

要编辑引导选项参数,请执行以下步骤:

  1. 启动机器。

  2. 在 BIOS 屏幕上,按下Shift键并按住。BIOS 加载后,您应该看到 Grub 菜单。如何操作…

  3. 导航到您想要启动的内核入口,然后按下e键。

  4. 然后,删除quietsplash关键字(这些可以在以 Linux 开头的行中找到)如何操作…

  5. 按下Ctrl + x进行启动。

您可以在屏幕上看到错误消息(如果有)。

根据您遇到的错误消息类型,您可以尝试其他引导选项。例如,如果注意到 ACPI 错误,请尝试使用acpi=off引导选项进行引导。

第三章:本地文件系统安全

在本章中,我们将讨论以下内容:

  • 使用ls命令查看文件和目录详细信息

  • 使用chmod命令更改文件权限

  • 实施访问控制列表(ACL)

  • 使用mv命令(移动和重命名)处理文件

  • 在 Ubuntu 上安装和配置基本 LDAP 服务器

使用ls命令查看文件和目录详细信息

ls命令用于列出目录中的文件,类似于 DOS 中的dir命令。该命令可与各种参数一起使用,以提供不同的结果。

准备工作

由于ls命令是 Linux 的内置命令,因此我们无需安装其他任何内容即可使用它。

如何做…

现在,让我们看一下如何以不同方式使用ls来通过遵循这些给定步骤获得各种结果:

  1. 要查看当前目录中文件的简单列表,请键入ls:如何做…

  2. 要获取有关使用ls命令列出的文件和目录的更多信息,请添加类型标识符,如下所示:如何做…

当使用上述标识符时,可执行文件的名称末尾会有一个星号,而目录则有一个斜杠,依此类推。

  1. 要查看文件的详细信息,例如创建日期、所有者和权限,请使用l标识符运行命令,如下所示:如何做…

  2. 要查找当前目录中所有隐藏文件的列表,请使用a标识符,如下所示:如何做…

以句点开头的文件(也称为点文件)是隐藏文件,如果未使用-a选项,则不会显示这些文件。

  1. 为了以可读的形式打印文件大小,例如 MB、GB、TB 等,而不是以字节打印,我们可以使用-h标识符以及-l标识符,如下所示:如何做…

  2. 如果您希望排除所有文件并仅显示它们的子目录,则可以使用-d选项,如下所示:如何做…

  3. 当与-R选项一起使用ls命令时,将显示子目录的内容:如何做…

工作原理…

当我们使用ls命令的不同选项时,它会根据我们的要求给出不同的目录列表结果。我们可以根据需要使用任何选项。

建议您养成使用ls -lah的习惯,这样您就可以始终找到可读大小的列表。

使用chmod命令更改文件权限

Change Modechmod是 Linux 命令,用于修改文件和目录的访问权限。每个人都希望保护其数据并进行适当的组织。因此,Linux 有一个概念,将所有者和组与每个文件和目录相关联。这些所有者和组具有不同的权限来访问特定文件。

准备工作

在我们查看chmod命令的不同用法之前,我们需要了解不同类型的用户和使用的符号表示:

  • u用于用户/所有者

  • g用于组

  • o用于其他用户

现在,创建一个名为testfile.txt的文件,以尝试chmod的不同命令。

如何做…

现在,我们将看一下如何以不同方式使用chmod以设置不同的权限:

  1. 如果我们想要更改用户(所有者、组或其他用户)的单个权限,我们使用+符号来添加权限,如下命令所示:
chmod u+x testfile.txt

上述命令将为文件所有者添加执行权限:

如何做…

  1. 如果我们想要添加多个权限,我们可以通过单个命令来实现。我们只需要使用逗号分隔不同的权限,如下所示:
chmod g+x, o+x testfile.txt

上述命令将为文件的组和其他用户添加执行权限:

如何做…

  1. 如果我们想要删除权限,我们只需使用-符号,而不是+,如下所示:
chmod o-x testfile.txt

这将删除特定文件的其他用户的执行权限:

如何做…

  1. 假设我们希望为所有用户(所有者、组和其他人)添加或删除权限;我们可以通过使用a选项来完成这个单一命令,该选项表示所有用户,如下所示:

要为所有用户添加权限,请使用此命令:

chmod a+r testfile.txt

要删除所有用户的权限,请使用此命令:

chmod a-r testfile.txt

这在下面的屏幕截图中显示:

如何做…

  1. 在这里,我们假设我们想要为目录中的所有文件添加特定权限。现在,我们可以使用-R选项,而不是单独为所有文件运行命令,该选项表示给定操作是递归的。因此,为了给其他用户和目录中的所有文件添加执行权限,命令将如下所示:
chmod o+x –R /example

看一下下面的屏幕截图

如何做…

  1. 要将特定文件的权限复制到另一个文件,我们可以使用reference选项:
chmod --reference=file1 file2

在这里,我们将file1的权限应用到另一个名为file2的文件。相同的命令也可以用于将一个目录的权限应用到另一个目录:

如何做…

它是如何工作的…

chmod与符号表示一起使用时,我们已经知道以下内容:

  • u用于用户/所有者

  • g用于组

  • o用于其他人

另外,不同的权限被称为如下:

  • r:读

  • w:写

  • x:执行

因此,使用上述命令,我们根据我们的要求更改用户、组或其他人的权限。

还有更多…

我们也可以使用数字来使用chmod设置权限,这被称为八进制表示。使用数字,我们可以同时编辑所有者、组和其他人的权限。命令的语法如下:

  • chmod xxx 文件/目录

这里,xxx指的是从17的三位数字。第一位数字表示所有者的权限,而组由第二位数字表示,第三位数字表示其他人的权限。

当我们使用八进制表示时,rwx权限具有特定的数字值,如下所述:

  • r=4

  • w=2

  • x=1

现在,执行权限表示如下:

  • r-x = 4+0+1 = 5

同样,执行权限的计算如下:

  • rwx = 4+2+1 = 7

如果我们只希望给予权限,将如下所示:

  • r-- = 4+0+0 = 4

所以,现在如果我们运行以下命令,它会给出计算的权限:

chmod 754 testfile.txt

这是屏幕截图:

还有更多…

实施访问控制列表(ACL)

使用chmod实现基本文件权限是不够的,因此我们可以使用 ACL。除了为特定文件的所有者和组提供权限外,我们还可以使用 ACL 为任何用户、用户组或不属于特定用户组的所有用户组设置权限。

准备工作

在开始使用 ACL 设置权限之前,我们需要确认 ACL 是否已启用。我们可以通过尝试查看任何文件的 ACL 来确认这一点,如本例所示:

getfacl<filename>

如果 ACL 已启用,上述命令将显示类似于以下内容的输出:

准备工作

如何做…

为了更好地理解 ACL,让我们执行以下步骤:

  1. 首先,我们将创建三个用户并给他们命名—user1user2user3如何做…

上述命令用于更改密码信息,这是可选的。如果你愿意,你可以忽略它。但是,在这种情况下,您将需要根据需要使用特定用户的密码登录。

  1. 接下来,创建一个名为group1的组。创建组后,我们将在此组中添加在上一步中创建的三个用户:如何做…

  2. 接下来,我们将创建/example目录并将其所有权更改为user1如何做…

  3. 打开一个新的终端窗口并从user1登录。然后,切换到在上一个示例中创建的/example目录,并在其中创建一个任意名称的目录,比如accounts如何做…

  4. 现在,假设user1想要仅在accounts目录中向user2授予write权限。为此,user1必须在组中设置write权限。但这样做将给user3也赋予写权限,我们不希望发生这种情况。因此,user1将使用 ACL 向user2授予写访问权限,如下所示:如何做…

  5. 现在,我们将检查accounts目录中的权限:如何做…

我们可以看到在前面的图像中,只有user1user2在目录中有write权限,其他人没有权限。

  1. 打开一个新的终端并从user2登录。然后,切换到/example目录:如何做…

  2. 让我们尝试在accounts文件夹中创建一个目录。由于user2write权限,这应该是成功的:如何做…

  3. 接下来,打开一个新的终端并从user3登录。然后,切换到/example目录:如何做…

  4. 尝试切换到accounts目录。由于user3对该目录没有任何权限,将被拒绝:如何做…

更多信息…

我们可能希望仅为一组用户中的两个用户授予execute权限。如果我们使用chmod设置权限,所有组中的用户都将获得执行权限。然而,我们不希望这样。可以使用 ACL 来处理这种情况。

在前面的步骤中,我们为每个用户单独设置了文件的权限,从而避免了允许其他人也具有任何权限的机会。

每当处理文件权限时,如果您的文件很重要,最好备份权限。

在这里,我们假设有一个包含一些重要文件的example目录。然后,使用以下命令备份权限:

getfacl -R /example>permissions.acl

更多信息…

前面的命令备份权限并将其存储在名为permissions.acl的文件中。

现在,如果我们想要恢复权限,可以使用以下命令:

setfacl -- restore=permission.acl

这在下面的截图中显示:

更多信息…

这将恢复并备份所有权限到创建备份时的状态。

使用 mv 命令进行文件处理(移动和重命名)

当我们希望将文件从一个目录移动到另一个目录时,并且不希望在此过程中创建副本(这在使用cp命令时会发生),则使用mvmove命令。

准备就绪…

由于mv是 Linux 的内置命令,我们不需要配置其他内容来理解它的工作原理。

工作原理…

在每个 Linux 系统上,默认安装了这个命令。让我们看看如何使用mv命令,通过不同种类的例子:

  1. testfile1.txt文件从当前目录移动到其他目录,比如home/practical/example,命令如下:
mv testfile1.txt /home/practical/example

只有当源文件的位置与目标不同时,前面的命令才能起作用。

使用前面的命令移动文件时,文件将从先前的位置中删除:

工作原理…

  1. 要使用单个命令移动多个文件,可以使用以下命令:
mv testfile2.txt testfile3.txt testfile4.txt /home/practical/example

在使用前面的命令时,我们要移动的所有文件都应该在同一个源位置:

它是如何工作的...

  1. 要移动目录,命令与移动文件的命令相同。假设我们在当前目录中有一个名为directory1的目录,希望将其移动到/home/practical/example位置,则命令如下:
mv directory1/ /home/practical/example

如下所示的截图:

它是如何工作的...

  1. mv命令也用于重命名文件和目录。假设我们有一个名为example_1.txt的文件,希望将其重命名为example_2.txt,则执行此操作的命令如下:
mv example_1.txt example_2.txt

当目标位置与源位置相同时,前面的命令也适用:

它是如何工作的...

  1. 重命名目录的操作方式与重命名文件的操作方式相同。假设我们有一个名为test_directory_1的目录,我们想将其重命名为test_directory_2,那么命令将如下所示:
mv test_directory_1/ test_directory_2/

可以在以下截图中看到前面命令的执行情况:

它是如何工作的...

  1. 当我们使用mv命令移动或重命名大量文件或目录时,可以使用-v选项来检查命令是否成功执行。

  2. 我们可能希望将当前目录中的所有文本文件移动到/home/practical/example文件夹,并对它们进行检查。要做到这一点,请使用以下命令:

mv -v *.txt /home/practical/example

可以在以下截图中看到前面命令的执行情况:

它是如何工作的...

  1. 这也适用于移动或重命名目录:它是如何工作的...

  2. 当我们使用mv命令将文件移动到另一个位置,并且目标位置已经存在同名文件时,默认命令会覆盖现有文件。但是,如果我们希望在覆盖文件之前显示弹出通知,则必须使用-i选项,如下所示:

mv -i testfile1.txt /home/practical/example

运行前面的命令时,它会通知我们目标位置已经存在同名文件。只有当我们按下y时,命令才会完成;否则,它将被取消:

它是如何工作的...

  1. 使用mv命令将文件移动到另一个位置时,如果目标位置已经存在同名文件,则使用-u选项将仅在源文件较新时才更新目标位置的文件。

我们在源位置有两个文件,file_1.txtfile_2.txt。首先,使用以下命令检查文件的详细信息:

ls –l *.txt

现在让我们检查一下目标位置的文件详细信息:

ls –l /home/practical/example/*.txt

现在,使用以下命令移动文件:

mv –uv *.txt /home/practical/example/

它是如何工作的...

我们看到file1.txtfile2.txt已经移动到目标位置,并且由于源文件的新时间戳,它们已经更新了之前的文件。

  1. 假设我们移动多个文件,并且在目标位置已经存在与源文件同名的文件,而我们不希望更新这些文件。在这种情况下,我们可以使用-n选项,如下所示。

  2. 我们在源位置有两个文件,file_1.txtfile_2.txt。首先,使用以下命令检查文件的详细信息:

ls –l *.txt

  1. 现在,使用以下命令移动文件:
mv –nv *.txt /home/practical/example/

  1. 让我们检查一下目标位置的文件详细信息:
ls –l /home/practical/example/*.txt

  1. 同名文件并没有被移动,可以通过它们的时间戳进行验证:它是如何工作的...

  2. 在移动文件时,如果目标位置已经有同名文件,那么在新文件覆盖之前,我们还可以创建目标文件的备份。为此,我们使用-b选项:

mv -bv *.txt /home/practical/example

  1. 现在,让我们检查一下目标位置的文件详细信息。在详细信息中,我们有名为file1.txt~file2.txt~的文件。这些文件是备份文件,可以通过时间戳进行验证,时间戳比file1.txtfile2.txt的时间戳要早:它是如何工作的...

还有更多...

您可以通过键入manmvmv --help来了解更多关于mv命令的信息。这将显示其手册页面,我们可以在其中探索有关该命令的更多细节。

在 Ubuntu 上安装和配置基本的 LDAP 服务器

轻量级目录访问协议(LDAP)是一种用于从某个集中位置管理对文件和目录层次结构的访问的协议。目录类似于数据库;但是,它可能包含更具表达力的基于属性的信息。LDAP 主要用于集中式身份验证。

LDAP 服务器有助于控制谁可以访问目录中的读取和更新信息。

准备工作

要安装和配置 LDAP,我们首先需要创建一个 Ubuntu 服务器。可以在www.ubuntu.com/download/server找到 Ubuntu 服务器安装媒体的当前版本。

下载完成后,按照提供的步骤安装 Ubuntu 服务器。

我们需要第二个安装了 Ubuntu 桌面版的系统。这将用于通过 Web 界面访问您的 LDAP 服务器。

完成后,我们可以继续安装 LDAP。

如何操作...

我们现在将开始在 Ubuntu 服务器上安装和配置 LDAP 的过程。安装 LDAP 需要slapd软件包,并且它存在于 Ubuntu 的默认存储库中:

  1. 我们首先需要从 Ubuntu 的存储库中更新服务器上的软件包列表,以获取有关所有软件包及其依赖关系的最新版本的信息:
sudo apt-get update

  1. 现在,运行命令以安装slapd软件包以安装 LDAP:
sudo apt-get install slapd

以下截图显示了此命令的输出:

如何操作...

  1. 在安装过程中,您将被提示输入并确认管理员密码,该密码将用于 LDAP 的管理员帐户。配置您选择的任何密码并完成安装过程:如何操作...

  2. 接下来,我们需要安装一些与 LDAP 一起使用的附加实用程序:

sudo apt-get install ldap-utils

该命令的输出如下截图所示:

如何操作...

  1. 安装部分完成后,我们将根据我们的要求重新配置 LDAP 软件包。键入此命令以启动软件包配置工具:
sudodpkg-reconfigure slapd

  1. 这将开始一系列关于软件配置的问题。我们需要根据我们的要求逐个选择选项。

  2. 首先,您将被问到省略 OpenLDAP 服务器配置? 选择并继续:如何操作...

  3. 接下来,您需要输入域名。您可以在服务器上使用已经存在的域名或创建任何您喜欢的内容。我们在这里使用了example.com如何操作...

  4. 下一步将是要求输入组织名称,可以是您喜欢的任何内容:如何操作...

  5. 您将被要求输入 LDAP 的管理员密码。我们在安装 LDAP 时已经配置了这个。在这一步中使用相同的密码,或者更改为其他密码:如何操作...

  6. 接下来,我们需要在提示选择要使用的数据库后端时选择HDB如何操作...

  7. slapd被清除时,您将被问及是否希望删除数据库。在这里选择如何操作...

  8. 在下一步中,选择以移动旧数据库,并允许配置过程创建新数据库:如何操作...

  9. 现在,在询问允许 LDAPv2 协议?时选择如何操作...

  10. 配置过程完成后,我们将安装phpldapadmin软件包。这将帮助通过 Web 界面管理 LDAP:

sudo apt-get install phpldapadmin

此命令的执行结果如下截图所示:

操作方法...

  1. 安装完成后,打开 phpldapadmin 的配置文件以配置一些值:
sudo nano /etc/phpldapadmin/config.php

可以在以下截图中看到:

操作方法...

  1. 搜索给定部分,并修改以反映 Ubuntu 服务器的域名或 IP 地址:
$servers->setValue('server','host','domain_nam_or_IP_address');

可以在以下截图中看到:

操作方法...

  1. 接下来,编辑以下条目并插入我们在重新配置slapd时给出的域名:
$servers->setValue('server','base',array('dc=example,dc=com'));

在前一行的dc属性中以值的形式给出域名。由于我们的域名是example.com,因此前一行中的值将输入为dc=example, dc=com

操作方法...

  1. 找到以下行,并再次输入域名作为dc属性。对于cn属性,值将仅为admin
$servers->setValue('login','bind_id','cn=admin,dc=example,dc=com');

可以在以下截图中看到:

操作方法...

  1. 搜索类似于以下代码所示的部分,首先取消注释该行,然后将值设置为true
$config->custom->appearance['hide_template_warning'] = true;

可以在以下截图中看到:

操作方法...

  1. 在进行所有更改后,保存并关闭文件。

  2. phpldapadmin的配置完成后,在另一台安装了 Ubuntu 桌面版的系统中打开浏览器。在浏览器的地址栏中输入服务器的域名或 IP 地址,后面加上/phpldapadmin,如domain_name_or_IP_address/phpldapadmin操作方法...

  3. 打开phpldapadmin页面后,在左侧找到登录链接。单击它,将会出现登录提示:操作方法...

  4. 如果phpldapadmin到目前为止已经正确配置,登录界面将显示正确的登录 DN详细信息。在我们的情况下是cn=admin,dc=example,dc=com

  5. 正确输入管理员密码后,将显示管理员界面:操作方法...

  6. 在左侧的管理员界面中,找到域组件(dc=example,dc=co),点击其旁边的加号。它将显示正在使用的管理员登录:操作方法...

我们的基本 LDAP 服务器现在已经启动运行。

工作原理...

首先创建一个 Ubuntu 服务器,然后在其上安装slapd软件包以安装 LDAP。一旦完全安装完成,我们安装所需的附加软件包。然后,根据我们的要求重新配置 LDAP。

重新配置完成后,我们安装phpldapadmin软件包,这将帮助我们通过浏览器的 Web 界面管理 LDAP 服务器。

第四章:Linux 中的本地认证

在本章中,我们将讨论以下主题:

  • 用户认证和日志

  • 限制用户的登录能力

  • 使用 acct 监视用户活动

  • 使用 USB 设备和 PAM 进行登录认证

  • 定义用户授权控制

用户认证和日志记录

用户认证的一个主要方面是监视系统用户。有各种方法可以跟踪 Linux 中用户进行的所有成功和失败的登录尝试。

入门

Linux 系统维护着系统中不同账户的所有登录尝试的日志。这些日志都位于/var/log/目录下。

入门

如何做...

Linux 有许多方法可以帮助管理员查看日志,无论是通过图形界面还是命令行方法:

  1. 如果我们想要检查特定用户(如 root)的错误登录尝试,可以使用以下命令:
lastb root

如何做...

  1. 要使用终端查看日志,我们使用dmesg命令。该命令显示存储在内存中的 Linux 内核消息缓冲区,如下所示:如何做...

  2. 如果我们希望过滤上述输出,只显示与 USB 设备相关的日志,我们可以使用grep来实现:如何做...

  3. 如果我们不想查看所有日志,而只想查看特定日志文件中最近的 10 条日志,命令如下:如何做...

在上面的命令中,使用-n选项来指定要显示的行数。

  1. 如果我们希望查看用户账户的最近登录尝试,可以使用last工具。如何做...

last工具以格式化的方式显示/etc/log/wtmp文件。

  1. 如果我们想要查看系统上任何用户最后一次登录的时间,我们可以使用lastlog命令:如何做...

它是如何工作的...

Linux 有不同的文件用于记录不同类型的详细信息。使用上面显示的命令,我们能够查看这些日志并根据我们的要求查看详细信息。每个命令都会给我们不同类型的详细信息。

限制用户的登录能力

系统管理员的一个主要角色是配置和管理 Linux 系统上的用户和组。这也涉及检查所有用户的登录能力。

准备工作

以下所有步骤都在 Ubuntu 系统上尝试过;但是,您也可以在任何其他 Linux 发行版上进行这些操作。

如何做...

在这里,我们将讨论如何在 Linux 系统上限制用户的登录能力:

  1. 我们可以通过将账户的登录 shell 更改为/etc/passwd文件中的特殊值来限制用户账户的访问。让我们以sslh账户为例,在/etc/passwd文件中检查账户的详细信息,如下所示:
cat /etc/passwd | grep sslh

如何做...

  1. 在上述详细信息中,sslh账户的最终值设置为/bin/false。如果我们现在尝试以 root 用户登录sslh用户,我们会发现我们无法这样做:
su sslh

  1. 因此,现在,如果我们更改要限制的用户账户的 shell,我们可以这样做,如下所示:如何做...

  2. 限制用户访问的另一种方法是使用/etc/shadow文件。如果我们使用cat命令检查此文件的详细信息,我们会得到如下结果:如何做...

  3. 输出被截断,如下所示:如何做...

  4. 详细信息显示了user1账户的哈希密码(以$6$2iumTg65开头的密码)。我们还可以看到,系统账户的哈希密码被替换为星号*

  5. 现在,要锁定账户user1,命令如下:

passwd -l user1

如何做...

  1. 让我们再次检查/etc/shadow文件中user1帐户的详细信息。我们看到哈希密码已被加上!变为无效:
cat /etc/shadow | grep user1

如何操作...

  1. 要再次解锁帐户,命令如下所示:
passwd -u user1

如何操作...

  1. 如果我们希望检查帐户是否已被锁定,可以使用以下命令进行检查:如何操作...

如上面的输出所示,user1帐户已被锁定,第二字段中标有L。而user2没有被锁定,因为详细信息中显示为P

  1. 使用usermod命令也可以锁定或解锁帐户。要使用usermod锁定帐户,命令如下:
usermod -L user1

  1. 并使用usermod解锁帐户,命令如下所示:
usermod -U user1

它是如何工作的...

对于 Linux 中的每个帐户,用户帐户详细信息存储在/etc/passwd/etc/shadow文件中。这些详细信息指定用户帐户的行为。当我们能够更改这些文件中任何用户帐户的详细信息时,我们就能够更改用户帐户的行为。

在上面的部分中,我们已经看到如何修改这些文件来“锁定”或“解锁”用户帐户。

使用 acct 监控用户活动

Acct是一个开源应用程序,它帮助监控 Linux 系统上的用户活动。它在后台运行并跟踪用户的所有活动,还维护资源使用情况的记录。

入门

要使用acct的命令,我们首先需要通过以下命令在我们的 Linux 系统上安装该软件包:

apt-get install acct

入门

如果上述方法无法正常工作,我们可以通过访问链接packages.ubuntu.com/precise/admin/acct手动下载软件包。

  1. 下载软件包后,我们需要将其解压缩到某个目录中,比如桌面。入门

  2. 然后,将其移动到目录中。入门

  3. 然后,运行脚本以配置软件包。入门

  4. 安装完成后,接下来运行make命令:入门

  5. 然后,运行make install命令:入门

  6. 成功完成后,它将在您的 Linux 系统上安装该软件包。

如何操作?

acct包有不同的命令来监控进程活动:

  1. 基于特定用户从wtmp文件中的登录和注销,如果我们希望检查总连接时间,可以使用ac命令:如何操作?

  2. 如果我们希望打印一天的总登录时间,我们将使用ac命令的-d选项:如何操作?

  3. 要打印用户的总登录时间,我们使用以下命令:如何操作?

  4. 如果我们只想检查特定用户的登录时间,我们使用以下命令:如何操作?

  5. 我们还可以使用lastcomm命令查看所有用户或特定用户以前执行的命令。如何操作?

它是如何工作的...

为了保持对系统的监控,我们首先在系统上安装acct包。对于其他一些 Linux 发行版,如果acct不兼容,可以使用psacct包。

工具安装并运行后,它开始维护系统上的活动日志。然后我们可以使用上面部分讨论的命令来查看这些日志。

使用 USB 设备和 PAM 进行登录验证

当 Linux 用户想要保护系统时,最常见的方法始终是使用登录密码。然而,我们知道这种方法并不是非常可靠,因为有许多方法可以破解传统密码。为了增加安全性,我们可以使用 USB 设备作为认证令牌,用于登录系统。

准备就绪

要按照给定的步骤,我们需要在 Linux 系统上下载一个 USB 存储设备和可插拔认证模块PAM)。大多数 Linux 系统都以预编译包的形式提供,可以从相关存储库中访问。

如何操作...

通过使用任何类型的 USB 存储设备和 PAM,我们可以创建一个认证令牌。

  1. 首先,我们需要安装 PAM USB 认证所需的软件包。为此,我们运行以下命令:
$ sudo apt-get install pamusb-tools libpam-usb

如何操作...

  1. 安装软件包后,我们必须配置 USB 设备以与 PAM 认证一起使用。为此,我们可以使用命令,或者我们可以编辑/etc/pamusb.conf文件。

  2. 使用命令方法时,首先连接 USB 设备,然后执行给定的命令:

$ sudo pamusb-conf --add-device usb-device

命令的输出如下所示:

如何操作...

在上述命令中,usb-device是我们正在使用的 USB 设备的名称。这个名称可以是您选择的任何内容。

当使用pamusb-conf命令时,它会自动发现 USB 设备,其中还包括多个分区。命令执行完成后,它会将一个 XML 代码块添加到/etc/pamusb.conf文件中,定义我们的 USB 设备。

如何操作...

  1. 接下来,我们定义我们的 USB 设备:
$ sudo pamusb-conf --add-user user1

执行结果如下截图所示:

如何操作...

如果用户已经存在,它将被添加到 PAM 配置中。

上述命令将pam_usb用户的定义添加到/etc/pamusb.conf文件中。

如何操作...

  1. 现在,我们将配置 PAM 以在系统认证过程中添加pam_usb模块。为此,我们将编辑/etc/pam.d/common-auth文件并添加以下行:如何操作...

这将使系统范围的 PAM 库意识到pam_usb模块。

required选项指定需要正确的密码,而sufficient选项表示这也可以对用户进行认证。在上述配置中,我们已经为usb-device认证使用了sufficient,同时对默认密码使用了required

如果为user1定义的 USB 设备在系统中不存在,用户将需要输入正确的密码。为了强制用户在授予他们系统访问权限之前必须同时具备两种认证程序,将sufficient更改为required

  1. 现在我们将尝试切换到user1如何操作...

当要求时,连接相关的usb-device。如果连接了正确的 USB 令牌设备,登录将如图所示完成;否则将出现错误。

  1. 如果出现错误,如下所示,可能是 USB 设备的路径未正确添加。
Error: device /dev/sdb1 is not removable
* Mount failed

在这种情况下,将 USB 设备的完整路径添加到/etc/pmount.allow中。

  1. 现在运行命令以检查 USB 设备分区在文件系统中的列表:
$ sudo fdisk –l

如何操作...

在我们的情况下,分区已列出为:/dev/sdb1

  1. 现在在/etc/pmount.allow文件中添加一行以解决错误。

  2. 到目前为止,在/etc/pam.d/common-auth中我们所做的配置意味着如果 USB 设备未连接,用户仍然可以使用正确的密码登录。如果我们希望强制用户在登录时也使用 USB 设备,则将sufficient更改为required,如下所示:如何操作...

  3. 如果用户现在尝试登录,他们将不仅需要输入正确的密码,还需要插入 USB 设备。如何操作...

  4. 现在拔掉 USB 设备,然后尝试使用正确的密码再次登录:如何操作...

工作原理...

安装所需的 PAM-USB 软件包后,我们编辑配置文件以添加我们想要用作身份验证令牌的 USB 设备。之后,我们添加要使用的用户账户,然后在/etc/pam.d/common-auth文件中完成更改,以指定 USB 身份验证的工作方式,无论在登录时是否始终需要。

还有更多...

到目前为止,我们已经看到如何使用 USB 设备对用户登录进行身份验证。除此之外,我们还可以使用 USB 设备在每次连接或断开连接到系统时触发一个事件。

让我们修改/etc/pamusb.conf中的 XML 代码,以添加用户定义的事件代码:

还有更多...

由于上述修改,每当用户断开 USB 设备时,屏幕将被锁定。同样,当用户再次连接 USB 设备时,屏幕将被解锁。

定义用户授权控制

在计算机上定义用户授权主要涉及决定用户可能或不可能被允许执行的活动。这可能包括执行程序或读取文件等活动。

由于root账户拥有所有权限,授权控制主要涉及允许或禁止root访问用户账户。

入门...

要查看用户授权是如何工作的,我们需要一个用户账户来尝试这些命令。因此,我们创建了两个用户账户user1user2来尝试这些命令。

如何操作...

在本节中,我们将介绍可以应用于用户账户的各种控制。

  1. 假设我们有两个用户账户,user1user2。我们从user2登录,然后尝试以user1身份运行ps命令。在正常情况下,我们会得到如下结果:如何操作...

  2. 现在编辑/etc/sudoers文件并添加以下行:

User2 ALL = (user1) /bin/ps

  1. /etc/sudoers中保存更改后,再次尝试从user2user1身份运行ps命令。如何操作...

  2. 现在,如果我们想要再次从user2user1身份运行相同的命令,但不需要输入密码,我们可以通过编辑/etc/sudoers文件来实现:如何操作...

  3. 现在,当我们从user2user1身份运行ps命令时,我们会发现它不再要求输入密码:如何操作...

  4. 现在我们已经看到如何在不需要输入密码的情况下运行命令,系统管理员的主要关注点将是sudo应始终提示输入密码。

  5. 要使系统上的用户账户user1始终需要输入密码来使用sudo,请编辑文件/etc/sudoers并添加以下行:

Defaults:user1 timestamp_timeout = 0

如何操作...

  1. 现在,如果user1尝试运行任何命令,将始终提示输入密码:如何操作...

  2. 现在,假设我们想要给user1账户特权来更改user2user3的密码。编辑/etc/sudoers文件并添加如下行:如何操作...

  3. 现在从user1登录,让我们尝试更改user2user3账户的密码:如何操作...

工作原理...

使用sudo命令和/etc/sudoers文件,我们进行必要的更改以执行所需的任务。

我们编辑文件以允许以另一个用户的身份执行程序。我们还添加了NOPASSWD选项,以便在不需要输入密码的情况下执行程序。然后,我们添加所需的行,以便sudo始终提示输入密码。

接下来,我们看看如何授权用户账户更改其他用户账户的密码。

第五章:远程身份验证

在本章中,我们将讨论以下主题:

  • 使用 SSH 进行远程服务器/主机访问

  • 禁用或启用 SSH root 登录

  • 通过基于密钥的登录限制远程访问到 SSH

  • 远程复制文件

  • 在 Ubuntu 上设置 Kerberos 服务器

使用 SSH 进行远程服务器/主机访问

SSH,或安全外壳,是一种协议,用于安全地登录到远程系统,是访问远程 Linux 系统的最常用方法。

准备工作

要了解如何使用 SSH,我们需要两个 Ubuntu 系统。一个将用作服务器,另一个将用作客户端。

操作步骤…

要使用 SSH,我们可以使用名为OpenSSH的免费软件。安装软件后,可以在 Linux 系统上使用ssh命令。我们将详细了解如何使用这个工具:

  1. 如果要使用 SSH 的软件尚未安装,我们必须在服务器和客户端系统上都安装它。
  • 在服务器系统上安装该工具的命令是:
 sudo apt-get install openssh-server

  • 获得的输出将如下所示:

操作步骤…

  1. 接下来,我们需要安装软件的客户端版本:
sudo apt-get install openssh-client

  • 获得的输出将如下所示:

操作步骤…

  1. 对于最新版本,安装软件后 SSH 服务将立即开始运行。如果默认情况下未运行,我们可以使用以下命令启动服务:
sudo service ssh start

  • 获得的输出将如下所示:

操作步骤…

  1. 现在,如果我们想从客户端系统登录到服务器系统,命令将如下所示:
ssh remote_ip_address

这里,remote_ip_address指的是服务器系统的 IP 地址。该命令还假定客户端机器上的用户名与服务器机器上的用户名相同:

操作步骤…

如果我们想使用不同的用户登录,命令将如下所示:

ssh username@remote_ip_address

  • 获得的输出将如下所示:

操作步骤…

  1. 接下来,我们需要配置 SSH,以便根据我们的要求使用它。Ubuntu 中sshd的主要配置文件位于/etc/ssh/sshd_config。在对此文件的原始版本进行任何更改之前,使用以下命令创建备份:
sudo cp /etc/ssh/sshd_config{,.bak}

  • 配置文件定义了服务器系统上 SSH 的默认设置。
  1. 当我们在任何编辑器中打开文件时,我们可以看到 SSH 服务器监听传入连接的默认端口声明为22。我们可以将其更改为任何非标准端口以保护服务器免受随机端口扫描,从而使其更安全。假设我们将端口更改为888,那么下次客户端想要连接到 SSH 服务器时,命令将如下所示:
ssh -p port_number remote_ip_address

  • 获得的输出将如下所示:

操作步骤…

正如我们所看到的,当我们在不指定端口号的情况下运行命令时,连接会被拒绝。接下来,当我们提到正确的端口号时,连接将建立。

工作原理…

SSH 用于将客户端程序连接到 SSH 服务器。在一个系统上,我们安装openssh-server软件包使其成为 SSH 服务器,在另一个系统上,我们安装openssh-client软件包以将其用作客户端。

现在,保持服务器系统上的 SSH 服务运行,我们尝试通过客户端连接到它。

我们使用 SSH 的配置文件来更改设置,比如连接的默认端口。

禁用或启用 SSH root 登录

Linux 系统默认具有一个启用的 root 帐户。如果未经授权的用户获得 SSH root 访问权限,这不是一个好主意,因为这将使攻击者完全访问系统。

我们可以根据需要禁用或启用 SSH 的 root 登录,以防止攻击者获取对系统的访问权限。

准备工作

我们需要两个 Linux 系统,一个用作服务器,一个用作客户端。在服务器系统上,安装openssh-server软件包,如前面的示例所示。

操作步骤…

首先,我们将看到如何禁用 SSH root 登录,然后我们还将看到如何再次启用它:

  1. 首先,在任何编辑器中打开 SSH 的主配置文件/etc/ssh/sshd_config
sudo nano /etc/ssh/sshd_config

  1. 现在寻找以下内容的行:
PermitRootLogin yes

  1. 将值从yes更改为no。然后,保存并关闭文件:
PermitRootLogin no

  • 获得的输出将如下所示:

如何操作…

  1. 完成后,使用以下命令重新启动 SSH 守护程序服务:如何操作…

  2. 现在,让我们尝试以 root 身份登录。我们应该收到一个“权限被拒绝”的错误,因为 root 登录已被禁用:如何操作…

  3. 现在每当我们想要以 root 身份登录时,首先我们必须以普通用户身份登录。之后,我们可以使用su命令切换到 root 用户。因此,未在/etc/sudoers文件中列出的用户帐户将无法切换到 root 用户,系统将更加安全:如何操作…

  4. 现在,如果我们想要再次启用 SSH root 登录,我们只需要再次编辑/etc/ssh/sshd_config文件,并将选项从no更改为yes

PermitRootLogin yes

  • 获得的输出将如下所示:

如何操作…

  1. 然后,再次使用以下命令重新启动服务:如何操作…

  2. 现在,如果我们再次尝试以 root 身份登录,它将起作用:如何操作…

它是如何工作的…

当我们尝试使用 SSH 连接到远程系统时,远程系统会检查其在/etc/ssh/sshd_config中的配置文件,并根据该文件中提到的详细信息决定是否允许或拒绝连接。

当我们相应地更改PermitRootLogin的值时,工作也会发生变化。

还有更多…

假设我们在系统上有许多用户帐户,并且我们需要以这样的方式编辑/etc/ssh/sshd_config文件,即仅允许少数指定用户进行远程访问。

sudo nano /etc/ssh/sshd_config

添加以下行:

AllowUsers tajinder user1

现在重新启动ssh服务:

sudo service ssh restart

现在,当我们尝试使用user1登录时,登录是成功的。但是,当我们尝试使用未添加到/etc/ssh/sshd_config文件中的user2登录时,登录失败,并且我们收到“权限被拒绝”的错误,如下所示:

还有更多…

通过基于密钥的登录限制远程访问 SSH

即使使用用户帐户的密码保护了 SSH 登录,我们也可以通过在 SSH 中使用基于密钥的身份验证来使其更加安全。

准备工作

要了解基于密钥的身份验证的工作原理,我们将需要两个 Linux 系统(在我们的示例中,都是 Ubuntu 系统)。其中一个应该安装了 OpenSSH 服务器软件包。

如何操作…

要使用基于密钥的身份验证,我们需要创建一对密钥——私钥和公钥。

  1. 在客户端或本地系统上,我们将执行以下命令生成 SSH 密钥对:
ssh-keygen-t rsa
  • 获得的输出将如下所示:

如何操作…

  1. 在创建密钥时,我们可以接受默认值或根据我们的意愿进行更改。它还会要求输入一个密码,您可以设置为任何内容,或者留空。

  2. 密钥对将在位置~./ssh/中创建。切换到此目录,然后使用命令ls –l查看密钥文件的详细信息:如何操作…

  • 我们可以看到id_rsa文件只能被所有者读取和写入。此权限确保文件的安全性。
  1. 现在我们需要将公钥文件复制到远程 SSH 服务器。为此,我们运行以下命令:
ssh-copy-id 192.168.1.101
  • 获得的输出将如下所示:

如何操作…

  1. 将启动一个 SSH 会话,并提示您输入用户帐户的密码。一旦输入了正确的密码,密钥将被复制到远程服务器。

  2. 一旦公钥成功复制到远程服务器,尝试使用ssh 192.168.1.101命令再次登录到服务器:如何做...

我们可以看到现在不需要提示输入用户帐户的密码。因为我们已经为 SSH 密钥配置了密码,所以它已经被要求。否则,我们将被要求输入密码而不需要输入密码。

工作原理...

当我们创建 SSH 密钥对并将公钥移动到远程系统时,它可以作为连接到远程系统的身份验证方法。如果远程系统中存在的公钥与本地系统生成的公钥匹配,并且本地系统具有私钥以完成密钥对,就可以登录。否则,如果任何密钥文件丢失,将不允许登录。

远程复制文件

使用 SSH 远程管理系统非常方便。然而,许多人可能不知道 SSH 也可以帮助远程上传和下载文件。

准备工作

尝试文件传输工具,我们只需要两个可以相互 ping 通的 Linux 系统。在一个系统上,应安装 OpenSSH 软件包并运行 SSH 服务器。

如何做...

Linux 有一系列工具,可以帮助在网络计算机之间传输数据。我们将在本节中看到其中一些工作原理:

  1. 假设我们在本地系统上有一个名为myfile.txt的文件,我们想要将其复制到远程系统。执行此操作的命令如下:
scp myfile.txt [email protected]:~Desktop/

  • 输出显示在以下截图中:如何做...

  • 在这里,文件将被复制到的远程位置是连接使用的用户帐户的Desktop目录。

  1. 当我们检查远程 SSH 系统时,可以看到文件myfile.txt已成功复制:如何做...

  2. 现在,假设我们在本地系统上有一个名为mydata的目录,我们想要将其复制到远程系统。可以使用命令中的-r选项来执行此操作,如下所示:

scp -r mydata/ [email protected]:~Desktop/

  • 输出显示在以下截图中:

如何做...

  1. 再次检查远程服务器,可以看到mydata目录已成功复制并包含所有文件:如何做...

  2. 现在我们将看到如何将文件从远程系统复制回本地系统。

  • 首先,在远程服务器上创建一个文件。我们的文件是newfile.txt

如何做...

  1. 现在,在本地系统上,转到希望复制文件的目录。然后,按照所示的命令从远程系统复制文件到本地系统的当前目录中:
scp –r [email protected]:/home/tajinder/Desktop/newfile.txt

  • 输出显示在以下截图中:

如何做...

  1. 我们还可以使用sftp以交互方式从远程系统复制文件,使用 FTP 命令。

  2. 要做到这一点,我们首先使用以下命令开始连接:

sftp [email protected]

  • 查看命令的执行情况:

如何做...

  1. 接下来,我们可以运行任何 FTP 命令。在我们的示例中,我们尝试使用get命令从远程系统获取文件,如下所示:
get sample.txt /home/tajinder/Desktop

如何做...

  1. 在本地系统上,现在可以检查文件是否已成功复制。如何做...

  2. SSH 也可以通过 GNOME 工作。因此,我们可以使用 GNOME 文件浏览器与远程系统建立 SSH 连接,而不是使用命令行。

  3. 在 GNOME 文件浏览器中,转到文件 -> 连接到服务器...如何做...

  4. 在下一个窗口中,按要求输入详细信息,然后单击连接如何做...

  5. 现在我们可以以图形方式从远程系统复制文件到本地系统,或者反之。如何做...

工作原理...

要通过 SSH 远程复制文件,我们使用scp工具。这有助于从客户系统复制单个文件或完整目录到服务器系统上的指定位置。要复制带有所有内容的目录,我们使用命令的-r选项。

我们使用相同的工具从远程 SSH 服务器复制文件到客户机。但是,为此我们需要知道服务器上文件的确切位置。

scp一样,我们有sftp工具,它用于从服务器到客户端复制文件。SFTP安全文件传输协议)比 FTP 更好,并确保数据安全传输。

最后,我们使用 GNOME 文件浏览器以图形方式连接并在服务器和客户端之间传输文件。

使用 Ubuntu 设置 Kerberos 服务器

Kerberos 是一种身份验证协议,用于通过使用秘密密钥加密和受信任的第三方在不受信任的网络上进行安全身份验证。

准备就绪

要设置和运行 Kerberos,我们需要三个 Linux 系统(在我们的示例中,我们使用了 Ubuntu)。它们应该能够相互通信,而且它们的系统时钟也应该准确。

我们已经为每个系统分配了主机名,如此处所述:

  • Kerberos 系统:mykerberos.com

  • SSH 服务器系统:sshserver.com

  • 客户端系统:sshclient.com

这样做之后,编辑每个系统的/etc/hosts文件并添加以下细节:

准备就绪

您的系统的 IP 地址和主机名可能不同。只需确保在进行这些更改后,它们仍然可以相互 ping 通。

如何操作...

现在,让我们看看如何完成 Kerberos 服务器和其他系统的设置,以供我们的示例使用。

  1. 第一步是安装 Kerberos 服务器。为此,我们将在mykerberos.com系统上运行给定的命令:
sudo apt-get install krb5-admin-server krb5-kdc

  • 输出如下截图所示:

如何操作...

  1. 在安装过程中,将会询问一些细节。按照这里提到的细节输入:
  • 对于问题“默认的 Kerberos 版本 5 领域”,在我们的情况下答案是MYKERBEROS.COM如何操作...
  1. 对于下一个问题,“您领域的 Kerberos 服务器:”,答案是mykerberos.com如何操作...

  2. 在下一个屏幕上,问题是“您领域的管理服务器:”,答案是mykerberos.com如何操作...

  3. 一旦我们回答了所有问题,安装过程将完成。下一步是创建一个新的领域。为此,我们使用这个命令:

sudo krb5_realm

  • 输出如下截图所示:如何操作...
  1. 在此过程中,我们将被要求为 Kerberos 数据库创建一个密码。我们可以选择任何密码。

  2. 接下来,我们需要编辑/etc/krb5.confand文件,并修改如下截图所示的细节。如果文件中不存在任何行,我们还需要输入这些行。转到文件中的libdefaults部分,并修改如下所示的值:如何操作...

  3. 转到realms部分,并修改如下截图所示的细节:如何操作...

  4. 接下来,转到domain_realm部分,并输入如下所示的行:

mykerberos.com = MYKERBEROS.COM
.mykerberos.com = MYKERBEROS.COM

  • 如下截图所示:

如何操作...

  1. 接下来,我们需要向 Kerberos 数据库添加代表网络上的用户或服务的原则或条目。为此,我们将使用kadmin.local工具。必须为参与 Kerberos 身份验证的每个用户定义原则。

通过输入以下命令来运行工具:

sudo kadmin.local

这将启动kadmin.local提示,如下所示:

如何操作...

  1. 要查看现有的原则,我们可以输入以下命令:
list princs

  1. 现在,要为用户添加一个原则,我们使用addprinc命令。要添加tajinder帐户,我们使用如下命令:如何操作...

  2. 要向正在添加的帐户添加admin角色,命令如下所示:如何操作...

  3. 如果我们给任何用户分配管理员角色,则取消注释/etc/krb5kdc/kadm.acl文件中的*/admin行。

  4. 要检查原则是否已正确应用,使用以下命令:

kinit

  1. 完成 Kerberos 系统的设置后,我们现在转移到客户端系统。首先,我们需要使用以下屏幕截图中显示的命令安装 Kerberos 的客户端软件包:如何操作...

  2. 在安装过程中,将会询问与安装 Kerberos 服务器时相同的问题。在这里输入与之前相同的细节。

  3. 安装完成后,检查我们是否仍然能够从sshclient.com系统 ping 通mykerberos.com

  4. 现在,根据我们在mykerberos.com中创建的原则,获取客户端机器的票证所使用的命令如下所示:如何操作...

  • 如果命令运行正常,表示它正常工作。

完成上一个命令后,我们转移到第三个系统,即我们正在使用的 SSH 服务器。我们需要在该系统上安装 SSH 服务器和krb5-config软件包。为此,我们运行以下命令:

如何操作...

  • 同样,我们将被问及在安装 Kerberos 服务器时提出的相同问题。在这里输入与之前相同的细节。
  1. 现在编辑/etc/ssh/sshd_config文件以启用以下行:如何操作...

  2. 删除#,如果尚未更改,则将值更改为yes。进行更改后,使用以下命令重新启动 SSH 服务器:

sudo service ssh restart

  1. 接下来,我们将配置 Kerberos 服务器,使其与 SSH 服务器配合工作。为此,我们运行kadmin.local工具,然后运行以下命令:如何操作...

  2. 图像中的上述命令为 SSH 服务器添加了原则。接下来,我们运行以下屏幕截图中显示的命令以创建密钥文件:如何操作...

  3. 现在我们将使用以下命令将密钥文件从 Kerberos 服务器系统复制到 SSH 服务器系统:如何操作...

  4. 我们已将文件复制到 SSH 服务器系统的/tmp/目录。复制完成后,将文件移动到/etc/目录。

  5. 现在在客户端系统上,编辑/etc/ssh/ssh_config文件,并修改如下行:

GSSAPIAuthentication yes
GSSAPIDelegateCredentials yes

  1. 现在在客户端系统上,通过运行以下命令获取票证:
kinit tajinder
  1. 一旦上述命令生效,尝试使用ssh从客户端系统登录到 SSH 服务器系统:如何操作...

我们应该在不被要求输入密码的情况下得到认证。

工作原理...

首先,在第一个系统上安装所需的软件包以创建 Kerberos 服务器。安装完成后,为服务器配置创建一个领域。为了完成配置,我们执行/etc/krb5.conf文件中提到的更改。

然后,我们向 Kerberos 数据库添加一个原则,以添加要使用的用户帐户。

完成后,我们转移到下一个系统,并安装 Kerberos 用户软件包以创建客户端系统。然后,我们从 Kerberos 服务器系统获取用户帐户的票证,以在客户端上使用。

接下来,我们继续到第三个系统,在那里我们安装Openssh-server软件包以创建 SSH 服务器。然后,我们编辑 SSH 的配置文件以启用身份验证。

现在我们回到 Kerberos 服务器系统,并为 SSH 服务器添加一个原则。我们为 SSH 服务器创建一个密钥,然后使用scp命令将该密钥文件从 Kerberos 服务器传输到 SSH 服务器。

现在,如果我们尝试从客户端系统登录到 SSH 服务器系统,我们会在不需要输入密码的情况下登录,因为我们之前生成的密钥被用于身份验证。

第六章:网络安全

在本章中,我们将讨论以下内容:

  • 管理 TCP/IP 网络

  • 使用 Iptables 配置防火墙

  • 阻止欺骗性地址

  • 阻止传入流量

  • 配置和使用 TCP Wrapper

管理 TCP/IP 网络

当计算机连接在一起形成网络并相互交换信息和资源时,管理这些网络信息对于系统管理员来说是一项重要的任务。

准备就绪

在开始对 TCP/IP 配置进行任何更改之前,请确保使用以下命令创建网络管理器配置文件的备份:

准备就绪

同样,以相同的方式创建/etc/network/interfaces文件的备份。

如何操作...

在本节中,我们将看看如何使用命令行手动配置网络设置:

  1. 在开始手动配置之前,首先让我们检查当前的 IP 地址,该地址已由 DHCP 自动分配给系统。我们可以通过右键单击顶部右侧面板中的Networking图标,然后选择Connection Information来以图形方式检查详细信息,如下图所示:如何操作...

我们可以看到我们系统的当前 IP 地址是192.168.1.101

  1. 接下来,我们使用命令行检查此信息。我们输入ifconfig命令来执行此操作。如何操作...

  2. 如果我们只想检查系统上可用的以太网设备,我们可以运行此命令:如何操作...

上述命令将列出系统上所有可用以太网设备的一行描述。

  1. 如果我们想要更详细地了解网络接口,我们可以使用lshw工具。如何操作...

该工具还提供有关硬件的其他功能的详细信息。

  1. 现在,我们将禁用网络管理器,然后手动设置 IP 地址的详细信息。要禁用网络管理器,请编辑/etc/NetworkManager/NetworkManager.conf文件。如何操作...

managed=false改为managed=true并保存文件。

  1. 现在,在您选择的编辑器中打开/etc/network/interfaces文件。我们看到,默认情况下,关于eth0接口没有任何信息。如何操作...

  2. 编辑文件,并添加以下截图中显示的信息。确保根据您的网络设置添加 IP 详细信息。如何操作...

完成后,保存文件,然后重新启动计算机以解除网络管理器。

  1. 如果我们希望创建虚拟网络适配器,我们可以将以下行添加到/etc/network/interfaces文件中,如下所示:如何操作...

通过这样做,我们已经向单个以太网卡添加了两个 IP 地址。我们可以这样做来创建网络卡的多个实例。

  1. 完成上述编辑后,使用以下任一命令重新启动网络服务:
service network-manager restart
/etc/init.d/networking restart

  1. 接下来,让我们看看如何配置适当的名称服务器,如果 IP 地址是手动配置的话,将要使用它。

要进行更改,请在任何编辑器中编辑/etc/resolv.conf文件,并添加以下行:

如何操作...

通过遵循上述步骤,我们将能够成功配置 IP 详细信息。

它是如何工作的...

系统上的 TCP/IP 设置可以是自动管理或手动管理。根据/etc/NetworkManager/NetworkManager.conf文件中的内容,系统将了解设置是自动管理还是手动管理。

对于手动配置,我们编辑/etc/network/interfaces文件,并输入先前的 IP 详细信息。完成后,我们重新启动网络服务或完全重新启动系统以使更改生效。

使用 Iptables 配置防火墙

保护 Linux 系统所需的一个基本步骤是设置一个良好的防火墙。大多数 Linux 发行版都预装了不同的防火墙工具。Iptables是 Linux 发行版中的一个默认防火墙。在较旧版本的 Linux 内核中,Ipchains 是默认防火墙。

准备就绪

由于 Iptables 随 Linux 发行版一起提供,因此无需安装额外的工具来使用它。但是,建议使用 Iptables 时不要使用 root 帐户。相反,使用具有超级用户访问权限的普通帐户来有效地运行命令。

如何做...

我们可以使用 Iptables 定义不同的规则。这些规则在检查传入和传出的流量数据包时由内核跟随:

  1. 我们在系统上需要做的第一件事是使用此命令检查安装了哪个版本的 Iptables:如何做...

  2. 现在,我们将使用-L选项检查系统中是否已存在 Iptables 的任何规则。如何做...

  3. 前面的输出也可以以一种格式看到,告诉我们每个策略所需的命令。为此,使用-S选项,如下所示:如何做...

  4. 现在,我们将检查 Iptables 默认加载了哪些模块,以了解它们的正确功能,使用此命令:如何做...

  5. 让我们首先在 Iptables 中添加这个,这将确保当前所有在线连接即使在我们制定规则阻止不需要的服务之后也会保持在线:

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

在这里,-A选项将规则附加到现有表中。INPUT表示此规则将附加到 Iptables 的输入链。-m conntrack --ctstate ESTABLISHED,RELATED命令的下几个参数确保规则仅适用于当前在线的连接。然后,-j ACCEPT告诉 Iptables 接受并允许与前面指定的条件匹配的数据包。

  1. 现在,如果我们再次检查 Iptables 中的规则列表,我们将看到我们的规则已添加。如何做...

  2. 假设我们想通过 Iptables 允许 SSH 连接。为此,我们添加此规则:如何做...

我们使用端口22,因为它是 SSH 的默认端口。如果您已更改服务器上 SSH 的端口,请使用前面命令中的适当端口。

  1. 我们还需要确保我们的服务器继续正常运行,让服务器上的服务在不被 Iptables 的规则阻止的情况下相互通信。为此,我们希望允许发送到环回接口的所有数据包。

我们添加以下规则以允许环回访问:

iptables -I INPUT 1 -i lo -j ACCEPT
  1. 在这里,-I选项告诉iptables插入一个新规则而不是追加它。它需要添加新规则的链和位置。在前面的命令中,我们将此规则添加为INPUT链中的第一条规则,以便它是应用的第一条规则。

  2. 现在,如果我们使用-v选项查看 Iptables 中的规则列表,我们会注意到lo环回接口的规则是我们的第一条规则。如何做...

  3. 假设我们已根据要求添加了允许所有数据包的规则,我们必须确保进入INPUT链的任何其他数据包都应该被阻止。

为此,我们将通过运行此命令修改INPUT链:

iptables –A INPUT –j DROP 

如何做...

前面屏幕截图中的代码显示,已将丢弃所有数据包的规则添加到INPUT链的列表底部。这确保每当数据包进入时,Iptables 规则按指定顺序进行检查。如果没有规则与数据包匹配,它将被丢弃,从而默认阻止数据包被接受。

  1. 到目前为止,我们在 Iptables 中添加的所有规则都是非持久的。这意味着一旦系统重新启动,Iptables 中的所有规则都将消失。

因此,为了保存我们创建的规则,然后在服务器重新启动时自动加载它们,我们可以使用iptables-persistent软件包。

  1. 使用以下命令安装软件包:
apt-get install iptables-persistent

如何操作...

  1. 在安装过程中,您将被问及是否要保存当前的iptables规则并自动加载它们。根据您的要求选择如何操作...

  2. 安装完成后,我们可以通过运行此命令启动软件包:如何操作...

工作原理...

在前面的示例中,我们使用 Linux 中的 Iptables 来配置系统上的防火墙。

首先,我们浏览iptables命令的基本选项,然后看看如何在iptables中添加不同的规则。我们添加规则以允许本地主机访问和传出的活动连接。然后,我们添加一条规则以允许 SSH 连接。

接下来,我们添加一条规则,拒绝不符合前面规则的每个其他传入数据包。

最后,我们使用iptables-persistent软件包来保存iptables的规则,即使在系统重新启动后也是如此。

阻止伪造的地址

IP 欺骗是攻击者用来向计算机服务器发送恶意数据包的一种常见技术。这是创建具有伪造 IP 地址的 IP 数据包的过程。它主要用于拒绝服务DoS)等攻击。

准备工作

如果我们希望阻止伪造的 IP 地址,我们需要有一个 IP 地址或域名列表,从中这些伪造的连接一直试图连接。

如何操作...

我们将尝试通过它来创建iptables的基本规则集,通过它我们将限制所有传入数据包,除了对我们的使用必要的数据包:

  1. 第一步是创建一个规则,允许访问环回接口,以便系统上的服务可以正确地在本地相互通信。执行此命令如下:
iptables -A INPUT -i lo -j ACCEPT

如何操作...

这对系统正常运行是必要的。

  1. 接下来,我们为由我们的系统发起的出站连接创建一条规则:
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

这将接受所有出站流量,包括我们尝试连接到的远程服务器的响应(例如我们访问的任何网站):

如何操作...

  1. 让我们创建一个用于iptables的表。我们将其称为blocked_ip,但您可以选择自己喜欢的名称:
iptables –N blocked_ip

这是我们将添加要阻止的伪造 IP 地址的表。

  1. 现在,我们使用以下命令将此表插入到iptablesINPUT表中:
iptables -I INPUT 2 -j blocked_ip

请注意,我们使用数字2来确保此规则将成为 Iptables 中从顶部开始的第二个规则。

  1. 接下来,让我们将一些不良 IP 添加到我们创建的blocked_ip表中:
iptables -A blocked_ip -s 192.168.1.115 -j DROP

我们在这里使用192.168.1.115 IP 地址作为示例。您可以用要阻止的 IP 地址替换它。如果您有多个要阻止的 IP 地址,请逐个将它们添加到iptables中。

  1. 使用以下命令可以查看iptables中的规则列表:
iptables –L

在以下截图中显示的详细信息中,您将注意到我们正在尝试阻止的 IP 地址。您可以根据需要指定单个 IP 地址或范围。

如何操作...

  1. 在 Iptables 中制定规则后,我们还可以编辑/etc/host.conf文件。在您选择的任何编辑器中打开文件。我正在使用nano
nano /etc/host.conf

现在,按照以下示例在文件中添加或编辑以下行:

orderbind,hosts
nospoof on

如何操作...

在前面的示例中,nospoof on选项执行主机名查找返回的 IP 地址与 IP 地址查找返回的主机名进行比较。如果比较失败,此选项将生成欺骗警告。

完成后,保存并关闭文件。这也有助于保护系统免受 IP 欺骗。

它是如何工作的...

为了阻止伪造的 IP 地址或任何其他 IP 地址,我们再次使用 Iptables,因为它是默认的防火墙,除非我们不想使用 Linux 可用的任何其他工具。

我们再次创建规则,以允许本地主机访问系统,并保持出站活动连接保持活动状态。然后,我们在 Iptables 中创建一个表,用于维护我们想要阻止的伪造 IP 地址的列表。我们将此表添加到 Iptables 的输入链中。然后,我们可以在需要时将任何 IP 地址添加到表中,并且它将自动被阻止。

我们还使用/etc/host.conf文件来保护系统免受 IP 欺骗。

阻止传入流量

Linux 系统管理员最重要的任务之一是控制对网络服务的访问。有时,最好在服务器上阻止所有传入流量,只允许所需的服务连接。

准备工作

由于我们在这里也将使用 Iptables,因此不需要额外的软件包来执行这些步骤。我们只需要一个具有超级用户访问权限的用户帐户。但最好不要使用root帐户。

如何做...

我们将配置 Iptables 拒绝除了已从系统内部发起的流量之外的所有流量(例如获取 Web 流量的 Web 浏览器或已经启动以更新软件包或其他软件的下载):

  1. 如前面的例子所示,Iptables 中的第一个规则将允许访问本地主机数据。运行此命令以允许访问:
iptables -A INPUT -i lo -j ACCEPT

如何做...

  1. 下一个规则将是接受与出站连接相关的所有流量。这也包括远程服务器对我们系统连接的响应:
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

如何做...

  1. 接下来,我们将添加一个规则,以接受时间超过的 ICMP 数据包。这对于限时连接设置很重要:
iptables -A INPUT -p icmp -m icmp --icmp-type 11 -j ACCEPT

  1. 之后,我们将添加一个规则,以接受来自远程服务器的目标不可达 ICMP 数据包:
iptables -A INPUT -p icmp -m icmp --icmp-type 3/4 -j ACCEPT

  1. 然后,添加一个规则以接受 ping 请求/响应(Echo ICMP),以保持我们系统与可能需要 ping 的 Web 服务的连接保持活动状态:
iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT

  1. 添加了前述规则后,通过运行此命令检查 Iptables 中的列表:
iptables -L

如何做...

  1. 我们将创建一个iptables表,其中包含一系列可接受的规则和服务:
iptables -N allowed_ip

然后将此表添加到 Iptables 的 INPUT 链中:

iptables -A INPUT -j allowed_ip

  1. 让我们添加一个规则,以便在系统上允许对 SSH 的访问。为此,我们运行此命令:
iptables -A allowed_ip -p tcp --dport 22 -j ACCEPT

  1. 如果我们检查 Iptables 中的规则列表,将得到以下结果:
iptable -L

如何做...

  1. 一旦我们添加了规则以接受我们想要的流量,我们现在将拒绝所有其他未设置规则的流量。为此,我们添加此规则:
iptables -A INPUT -j REJECT --reject-with icmp-host-unreachable

通过这样做,每当有人尝试连接到服务器时,将向他们发送一个主机不可达的 ICMP 数据包,然后将终止连接尝试。

  1. 在添加了所有前述规则之后,Iptables 现在看起来与以下截图类似:
iptables -L

如何做...

它是如何工作的...

为了在服务器上阻止所有传入流量并只允许出站连接,我们再次使用 Iptables,因为它是 Linux 的默认防火墙。

为了允许服务器内部的正常运行,我们允许访问本地主机。

接下来,为了保持出站连接活动,我们添加一个规则以接受时间超过目标不可达Echo ICMP数据包。

添加了这些规则后,我们可以决定是否希望允许特定服务(如 SSH)的任何传入流量,或者特定客户端地址的流量。为此,我们创建一个表格,以添加我们希望允许的客户端的 IP 地址列表。我们添加了一个规则,以允许根据我们的要求访问 SSH 服务或任何其他服务。

最后,我们添加了一个规则,拒绝所有未添加规则的流量。

配置和使用 TCP Wrapper

通过限制访问来保护服务器是一项关键措施,在设置服务器时绝不能忽视。使用 TCP Wrappers,我们可以只允许我们配置并支持 TCP Wrappers 的网络访问我们服务器的服务。

准备工作

为了演示这些步骤,我们使用两个位于同一网络上并且可以成功 ping 通对方的系统。一个系统将用作服务器,另一个将用作客户端。

如何做?

Linux 提供了多种工具来控制对网络服务的访问。TCP Wrappers 是其中之一,并添加了额外的保护层。在这里,我们将看看如何配置 TCP Wrappers 以定义不同主机的访问权限。

  1. 首先,我们需要检查程序是否支持 TCP Wrappers。为此,首先使用which命令找到可执行程序的路径:
which sshd

如何做?

在这里,我们以 SSH 程序为例。

  1. 接下来,我们使用ldd程序来检查 SSH 程序与 TCP Wrappers 的兼容性:
ldd /usr/sbin/sshd

如何做?

如果前面的命令输出了libwrap.so内容,这意味着该程序受 TCP Wrappers 支持。

  1. 现在,每当 SSH 程序尝试使用 TCP Wrappers 连接到服务器时,将按照以下顺序检查两个文件:
  • /etc/hosts.allow:如果在此文件中找到程序的匹配规则,将允许访问

  • /etc/hosts.deny:如果在此文件中找到程序的匹配规则,将拒绝访问

  1. 如果在这两个文件中没有找到特定程序的匹配规则,将允许访问。

  2. 如果我们尝试在添加任何规则之前连接到 SSH 服务器,我们会看到它成功连接。如何做?

  3. 现在假设我们想要拒绝特定系统具有给定 IP 地址的 SSH 程序的访问。然后,我们将编辑/etc/hosts.deny文件,如下所示:如何做?

  4. 如果我们尝试从已拒绝访问的特定系统连接到 SSH 服务器,将显示以下错误:如何做?

  5. 如果我们希望允许所有程序和客户端访问,可以在这两个文件中添加零规则,或者将以下行添加到/etc/hosts.allow文件中:如何做?

  6. 如果我们想要允许具有192.168.1.106 IP 地址的特定客户端访问所有服务,然后我们将以下行添加到/etc/hosts.allow文件中:如何做?

  7. 如果我们想要允许特定网络上的所有客户端访问 SSH,除了具有192.168.1.100 IP 地址的特定客户端,我们可以对/etc/hosts.allow文件进行以下更改:如何做?

  8. 进行了上述更改后,当我们尝试通过 SSH 连接时,我们会看到以下错误:如何做?

我们可以看到一旦更改了客户端的 IP 地址,现在允许 SSH 访问,这意味着特定网络上的所有客户端都可以访问 SSH,除了被拒绝的 IP 地址。

  1. 前面的步骤阻止了在/etc/hosts.allow文件中定义的服务规则。然而,在服务器端,我们无法知道哪个客户端尝试访问服务器以及何时。因此,如果我们想要记录客户端的所有连接尝试,我们可以编辑/etc/hosts.allow文件,如下所示:如何做?

在前面的屏幕截图中,spawn关键字定义了每当客户端发出连接请求时,它将回显由%h选项指定的详细信息,并将其保存在conn.log日志文件中。

  1. 现在,当我们阅读conn.log文件的内容时,我们看到了这些细节:如何做?

该文件包含了客户端尝试连接的时间以及来自哪个 IP 地址。使用spawn命令的不同参数可以捕获更多的细节。

它是如何工作的...

我们使用 TCP Wrapper 来限制 TCP Wrapper 软件包支持的程序的访问。

我们首先使用ldd工具检查我们想要限制的程序是否受 TCP Wrapper 支持。

然后,根据我们的需求,在/etc/hosts.allow/etc/hosts.deny文件中添加一条规则。

我们添加一条规则,根据我们的需求限制来自特定客户端或整个网络的程序。

使用 TCP Wrapper 中的 spawn 选项,我们甚至可以为客户端或我们限制的程序所做的连接尝试维护日志。

第七章:安全工具

在本章中,我们将讨论:

  • Linux sXID

  • PortSentry

  • 使用 Squid 代理

  • OpenSSL 服务器

  • Tripwire

  • Shorewall

Linux sXID

在 Linux 中,通常文件具有读、写和执行权限。除了这些权限,它还可以具有特殊权限,如设置所有者用户 IDSUID)和在执行时设置组 IDSGID)。由于这些权限,用户可以从他们的帐户登录,仍然以实际文件所有者的权限运行特定的文件/程序(也可以是 root)。

sXid 是用于定期监视 SUID/SGID 的工具。使用这个工具,我们可以跟踪文件和文件夹中 SUID/SGID 的更改。

准备就绪

要使用这个工具,我们需要在 Linux 系统上安装sxid软件包。我们可以使用apt-get命令来安装软件包,或者我们可以下载软件包并手动配置和安装它。

如何操作...

要开始监视 SUID/SGID 文件和文件夹,我们首先安装软件包,然后根据我们的要求配置工具:

  1. 第一步是安装sxid软件包。为此,我们运行以下命令:
apt-get install sxid

如何操作...

  1. 安装完成后,我们开始编辑文件/etc/sxid.conf,根据我们的要求使用该工具。在您选择的任何编辑器中打开文件:
nano /etc/sxid.conf

  1. 在配置文件中,查找以下截图中显示的行:如何操作...

如果您希望在运行sxid时将更改的输出发送到您的电子邮件地址,请将EMAIL的值更改为任何其他电子邮件 ID。

  1. 接下来,查找读取KEEP_LOGS的行,并将值更改为您选择的任何数字值。这个数字定义了要保留多少个日志文件:如何操作...

  2. 如果您希望在sXid找不到更改时也获得日志,那么将ALWAYS_NOTIFY的值更改为yes如何操作...

  3. 我们可以定义一个目录列表,用空格分隔,作为sXIDSEARCH选项的起始点进行搜索。

但是,如果我们希望从搜索中排除任何目录,我们可以在EXCLUDE选项下指定它:

如何操作...

假设我们有一个要搜索的目录/usr/local/share,并且在排除列表中已经提到了/usr/local目录,那么它仍然会被搜索。这对于排除一个主目录并且只指定一个目录变得有用。

  1. /etc/sxid.conf中还有许多可以根据我们的要求进行配置的选项。编辑文件后,保存并关闭文件。

  2. 现在,如果我们想要手动运行sXid进行抽查,我们使用以下命令:

sxid -c /etc/sxid.conf -k

如何操作...

在这里,-c选项有助于定义config文件的路径,如果命令没有自动选择。-k选项运行该工具。

它是如何工作的...

首先安装sXid软件包,然后通过编辑文件/etc/sxid.conf根据我们的要求进行配置。

一旦配置完成,我们就手动运行sXid进行抽查。

如果需要的话,我们甚至可以在crontab中添加一个条目,以便在定义的时间间隔内自动运行sXid

PortSentry

作为系统管理员,一个主要的关注点是保护系统免受网络入侵。

这就是PortSentry的作用。它有能力检测主机系统上的扫描,并以我们选择的方式对这些扫描做出反应。

准备就绪

为了演示 PortSentry 的实施和使用,我们需要在同一网络上有两个系统,它们可以相互 ping 通。

此外,我们需要在一个系统上安装Nmap软件包,该软件包将用作客户端,另一个系统上,我们将安装和配置PortSentry软件包。

要安装Nmap软件包,请使用以下命令:

apt-get install nmap

准备就绪

如何操作?

  1. 在第一个系统上,我们使用以下命令安装Portsentry软件包:
apt-get install portsentry

如何做?

  1. 在安装过程中,将打开一个窗口,其中包含有关Portsentry的一些信息。只需单击“确定”继续:如何做?

  2. 安装完成后,portsentry立即开始监视 TCP 和 UDP 端口。我们可以通过使用以下命令检查文件/var/log/syslog来验证这一点:

grep portsentry /var/log/syslog

如何做?

我们可以在日志中看到与portsentry相关的消息。

  1. 现在,在我们用作客户端的第二台机器上,运行如下所示的Nmap命令:如何做?

我们还可以使用Nmap的任何其他命令在第一个运行portsentry的系统上执行 TCP 或 UDP 扫描。要了解更多关于Nmap命令的信息,请参阅第一章,Linux 安全问题

在上述结果中,我们可以看到即使在第一个系统上运行portsentry时,Nmap也能够成功扫描。

我们甚至可以尝试从客户端 ping 服务器系统,看看在安装portsentry后它是否正常工作。

  1. 现在让我们通过编辑服务器系统上的文件/etc/portsentry/portsentry.conf来配置portsentry

在您选择的编辑器中打开后,查找以下行并将值更改为1

如何做?

向下滚动,然后找到并取消注释以下行:

如何做?

接下来,取消注释以下行:

如何做?

完成后,保存并关闭文件。

  1. 接下来,编辑文件/etc/default/portsentry如何做?

在上面显示的行中,我们需要说明portsentry应该使用 TCP 还是 ATCP 协议。

  1. 现在编辑文件/etc/portsentry/portsentry.ignore.static,并在底部添加一行,如下面的屏幕截图所示:如何做?

在这里,192.168.1.104是我们试图阻止的客户机的 IP 地址。

  1. 现在通过运行以下命令重新启动portsentry服务:如何做?

  2. 完成上述步骤后,我们将再次尝试在客户机上运行Nmap,看看它是否仍然正常工作:如何做?

我们可以看到现在Nmap无法扫描 IP 地址。

  1. 如果我们尝试从客户端 ping 服务器,甚至那也不起作用:如何做?

  2. 如果我们检查文件/etc/hosts.deny,我们将看到自动添加了以下行:如何做?

  3. 同样,当我们检查文件/var/lib/portsentry/portsentry.history时,我们得到一个类似于下面图片中最后一行的结果:如何做?

工作原理...

我们使用两个系统。第一个系统充当portsentry服务器,而另一个充当客户端。

在第一个系统上,我们安装portsentry软件包,在第二个系统上,我们安装Nmap,用于演示工作。

现在我们从客户机对服务器执行Nmap扫描。我们可以看到它工作正常。

之后,我们根据要求配置portsentry,编辑各种文件。

编辑完成后,重新启动portsentry服务,然后再次尝试从客户端对服务器执行Nmap扫描。我们看到现在扫描无法正常工作。

使用 Squid 代理

Squid 是一个具有各种配置和用途的 Web 代理应用程序。Squid 具有大量的访问控制,并支持不同的协议,如 HTTP、HTTPS、FTP、SSL 等。

在本节中,我们将看到如何将 Squid 用作 HTTP 代理。

准备就绪

要在网络上的特定系统上安装和使用 Squid,请确保该特定系统具有足够的物理内存,因为 Squid 还可以作为缓存代理服务器工作,因此需要空间来维护缓存。

我们在示例中使用的是 Ubuntu 系统,Squid 可在 Ubuntu 存储库中获得,因此我们需要确保我们的系统是最新的。为此,我们运行以下命令:

apt-get update

之后,运行以下命令:

apt-get upgrade

如何操作...

要在我们的系统上安装和配置 Squid,我们必须采取以下步骤:

  1. 第一步是安装squid软件包,为此,我们运行以下命令:如何操作...

  2. 一旦 Squid 安装完成,它将以默认配置开始运行,该配置定义了阻止网络上所有 HTTP/HTTPs 流量。

要检查这一点,我们只需要在网络上的任何系统上配置浏览器,使用代理系统的 IP 地址作为代理,如下面的截图所示:

如何操作...

  1. 完成后,我们现在可以尝试访问任何网站,我们将看到一个错误屏幕,如下图所示:如何操作...

  2. 现在我们将开始配置我们的代理服务器,使其按照我们的要求工作。为此,我们将在任何编辑器中编辑文件/etc/squid3/squid.conf

一旦文件在编辑器中打开,搜索读作:

TAG: visible_hostname:在这个类别下,添加一行——visible_hostname ourProxyServer

如何操作...

在这里,ourProxyServer是我们给代理服务器起的名字。你可以选择任何你喜欢的名字。

  1. 接下来,搜索读作TAG: cache_mgr的类别,并添加一行cache_mgr email@yourdomainname。在这里,提及管理员的电子邮件 ID,可以联系管理员而不是email@yourdomainname如何操作...

  2. 接下来,我们搜索以下截图中显示的行。http_port变量定义了 Squid 代理将监听的端口。默认端口是 3128;但是,我们可以更改为任何未被使用的端口。我们甚至可以定义 Squid 监听多个端口,如下面的截图所示:如何操作...

  3. 现在我们需要添加规则,根据我们的需求允许网络计算机上的流量。为此,我们将搜索读作acl localnet src 10.0.0.8

在这里,我们添加了我们的规则acl localnetwork src 192.168.1.0/24,如下图所示:

如何操作...

在上述规则中,acl用于定义一个新规则,localnetwork是我们给规则起的名字。src定义了将要传输到代理服务器的流量的来源。我们使用子网位数定义网络 IP 地址,如前面所示。

根据我们的需求,我们可以添加任意多的规则。

  1. 接下来,搜索读作http_access allow localhost,并在其下添加一行http_access allow localnetwork,以开始使用我们在上一步中添加的规则,允许流量:如何操作...

  2. 完成上述配置步骤后,我们使用以下命令重新启动 Squid 服务:

service squid3 restart

  1. 现在我们的 Squid 代理服务器正在运行。要检查,我们可以尝试从网络上的任何系统的浏览器访问代理服务器的 IP 地址:如何操作...

上面的错误屏幕告诉我们 Squid 代理工作正常。

现在我们可以尝试访问任何其他网站,它应该根据我们在 Squid 的配置文件中添加的规则打开。

它是如何工作的...

我们首先安装 Squid 软件包。软件包安装完成后,我们编辑其配置文件/etc/squid3/squid.conf,并添加主机名、管理员的电子邮件 ID 以及 Squid 将监听的端口。

然后我们创建规则,允许同一网络中所有系统的流量。一旦保存了所有配置,我们重新启动 Squid 服务,我们的代理服务器现在正在工作。

OpenSSL 服务器

SSL 是一种用于在互联网上传输敏感信息的协议。这可能包括帐户密码、信用卡详细信息等信息。SSL 最常用于与 HTTP 协议一起进行的网络浏览。

OpenSSL库提供了安全套接字层(SSL)传输层安全性(TLS)协议的实现。

准备工作

为了演示OpenSSL的使用,我们需要两个系统。一个将用作服务器,我们将在其中安装OpenSSL软件包和 Apache。第二个系统将用作客户端。

如何做...

现在我们将看到如何使用OpenSSL为 Apache 创建自签名证书。这将有助于加密到服务器的流量:

  1. 我们首先使用以下命令在第一个系统上安装OpenSSL软件包:如何做...

  2. 接下来,我们将在同一系统上安装 Apache,如下所示:如何做...

  3. 安装 Apache 后,我们需要启用 SSL 支持,这在 Ubuntu 的 Apache 软件包中是标准的。为此,我们运行以下命令:如何做...

启用 SSL 支持后,按照上面的屏幕截图重启 Apache,使用以下命令:

service apache2 restart

  1. 现在在 Apache 的配置目录中创建一个目录。这是我们将保存证书文件的地方,我们将在下一步中创建这些文件:
mkdir /etc/apache2/ssl

  1. 现在我们将使用以下命令创建密钥和证书:如何做...

在上述命令中,req –x509指定我们将创建一个符合 X.509 证书签名请求CSR)管理的自签名证书。

-nodes指定将创建不受任何密码保护的密钥文件。

-days 365告诉我们,正在创建的证书将在一年内有效。

-newkeyrsa:2048告诉我们,私钥文件和证书文件将同时创建,并且生成的密钥将为 2048 位长。

下一个参数-keyout指定要创建的私钥的名称。

-out参数提及正在创建的证书文件的名称。

  1. 在创建密钥和证书文件时,将会询问您一些问题。根据您的配置提供详细信息。但是,读取通用名称(例如服务器 FQDN 或您的名称)的选项很重要,我们必须提供域名或服务器的公共 IP:如何做...

  2. 接下来,我们需要编辑文件/etc/apache2/sites-available/default,以配置 Apache 使用在上一步中创建的密钥文件和证书文件。

找到并编辑如下屏幕截图中显示的行。对于ServerName,我们提供了 Apache 服务器系统的 IP 地址:

如何做...

在同一文件中,滚动到文件末尾,在<VirtualHost>块关闭之前,添加以下屏幕截图中给出的行。提及在创建这些文件时使用的密钥文件名和证书文件名:

如何做...

  1. 现在,在客户端系统上,打开任何浏览器,并使用https://协议访问 Apache 服务器的公共 IP,如下所示:如何做...

浏览器将显示有关连接不安全的警告消息,因为证书未经任何受信任的机构签名。

  1. 单击我了解风险,然后单击添加例外按钮将证书添加到浏览器中:如何做...

  2. 下一个窗口将显示有关服务器的一些信息。要继续并添加证书,请点击确认安全异常如何操作...

  3. 如果您希望检查证书的更多细节,请在上一个屏幕上点击查看,您将会看到一个新窗口显示证书的完整细节,如下所示:如何操作...

  4. 证书成功添加后,网页加载将完成,如下所示:如何操作...

工作原理...

在此设置中,我们使用两个系统。第一个是 Apache 服务器,我们在其中安装了OpenSSL软件包。第二个系统作为客户端,我们将尝试连接到 Apache Web 服务器。

在第一个系统上安装 Apache 和OpenSSL软件包后,我们为 Apache 启用 SSL 支持。然后,我们使用OpenSSL工具和一些参数创建服务器密钥和服务器证书文件。

之后,我们编辑文件/etc/apache2/sites-available/default,以便 Apache 可以使用我们创建的密钥和证书。

完成后,我们尝试通过客户端机器上的浏览器访问 Apache Web 服务器。

我们看到它要求将新证书添加到浏览器中,完成后,我们可以使用 HTTPS 协议访问 Web 浏览器。

Tripwire

随着对服务器的攻击数量不断增加,安全地管理服务器变得越来越复杂。很难确定每次攻击是否已被有效阻止。

Tripwire是一种基于主机的入侵检测系统IDS),可用于监视不同的文件系统数据点,然后在任何文件被修改或更改时向我们发出警报。

准备就绪

我们只需要在 Linux 系统上安装 Tripwire 软件包来配置我们的 IDS。在下一节中,我们将看到如何安装和配置该工具。

如何操作...

我们将在以下步骤中讨论如何在我们的 Ubuntu 系统上安装和配置 Tripwire:

  1. 第一步将是使用apt-get安装 Tripwire 软件包,如下所示:如何操作...

  2. 在安装过程中,它将显示一个信息窗口。按确定继续。

  3. 在下一个窗口中,选择Internet Site作为邮件配置类型,然后按确定如何操作...

  4. 下一个窗口将要求输入系统邮件名称。输入您正在配置 Tripwire 的系统的域名:如何操作...

  5. 在下一个屏幕上按O继续。

  6. 现在我们将被问及是否要为 Tripwire 创建密码。选择并继续:如何操作...

  7. 现在我们将被问及是否要重建配置文件。选择并继续:如何操作...

  8. 接下来,选择以重建 Tripwire 的策略文件:如何操作...

  9. 接下来,提供您希望为 Tripwire 配置的密码:如何操作...

它还会在下一个屏幕上要求重新确认密码。

  1. 接下来,为本地密钥提供一个密码,并在下一个屏幕上重新确认:如何操作...

  2. 下一个屏幕确认安装过程已成功完成。按确定完成安装:如何操作...

  3. 安装成功后,我们的下一步是初始化 Tripwire 数据库。为此,我们运行如下截图中显示的命令:如何操作...

在前面的输出中,我们可以看到许多文件名显示为没有这样的文件或目录的错误。这是因为 Tripwire 扫描其配置文件中提到的每个文件,无论它是否存在于系统中。

  1. 如果我们希望删除前面屏幕截图中显示的错误,我们必须编辑文件/etc/tripwire/tw.pol,并注释掉我们系统中不存在的文件/目录的行。如果愿意,我们甚至可以将其保留不变,因为这不会影响 Tripwire 的工作。

  2. 我们现在将测试 Tripwire 的工作情况。为此,我们将通过运行以下命令创建一个新文件:

touch tripwire_testing

您可以根据自己的选择为文件选择任何名称。

  1. 现在运行 Tripwire 交互命令来测试它是否正常工作。为此,命令如下:
tripwire --check --interactive

操作步骤...

我们将得到一个输出,如前面的屏幕截图所示。 Tripwire 检查所有文件/目录,如果有任何修改,将显示在结果中:

操作步骤...

在我们的案例中,它显示了如前面的屏幕截图所示的一行,告诉我们在/root目录中添加了一个名为tripwire_testing的文件。

如果我们希望保留所显示的更改,只需保存自动在编辑器中打开的结果文件。

在保存结果时,系统将提示您输入本地密码。输入您在安装 Tripwire 时配置的密码。

  1. 最后,我们在 crontab 中添加一个条目,以便自动运行 Tripwire 来检查文件/目录中的更改。在您选择的任何编辑器中打开文件/etc/crontab并添加以下行:操作步骤...

在这里,00 6告诉我们 Tripwire 将在每天 6 点检查一次。

它是如何工作的...

首先安装 Tripwire 软件包,并在安装过程中填写所需的详细信息。安装完成后,我们初始化 Tripwire 数据库。

之后,我们检查 Tripwire 是否正常工作。为此,我们首先在任何位置创建一个新文件,然后运行 Tripwire 交互命令。命令完成后,我们在输出中看到显示已添加的新文件。这证实了 Tripwire 的完美工作。

然后,我们编辑 Crontab 配置,以便以特定间隔自动运行 Tripwire。

Shorewall

您是否希望将 Linux 系统设置为小型网络的防火墙? Shorewall 通过标准 Shorewall 工具帮助我们配置企业级防火墙。

Shorewall 实际上是建立在 Iptables 之上的。但是,Shorewall 使配置变得更加容易。

准备工作

需要安装并运行两张网络卡的 Linux 系统才能配置 Shorewall。一张卡将用作外部网络接口,第二张卡将用作内部网络接口。在我们的示例中,我们使用eth0作为外部接口,eth1作为内部接口。

根据网络配置配置两张卡。确保您能够 ping 本地网络上的另一个系统,也能够 ping 外部网络,即互联网上的某些内容。

在这个系统上,我们将安装 Shorewall 软件包,然后根据我们的要求进行配置。

操作步骤...

  1. 我们首先使用apt-get命令在系统上安装shorewall操作步骤...

  2. 安装完成后,尝试启动shorewall。您将收到以下错误消息:操作步骤...

这意味着我们需要先配置 Shorewall,然后它才能开始运行。

  1. 要配置 Shorewall,请在您选择的任何编辑器中编辑文件/etc/default/shorewall。查找包含startup=0的行,并将其值更改为以下内容:操作步骤...

  2. 接下来,编辑文件/etc/shorewall/shorewall.conf,找到包含IP_FORWARDING的行。验证其值是否设置为On操作步骤...

  3. Shorewall 的配置文件位于/etc/shorewall目录中。对于其工作至关重要的最低必需文件如下:

  • 接口

  • 策略

  • 规则

  • 区域

如果在安装后在/etc/shorewall目录中找不到这些文件中的任何一个,我们可以在目录/usr/share/doc/shorewall/default-config/中找到相同的文件。

从此位置复制所需文件到/etc/shorewall目录。

  1. 现在编辑文件/etc/shorewall/interfaces,并按以下图像中显示的添加行:如何做...

我们在配置中将eth0称为net,将eth1称为local。只要是字母数字且不超过五个字符,您可以选择任何其他名称。

  1. 接下来,编辑文件/etc/shorewall/zones。区域主要用于设置是否使用ipv4ipv6如何做...

在前面的配置中,fw指的是我,或者说是 Shorewall 防火墙本身。接下来的两行定义了两个网络接口的 ipv4。

  1. 现在编辑策略文件/etc/shorewall/。该文件主要用于设置关于谁被允许去哪里的整体策略。

该文件中的每一行都是从上到下处理的,并且每一行都是按以下格式读取的:

如果从 ____ 发送数据包到 ____,则 ______。

如何做...

在我们的示例中,如果我们读取第一个策略,它将被读取为——如果从本地发送数据包到网络,则接受它。

您可以以相同的方式添加尽可能多的策略,Shorewall 防火墙将相应地工作。

  1. 最后,编辑文件/etc/shorewall/rules。该文件用于创建对策略的例外。如果您希望允许外部网络中的人进入内部网络,则主要使用该文件。

示例规则文件如下截图所示:

如何做...

我们已经添加了一条规则,该规则表示如果从net发送数据包到fw,并且使用端口号80tcp协议,则接受该数据包。

  1. 一旦我们根据要求配置了上述文件,我们可以通过运行以下命令来测试设置:
shorewall check

在显示的输出中,滚动到底部,如果显示Shorewall 配置已验证,这意味着设置已正确完成,Shorewall 现在可以用作防火墙:

如何做...

  1. 现在重新启动 Shorewall 服务以应用设置,如下所示:
service shorewall restart

工作原理...

我们首先在系统上安装 Shorewall,该系统有两个网络接口卡。

安装完成后,我们编辑/etc/default/shorewall文件和/etc/shorewall/shorewall.conf文件。

然后我们在/etc/shorewall位置编辑或创建这些文件:interfaces、policy、rules 和 zones。然后根据要求向每个文件添加行。

编辑完成后,我们检查一切是否正常,然后启动 Shorewall 服务以启动我们的防火墙。

第八章:Linux 安全发行版

在本章中,我们将讨论以下主题:

  • Kali Linux

  • pfSense

  • DEFT - 数字证据和取证工具包

  • NST - 网络安全工具包

  • Helix

Kali Linux

Kali 是一个基于 Debian 开发的 Linux 发行版,旨在进行安全测试。Kali 预装了数百种渗透测试工具,是一个可立即使用的操作系统。我们可以通过光盘、USB 媒体或虚拟机来运行它。

通过其最新版本的 Kali 2.0,在操作系统中进行了重大更改,将其转换为滚动发布模型。现在我们可以简单地在系统上安装 Kali 2.0,并通过正常更新获取其中工具的最新版本。这意味着我们不必等待 Kali 2.1 来获取最新的东西。

准备就绪

要探索 Kali 2.0,请从其官方网站下载最新版本 - www.kali.org/downloads/

我们可以下载 ISO,然后将其刻录到 CD/DVD 上,或创建一个可引导的 USB 设备。我们甚至可以从上面给出的链接下载 Kali Linux VMWare、Virtual Box 或 ARM 镜像。

如何做...

Kali 2.0 包括其更新的开发环境和工具方面的重大变化。我们将探讨这些变化,以了解其中的区别:

  1. 要开始使用 Kali,我们可以安装它,也可以通过实时选项来使用它。当我们通过实时选项启动时,我们会注意到 Grub 屏幕已经改变,并且变得更加简单易用。如何做...

  2. Kali 的主系统镜像已经移至 GNOME 3,重新设计了用户界面。我们可以在登录屏幕上注意到这些变化,它已经重新设计。如何做...

  3. 在登录屏幕后出现的桌面屏幕也已经重新设计。我们可以在以下截图中看到新桌面屏幕的快照:如何做...

  4. 当我们点击左上角的应用程序时,我们会看到菜单和工具类别已经重组:如何做...

  5. 我们还可以通过点击侧边栏底部的菜单图标来访问工具。这样,我们可以一次看到所有的工具:如何做...

  6. Kali 2.0 包括内置的屏幕录制选项,实际上是 GNOME 3 的一部分。在右上角,点击录制图标,我们会得到开始录制的选项。现在,您可以通过单击一次在 Kali 上所做的任何事情来制作视频。如何做...

  7. 如果我们希望访问 Kali 的设置菜单,我们会注意到它在应用程序菜单下不见了。要访问设置,请点击右上角的电源图标,然后会弹出一个菜单。

在此菜单中,我们在左下角看到设置图标。

如何做...

  1. 当我们在上一步中点击设置图标时,我们会得到如下所示的设置菜单。现在根据您的要求对系统的设置进行更改。如何做...

让我们点击详细信息以查看有关 Kali 2.0 的更多信息

  1. 我们可以在以下截图中看到有关系统的详细信息。这包括有关 GNOME 版本的信息。如何做...

每当我们希望更新 Kali 时,只需点击详细信息窗口上的检查更新按钮。

  1. 要继续并检查更新,请点击继续,否则点击取消取消更新过程。如何做...

  2. 如果您的系统已经是最新的,将会出现如下所示的消息。否则,可以下载可用的更新。如何做...

它是如何工作的...

当我们启动 Kali 2.0 时,桌面屏幕已经改变。现在我们在屏幕左侧有一个侧边栏,可以帮助我们轻松访问应用程序。

左上角的应用程序菜单包含不同类别下的所有工具。也可以通过底部边栏上的菜单图标访问这些应用程序。

接下来,我们可以看到 Kali 2.0 现在包括一个内置的屏幕录制工具,可以从右上角的菜单中访问。在同一个菜单中,我们现在可以选择访问系统设置菜单。

然后,我们看到检查系统更新的选项,以保持 Kali 的最新状态。

Kali 2.0 包含更新的工具,并且每天从 Debian 拉取四次更新,以确保系统始终保持最新状态,并且定期实施安全更新。

pfSense

作为网络管理员,拥有防火墙和路由器至关重要。当我们谈论设置防火墙时,我们可以选择简单地安装来自任何供应商的预配置防火墙,也可以设置自己的防火墙系统。

pfSense 是一个基于 FreeBSD 的开源 Linux 发行版,专门设计用作防火墙,可以通过 Web 界面轻松管理。

准备工作

首先,从以下链接下载 pfSense:

www.pfsense.org/download/mirror.php?section=downloads

根据您的需求选择正确的计算机架构和平台。

下载 pfSense 后,将 ISO 文件刻录到 CD/DVD 媒体,或者甚至可以创建现场可启动的 USB 媒体。

我们还需要一台具有两个网络接口卡的系统来安装和配置 pfSense。

操作步骤...

为了在我们自己的系统上设置和配置防火墙,我们需要安装和配置 pfSense,以下步骤可以帮助我们完成这一过程。

  1. 当我们使用 pfSense CD/DVD 或 USB 设备引导系统时,将出现如下的启动画面:操作步骤...

6进行“配置引导选项”

  1. 在下一个屏幕上,再次按6打开详细信息。然后,按1返回上一个屏幕。

回到第一个屏幕时,按Enter启动 pfSense。

  1. PfSense 将开始引导。在引导过程中,我们会看到一个屏幕,如下所示:操作步骤...

I安装 pfSense。在 20 秒内快速选择该选项。

  1. 下一个屏幕要求“配置控制台”。选择接受这些设置选项,然后按Enter继续。

  2. 在下一个屏幕上,如果是 pfSense 新手,则选择“快速/简单安装”。否则,在安装过程中可以选择“自定义安装”以获得更高级的选项。

  3. 按“确定”继续安装。安装过程现在将开始。

  4. 在安装过程中,将被要求选择要安装的内核配置。选择“标准内核”,因为我们正在将 pfSense 安装在台式机或个人电脑上。如果在嵌入式平台上安装,例如路由器板,我们可以选择“嵌入式内核”选项。

  5. 安装完成后,选择“重新启动”并按Enter完成安装。

  6. 在重新启动过程中,pfSense 的默认用户名和密码将如图所示显示:操作步骤...

  7. 重新启动后,我们现在必须根据网络配置配置我们的接口卡。两个接口的名称将如图所示显示。在您的情况下,这些名称可能不同。操作步骤...

  8. 现在会问您“是否要立即设置 VLAN”。此时输入n表示“否”。

  9. 现在我们需要输入要用于 WAN 的接口名称。在我们的情况下,它是le0。根据您的配置输入名称。

接下来,输入要用于 LAN 的接口名称。在我们的示例中,它是le1

操作步骤...

然后,按Y继续设置。

  1. 设置完接口后,我们将得到如下所示的 pfSense 菜单:操作步骤...

  2. 如果到这一步为止 WAN 和 LAN 接口的 IP 地址没有正确设置,我们可以通过从前面的菜单中选择选项2来手动设置 IP 地址。

  3. 选择要配置的接口,然后为其提供 IP 地址:操作步骤...

  4. 接下来,输入子网和默认网关:操作步骤...

  5. 按照相同的步骤为 LAN 接口进行操作。完成后,屏幕上会显示一个链接,可用于访问 pfSense 的webConfigurator界面。操作步骤...

在我们的情况下,它是—http://192.168.1.115

  1. 现在,从与 pfSense 系统相同的本地网络上的任何系统的浏览器中访问前面的链接。访问链接后,我们会得到一个登录屏幕,如图所示:操作步骤...

输入默认用户名admin和默认密码pfsense进行登录。登录后可以随后更改这些详细信息。

  1. 成功登录后,我们会得到 pfSense 的主要仪表板。操作步骤...

工作原理...

我们从 pfSense CD/DVD 启动,然后选择在我们的系统上安装操作系统的选项。

要安装 pfSense,我们在启动时使用选项I,然后使用Quick/Easy Install。安装完成后,我们设置两个接口卡。第一张卡根据外部网络进行配置,使用菜单中的设置接口 IP 地址选项。然后,我们配置 IP 地址、子网和网关地址。

接下来,我们为第二张卡重复相同的过程,根据本地网络进行配置。

配置完成后,我们可以使用第二张卡的 IP 地址从同一网络系统上的任何浏览器访问 pfSense 的 Web 界面,并根据我们的要求自定义我们的路由器/防火墙。

DEFT – 数字取证和取证工具包

在进行计算机取证时,重要的是使用的软件能够确保文件结构的完整性。它还应该能够分析正在调查的系统,而不会对数据进行任何更改、删除或更改。

DEFT是为取证而设计的,基于Lubuntu,后者本身又基于 Ubuntu。

准备就绪

DEFT 可以从这个链接下载:

www.deftlinux.net/download/

下载后,我们可以将映像文件刻录到 CD/DVD 媒体上,或者创建一个可引导的 USB 媒体。

操作步骤...

要使用 DEFT,我们需要了解 OS 中包含了什么:

  1. 一旦我们启动 DEFT CD/DVD 或 USB 媒体,我们就会得到启动屏幕。首先,我们需要选择语言。完成后,我们可以选择运行 DEFT live,或者我们可以在我们的系统上安装 DEFT。

  2. 在我们的示例中,我们选择了启动 DEFT live。启动完成后,我们会得到 DEFT 的主屏幕。

  3. 现在,让我们了解 DEFT 中提供的不同工具。

  4. 在开始菜单中,DEFT下的第一个子菜单包含各种分析工具的列表。操作步骤...

  5. 下一个子菜单显示所有反恶意软件工具:操作步骤...

  6. 然后,我们有与数据恢复相关的工具子菜单。操作步骤...

  7. 下一个子菜单包含一系列不同的哈希工具,可用于检查和比较任何文件的哈希。操作步骤...

  8. 在下一个子菜单中,我们获得了用于成像的工具。这些工具可在取证调查期间用于创建需要调查的系统磁盘的映像。操作步骤...

  9. 随着 DEFT 7 的发布,还添加了用于分析移动设备的工具。这些可以在子菜单移动取证下找到:操作步骤...

  10. 下一个子菜单包含网络取证工具。操作步骤...

  11. 下一个菜单 OSINT 包含开源情报工具。操作步骤...

  12. DEFT 还包含密码恢复工具,可以在下一个子菜单中找到。操作步骤...

  13. 除了前面提到的工具类别,DEFT 还包含一些报告工具,这些工具在创建报告时可能会有用。操作步骤...

  14. DEFT 使用 WINE 在 Linux 下执行 Windows 工具,WINE 选项可以在主菜单下找到。操作步骤...

工作原理...

我们可以安装 DEFT,或者使用 Live CD 选项将其引导到我们的系统上。引导后,我们转到开始菜单,然后转到 DEFT 菜单。在这里,我们可以在不同类别下找到各种工具。我们可以使用分析工具、数据恢复工具、移动取证工具、网络取证工具等。

DEFT 中使用 WINE 在此执行 Windows 应用程序。

NST - 网络安全工具包

Linux 有许多发行版主要用于渗透测试。其中之一是网络安全工具包NST),它旨在提供易于访问的开源网络安全应用程序。

NST 基于 Fedora Linux,包含专业人员和网络管理员的工具。

准备工作

NST 可以从其网页或直接从此链接下载:

sourceforge.net/projects/nst/files/

下载后,我们可以将 ISO 刻录到 CD/DVD 上,或创建一个可启动的 USB 媒体。

操作步骤...

当我们了解如何使用操作系统以及操作系统中包含的工具时,使用 NST 进行渗透测试变得很容易:

  1. 要使用 NST,第一步是使用 NST 引导系统。我们可以选择使用实时选项引导,也可以直接在系统上安装 NST。在我们的示例中,我们选择了实时引导选项。您可以根据自己的需求选择任何选项。引导完成后,我们会得到 NST 的默认桌面,如下所示:操作步骤...

  2. NST 配备了一个 Web 用户界面,这是一个控制面板,可以用来对 NST 进行任何操作。但是,只有在现有用户帐户设置了密码时才能访问。要设置密码,我们点击桌面上的设置 NST 系统密码图标。这将打开一个终端窗口,并给您创建新密码的选项:操作步骤...

  3. 设置密码后,我们可以从我们选择的任何浏览器访问 NST Web 用户界面。要在本地系统上访问,我们可以使用地址http://127.0.0.1:9980/nstwui

如果从本地网络上的其他系统访问,则使用运行 NST 的系统的 IP 地址。

操作步骤...

打开链接后,我们会提示输入用户名和密码。输入详细信息,然后点击确定

  1. 现在我们看到了 NSTWUI 的登录页面。在左上角,我们可以看到运行 NST 的系统的详细信息。在此下方,我们有 NST 的菜单。操作步骤...

我们还可以在右上角看到系统运行时间的信息。

操作步骤...

  1. NST 配备了各种工具,其中之一是bandwidthd。该工具显示了网络使用情况的概述,我们可以通过转到菜单网络 | 监视器 | bandwidthd UI来启用它:操作步骤...

  2. 一旦我们点击“启动 Bandwidthd”,该工具将开始运行。

  3. 另一个可用的重要功能是使用 Web 界面通过 SSH 执行远程活动。转到菜单系统 | 控制管理 | 运行命令

将打开一个窗口,如下图所示。我们可以在这里运行任何命令。

操作步骤...

  1. NSTWUI 还允许管理员通过 Web 界面远程重新启动或关闭服务器。要这样做,转到菜单系统 | 控制管理 | 重新启动

  2. 点击继续重新启动此 NST 系统以确认。否则,点击退出取消。

  3. 在下一个屏幕中,输入所示的文本,然后按确定如何做...

它是如何工作的...

安装或引导 NST 后,第一步是为现有用户帐户设置密码。这是通过使用设置 NST 系统密码选项完成的。

设置密码后,我们通过任何浏览器访问系统的 IP 地址来通过 Web 用户界面访问 NST。

登录 NSTWUI 后,我们会得到与网络安全相关的各种工具列表。

我们探索了一些工具,如 bandwidthd 和 SSH。

螺旋

在进行取证分析时,我们必须以分钟级别查看文件系统,并分析许多事情,如程序的执行,文件的下载,文件的创建等。

在这种情况下,最好在分析开始时创建磁盘的取证镜像。Helix 是创建这种镜像的最佳选择。

Helix 是用于取证调查和事件响应的基于 Linux 的 Live CD。

准备工作

Helix 有免费和商业形式,其免费版本可以从以下链接下载:

www.e-fense.com/products.php

下载后,我们可以将映像文件刻录到 CD/DVD 上,或者我们可以创建可引导的 USB 介质。

如何做?

为了演示 Helix 的使用,我们可以将其安装在我们的系统上,或者我们可以使用 Live CD/DVD 或 USB 介质,如下所示:

  1. 要使用 Helix,我们使用 Helix 的 Live CD 引导系统。从出现的第一个屏幕中,我们选择引导到 Helix Live CD选项直接引导 Helix。但是,如果您希望在系统上安装 Helix,则可以使用安装 Helix选项。如何做?

  2. 现在,事件响应期间执行的第一步是创建硬盘/存储的镜像,以便以后进行调查。要创建硬盘的逐位复制,我们将使用 Helix 中提供的名为Adepto的工具。

  3. 要打开Adepto,请转到开始菜单,然后在取证与 IR下找到该工具。如何做?

  4. 当 Adepto 启动时,我们会得到应用程序的主屏幕。我们可以输入用户名或留空,然后点击Go继续。

  5. 下一个屏幕显示了我们想要复制的设备的信息。从下拉菜单中选择设备,我们可以得到有关该设备的所有信息。在我们的情况下,我们已经选择了要复制的 USB 设备。如何做?

  6. 现在我们点击顶部的获取选项卡继续。现在我们需要提供源和目的地信息。完成后,按开始继续:如何做?

  7. 一旦点击开始,我们可以在开始按钮下方看到进度,如下所示:如何做?

  8. 可以通过点击日志选项卡来检查日志中的过程细节。在日志中,我们可以看到源图像的哈希验证与我们的设备成功。如何做?

  9. 现在,下一步是克隆我们想要调查的 USB 设备。为此,我们点击恢复/克隆选项卡。输入源和目的地,然后按克隆开始:如何做?

  10. 我们将看到底部发生的进度。克隆过程需要时间,这也可能取决于正在复制的磁盘的大小以及系统的处理能力:如何做?

  11. 克隆完成后,我们可以验证两个设备中的数据。我们可以看到我们在第二个 USB 设备中克隆的设备的精确图像。如何做?

  12. Adepto 为我们提供了创建有关克隆过程中发生的事件的 PDF 报告的选项。

为此,请点击“责任链”选项卡,然后在底部点击“创建 PDF”。

如何操作?

工作原理是...

Helix 用于法证调查,在此过程中,一个重要的任务是创建被分析的硬盘的法证镜像。

我们已经通过 Adepto 工具了解了按照前面的步骤创建 USB 设备镜像的过程。

第九章:修补 Bash 漏洞

在本章中,我们将学习以下概念:

  • 通过 Shellshock 了解 bash 漏洞

  • Shellshock 的安全问题

  • 补丁管理系统

  • 在 Linux 系统上应用补丁

通过 Shellshock 了解 bash 漏洞

Shellshock,或者称为 Bashdoor,是 Linux 和 Unix 操作系统中大多数版本中使用的漏洞。它于 2014 年 9 月 12 日被发现,影响使用 bash shell 的所有 Linux 发行版。Shellshock 漏洞使得可以使用环境变量远程执行命令。

准备工作

要理解 Shellshock,我们需要一个使用早于 4.3 版本的 bash 的 Linux 系统,该版本容易受到此漏洞的影响。

如何做…

在本节中,我们将看看如何设置我们的系统以了解 Shellshock 漏洞的内部细节:

  1. 第一步是检查 Linux 系统上 bash 的版本,以便我们可以确定我们的系统是否容易受到 Shellshock 的影响。要检查 bash 的版本,我们运行以下命令:如何做…

从 4.3 版本开始的 Bash 版本据报告易受 Shellshock 影响。在我们的示例中,我们使用的是 Ubuntu 12.04 LTS 桌面版本。从前面的图像输出中,我们可以看到这个系统是有漏洞的。

  1. 现在,让我们检查漏洞是否真的存在。为此,我们运行以下代码:如何做…

一旦运行了上述命令,如果输出中打印了shellshock,则漏洞已确认。

  1. 让我们了解漏洞的内部情况。为此,我们首先需要了解 bash shell 的变量基础知识。

  2. 如果我们想在 bash 中创建一个名为testvar的变量,并将shellshock值存储在其中,我们运行以下命令:

testvar=""shellshock''

现在,如果我们想要打印这个变量的值,我们可以使用echo命令,如下所示:

echo $testvar

  1. 我们将通过运行bash命令打开一个 bash 的子进程。然后,我们再次尝试在子进程中打印testvar变量的值:如何做…

当我们尝试在子进程中打印该值时,我们看不到任何输出。

  1. 现在,我们将尝试使用 bash 的环境变量重复上述过程。当我们启动一个新的 bash shell 会话时,一些变量可供使用,这些被称为环境变量

  2. 将我们的testvar变量设置为环境变量,我们将对其进行导出。一旦导出,我们也可以在子 shell 中使用它,如下所示:如何做…

  3. 当我们定义变量并导出它们时,同样地,我们可以定义一个函数并导出它,以便在子 shell 中使用。以下步骤显示了如何定义一个函数并导出它:如何做…

在上面的例子中,x函数已被定义,并且已使用-f标志导出。

  1. 现在,让我们定义一个新变量,命名为testfunc,并为其赋值,如下所示:
testfunc=''() { echo ''shellshock'';}''

上述变量可以像普通变量一样访问:

echo $testfunc

接下来,我们将导出这个变量,使其成为一个环境变量,然后尝试从子 shell 中访问它,如下所示:

如何做…

在前面的结果中发生了一些意外的事情。在父 shell 中,该变量被视为普通变量。然而,在子 shell 中,它被解释为一个函数,并执行函数体。

  1. 接下来,我们将终止函数的定义,然后将任意命令传递给它。如何做…

在上面的例子中,一旦我们启动一个新的 bash shell,定义在函数外部的代码将在 bash 启动时执行。

这是 bash shell 中的漏洞。

工作原理…

我们首先检查系统上运行的 bash 版本。然后,我们运行一个众所周知的代码来确认 Shellshock 漏洞是否存在。

为了了解 Shellshock 漏洞是如何工作的,我们在 bash 中创建一个变量,然后尝试将其导出到子 shell 并在那里执行。接下来,我们尝试创建另一个变量,并将其值设置为''() { echo ''shellshock'';}''。这样做后,当我们将这个变量导出到子 shell 并在那里执行时,我们会看到它在子 shell 中被解释为一个函数并执行其中的内容。

这就是使 bash 容易受到 Shellshock 影响的地方,特别设计的变量可以在 bash 启动时用来运行任何命令。

Shellshock 的安全问题

在这个几乎所有东西都在线的时代,在线安全是一个重要的问题。如今,许多 Web 服务器、Web 连接设备和服务都使用 Linux 作为平台。大多数 Linux 版本使用 Unix bash shell,因此Shellshock漏洞可能会影响大量的网站和 Web 服务器。

在上一个步骤中,我们详细了解了 Shellshock 漏洞。现在,我们将了解如何通过 SSH 利用这个漏洞。

准备工作

要利用 Shellshock 漏洞,我们需要两个系统。第一个系统将被用作受害者,并且应该容易受到 Shellshock 的影响。在我们的情况下,我们将使用 Ubuntu 系统作为易受攻击的系统。第二个系统将被用作攻击者,并且可以运行任何 Linux 版本。在我们的情况下,我们将在第二个系统上运行 Kali。

受害系统将运行openssH-server软件包。可以使用以下命令进行安装:

apt-get install openssh-server

我们将配置此系统为易受攻击的 SSH 服务器,以展示如何利用 Shellshock 漏洞。

如何操作...

要了解 Shellshock 漏洞如何被用来利用 SSH 服务器,我们需要首先将我们的 SSH 服务器配置为易受攻击的系统。为此,我们将按照以下步骤进行:

  1. 第一步是在 SSH 服务器系统上添加一个名为user1的新用户账户。我们还将/home/user1添加为其主目录,/bin/bash作为其 shell:如何操作...

添加完账户后,我们通过检查/etc/passwd文件进行交叉检查。

  1. 接下来,我们在/home中为user1创建一个目录,并将该目录的所有权授予user1账户。如何操作...

  2. 现在,我们需要通过授权密钥来验证攻击者登录到 SSH 服务器。为此,我们将首先在攻击者的系统上使用以下命令生成这些授权密钥:如何操作...

我们可以看到公钥/私钥已经生成。

  1. 生成授权密钥后,我们将通过 SFTP 将公钥发送到远程 SSH 服务器。首先,我们将id_rsa.pub公钥文件复制到桌面,然后运行连接到 SSH 服务器的 SFTP 命令。如何操作...

连接后,我们使用put命令传输文件。

  1. 在受害者 SSH 服务器系统上,我们在/home/user1/目录下创建一个.ssh目录,然后将id_rsa.pub文件的内容写入到/home/user1/.ssh/目录下的authorized_keys文件中:如何操作...

  2. 之后,我们编辑 SSH 的配置文件etc/ssh/sshd_config,并启用PublicKeyAuthentication变量。我们还检查AuthorizedKeysFile是否已经正确指定:如何操作...

  3. 在成功完成上述步骤后,我们可以尝试从攻击者系统登录到 SSH 服务器,以检查是否会提示输入密码:如何操作...

  4. 现在,我们将创建一个基本脚本,如果用户尝试传递date命令作为参数,它将显示restricted消息。但是,如果传递的不是date,它将被执行。我们将把这个脚本命名为sample.sh如何做…

  5. 创建脚本后,我们运行以下命令为其赋予可执行权限:

chmod +x sample.sh

  1. 之后,我们在authorized_keys文件中使用command选项运行我们的sample.sh脚本,通过添加脚本的路径,如下所示:如何做…

authorized_keys文件中进行上述更改,以限制用户执行预定义的一组命令,将使公钥认证变得脆弱。

  1. 现在,从攻击者的系统中,尝试通过 SSH 连接到受害系统,同时传递date作为参数。如何做…

我们可以看到restricted消息被显示出来,因为我们将脚本添加到了authorized_keys文件中。

  1. 接下来,我们尝试将我们的 Shellshock 漏洞利用作为参数传递,如下所示:如何做…

我们可以看到,尽管我们在脚本中限制了date命令,但这次它被执行了,并且我们得到了date命令的输出。

让我们看看如何利用 Shellshock 漏洞来 compromise 一个运行任何可以触发带环境变量的 bash shell 的 Apache 服务器:

  1. 如果受害系统上尚未安装 Apache,我们首先使用此命令安装它:
apt-get install apache2

安装完成后,我们使用此命令启动 Apache 服务器:

service apache2 start

  1. 接下来,我们转到/usr/lib/cgi-bin/路径,并创建一个example.sh脚本,其中包含以下代码,以显示一些 HTML 输出:如何做…

然后,我们通过运行此命令使其可执行:

chmod +x example.sh

  1. 从攻击者的系统中,我们尝试使用名为curl的命令行工具远程访问example.sh文件:如何做…

我们得到了预期的脚本输出,即Example Page

  1. 现在,让我们使用 curl 发送一个恶意请求到服务器,以打印受害系统的/etc/passwd文件的内容,通过运行此命令:
curl -A ''() { :;}; echo ""Content-type: text/plain""; echo; /bin/cat /etc/passwd http://192.168.1.104/cgi-bin/example.sh

如何做…

我们可以在攻击者的系统中看到输出,显示了受害系统如何可以使用 Shellshock 漏洞进行远程访问。在上述命令中,() { :;} ;表示一个看起来像函数的变量。在这段代码中,函数是一个单独的:,它什么也不做,只是一个简单的命令。

  1. 我们尝试另一个命令,如下所示,来查看受害系统当前目录的内容:如何做…

我们在上述输出中看到了受害系统的root目录的内容。

工作原理…

在我们的 SSH 服务器系统上,我们创建一个新的用户账户,并将 bash shell 分配为其默认 shell。我们还在/home中为这个新用户账户创建一个目录,并将其所有权分配给这个账户。

接下来,我们配置我们的 SSH 服务器系统来认证另一个系统,使用授权密钥连接到它。

然后,我们创建一个 bash 脚本来限制特定命令,比如date,并将此脚本路径添加到authorized_keys中使用command选项。

之后,当我们尝试从之前配置了授权密钥的其他系统连接到 SSH 服务器时,我们会注意到,如果我们在连接时传递date命令作为参数,该命令会受到限制。

然而,当使用 Shellshock 漏洞传递相同的date命令时,我们看到了date命令的输出,从而显示了 Shellshock 如何被用来利用 SSH 服务器。

类似地,我们通过创建一个示例脚本并将其放置在 Apache 系统的/usr/lib/cgi-bin目录中来利用 Apache 服务器。

然后,我们尝试使用 curl 工具从另一个系统访问这个脚本。

您会注意到,如果我们通过 curl 访问脚本时传递了Shellshock exploit,我们可以远程在 Apache 服务器上运行我们的命令。

补丁管理系统

在当前的计算场景中,漏洞和补丁管理是一个永无止境的循环的一部分。当计算机因已知漏洞而受到攻击以被利用时,这种漏洞的补丁已经存在;然而,它尚未正确地在系统上实施,从而导致攻击。

作为系统管理员,我们必须知道哪个补丁需要安装,哪个应该被忽略。

准备工作

由于可以使用 Linux 的内置工具进行补丁管理,因此在执行这些步骤之前不需要配置特定的设置。

操作步骤

保持系统更新的最简单和最有效的方法是使用内置的更新管理器,该管理器内置在 Linux 系统中。在这里,我们将探讨 Ubuntu 系统中更新管理器的工作原理:

  1. 要在 Ubuntu 中打开更新管理器的图形版本,请点击左侧工具栏上的Superkey,然后输入update。在这里,我们可以看到更新管理器如何操作...

  2. 当我们打开更新管理器时,会出现以下对话框,显示可用于安装的不同安全更新:如何操作...

选择要安装的更新,然后单击安装更新以继续。

  1. 在同一个窗口中,我们在左下角有一个设置按钮。当我们点击它时,会出现一个新的软件源窗口,其中有更多选项可以配置更新管理器

  2. 第一个选项卡是Ubuntu 软件,它显示了下载更新所需的存储库列表。我们根据自己的需求从列表中选择选项:如何操作...

  3. 如果我们点击从...下载选项,我们会得到一个选项来更改用于下载的存储库服务器。如果我们连接到当前选择的服务器存在任何问题或服务器速度慢,这个选项是有用的。如何操作...

  4. 从下拉列表中,当我们选择其他...选项时,我们会得到一个服务器选择列表,如下图所示:如何操作...

  5. 接下来的其他软件选项卡用于添加 Canonical 的合作伙伴存储库:如何操作...

  6. 我们可以从前面的图像中选择任何选项,并单击编辑以更改存储库详细信息,如下所示:如何操作...

  7. 更新选项卡用于定义 Ubuntu 系统如何接收更新以及何时接收更新:如何操作...

  8. 身份验证选项卡包含有关软件提供者的身份验证密钥的详细信息,这些信息是从软件存储库的维护者那里获得的:如何操作...

  9. 最后一个选项卡是统计信息,适用于希望匿名向 Ubuntu 开发者项目提供数据的用户。这些信息有助于开发人员提高软件的性能和改善用户体验。如何操作...

  10. 在这些选项卡中进行任何更改后,当我们点击关闭时,会提示我们确认是否应该在列表中显示新的更新。点击重新加载关闭如何操作...

  11. 如果我们想要检查更新管理器从中检索所有软件包的位置列表,我们可以检查/etc/apt/sources.list文件的内容。然后我们会得到这个结果:如何操作...

工作原理

要更新我们的 Linux 系统,我们使用内置的更新管理器,根据 Linux 发行版。

在更新管理器中,我们可以安装所有可用的更新,或者根据我们的需求使用设置窗口进行配置。

设置窗口中,我们有选项来显示可以下载更新的存储库列表。

设置窗口中的第二个选项卡让我们添加 Canonical 的第三方合作伙伴存储库。

使用下一个选项卡,我们可以指定何时以及何种类型的更新应该被下载。

我们还使用设置窗口检查软件提供商的身份验证密钥。

最后一个选项卡统计,帮助将数据发送给 Ubuntu 项目开发人员,以改进软件的性能。

在 Linux 系统上应用补丁

每当在任何软件中发现安全漏洞时,都会为该软件发布安全补丁,以便修复错误。通常,我们使用内置于 Linux 中的 Update Manager 来应用安全更新。但是,对于通过编译源代码安装的软件,Update Manager 可能不太有用。

对于这种情况,我们可以将补丁文件应用到原始软件源代码上,然后重新编译软件。

准备工作

由于我们将使用 Linux 的内置命令来创建和应用补丁,在开始以下步骤之前不需要做任何事情。我们将创建一个 C 语言的示例程序来了解创建补丁文件的过程。

如何做...

在本节中,我们将看看如何使用diff命令为程序创建补丁,然后我们将使用patch命令应用补丁。

  1. 第一步将是创建一个简单的 C 程序,名为example.c,打印This is an example,如下所示:如何做...

  2. 现在,我们将创建example.c的副本,并将其命名为example_new.c

  3. 接下来,我们编辑新的example_new.c文件,向其中添加一些额外的代码行,如下所示:如何做...

  4. 现在,example_new.c可以被视为example.c的更新版本。

  5. 我们将使用diff命令创建一个名为example.patch的补丁文件:如何做...

  6. 如果我们检查补丁文件的内容,我们会得到这个输出:如何做...

  7. 在应用补丁之前,我们可以使用-b选项备份原始文件。如何做...

你会注意到一个新的example.c.orig文件已经被创建,这是备份文件。

  1. 在实际打补丁之前,我们可以先运行补丁文件的干跑来检查是否有任何错误。为此,我们运行以下命令:如何做...

如果我们没有收到任何错误消息,这意味着补丁文件现在可以在原始文件上运行。

  1. 现在,我们将运行以下命令来将补丁应用到原始文件上:
patch < example.patch

  1. 在应用补丁后,如果我们现在检查example.c程序的内容,我们会看到它已经更新了一些额外的代码行,就像example_new.c中写的那样:如何做...

  2. 一旦补丁应用到原始文件上,如果我们希望撤销它,可以使用-R选项来实现:如何做...

我们可以看到在打补丁后文件的大小差异。

它是如何工作的...

我们首先创建一个示例 C 程序。然后,我们创建它的副本,并添加几行代码以使其成为更新版本。之后,我们使用diff命令创建一个补丁文件。在应用补丁之前,我们通过干跑来检查是否有任何错误。

如果我们没有错误,我们使用 patch 命令应用补丁。现在,原始文件将具有与更新版本文件相同的内容。

我们也可以使用-R选项来撤销补丁。

第十章:安全监控和日志记录

在本章中,我们将讨论以下主题:

  • 使用 Logcheck 查看和管理日志文件

  • 使用 Nmap 监视网络

  • 使用 glances 进行系统监控

  • 使用 MultiTail 监视日志

  • 使用系统工具 - Whowatch

  • 使用系统工具 - stat

  • 使用系统工具 - lsof

  • 使用系统工具 - strace

  • 使用 Lynis

使用 Logcheck 查看和管理日志文件

作为管理员,在检查系统或任何软件问题上的恶意活动时,日志文件起着非常重要的作用。然而,随着软件数量的增加,创建的日志文件数量也在增加。这使得管理员很难正确分析日志文件。

在这种情况下,Logcheck 是一个很好的工具,可以帮助管理员分析和扫描日志文件。Logcheck 根据其文档扫描有趣的行的日志。这些行主要是指工具检测到的安全问题。

准备工作

在 Linux 系统上使用 Logcheck 不需要特定的要求。

如何操作…

在本节中,我们将看看如何根据我们的要求安装和配置 Logcheck:

  1. 第一步是使用以下屏幕截图中显示的命令安装软件包:如何操作…

  2. 在安装过程中,将打开一个窗口,并显示有关选择邮件服务器配置类型的信息,如下面的屏幕截图所示:如何操作…

  3. 单击确定继续。

  4. 在下一个窗口中,选择Internet Site,然后选择确定继续。如何操作…

  5. 安装完成后,我们需要对/etc/logcheck/logcheck.conf配置文件进行更改。

  6. 在配置文件中要编辑的第一件事是日期/时间戳的格式,该格式用于 Logcheck 发送的邮件的主题。如何操作…

  7. 接下来,我们可以更改REPORTLEVEL变量的值,以便根据我们的要求控制日志的过滤。我们有三个选项可用,而默认情况下,该值设置为server

workstation值过滤了大部分消息,不太冗长。paranoid值对于安全性很高的系统很有用。它尽可能少地运行服务,并且更冗长。

  1. 之后,我们更改SENDMAILTO变量的值,并向其提供我们的电子邮件地址,以便在我们的电子邮件 ID 上接收日志。如何操作…

  2. Logcheck 生成的邮件对不同的事件使用不同的主题行。如果我们希望修改这些主题行,我们可以编辑这里显示的变量的值:如何操作…

  3. 默认情况下,Logcheck 使用/etc/logcheck/logcheck.logfiles文件来维护要由其监视的日志文件列表。如果我们希望使用任何其他文件来定义列表,并且它位于另一个位置,我们可以编辑RULEDIR变量以定义新路径。

  4. 如果我们希望 Logcheck 监视除/etc/logcheck/logcheck.logfiles文件中已定义的任何特定文件之外的文件,我们可以在其中添加一个条目,如下所示:如何操作…

  5. 在上述文件中,我们添加了/var/log/boot.log行。

工作原理…

我们首先安装 Logcheck 软件包,安装后,我们编辑其配置/etc/logcheck/logcheck.conf文件。

在配置文件中,我们通过修改REPORTLEVEL变量来更改日志的日期/时间戳格式和过滤。

接下来,我们编辑SENDMAILTO变量,并输入我们的电子邮件 ID 以接收日志。

使用etc/logcheck/logcheck.logfiles文件,我们定义要由 Logcheck 监视的日志。

使用 Nmap 监视网络

对于任何规模的网络,网络监控和安全都是非常重要的任务。定期监视网络对于保护系统免受攻击以及防止病毒和恶意软件进入网络都很重要。

Nmap,即网络映射器,是一个免费开源的工具,用于监视网络,是系统/网络管理员使用的最多功能的工具。Nmap 可用于执行安全扫描,探索网络,在远程系统上查找开放端口,并执行网络审计。

准备工作

为了展示 Nmap 的工作原理,我们需要至少两个系统来形成一个小型网络。在一个系统上,我们将安装nmap软件包,而另一个系统将用作扫描的主机。

如何操作...

在本节中,我们将看看如何使用 Nmap 执行不同类型的扫描。

  1. 第一步将是安装nmap软件包,如果尚未安装。为此,我们使用这个命令:
apt-get install nmap

运行上述命令后,我们得到以下输出:

如何操作...

  1. 要使用 Nmap 执行简单的扫描,我们可以使用要扫描的系统的主机名或 IP 地址。执行简单扫描的命令将如下所示:如何操作...

  2. 在前面的示例中,我们正在扫描的系统的 IP 地址是192.168.1.105。在扫描结果中,我们可以看到目标系统正在端口3306上运行 MySQL 数据库服务器。

  3. Nmap 也可以用来扫描我们自己的系统。为了这样做,我们可以运行这个命令:

nmap localhost

运行上述命令后,我们得到以下输出:

如何操作...

  1. 如果我们想用同一个命令扫描多个系统,我们可以这样做,如下所示:
nmap 192.168.1.105 192.168.1.102

我们可以在以下输出中看到两个系统的扫描结果:

如何操作...

  1. 我们可以使用 Nmap 来扫描特定的网络,并使用以下命令检查网络中哪些系统正在运行:
nmap -sP 192.168.1.0/24

当我们使用-sP选项进行扫描时,nmap会跳过端口检测和其他内容。它只是通过简单的 ping 检查哪些系统正在网络中运行。

如何操作...

  1. 如果我们只想将我们的扫描限制在特定端口上,我们可以告诉nmap只扫描该端口,使用-p选项,如下所示:如何操作...

在上面的示例中,我们扫描了端口2280,分别是 SSH 服务和 HTTP(Web 服务器)服务的默认端口。正如我们在上面的结果中看到的,远程系统正在运行 SSH;然而,HTTP 端口是关闭的。因此,没有运行 Web 服务器。

  1. 在对目标系统进行扫描时,确定系统上的操作系统非常重要,因为针对特定操作系统平台有许多漏洞利用。为了知道目标系统的操作系统,我们使用-O选项,如下所示:
nmap -O 192.168.1.105

以下图像中显示的结果告诉我们,目标系统正在运行 Windows 7 Ultimate 版本:

如何操作...

  1. 我们已经看到,使用-p选项,我们可以检查哪个特定端口是开放的。现在,假设目标系统的端口22是开放的,这意味着系统上正在运行 SSH。如果我们现在想要检查远程系统上 SSH 服务的版本,我们可以使用-sV选项,如下所示:如何操作...

工作原理...

当 Nmap 仅在一个 IP 地址上运行时,它会进行基本扫描,并告诉我们目标系统上哪些端口是开放的。通过了解开放的端口,我们可以识别系统上运行的服务。同样,Nmap 用于通过提供本地系统的 IP 地址来扫描本地系统。

Nmap 用于通过在同一命令中提供 IP 地址来同时扫描多个 IP 地址。此外,Nmap 还用于使用-sP选项检查网络中哪些系统正在运行。

它还可以使用-p选项扫描特定端口,如果使用-O选项,它会对目标系统进行指纹识别,告诉它正在运行的操作系统。

Nmap 也用于执行其他操作,比如识别目标系统上运行的服务的软件版本。

使用 glances 进行系统监控

对于管理员来说,系统监控也是通过检查运行在系统上的进程和服务来监控系统的性能。但是在屏幕上有限的空间上,有时很难获得所有的信息。在这种情况下,我们希望有一个工具,可以在有限的空间内向我们展示关于系统的最大信息,如 CPU、磁盘 I/O、内存、网络等等。

尽管我们有单独的工具来监视这些信息,但使用 Glances,管理员可以在最小的空间内看到最大量的信息。它可以根据终端窗口的大小动态调整信息。Glances 可以突出显示使用最大系统资源的程序。

准备工作

如果您在 Ubuntu 上安装 Glances,则建议使用 Ubuntu 13.04 及以上版本。对于其他版本的 Linux,最好使用最新版本。在我们的例子中,我们使用的是 Kali Linux 2.0。

如何做…

为了理解 glances 的工作原理,我们将按照这里给出的步骤进行操作:

  1. 第一步是使用以下命令安装软件包:
apt-get install glances

  1. 安装完成后,我们必须编辑/etc/default/glances文件,并将RUN变量的值更改为true,如下所示:操作步骤…

这样做将在系统启动时自动运行glances

  1. 要手动启动工具,只需运行glances命令。您将得到一个输出窗口,如下所示:操作步骤…

在前面的窗口中,我们可以看到显示的文本有不同的颜色。glances 中这些颜色代码的含义如下定义:

  • 绿色:这意味着一切“正常”

  • 蓝色:这种颜色表示“小心”,需要注意

  • 紫色:这种颜色表示“警告”

  • 红色:这指的是某事“关键”

  1. 颜色代码是根据 glances 配置文件中定义的默认阈值工作的。我们可以通过编辑/etc/glances/glances.conf文件来更改这些阈值。操作步骤…

  2. 默认情况下,glances 每秒刷新一次值。我们可以在运行 glances 时使用-t选项后面跟着秒数来更改这个值:

glances -t 5

  1. 有时,我们可能无法物理访问我们的系统,但我们仍然希望监控系统的性能。Glances 可以帮助我们远程进行这项工作。为此,我们首先需要使用-s选项在我们的系统上启用 Glances 的客户端/服务器模式,并使用-B选项将其绑定到系统的 IP 地址,如下所示:操作步骤…

  2. 现在 glances 服务器正在 IP 地址为192.168.1.102的系统上运行,默认情况下运行在端口61209上。在启用客户端/服务器模式时,如果提示输入密码,请定义您选择的任何密码。

  3. 在您想要访问 glances 的远程系统上运行此命令:

glances -c -P 192.168.1.102

  1. 运行此命令后,我们将得到一个窗口,如下面的屏幕截图所示,在左上角我们将看到“连接到 Kali - IP 192.168.1.102/24”,这告诉我们我们现在远程访问 glances:操作步骤…

  2. 为了使这个命令在远程系统上工作,有必要在这个远程系统上也安装 glances。

工作原理…

安装 Glances 后,我们启用其在系统启动时的自动运行

我们使用glances命令来运行它,并通过编辑/etc/glances/glances.conf文件来修改颜色代码的阈值值。

使用-t选项,我们可以修改刷新时间间隔,使用-s选项,我们可以启用 Glances 的客户端/服务器模式,然后使用-c选项和运行 Glances 的系统的 IP 地址,可以在其他系统上远程访问。

使用 MultiTail 监视日志

对于任何系统管理员来说,监视日志文件是一项非常繁琐的任务,如果我们必须同时参考多个日志文件来排除任何问题,那么在日志之间不断切换会变得更加困难。

对于这种情况,我们可以使用MultiTail工具,它可以帮助我们实时查看多个日志文件。使用 MultiTail,我们可以在单个窗口或 shell 中显示多个日志文件,并且它将实时显示日志文件的最后几行。

准备工作

要使用 MultiTail,我们不必在 Linux 系统上设置任何特定的内容。只需安装multitail软件包即可。可以使用以下命令完成:

apt-get install multitail

准备工作

如何做…

安装了 MultiTail 工具后,我们可以使用以下命令根据需要开始使用它:

  1. 如果我们想要使用multitail查看两个日志文件,我们将运行以下命令:
multitail /var/log/syslog /var/log/boot.log

如何做…

我们可以看到屏幕已分成两部分,每个部分显示单独日志文件的内容。

  1. 如果我们想要滚动查看已打开的两个文件,只需按下b,然后会弹出一个菜单,如下面的屏幕截图所示。从列表中,我们可以选择要详细监视的文件:如何做…

  2. 在打开的新窗口中,按ggG移动到滚动窗口的顶部或底部。要退出滚动窗口,按q

  3. 如果我们想要在两列中查看三个日志文件,我们可以使用以下命令:

multitail –s 2 /var/log/boot.log /var/log/syslog /var/log/auth.log

如何做…

上面的屏幕截图显示了两列中的三个日志文件。

  1. MultiTail 允许我们在打开它们时为单个日志文件自定义颜色,同时将它们合并在同一个窗口中。可以使用以下命令完成:
multitail -ci yellow /var/log/auth.log -ci blue -I /var/log/boot.log 

如何做…

工作原理…

当我们在同一命令行上提供两个日志文件的名称给 MultiTail 时,它会将这两个文件分割成两部分在同一屏幕上打开。

要使用 MultiTail 查看两个以上的日志文件,我们使用-s选项指定屏幕应该分割成的列数。

MultiTail 还允许我们在同一屏幕上查看多个日志文件,而无需通过颜色区分屏幕。可以使用-ci选项自定义颜色。

使用系统工具 - Whowatch

在监视网络的同时,管理员还希望监视当前登录到系统上的用户,并检查每个用户在计算机上的操作。

Whowatch是执行所有这些任务的完美工具。它使用简单的基于文本的界面,易于使用,并且可以显示有关用户名、用户进程以及正在使用的连接类型(如 SSH 和 telnet)的信息。

准备工作

由于 Whowatch 在 Linux 中不是预安装的软件包,因此我们必须安装它才能使用。安装 Whowatch 的命令如下:

apt-get install whowatch

准备工作

如何做…

为了充分利用 Whowatch 工具,我们必须正确理解该工具的细节:

  1. 要开始使用该工具,只需输入whowatch命令,然后会出现一个屏幕,如下所示:如何做…

上面的屏幕列出了所有已登录的用户帐户。

  1. 从列表中,我们可以选择任何用户帐户,当我们按Enter时,我们可以看到有关用户正在运行的所有程序的信息。如何做…

  2. 在同一屏幕上,我们在底部有更多选项,使用这些选项我们可以获取有关用户以及由他们运行的程序的更多信息,如下所示:如何做…

  3. 在 Whowatch 的主屏幕上,我们可以看到底部的菜单。如何做…

  4. 我们可以看到这里我们必须使用F9键来访问菜单选项。

  5. 一旦我们按下F9,我们会在屏幕顶部看到一个菜单。使用键盘上的箭头键在菜单中移动。当我们选择进程选项卡时,我们会得到一个子菜单,其中有一个名为KILL信号的选项,用于运行的进程。类似地,我们可以在同一个子菜单中看到更多选项:如何做…

  6. 当我们转到视图选项卡时,我们会得到这些选项:如何做…

  7. 最后一个选项卡是帮助,在其中我们有Keys选项。如何做…

  8. 当我们点击Keys时,它会打开一个新窗口,并显示有关用于不同任务的密钥的详细信息,如下所示:如何做…

  9. 按下s以获取有关系统的更多信息。如何做…

  10. 如果我们按t,我们会得到系统上所有进程的树形结构列表,如下所示:如何做…

工作原理

Whowatch 可以通过在命令行中简单地键入whowatch来启动。启动后,它会显示已登录的用户名列表。只需在任何用户名上按Enter即可获取有关该用户下运行的所有程序的信息。

要在 Whowatch 中访问更多选项,我们按下F9键进入主菜单。然后我们会得到各种选项卡,如进程视图用户帮助等。

进程选项卡提供了管理进程的选项,而视图选项卡提供了搜索和查看进程的选项。帮助选项卡有一个选项,可以查看 Whowatch 中可用作快捷键的密钥。

我们使用不同的密钥来访问系统信息并获取所有进程的列表。

使用系统工具 - stat

在 Linux 上工作时,最常用的命令是ls,它会列出我们指定目录中的文件。但是,它只显示有关文件的少量信息。

相反,如果我们使用stat命令,与使用ls相比,我们可以获得有关文件/目录的更多信息。因为stat能够从其节点获取有关文件的信息,所以它能够提供更多有关文件的信息。

准备就绪

由于stat是 Linux 的内置命令,因此不需要安装其他内容即可使用它。

如何做…

本节将解释stat命令的选项和用法。使用 stat,我们可以获取特定文件或文件系统的详细状态。

  1. 假设我们有一个名为example.txt的文件。当我们使用ls -l命令对此文件进行长列表时,我们会得到有关文件的信息,包括文件上次修改的时间。

然而,当我们使用stat命令来检查相同文件的详细信息时,它会显示有关文件的额外信息,差异如下所示:

如何做…

  1. 在前面的输出中,我们可以看到修改和更改时间是相同的。但访问时间已经改变。它还以八进制rwx格式显示了权限。还显示了许多其他细节。

  2. 现在,让我们将文件重命名为sample.txt。之后,如果我们使用stat检查sample.txt文件的详细信息,我们会看到更改时间已更新:如何做…

  3. 假设我们有三个文件,sample.txtsample1.txtsample2.txt。如果我们想要检查每个文件的详细信息,我们可以分别使用stat,或者我们可以使用stat和通配符一起显示所有三个文件的详细信息,如下所示:如何做…

  4. 我们也可以使用stat命令来检查目录的详细信息:如何做…

  5. 在目录的情况下,我们可以看到关于链接数量的额外细节。

  6. 如果我们对 Linux 的任何默认目录(例如/etc/)使用stat命令,我们会发现链接数量很大:如何做…

  7. 如果我们想要查看文件系统的详细信息,不能使用ls。但是,stat也适用于文件系统。我们得到与文件系统和文件相同类型的详细信息:如何做…

  8. 如果我们在检查文件系统的详细信息时使用stat命令的-f选项,它将显示文件系统的状态。如何做…

它是如何工作的

我们使用stat命令来获取有关文件的详细信息。当文件被重命名时,stat会告诉我们更改的时间。还可以使用stat命令的通配符一次获取多个文件的信息。

stat也适用于目录和文件系统。在文件系统的情况下,stat可以使用-f选项显示其状态。

使用系统工具 - lsof

有时,我们可能会遇到无法卸载磁盘的情况,因为有些文件正在使用。但是,我们可能无法理解指的是哪个文件。在这种情况下,我们可以检查系统上正在运行的进程打开了哪些文件。

这可以通过lsof命令来实现,它代表列出打开的文件。由于 Linux 将一切都视为文件,例如目录、设备、套接字等,我们可以使用lsof轻松识别所有打开的文件。

准备工作

要使用lsof命令,建议您从 root 帐户登录,否则,请从非 root 帐户使用sudo,以便lsof命令的输出不受限制。

如何做…

在本节中,我们将探讨可与lsof命令一起使用的不同选项,以了解其工作原理。

  1. 如果我们只运行lsof,它将列出系统上任何活动进程拥有的所有打开文件。如果输出很长,我们可以使用less命令来滚动输出:
lsof | less

显示的输出以列的形式显示,例如COMMANDPIDUSERFDTYPEDEVICE等,以更好地理解文件。

FD列包含有关文件描述的信息,例如当前工作目录(cwd)、根目录(rtd)、程序文本(txt)等。如果FD列包含0u1u等信息;数字表示实际文件描述符,字母表示不同的模式(访问、访问和读/写访问)。

如何做…

  1. 要检查特定用户的所有打开文件列表,我们使用-u选项,后跟用户名:
lsof -u tajinder

如何做…

  1. 使用lsof,我们可以检查是否有任何进程在特定端口上运行。为此,我们必须使用-i选项并运行此命令:
lsof –i TCP:22

如何做…

  1. 在上面的示例中,我们检查了端口22上运行的进程列表,并且看到 SSH 进程正在运行。

  2. 如果我们想要检查系统上打开文件的确切数量,可以运行此命令:如何做…

在上面的示例中,有很多打开的文件,具体为 5220 个。

  1. 要检查哪个用户正在查看哪个文件,以及用户正在运行哪些命令,我们可以使用以下命令:
lsof -i -u tajinder

如何做…

在使用lsof时,我们有更多选项可供使用,可以参考lsof命令的man页面进行探索。

它是如何工作

运行lsof命令会显示系统上所有打开的文件的列表。使用-u选项并指定用户名,我们可以获得特定用户的打开文件列表。

当我们使用-i选项并指定端口号时,我们会得到有关在该端口上运行的任何进程的信息。

当我们同时使用-i-u选项与特定用户名时,我们会得到有关该用户访问的文件和命令的信息。

使用系统工具 - strace

在我们的 Linux 机器上运行任何命令或程序时,您可能会想知道其背景工作是什么。为此,在 Linux 中有一个非常有用的工具叫做strace

这是一个命令行工具,也可以用作诊断或调试工具。strace 监视进程与 Linux 内核之间的交互,在我们想要调试任何程序的执行时很有帮助。

准备工作

该工具默认适用于所有基于 Linux 的系统。因此,无需配置其他内容即可开始使用 strace。

操作步骤…

让我们看看如何以各种方式使用 strace 来跟踪任何程序的执行从开始到结束。

  1. 要跟踪 Linux 中任何可执行命令的执行,只需运行strace命令,然后跟上可执行命令。如果我们对ls命令使用strace,我们会得到这个输出:操作步骤…

  2. 在上面的屏幕截图中,显示的输出已被截断。如果我们检查输出的最后几行,我们会看到一些写系统调用,其中显示了当前目录的列表:操作步骤…

  3. 要检查列表,我们可以在同一目录中单独运行ls,我们将看到与前一张图片中看到的相同的列表:操作步骤…

  4. 如果我们想要以整洁的方式显示strace命令的统计摘要,我们可以使用-c选项:

strace -c ls

运行上述命令时,我们会得到以下输出:

操作步骤…

  1. 我们还可以使用-t选项在每个输出行的开头显示时间戳:操作步骤…

  2. 默认的strace命令显示可执行程序所做的所有系统调用。如果我们希望仅显示特定调用,可以使用-e选项。因此,如果我们只想看到ls命令的打开系统调用,我们必须运行此命令:

strace -e open ls

运行上述命令时,我们会得到以下输出:

操作步骤…

  1. 如果我们希望将strace命令的输出保存在文件中以便以后查看,我们可以使用-o选项:
strace -o output.txt ls

这里,output.txt是将保存strace命令输出的文件的名称:

操作步骤…

注意

如果我们想要在当前正在运行的任何进程中使用 strace,可以使用该进程的 ID。在我们的示例中,我们正在使用firefox的进程,其进程 ID 为16301

  1. 我们运行以下命令,并使用-o选项将命令的输出保存在firefox_output.txt文件中:操作步骤…

  2. 然后,我们可以使用tail命令或我们选择的任何文本编辑器来检查输出文件的内容。

工作原理

当在任何其他 Linux 命令或程序上使用strace命令时,它会跟踪其与 Linux 内核的交互。

当与strace一起使用-c选项时,我们会得到统计摘要,如果使用-t选项,我们会得到每个输出行之前的时间戳。

使用-e选项,我们只看到程序执行的特定调用,比如打开系统调用。使用-o选项,我们将strace命令的输出写入文件。

使用 Lynis

在 Linux 上手动监视日志文件是一项非常繁琐的任务。为了简化操作,我们可以在 Linux 系统上使用审计工具,它将能够自动扫描整个系统以查找任何安全问题。

Lynis易于使用,我们可以在更短的时间内获得安全报告。这在扫描 Linux 系统以查找漏洞和恶意软件时非常有用。

准备工作

要使用 Lynis,无需安装。如果您使用的是 Ubuntu 系统,可以使用 apt-get 安装 Lynis 软件包:

apt-get install lynis

运行上述命令后,我们会得到以下输出:

准备就绪

对于其他 Linux 发行版,只需从cisofy.com/download/lynis/下载软件包即可。

下载完成后,只需使用./lynis audit system即可开始扫描。

如何操作…

使用 Lynis 非常简单。只需启动扫描过程,一切都将自动完成。现在让我们来探索工具的工作方式:

  1. 开始扫描,只需输入以下命令:
lynis -c

运行上述命令后,我们会得到以下输出:

如何操作…

  1. 运行上述命令后,扫描将开始,并且将根据系统上找到的软件包而持续一段时间。扫描包括不同的部分,如系统工具、内核、文件系统等。

  2. 扫描完成后,我们可以在输出屏幕的末尾看到详细信息的概述:如何操作…

  3. 扫描完成后,将生成报告并保存在/var/log/lynis.log文件中。当我们阅读此文件的内容时,会得到类似于此处所示的输出:如何操作…

  4. 我们可以滚动查看日志文件,了解 Lynis 执行了哪些测试。

  5. 在上述报告中,需要我们关注的是包含警告一词的条目。因此,我们可以运行给定的命令来查找报告中包含此单词的所有行:

grep Warning /var/log/lynis.log

运行上述命令后,我们会得到以下输出:

如何操作…

  1. 警告一样,我们也可以使用此命令找到 Lynis 给出的所有建议的列表:
grep Suggestion /var/log/lynis.log

运行上述命令后,我们会得到以下输出:

如何操作…

  1. 我们还可以通过滚动到/var/log/lynis.log文件的末尾来检查警告建议。我们将看到类似于此处所示的结果:如何操作…

它是如何工作的

可以通过执行lynis -c命令来启动 Lynis 扫描。扫描运行时无需进行任何操作。

扫描完成后,报告将保存在/var/log/lynis.log文件中。

在报告中找到一些包含警告建议的行,因为这些是根据 Lynis 的要求需要我们关注的行。

标签:实战,文件,秘籍,Linux,系统,命令,使用,我们
From: https://www.cnblogs.com/apachecn/p/18196633

相关文章

  • Linux-Shell-编程训练营-全-
    LinuxShell编程训练营(全)原文:zh.annas-archive.org/md5/65C572CE82539328A9B0D1458096FD51译者:飞龙协议:CCBY-NC-SA4.0前言在LinuxShellScriptingBootcamp中,您将首先学习脚本创建的基础知识。您将学习如何验证参数,以及如何检查文件的存在。接着,您将熟悉Linux系统......
  • Linux-基础知识-全-
    Linux基础知识(全)原文:zh.annas-archive.org/md5/29980B7659BC4BE41209BC2F2B7B6D02译者:飞龙协议:CCBY-NC-SA4.0前言在这本书中,目标是建立一个扎实的基础,学习Linux命令行的所有基本要素,让你入门。它的设计强调只学习实际的核心技能和基本的Linux知识,这在开始学习这个美......
  • Linux-系统编程实用手册-二-
    Linux系统编程实用手册(二)原文:zh.annas-archive.org/md5/9713B9F84CB12A4F8624F3E68B0D4320译者:飞龙协议:CCBY-NC-SA4.0第十八章:高级文件I/O在附录A,文件I/O基础中,我们介绍了应用程序开发人员如何利用可用的glibc库API以及执行文件I/O(打开、读取、写入和关闭)的典......
  • openGauss Linux下配置数据源
    Linux下配置数据源将openGauss提供的ODBCDRIVER(psqlodbcw.so)配置到数据源中便可使用。配置数据源需要配置“odbc.ini”和“odbcinst.ini”两个文件(在编译安装unixODBC过程中生成且默认放在“/usr/local/etc”目录下),并在服务器端进行配置。操作步骤获取unixODBC源码包。获取......
  • ArchLinux-环境配置操作手册-全-
    ArchLinux环境配置操作手册(全)原文:zh.annas-archive.org/md5/537398CD561E23B9C0417DF43FA5C99F译者:飞龙协议:CCBY-NC-SA4.0前言ArchLinux是一种独立开发的通用GNU/Linux发行版,针对i686/x86-64系统进行了优化。该发行版足够灵活,适合任何角色/需求。它的设计侧重于简......
  • linux常用操作
    1.vi/vim查找字符串命令模式下,输入:/字符串比如搜索user,输入/user按下回车之后,可以看到vim已经把光标移动到该字符处和高亮了匹配的字符串查看下一个匹配,按下n(小写n)跳转到上一个匹配,按下N(大写N)搜索后,我们打开别的文件,发现也被高亮了,怎么关闭高亮?命令模式下,输入:nohlse......
  • util-linux升级为最新版本v2.40(修复CVE-2024-28085)
    下载util-linux最新源码代码仓库下载util-linux-2.40.1.tar.gz解压tar-zxvfutil-linux-2.40.1.tar.gzcdutil-linux-2.40.1执行autogen.shsudo./autogen.sh配置sudo./configure如果提示configure:error:liblastlog2selected,butrequiredsqlite3libraryn......
  • 实战项目-基于K8s平台进行wordpress建站
    (240516更新)基本信息系统:Debian12.05k8s版本:1.30环境:虚拟机序号IP地址域名主机名1192.168.100.12k8s-master.$yourname.comk8s-master2192.168.100.15k8s-node1.yourname.comk8s-node13192.168.100.16k8s-node2.yourname.comk8s-node24192.168......
  • Linux系统 输入vim 提示command not found
    让我想起了我面试的时候,面试官说你了解Linux系统吗?我说我不......他说好的,请问你平时怎么编辑文件呢。我说vim,进入编辑模式之后按照文档里面......他说如果没有vim呢?我说那就用自带的吧?他说自带的叫什么呢?我:......他:......他突然说:你平时抽烟吗?我:......whatcanisay......
  • 国产linux系统(银河麒麟,统信uos)使用 PageOffice 国产版在线动态填充 word 文件
    PageOffice国产版:支持信创系统,支持银河麒麟V10和统信UOS,支持X86(intel、兆芯、海光等)、ARM(飞腾、鲲鹏、麒麟等)芯片架构。在实际的Word文档开发中,经常需要自动填充数据到Word模板中,以生成动态的Word文档。例如,我们可以根据数据库表中已保存的个人信息,设计好一个简历模板docx文件,......