蚊章汇 - Jarret
type: channel
link: https://linuxcn.bwsl.wang/author/495/
description: Jarret
items: 如何备份一个磁盘分区
items: NMAP 常用扫描简介（二）
items: NMAP 常用扫描简介（一）
items: LFCS 命令行基础
items: Linux 上搭建 Minecraft 服务器

如何备份一个磁盘分区
type: item
date: 2017-05-05T01:42:16+08:00
description: 通常你可能会把数据放在一个分区上，有时候可能需要对该设备或者上面的一个分区进行备份。树莓派用户为了可引导 SD 卡当然有这个需求。其它小体积计算机的用户也会发现这非常有用。有时候设备看起来要出现故障时最好快速做个备份。进行本文中的实验你需要一个叫 dcfldd 的工具。dcfldd 工具该工具是 coreutils 软件包中 dd 工具的增强版。dcfldd 是 Nicholas Harbour 在美国国防部计算机取证实验室（DCFL）工作期间研发的。该工具的名字也基于他工作的地方 - dcfldd。对于仍然在使用 CoreUtils 8.23 或更低版本的系统，并没有一个可以轻松查看正在创建副本的进度的选项。有时候看起来就像什么都没有发生，以至于你就想取消掉备份。注意：如果你使用 8.24 或更新版本的 dd 工具，你就不需要使用 dcfldd，只需要用 dd 替换 dcfldd 即可。所有其它参数仍然适用。在 Debian 系统上你只需要在 Package Manager 中搜索 dcfldd。你也可以打开一个终端然后输入下面的命令：sudo apt-get install dcfldd 对于 Red Hat 系统，可以用下面的命令：cd /tmp wget dl.fedoraproject.org/pub/epel/6/i386/dcfldd-1.3.4.1-4.el6.i686.rpm sudo yum install dcfldd-1.3.4.1-4.el6.i686.rpm dcfldd --version 注意： 上面的命令安装的是 32 位版本。对于 64 位版本，使用下面的命令：cd /tmp wget dl.fedoraproject.org/pub/epel/6/x86_64/dcfldd-1.3.4.1-4.el6.x86_64.rpm sudo yum install dcfldd-1.3.4.1-4.el6.x86_64.rpm dcfldd --version 每组命令中的最后一个语句会列出 dcfldd 的版本并显示该命令文件已经被加载。注意：确保你以 root 用户执行 dd 或者 dcfldd 命令。安装完该工具后你就可以继续使用它备份和恢复分区。备份分区备份设备的时候可以备份整个设备也可以只是其中的一个分区。如果设备有多个分区，我们可以分别备份每个分区。在进行备份之前，先让我们来看一下设备和分区的区别。假设我们有一个已经被格式化为一个大磁盘的 SD 卡。这个 SD 卡只有一个分区。如果空间被切分使得 SD 卡看起来是两个设备，那么它就有两个分区。假设我们有一个树莓派中的 SD 卡。SD 卡容量为 8 GB，有两个分区。第一个分区存放 BerryBoot 启动引导器。第二个分区存放 Kali（LCTT 译注：Kali Linux 是一个 Debian 派生的 Linux 发行版）。现在已经没有可用的空间用来安装第二个操作系统。我们使用大小为 16 GB 的第二个 SD 卡，但拷贝到第二个 SD 卡之前，第一个 SD 卡必须先备份。要备份第一个 SD 卡我们需要备份设备 /dev/sdc。进行备份的命令如下所示：dcfldd if=/dev/sdc of=/tmp/SD-Card-Backup.img 备份包括输入文件（if）以及被设置为 /tmp 目录下名为 SD-Card-Backup.img 的输出文件（of）。dd 和 dcfldd 默认都是每次读写文件中的一个块。通过上述命令，它可以一次默认读写 512 个字节。记住，该复制是一个精准的拷贝 - 逐位逐字节。默认的 512 个字节可以通过块大小参数 - bs= 更改。例如，要每次读写 1 兆字节，参数为 bs=1M。使用以下所用的缩写可以设置不同大小：b – 512 字节KB – 1000 字节K – 1024 字节MB – 1000x1000 字节M – 1024x1024 字节GB – 1000x1000x1000 字节G – 1024x1024x1024 字节你也可以单独指定读和写的块大小。要指定读块的大小使用 ibs=。要指定写块的大小使用 obs=。我使用三种不同的块大小做了一个 120 MB 分区的备份测试。第一次使用默认的 512 字节，它用了 7 秒钟。第二次块大小为 1024 K，它用时 2 秒。第三次块大小是 2048 K，它用时 3 秒。用时会随系统以及其它硬件实现的不同而变化，但通常来说更大的块大小会比默认的稍微快一点。完成备份后，你还需要知道如何把数据恢复到设备中。恢复分区现在我们已经有了一个备份点，假设数据可能被损毁了或者由于某些原因需要进行恢复。命令和备份时相同，只是源和目标相反。对于上面的例子，命令会变…

NMAP 常用扫描简介（二）
type: item
date: 2017-04-12T18:25:00+08:00
description: 在我们之前的 NMAP 安装一文中，列出了 10 种不同的 ZeNMAP 扫描模式，大多数的模式使用了不同的参数。各种不同参数代表执行不同的扫描模式。之前我们介绍过两种扫描类型 PING 扫描 和 UDP 扫描，这篇文章将介绍最后剩下的两种常用扫描类型。四种通用扫描类型下面列出了最常用的四种扫描类型：PING 扫描（-sP）TCP SYN 扫描（-sS）TCP Connect() 扫描（-sT）UDP 扫描（-sU）当我们利用 NMAP 来执行扫描的时候，这四种扫描类型是我们需要熟练掌握的。更重要的是需要知道这些命令做了什么，并且需要知道这些命令是怎么做的。在这篇文章中将介绍两种 TCP 扫描 — TCP SYN 扫描和 TCP Connect() 扫描。TCP SYN 扫描 （-sS）TCP SYN 扫描是默认的 NMAP 扫描方式。为了运行 TCP SYN 扫描，你需要有 Root 权限。TCP SYN 扫描的目的是找到被扫描系统上的已开启端口。使用 NMAP 扫描可以扫描在防火墙另一侧的系统。当扫描通过防火墙时，扫描时间会延长，因为数据包会变慢。TCP SYN 扫描的工作方式是启动一个“三次握手”。正如在另一篇文章中所述，“三次握手”发生在两个系统之间。首先，源系统发送一个包到目标系统，这是一个同步（SYN）请求。然后，目标系统将通过同步/应答（SYN/ACK）响应。接下来，源系统将通过应答（ACK）来响应，从而建立起一个通信连接，然后，可以在两个系统之间传输数据。TCP SYN 扫描通过执行下面的步骤来进行工作：源系统向目标系统发送一个同步请求，该请求中包含一个端口号。如果添加在上一步中的所请求的端口号是开启的，那么目标系统将通过同步/应答（SYN/ACK）来响应源系统。源系统通过重置（RST）来响应目标系统，从而断开连接。目标系统可以通过重置/应答（RST/ACK）来响应源系统。这种连接已经开始建立，所以这被认为是半开放连接。因为连接状态是由 NMAP 来管理的，所以你需要有 Root 权限。如果被扫描的端口是关闭的，那么将执行下面的步骤：源系统发送一个同步（SYN）请求到目标系统，该请求中包含一个端口号。目标系统通过重置（RST）响应源系统，因为该端口是关闭的。如果目标系统处于防火墙之后，那么 ICMP 传输或响应会被防火墙禁止，此时，会执行下面的步骤：源系统发送一个同步（SYN）请求到目标系统，该请求中包含一个端口号。没有任何响应，因为请求被防火墙过滤了。在这种情况下，端口可能是被过滤、或者可能打开、或者可能没打开。防火墙可以设置禁止指定端口所有包的传出。防火墙可以禁止所有传入某个指定端口的包，因此目标系统不会接收到请求。注：无响应可能发生在一个启用了防火墙的系统上。即使在本地网络，你也可能会发现被过滤的端口。我将向 图片１那样执行对单一系统（10.0.0.2）的 TCP SYN 扫描。使用命令 sudo nmap -sS <IP 地址> 来执行扫描。<IP 地址>可以改为一个单一 IP 地址，像图片１那样，也可以使用一组 IP 地址。图片１你可以看到它表明 997 个被过滤端口没有显示在下面。NMAP 找到两个开启的端口：139 和 445 。注：请记住，NMAP 只会扫描绝大多数熟知的 1000 多个端口。以后，我们会介绍可以扫描所有端口或者指定端口的其它扫描。该扫描会被 WireShark 俘获，正如图片２所展示的那样。在这儿，你可以看到对目标系统的初始地址解析协议（ARP）请求。在 ARP 请求下面的是一长列到达目标系统端口的 TCP 请求。第 4 行是到达 http-alt 端口（8080）。源系统的端口号为 47128 。正如图片３ 展示的，许多 SYN 请求只有在做出响应以后才会发送。图片２图片３在图片３的第 50 行和第 51 行，你可以看到，重置（RST）包被发送给了目标系统。第 53 行和第 55 行显示目标系统的 RST/ACK（重置/应答）。第 50 行是针对 ‘microsoft-ds’ 端口（445），第 51 行是针对 ‘netbios-ssn’ 端口（135），我们可以看到，这两个端口都是打开的。（LCTT 译注：在 50 行和 51 行之前，目标系统发回了 SYN/ACK 响应，表示端口打开。）除了这些端口，没有其他 ACK（应答）是来自目标系统的。每一个请求均可发送超过 1000 次。正如图片４所展示的，目标系统是 Windows 系统，我关闭了系统防火墙，然后再次执行扫描。现在，我们看到了 997 个已关闭端口不是 997 个被过滤端口。目标系统上的 135 端口之前被防火墙禁止了，现在也是开启的。图片４TCP Connect() 扫描 （-sT）尽管 TCP SYN 扫描需…

NMAP 常用扫描简介（一）
type: item
date: 2017-03-28T17:05:14+08:00
description: 我们之前在 NMAP 的安装一文中，列出了 10 种不同的 ZeNMAP 扫描模式。大多数的模式使用了各种参数。各种参数代表了执行不同的扫描模式。这篇文章将介绍其中的四种通用的扫描类型。四种通用扫描类型下面列出了最常使用的四种扫描类型：PING 扫描 (-sP)TCP SYN 扫描 (-sS)TCP Connect() 扫描 (-sT)UDP 扫描 (-sU)当我们利用 NMAP 来执行扫描的时候，这四种扫描类型是我们需要熟练掌握的。更重要的是需要知道这些命令做了什么并且需要知道这些命令是怎么做的。本文将介绍 PING 扫描和 UDP 扫描。在之后的文中会介绍 TCP 扫描。PING 扫描 (-sP)某些扫描会造成网络拥塞，然而 Ping 扫描在网络中最多只会产生两个包。当然这两个包不包括可能需要的 DNS 搜索和 ARP 请求。每个被扫描的 IP 最少只需要一个包来完成 Ping 扫描。通常 Ping 扫描是用来查看在指定的 IP 地址上是否有在线的主机存在。例如，当我拥有网络连接却连不上一台指定的网络服务器的时候，我就可以使用 PING 来判断这台服务器是否在线。PING 同样也可以用来验证我的当前设备与网络服务器之间的路由是否正常。注意: 当我们讨论 TCP/IP 的时候，相关信息在使用 TCP/IP 协议的互联网与局域网（LAN）中都是相当有用的。这些程序都能工作。同样在广域网（WAN）也能工作得相当好。当参数给出的是一个域名的时候，我们就需要域名解析服务来找到相对应的 IP 地址，这个时候将会生成一些额外的包。例如，当我们执行 ping linuxforum.com 的时候，需要首先请求域名（linuxforum.com）的 IP 地址（98.124.199.63)。当我们执行 ping 98.124.199.63 的时候 DNS 查询就不需要了。当 MAC 地址未知的时候，就需要发送 ARP 请求来获取指定 IP 地址的 MAC 地址了（LCTT 译注：这里的指定 IP 地址，未必是目的 IP）。Ping 命令会向指定的 IP 地址发送一个英特网信息控制协议（ICMP）包。这个包是需要响应的 ICMP Echo 请求。当服务器系统在线的状态下我们会得到一个响应包。当两个系统之间存在防火墙的时候，PING 请求包可能会被防火墙丢弃。一些服务器也会被配置成不响应 PING 请求来避免可能发生的死亡之 PING。（LCTT 译注：现在的操作系统似乎不太可能）注意: 死亡之 PING 是一种恶意构造的 PING 包当它被发送到系统的时候，会造成被打开的连接等待一个 rest 包。一旦有一堆这样的恶意请求被系统响应，由于所有的可用连接都已经被打开，所以系统将会拒绝所有其它的连接。技术上来说这种状态下的系统就是不可达的。当系统收到 ICMP Echo 请求后它将会返回一个 ICMP Echo 响应。当源系统收到 ICMP Echo 响应后我们就能知道目的系统是在线可达的。使用 NMAP 的时候你可以指定单个 IP 地址也可以指定某个 IP 地址段。当被指定为 PING 扫描（-sP）的时候，会对每一个 IP 地址执行 PING 命令。在图 1 中你可以看到我执行 nmap -sP 10.0.0.1-10 命令后的结果。程序会试着联系 IP 地址 10.0.0.1 到 10.0.0.10 之间的每个系统。对每个 IP 地址都要发出三个 ARP 请求。在我们的例子中发出了三十个请求，这 10 个 IP 地址里面有两个有回应。（LCTT 译注：此处原文存疑。）图 1图 2 中展示了网络上另一台计算机利用 Wireshark 抓取的发出的请求——没错，是在 Windows 系统下完成这次抓取的。第一行展示了发出的第一条请求，广播请求的是 IP 地址 10.0.0.2 对应 MAC 地址。由于 NMAP 是在 10.0.0.1 这台机器上执行的，因此 10.0.0.1 被略过了。由于本机 IP 地址被略过，我们现在可以看到总共只发出了 27 个 ARP 请求。第二行展示了 10.0.0.2 这台机器的 ARP 响应。第三行到第十行是其它八个 IP 地址的 ARP 请求。第十一行是由于 10.0.0.2 没有收到请求系统（10.0.0.1）的反馈所以（重新）发送的另一个 ARP 响应。第十二行是源系统向 10.0.0.2 发起的 HTTP 连接的 ‘SYN’ 和 Sequence 0。第十三行和第十四行的两次 Restart（RST）和 Synchronize（SYN）响应是用来关闭（和重发）第十二行所打开的连接的。注意 Sequence ID 是 ‘1’ - 是源 Sequence ID + 1。第十五行开始就是类似相同的内容。（LCT…

LFCS 命令行基础
type: item
date: 2017-01-28T07:19:00+08:00
description: 本文中包含了很多命令行基础。我们将讨论 TeleTYpe（TTY）和几个命令及其选项。确保做完所有练习，并要知道，除非另有说明，对 CentOS 和 Ubuntu 都是相同的。TTY当没有图形用户界面（GUI）或当用户在 GUI 之外，Linux 就会使用 TTY。当打开终端窗口时也使用 TTY，但这些是不同类型的 TTY。有三种类型的 TTY：物理终端本地伪终端远程伪终端基本上，每个 Linux 系统有大约六个或七个物理 TTY。 通过按住 CTRL + ALT 键，然后在 CentOS 按住 F1 到 F6 ，而在 Ubuntu 中是 F1 到 F7。注意： 一些发行版可能有不同数量的 TTY 和不同的 GUI 默认位置。有点发行版可能有在物理 TTY 之间切换的不同组合键，如 CTRL + F# 或 ALT + F# （ LCTT 译注：F# 代表 F1、F2 等）。当使用 VirtualBox 时，除非您更改了主机键映射，请使用右 CTRL 键。在 CentOS 中，GUI 在 TTY1（CTRL + ALT + F1）上，其他物理 TTY 都是基于文本的。 在 Ubuntu 上，GUI 在 TTY7（CTRL + ALT + F7）上，其他物理 TTY 都是基于文本的。注意： 尝试在另一个 TTY 下加载 GUI 是不明智的，因为这可能耗用大量资源，但你可以这样做。当 Linux 启动时，不管是 CentOS 还是 Ubuntu，都会打开默认 TTY。如果安装了 GUI，对于 CentOS 是打开 TTY1，对于 Ubuntu 是打开 TTY7。如果你打开一个终端窗口（伪 TTY）并使用命令 who，你可以看到正在使用的 TTY 的列表。 如图 1 所示。图 1在图 1 中，你可以看到我当前登录到 TTY1（非 GUI）。第二行连接显示我已登录到 GUI（TTY7）以及两个伪 TTY（pts/1 和 pts/2）。如图 2，你可以看到新条目显示了远程伪 TTY（pts/4）。 远程伪连接来自 IP 地址为 192.168.0.11 的系统。图 2可以使用诸如 PuTTY 或任何 SSH 的客户端（如果远程 Linux 系统上启用了 SSH）之类的应用程序进行远程 TTY 连接。如果终端窗口字体比较小，你可以使用 CTRL + SHIFT 键和 + 键来放大字体。多次按下可以更大。要缩小大小，请使用 CTRL + SHIFT + - 不断缩小。要使终端字体恢复为原始大小，请按下 CTRL + SHIFT + 0。注意： 请注意，如果字体已经足够大或足够小了，组合键就不再工作了。希望你现在已经了解各种类型的 TTY。让我们看看一些可以在 TTY 中使用的命令。命令其中一个命令前面已经讨论过了。命令 who 用于显示谁登录到了系统。另一个命令是 pwd。命令 pwd 代表“ 打印工作目录 （ Print Working Directory ） ”。该命令返回你所在的当前目录。例如，如果终端提示符是 [jbuse@localhost〜]$，则用户名为 jbuse，当前目录为 〜。波浪号（〜）代表用户的主文件夹。主文件夹应该是 /home/USERNAME。用户名是用于登录系统的名称。要列出当前文件夹的内容，请使用命令 ls。ls 命令代表 List。如果未指定任何选项，则列出当前文件夹。如果给出文件夹名称，则会列出该文件夹的内容。例如，要查看 media 文件夹的内容，你可以使用命令 ls /media。在 ls 命令后面我们可以添加一些选项以显示更多详细信息或特定详细信息。如果你想看到所有的文件夹和文件，即使是隐藏的，请使用选项 -a。要查看当前目录中的所有文件和文件夹，请使用命令 ls -a。隐藏的文件和文件夹将在名称前面显示一个句点（.）。要在每个文件夹名称后看到正斜杠（/），请使用 -F 选项。当前文件夹列表将是 ls -F。-F 用于按文件类型对文件进行分类。符号链接在文件夹名称后用 @ 表示。你可以把这两个选项连在一起形成 ls -aF。注意： 一些选项可能有不同的大小写。选项区分大小写。另一个选项是显示长列表的 -l。示例输出如图 3 所示。文件夹和文件名称列在右侧。文件为白色，文件夹为深蓝色，符号链接为浅蓝色。如图 3 所示，符号链接 vtrgb 链接自 /etc/alternatives/vtrgb 。图 3左侧的第一列是文件或文件夹的权限。第一个字母是 d 的为目录，是 - 的为文件。接下来的三个字母显示所有者的权限（r - 读、w - 写、x - 执行），后面是组权限以及“其他人”的权限。下一列数字显示指向文件或文件夹的链接数。再下一列是所有者名称，后面是所有组名称。再下一列是文件或文件夹在存储设备上占…

Linux 上搭建 Minecraft 服务器
type: item
date: 2017-01-23T19:20:00+08:00
description: “ 我的世界 （ Minecraft ） ”是一个人们可以在各种游戏主机和计算机上玩的主流游戏。 截止至 2016 年 6 月，在各种平台上已经售出了超过十亿六千万份。因其受欢迎，你可能想在家里举办一个“我的世界”派对，那么你就需要安装一个 “我的世界” 服务器，让所有的玩家连接到同一个世界中一起玩。系统要求要开始的话，你需要一个有相当数量内存的 Linux 操作系统。你要在服务器上容纳的玩家越多，你就需要越多的内存。硬盘空间倒不是需求很大，只要足够去安装 Java 以及“我的世界”服务器 Java 文件就行。Minecraft 服务器需要有一个稳定的网络连接，不管是有线还是无线网络。让我们看看 “我的世界”服务器最低要求：CPU：双核或更好。内存： 2 GB （20-40 用户量)，3 GB（30-60 用户量），8 GB（60+ 用户量）。系统： 不需要图形化用户接口，可以留出更多的空闲资源。备注： 这是“我的世界” 服务端程序的需求，而不是一个完整的操作系统的需求。如果可以给我的世界服务器分配更多的资源，它将运行得更好。安装 Java如果你用 Linux 操作系统运行它的话，你需要安装最新版本的 Java 环境。为了验证你的 Java 版本，位于终端输入以下命令：java -version。结果应该是：java version "1.8.0_101" Java(TM) SE Runtime Environment (build 1.8.0_101-b13) Java HotSpot(TM) Client VM (build 25.101-b13, mixed mode) 如果你当前的 Java 版本不是 1.8 或者更高，则通过在 Ubuntu 系统的终端下执行以下操作来安装 Java 版本 8：sudo add-apt-repository ppa:webupd8team/java sudo apt-get update sudo apt-get install oracle-java8-installer 注意：如果 add-apt-repository 命令无法找到，运行 sudo apt-get install software-properties-common 来安装。 您还可以将第三个命令中更改为 oracle-java9-installer 来安装最新的 java 版本。对于 Redhat 系统（如 CentOS），请使用以下命令：sudo yum install java-1.8.0-openjdk 安装后，核实键入版本命令 java-version ，并且核实输出。这样你就有了一个适当的 Java 版本，你可以继续进行接下来的安装。“我的世界”服务器版本下载接下来做的事就是去检查用户将运行的“我的世界”的版本。图 1 显示了一个正在运行的 ”我的世界“ ，注意左下角的版本号。图 1请记住“我的世界”客户端版本号。每个客户端应该是相同的版本才行。您接下来要做的是下载客户端所需要的“我的世界”的服务器版本。为了下载该版本你需要知道它的位置。得到所需的文件的命令是：sudo wget https://s3.amazonaws.com/Minecraft.Download/versions/[version]/minecraft_server.[version].jar 在 图1 看到，版本号是 1.10.2。那么这个命令就该变成：sudo wget https://s3.amazonaws.com/Minecraft.Download/versions/1.10.2/minecraft_server.1.10.2.jar 当你下载好文件，会保存到你当前目录下。使用命令 pwd 确定当前位置。一旦你有了该文件，知道它所保存的文件夹就可以继续了。服务器信息在启动“我的世界”服务器之前，您必须知道当前系统上能被你使用的可用内存大小。 当启动“我的世界”服务器时，你将需要指定起始内存量和当更多玩家加入时最大分配的内存量。 再次提示，重要的是要有足够的内存。 如果可以，使用最小化安装操作系统来留出更多的内存，例如最小化安装的 Ubuntu。一旦你有了所需的“我的世界”服务器文件，就可以确定分配给“我的世界”的内存数量。 要确定可用内存，打开一个终端并键入以下命令 ，示例输出如图 2 所示：free -h 图 2如图 2 所示，在这个低端系统上你可以看到那只有 684 MB 空闲内存。这不是一个可以用于搭建一个 “我的世界” 服务器的系统。在另一个服务器上我有 2.8 GB 内存可供给“我的世界” 使用。在我们启动服务器之前，我们需要找到服务器的 IP 地址。 为此，请运行命令 ifconfig。 如图 3 所示，应该…