【Debian参考手册】第 10 章 数据管理

目录

创新互联建站企业建站,10余年网站建设经验,专注于网站建设技术,精于网页设计,有多年建站和网站代运营经验,设计师为客户打造网络企业风格,提供周到的建站售前咨询和贴心的售后服务。对于成都网站设计、成都做网站中不同领域进行深入了解和探索,创新互联在网站建设中充分了解客户行业的需求,以灵动的思维在网页中充分展现,通过对客户行业精准市场调研,为客户提供的解决方案。

10.1. 共享,拷贝和存档
10.1.1. 存档和压缩工具
10.1.2. 复制和同步工具
10.1.3. 归档语法
10.1.4. 复制语法
10.1.5. 查找文件的语法
10.1.6. 归档媒体
10.1.7. 可移动存储设备
10.1.8. 选择用于分享数据的文件系统
10.1.9. 网络上的数据分享
10.2. 备份和恢复
10.2.1. 备份和恢复策略
10.2.2. 实用备份套件
10.2.3. 个人备份
10.3. 数据安全基础
10.3.1. GnuPG 密钥管理
10.3.2. 在文件上使用 GnuPG
10.3.3. 在 Mutt 中使用 GnuPG
10.3.4. 在 Vim 中使用 GnuPG
10.3.5. MD5 校验和
10.3.6. 密码密钥环
10.4. 源代码合并工具
10.4.1. 从源代码文件导出差异
10.4.2. 源代码文件移植更新
10.4.3. 交互式移植
10.5. Git
10.5.1. 配置 Git 客户端
10.5.2. 基本的 Git 命令
10.5.3. Git 技巧
10.5.4. Git 参考
10.5.5. 其它的版本控制系统

以下是关于在 Debian 系统上管理二进制和文本数据的工具及其相关提示。

10.1. 共享,拷贝和存档

警告

为避免 竞争情况,不应当对正在进行写操作的设备和文件,多个进程进行不协调的写操作。采用flock(1) 的 文件锁定 机制可用于避免这种情况。

数据的安全和它的受控共享有如下几个方面。

  • 存档文件的建立

  • 远程存储访问

  • 复制

  • 跟踪修改历史

  • 促进数据共享

  • 防止未经授权的文件访问

  • 检测未经授权的文件修改

这些可以通过使用工具集来实现。

  • 存档和压缩工具

  • 复制和同步工具

  • 网络文件系统

  • 移动存储媒介

  • 安全 shell

  • 认证体系

  • 版本控制系统工具

  • 哈希算法和加密工具

10.1.1. 存档和压缩工具

以下是 Debian 系统上可用的存档和压缩工具的预览。

表 10.1. 存档和压缩工具列表

软件包 流行度 大小 扩展名 命令 描述
tar V:907, I:999 3152 .tar tar(1) 标准的归档工具(默认)
cpio V:383, I:998 1140 .cpio cpio(1) Unix System V 风格的归档器,与 find(1) 一起使用
binutils V:148, I:652 99 .ar ar(1) 创建静态库的归档工具
fastjar V:2, I:22 183 .jar fastjar(1) Java 归档工具(类似 zip)
pax V:11, I:20 170 .pax pax(1) 新的 POSIX 归档工具,介于 tarcpio 之间
gzip V:878, I:999 242 .gz gzip(1), zcat(1), … GNU LZ77 压缩工具(默认)
bzip2 V:161, I:973 120 .bz2 bzip2(1), bzcat(1), … Burrows-Wheeler block-sorting 压缩工具有着比 gzip(1) 更高的压缩率 (跟 gzip 有着相似的语法但速度比它慢)
lzma V:2, I:23 149 .lzma lzma(1) LZMA 压缩工具有着比 gzip(1) 更高的压缩率(不推荐)
xz-utils V:436, I:980 612 .xz xz(1), xzdec(1), … XZ 压缩工具有着比 bzip2(1) 更高的压缩率(压缩速度慢于 gzip 但是比 bzip2 快; LZMA 压缩工具的替代品)
zstd V:7, I:34 1898 .zstd zstd(1), zstdcat(1), … Zstandard 快速无损压缩工具
p7zip V:83, I:468 987 .7z 7zr(1), p7zip(1) 有着更高压缩率的 7-zip 文件归档器(LZMA 压缩)
p7zip-full V:116, I:478 4664 .7z 7z(1), 7za(1) 有着更高压缩率的 7-Zip 文件归档器(LZMA 压缩和其他)
lzop V:14, I:120 164 .lzo lzop(1) LZO 压缩工具有着比 gzip(1) 更高的压缩和解压缩速度 (跟 gzip 有着相似的语法但压缩率比它低)
zip V:49, I:414 623 .zip zip(1) InfoZip:DOS 归档器和压缩工具
unzip V:142, I:788 385 .zip unzip(1) InfoZIP:DOS 解档器和解压缩工具

警告

除非你知道将会发生什么,否则不要设置 "$TAPE" 变量。它会改变 tar(1) 的行为。

  • gzipped tar(1) 归档器用于扩展名是 ".tgz" 或者 ".tar.gz" 的文件。

  • xz-compressed tar(1) 归档器用于扩展名是 ".txz" 或者 ".tar.xz" 的文件。

  • FOSS 工具,例如 tar(1),中的主流压缩方法已经按如下所示的迁移: gzipbzip2xz

  • cp(1),scp(1) 和 tar(1) 工具可能并不适用于一些特殊的文件。cpio(1) 工具的适用范围是最广的。

  • cpio(1) 是被设计为与 find(1) 和其它命令一起使用,适合于创建备份脚本的场景,因此,脚本的文件选择部分能够被独立测试。

  • Libreoffice 数据文件的内部结构是 ".jar" 文件,它也可以使用 unzip 工具来打开。

  • 事实上跨平台支持最好的存档工具是 zip。按照“zip -rX”的方式调用可以获得最大的兼容性。如果最大文件大小需要纳入考虑范围,请同时配合“-s”选项使用。

10.1.2. 复制和同步工具

以下是 Debian 系统上的可用的简单复制和备份工具的预览。

表 10.2. 复制和同步工具列表

软件包 流行度 大小 工具 功能
coreutils V:898, I:999 17372 GNU cp 复制本地文件和目录("-a" 参数实现递归)
openssh-client V:828, I:997 5650 scp 复制远端文件和目录(客户端,"-r" 参数实现递归)
openssh-server V:709, I:832 1806 sshd 复制远端文件和目录(远程服务器)
rsync V:280, I:566 737 单向远程同步和备份
unison V:3, I:16 14 双向远程同步和备份

在复制文件的时候, rsync(8) 比其他工具提供了更多的特性。

  • 差分传输算法只会发送源文件与已存在的目标文件之间的差异部分

  • 快速检查算法 (默认) 会查找大小或者最后的修改时间有变化的文件

  • "--exclude" 和 "--exclude-from" 选项类似于 tar(1)

  • 在源目录中添加反斜杠的语法能够避免在目标文件中创建额外的目录级别。

提示

在 表 10.14 “其它版本控制系统工具列表” 中的版本控制系统 (VCS) 可以被认为是多路拷贝和同步工具。

10.1.3. 归档语法

以下是用不同的工具压缩和解压缩整个 "./source" 目录中的内容。

GNU tar(1):

$ tar -cvJf archive.tar.xz ./source
$ tar -xvJf archive.tar.xz

或者,如下所示。

$ find ./source -xdev -print0 | tar -cvJf archive.tar.xz --null -F -

cpio(1):

$ find ./source -xdev -print0 | cpio -ov --null > archive.cpio; xz archive.cpio
$ zcat archive.cpio.xz | cpio -i

10.1.4. 复制语法

如下是用不同的工具复制整个 "./source" 目录中的内容。

  • 本地复制: "./source" 目录 → "/dest" 目录

  • 远程复制:本地主机上的 "./source" 目录 → "user@host.dom" 主机上的 "/dest" 目录

rsync(8):

# cd ./source; rsync -aHAXSv . /dest
# cd ./source; rsync -aHAXSv . user@host.dom:/dest

你能够选择使用“源目录上的反斜杠”语法。

# rsync -aHAXSv ./source/ /dest
# rsync -aHAXSv ./source/ user@host.dom:/dest

或者,如下所示。

# cd ./source; find . -print0 | rsync -aHAXSv0 --files-from=- . /dest
# cd ./source; find . -print0 | rsync -aHAXSv0 --files-from=- . user@host.dom:/dest

GNU cp(1) 和 openSSH scp(1):

# cd ./source; cp -a . /dest
# cd ./source; scp -pr . user@host.dom:/dest

GNU tar(1):

# (cd ./source && tar cf - . ) | (cd /dest && tar xvfp - )
# (cd ./source && tar cf - . ) | ssh user@host.dom '(cd /dest && tar xvfp - )'

cpio(1):

# cd ./source; find . -print0 | cpio -pvdm --null --sparse /dest

你能够在所有包含 "." 的例子里用 "foo" 替代 ".",这样就可以从 "./source/foo" 目录复制文件到 "/dest/foo" 目录。

在所有包含 "." 的列子里,你能够使用绝对路径 "/path/to/source/foo" 来代替 ".",这样可以去掉 "cd ./source;". 如下所示,这些文件会根据工具的不同,拷贝到不同的位置。

  • "/dest/foo": rsync(8), GNU cp(1), 和 scp(1)

  • "/dest/path/to/source/foo": GNU tar(1), 和 cpio(1)

提示

rsync(8) 和 GNU cp(1) 可以用 "-u" 选项来忽略接受端上更新的文件。

10.1.5. 查找文件的语法

find(1) 被用作从归档中筛选文件也被用作拷贝命令 (参见第 10.1.3 节 “归档语法”和第 10.1.4 节 “复制语法”) 或者用于 xargs(1) (参见第 9.4.9 节 “使用文件循环来重复一个命令”)。通过 find 的命令行参数能够使其功能得到加强。

以下是 find(1)基本语法的总结。

  • find 条件参数的运算规则是从左到右。

  • 一旦输出是确定的,那么运算就会停止。

  • “逻辑 OR" (由条件之间的 "-o" 参数指定的)优先级低于 "逻辑 AND" (由 "-a" 参数指定或者条件之间没有任何参数)。

  • ”逻辑 NOT" (由条件前面的 "!" 指定) 优先级高于 “逻辑 AND”。

  • "-prune" 总是返回逻辑 TRUE 并且如果这个目录是存在的,将会搜索除这个目录以外的文件。

  • "-name" 选项匹配带有 shell 通配符 (参见第 1.5.6 节 “Shell 通配符”) 的文件名但也匹配带有类似 "*" 和 "?" 元字符的 ."。(新的 POSIX 特性)

  • "-regex" 匹配整个文件路径,默认采用 emacs 风格的 BRE (参见第 1.6.2 节 “正则表达式”)。

  • "-size" 根据文件大小来匹配 (值前面带有 "+" 号匹配更大的文件,值前面带有 "-" 号匹配更小的文件)

  • "-newer" 参数匹配比参数名中指定的文件还要新的文件。

  • "-print0" 参数总是返回逻辑 TRUE 并将完整文件名 (null terminated) 打印到标准输出设备上。

如下是 find(1) 语法格式。

# find /path/to \
    -xdev -regextype posix-extended \
    -type f -regex ".*\.cpio|.*~" -prune -o \
    -type d -regex ".*/\.git" -prune -o \
    -type f -size +99M -prune -o \
    -type f -newer /path/to/timestamp -print0

这些命令会执行如下动作。

  1. 查找 "/path/to" 下的所有文件

  2. 限定全局查找的文件系统并且使用的是 ERE (参见第 1.6.2 节 “正则表达式”)

  3. 通过停止处理的方式来排除匹配 ".*\.cpio" 或 ".*~" 正则表达式的文件

  4. 通过停止处理的方式来排除匹配 ".*/\.git" 正则表达式的目录

  5. 通过停止处理的方式来排除比 99MB (1048576字节单元) 更大的文件

  6. 显示文件名,满足以上搜索条件并且比 "/path/to/timestamp" 新的文件

请留心以上例子中的 "-prune -o" 排除文件的习惯用法。

注意

对于非 Debian 系的 Unix-like 系统,有些参数可能不被 find(1) 命令所支持。在这种情况下,应该考虑调整匹配方法并用 "-print" 替代 "-print0"。你可能同样需要更改其他相关的命令。

10.1.6. 归档媒体

为重要的数据存档寻找 存储设备 时,你应该注意它们的局限性。对于小型的个人数据备份,我使用品牌公司的 CD-R 和 DVD-R 然后把它放在阴凉、干燥、清洁的地方。(专业的一般使用磁带存档介质)

注意

防火安全是对于纸质文档来说的,大多数的计算机数据存储媒介耐热性比纸差。我经常依赖存储在多个安全地点的加密拷贝。

网上(主要是来源于供应商信息)可以查看存储介质的最大使用寿命。

  • 大于100年:用墨水的无酸纸

  • 100年:光盘存储(CD/DVD,CD/DVD-R)

  • 30年:磁带存储(磁带,软盘)

  • 20年:相变光盘存储(CD-RW)

这不包括由于人为导致的机械故障等等。

网上(主要来源于供应商信息)可以查看存储介质的最大的写次数。

  • 大于250,000次:硬盘驱动器

  • 大于10,000次:闪存

  • 1,000次:CD/DVD-RW

  • 1次:CD/DVD-R,纸

小心

这里的存储寿命和写次数的数据不应该被用来决定任何用于关键数据的存储媒介,请翻阅制造商提供的特定产品的说明。

提示

因为 CD/DVD-R 和 纸只能写一次,它们从根本上阻止了因为重写导致的数据意外丢失。这是优点!

提示

如果你需要更快更频繁的进行大数据备份,那么通过高速网络连接的远端主机上的硬盘来实现备份,可能是唯一可行的方法。

提示

如果你在使用一个可重复写入的介质作为你的备份介质,使用支持只读快照的 btrfs 或 zfs 文件系统,也许是一个好注意。

10.1.7. 可移动存储设备

可移动存储设备可能是以下的任何一种。

  • USB 闪存盘

  • 硬盘驱动器

  • 光盘驱动器

  • 数码相机

  • 数字音乐播放器

它们可以通过以下的方式来进行连接。

  • USB

  • IEEE 1394 / FireWire

  • PC 卡

像 GNOME 和 KDE 这样的现代桌面环境能够在 "/etc/fstab" 文件中没有匹配条目的时候,自动挂载这些可移动设备。

  • udisks2 包提供了守护进程和相关的实用程序来挂载和卸载这些设备。

  • D-bus 创建事件来触发自动处理。

  • PolicyKit 提供了所需的特权。

提示

umount(8) 在自动挂载设备的时候可能会带有 "uhelper=" 参数。

提示

只有当这些可移动设备没有在 "/etc/fstab" 文件中列出时,桌面环境下才会自动挂载。

现代桌面环境下的挂载点被选为 "/media/username/disk_label",它可以被如下所示的来定制。

  • FAT 格式的文件系统使用 mlabel(1) 命令

  • ISO9660 文件系统使用带有 "-V" 选项的 genisoimage(1) 命令

  • ext2/ext3/ext4 文件系统使用带有 "-L" 选项的 tune2fs(1) 命令

提示

挂载时可能需要提供编码选项(参见 第 8.1.3 节 “文件名编码”)。

提示

在图形界面菜单上移除文件系统,可能会移除它的动态设备节点例如 "/dev/sdc"。如果你想要保留它的设备节点,你应该在命令行提示符上输入 umount(8) 命令来卸载它。

10.1.8. 选择用于分享数据的文件系统

当你通过可移动存储设备与其他系统分享数据的时候,你应该先把它格式化为被两种操作系统都支持的通用的 文件系统。下面是文件系统的列表。

表 10.3. 典型使用场景下可移动存储设备可选择的文件系统列表

文件系统名 典型使用场景
FAT12 软盘(<32MiB)上跨平台的数据分享
FAT16 在小硬盘(<2GiB)上的跨平台的数据分享
FAT32 在大硬盘(<8TiB,被 MS Windows95 OSR2 以上的操作系统所支持) 上的跨平台的数据分享
exFAT 在大硬盘类设备上跨平台共享数据(<512TiB,被 WindowsXP, Mac OS X Snow Leopard 10.6.5 和 Linux 内核 5.4 版本以上的操作系统所支持)
NTFS 在大硬盘类设备上的跨平台共享数据 (在 MS Windows NT 和后续版本原生支持;在 Linux 上,通过使用 FUSE 的 NTFS-3G 支持。)
ISO9660 在 CD-R 和 DVD+/-R 上的跨平台的静态数据分享
UDF CD-R 和 DVD+/-R (新)上的增量数据写入
MINIX 软盘上磁盘空间高利用率的 unix 文件数据存储
ext2 在装有老旧 linux 系统的硬盘上的数据分享
ext3 在装有老旧 linux 系统的硬盘上的数据分享
ext4 在装有较新的 linux 系统的硬盘上的数据分享
btrfs 使用只读快照在装有较新的 Linux 系统的硬盘上共享数据

提示

查看第 9.9.1 节 “使用 dm-crypt/LUKS 加密移动磁盘”来获得关于使用设备级加密的跨平台的数据共享的信息。

FAT 文件系统被绝大多数的现代操作系统支持,它对于通过可移动硬盘进行的数据交换是非常有用的。

当格式化像装有 FAT 文件系统的跨平台数据共享的可移动设备时,以下应该是保险的选择。

  • fdisk(8),cfdisk(8) 或者 parted(8) 命令(参见第 9.6.2 节 “硬盘分区配置”)把它们格式化为单个的主分区并对把它做如下标记。

    • 标记小于 2GB 的 FAT 设备为 字符"6"。

    • 标记更大的 FAT32 设备为字符 "c"。

  • 如下所示是用 mkfs.vfat(8) 命令格式化主分区的。

    • 它的设备名字,例如 "/dev/sda1" 用于 FAT16 设备

    • 明确的选项和它的设备名,例如 "-F 32 /dev/sda1" 用于 FAT32 设备

当使用 FAT 或 ISO9660 文件系统分享数据时,如下是需要注意的安全事项。

  • tar(1),或cpio(1)命令压缩文件,目地是为了保留文件名,符号链接,原始的文件权限和文件所有者信息。

  • split(1) 命令把压缩文件分解成若干小于 2GiB的小文件,使其免受文件大小限制。

  • 加密压缩文件保护其内容免受未经授权的访问。

注意

因为 FAT 文件系统的设计,最大的文件大小为 (2^32 - 1) bytes = (4GiB -1 byte)。对于一些老旧的 32 位系统上的应用程序而言,最大的文件大小甚至更小(2^31 -1) bytes = (2GiB -1 byte)。Debian 没有遇到后者的问题。

注意

微软系统本身并不建议在超过 200MB 的分区或者驱动器上使用 FAT。他们的 " Overview of FAT, HPFS, and NTFS File Systems 这篇文章突出显示了微软系统的缺点,例如低效的磁盘空间利用。当然了,我们在 Linux 系统上还是应该使用 ext4 文件系统。

提示

有关文件系统和访问文件系统的更多信息,请参考 "Filesystems HOWTO"。

10.1.9. 网络上的数据分享

当使用网络来分享数据的时候,你应该使用通用的服务。这里有一些提示。

表 10.4. 典型使用场景下可选择的网络服务列表

网络服务 典型使用场景描述
SMB/CIFS 用 Samba 挂载网络文件系统 通过 “Microsoft Windows 网络” 分享文件,参见 smb.conf(5) 和 官方 Samba 3.x.x 指导和参考手册(The Official Samba 3.x.x HOWTO and Reference Guide) 或 samba-doc 软件包
NFS 用 Linux 内核挂载网络文件系统 通过 “Unix/Linux 网络" 分享文件,参见 exports(5) 和 Linux NFS-HOWTO
HTTP 服务 在 web 服务器/客户端之间分享文件
HTTPS 服务 在有加密的安全套接层 (SSL) 或者安全传输层 (TLS) 的网络服务器/客户端中分享文件
FTP 服务 在 FTP 服务器/客户端之间分享文件

尽管对于文件分享来说,通过网络挂载文件系统和传输文件是相当方便的,但这可能是不安全的。它们的网络连接必须通过如下所示的加强安全性。

  • 用 SSL/TLS 加密

  • 建立 SSH 通道

  • 建立 VPN 通道

  • 网络之间需要有安全的防火墙

参见 第 6.5 节 “其它网络应用服务” 和 第 6.6 节 “其它网络应用客户端”。

10.2. 备份和恢复

我们都熟知计算机有时会出问题,或者由于人为的错误导致系统和数据损坏。备份和恢复操作是成功的系统管理中非常重要的一部分。可能有一天你的电脑就会出问题。

提示

保持你的备份系统简洁并且经常备份你的系统,有备份数据比你采用的备份方法的技术先进要重要的多。

10.2.1. 备份和恢复策略

有3个关键的因素决定实际的备份和恢复策略。

  1. 知道要备份和恢复什么。

    • 你自己创建的数据文件:在 "~/" 下的数据

    • 你使用的应用程序创建的数据文件:在 "/var/" 下的数据(除了 "/var/cache/","/var/run/" 和 "/var/tmp/")

    • 系统配置文件:在 "/etc/” 下的数据

    • 本地程序:在 "/usr/local/" 或 "/opt/" 下的数据

    • 系统安装信息:关键步骤 (分区,...) 的纯文本备忘录

    • 验证数据结果:通过实验性的恢复操作来预先验证

      • 用户进程的 Cron 工作,文件在 "/var/spool/cron/crontabs" 目录,并且重启 cron(8)。参见第 9.4.14 节 “定时任务安排”来获得关于 cron(8) 和 crontab(1) 的信息。

      • 用户进程的 Systemd 计时器工作:文件在 "~/.config/systemd/user" 目录。参见 systemd.timer(5) 和 systemd.service(5)。

      • 用户进程的自动启动工作:文件在 "~/.config/autostart" 目录。参见 Desktop Application Autostart Specification。

  2. 知道怎样去备份和恢复。

    • 安全的数据存储:保护其免于覆盖和系统故障

    • 经常备份:有计划的备份

    • 冗余备份:数据镜像

    • 傻瓜式操作:单个简单命令备份

  3. 评估涉及的风险和成本。

    • 数据丢失的风险

      • 数据至少是应该在不同的磁盘分区上,最好是在不同的磁盘和机器上,来承受文件系统发生的损坏。重要数据最好存储在一个只读文件系统上。[4]

    • 数据非法访问的风险

      • 敏感的身份数据,比如 "/etc/ssh/ssh_host_*_key", "~/.gnupg/*", "~/.ssh/*", "~/.local/share/keyrings/*", "/etc/passwd", "/etc/shadow", "popularity-contest.conf", "/etc/ppp/pap-secrets", and "/etc/exim4/passwd.client" 应当使用加密备份。[5] (参见 第 9.9 节 “数据加密提示”。)

      • 即使在信任的系统上,也不能够硬编码系统登录密码或者加密密码到任何脚本里面。(参见 第 10.3.6 节 “密码密钥环”。)

    • 数据丢失的方式及其可能性

      • 硬件(特别是硬盘)将会损坏

      • 文件系统可能会损坏,里面的数据可能被丢失

      • 对违规安全访问而言,远程存储系统不能够被信任

      • 弱的密码保护能够被轻松的破解

      • 文件权限系统可以被破解

    • 备份所需的资源:人力,硬件,软件,…

      • 使用 cron 任务或者 systemd 计时器任务来自动化调度备份工作

注意

除非你知道自己做的是什么,否则不要备份 /proc, /sys, /tmp, 和 /run 目录下的伪文件系统(参见 第 1.2.12 节 “procfs 和 sysfs” 和 第 1.2.13 节 “tmpfs”)。它们是庞大且无用的数据。

注意

当备份数据的时候,你可能希望停止一些应用程序的守护进程例如 MTA(参见第 6.2.4 节 “邮件传输代理 (MTA)”)。

10.2.2. 实用备份套件

以下是 Debian 系统上值得注意的实用备份程序套件的列表。

表 10.5. 实用备份程序套件列表

软件包 流行度 大小 说明
dump V:1, I:5 351 4.4 BSD dump(8) 和 restore(8) 命令用于 ext2/ext3/ext4 文件系统
xfsdump V:0, I:8 865 在 GNU/Linux 和 IRIX 上用 xfsdump(8) 和 xfsrestore(8) 命令来备份和恢复 XFS 文件系统
backupninja V:3, I:4 367 轻量的可扩展的 meta-backup 系统
bacula-common V:10, I:13 2158 Bacula: 网络数据备份,恢复和核查-常见的支持文件
bacula-client I:3 183 Bacula: 网络数据备份,恢复和核查-客户端元软件包
bacula-console V:1, I:4 107 Bacula: 网络数据备份,恢复和核查-文本终端
bacula-server I:1 183 Bacula: 网络数据备份,恢复和核查-服务器端元软件包
amanda-common V:0, I:2 10090 Amanda: 马里兰大学开发的高级自动化网络磁盘归档器(库)
amanda-client V:0, I:2 1149 Amanda: 马里兰大学开发的高级自动化网络磁盘归档器(客户端)
amanda-server V:0, I:0 1117 Amanda: 马里兰大学开发的高级自动化网络磁盘归档器(服务器端)
backup-manager V:0, I:1 571 命令行备份工具
backup2l V:0, I:1 115 用于可挂载媒介 (基于磁盘的) 的低维护的备份/恢复工具
backuppc V:2, I:3 3184 BackupPC 是用于备份 PC 机数据(基于磁盘)的高性能的企业级工具
duplicity V:15, I:36 1867 (远程) 增量备份
flexbackup V:0, I:0 243 (远程) 增量备份
rdiff-backup V:5, I:13 769 (远程) 增量备份
restic V:2, I:4 21080 (远程) 增量备份
slbackup V:0, I:0 151 (远程) 增量备份

备份工具有各自的专用的用途。

  • Mondo Rescue 是一个备份系统,它能够方便的从备份 CD/DVD 等设备中快速恢复整个系统,而不需要经过常规的系统安装过程。

  • Bacula,Amanda 和 BackupPC 是全功能的备份实用套件,主要用于联网的定期备份。

  • 定期备份用户数据,可以通过一个简单的脚本实现 (第 10.2.3 节 “个人备份”)。

第 10.1.1 节 “存档和压缩工具” 和 第 10.1.2 节 “复制和同步工具” 描述的基础工具能够通过自定义脚本来帮助系统备份。这些脚本的功能可以通过如下的工具来增强。

  • restic 软件包能够增量备份(远程)。

  • rdiff-backup 软件包能够增量备份(远程)。

  • dump 软件包用于高效增量的归档和恢复整个文件系统。

提示

参见 "/usr/share/doc/dump/" 和 "Is dump really deprecated?" 来了解 dump 程序。

10.2.3. 个人备份

对于运行 testing 套件的个人 Debian 桌面系统来说,只需要保护个人数据和关键数据。我不管怎样每年都会重新安装一次系统。因此没理由去备份整个系统或者安装全功能的备份实用程序。

与此同时,有一定频率的最近的个人数据和系统配置快照的备份,加上偶尔个人数据的全备份,是非常有价值的。

我经常使用一个简单的 shell 脚本 bss 来制作这些快照和备份。这个脚本是一个短小的 shell,使用标准工具:btrfs 子卷快照rsync。对于加密的数据,磁盘镜像由 fallocate(1) 创建并由 cryptsetup(8) 配置。

提示

你能够用 "debconf-set-selections debconf-selections" 命令恢复 debconf 配置数据,可以用 "dpkg --set-selection " 命令恢复 dpkg 筛选数据。

10.3. 数据安全基础

数据安全基础设施是数据加密,讯息摘要和签名工具的结合。

表 10.6. 数据安全基础工具列表

软件包 流行度 大小 命令 说明
gnupg V:543, I:931 864 gpg(1) GNU 隐私卫士 - OpenPGP 加密和签名工具
gpgv V:873, I:999 882 gpgv(1) GNU 隐私卫士 - 签名验证工具
paperkey V:1, I:14 58 paperkey(1) 从 OpenPGP 私钥里面,仅仅导出私密信息
cryptsetup V:16, I:79 448 cryptsetup(8), … dm-crypt 块设备加密支持 LUKS 工具
coreutils V:898, I:999 17372 md5sum(1) 计算与校验 MD5 讯息摘要
coreutils V:898, I:999 17372 sha1sum(1) 计算与校验 SHA1 讯息摘要
openssl V:810, I:994 1465 openssl(1ssl) 使用 "openssl dgst" (OpenSSL)计算信息摘要
libsecret-tools V:1, I:10 44 secret-tool(1) 存储和取回密码 (CLI)
seahorse V:76, I:254 7812 seahorse(1) 密钥管理工具(GNOME)

参见 第 9.9 节 “数据加密提示” 的 dm-crypt 和 fscrypt,它们通过 Linux 内核模块实现了自动数据加密架构。

10.3.1. GnuPG 密钥管理

如下是 GNU 隐私卫士 基本的密钥管理命令。

表 10.7. GNU 隐私卫士密钥管理命令的列表

命令 说明
gpg --gen-key 生成一副新的密钥对
gpg --gen-revoke my_user_ID 生成 my_user_ID 的一份吊销证书
gpg --edit-key user_ID 交互式的编辑密钥,输入 "help" 来获得帮助信息
gpg -o file --export 把所有的密钥输出到文件
gpg --import file 从文件导入密钥
gpg --send-keys user_ID 发送 user_ID 的公钥到公钥服务器
gpg --recv-keys user_ID 从公钥服务器下载 user_ID 的公钥
gpg --list-keys user_ID 列出 user_ID 的所有密钥
gpg --list-sigs user_ID 列出 user_ID 的签字
gpg --check-sigs user_ID 检查 user_ID 密钥签字
gpg --fingerprint user_ID 检查 user_ID 的指纹
gpg --refresh-keys 更新本地密钥

信任码含义.

表 10.8. 信任码含义列表

代码 信任描述
- 没有所有者信任签名/没有计算
e 信任计算失败
q 没有足够的信息用于计算
n 从不信任这个键
m 最低限度的信任
f 完全信任
u 最终信任

如下命令上传我的 "1DD8D791" 公钥到主流的公钥服务器 "hkp://keys.gnupg.net"。

$ gpg --keyserver hkp://keys.gnupg.net --send-keys 1DD8D791

默认良好的公钥服务器在 "~/.gnupg/gpg.conf" (旧的位置在 "~/.gnupg/options")文件中设置,此文件包含了以下信息。

keyserver hkp://keys.gnupg.net

从钥匙服务器获取无名钥匙。

$ gpg --list-sigs --with-colons | grep '^sig.*\[User ID not found\]' |\
  cut -d ':' -f 5| sort | uniq | xargs gpg --recv-keys

有一个错误在 OpenPGP 公钥服务器 (先前的版本 0.9.6),会将键中断为 2 个以上的子键。新的 gnupg (>1.2.1-2) 软件包能够处理这些中断的子键。参见 gpg(1) 下的 "--repair-pks-subkey-bug" 选项.

10.3.2. 在文件上使用 GnuPG

这里有一些在文件上使用 GNU 隐私卫士 命令的例子。

表 10.9. 在文件上使用的 GNU 隐私卫士的命令列表

命令 说明
gpg -a -s file ASCII 封装的签名文件 file.asc
gpg --armor --sign file 同上
gpg --clearsign file 生成明文签字信息
gpg --clearsign file|mail foo@example.org 发送一份明文签字到 foo@example.org
gpg --clearsign --not-dash-escaped patchfile 明文签名的补丁文件
gpg --verify file 验证明文文件
gpg -o file.sig -b file 生成一份分离的签字
gpg -o file.sig --detach-sig file 同上
gpg --verify file.sig file 使用 file.sig 验证文件
gpg -o crypt_file.gpg -r name -e file 公钥加密,从文件里面获取名字,生成二进制的 crypt_file.gpg
gpg -o crypt_file.gpg --recipient name --encrypt file 同上
gpg -o crypt_file.asc -a -r name -e file 公钥加密,从文件中获取名字,生成 ASCII 封装的 crypt_file.asc
gpg -o crypt_file.gpg -c file 将文件对称加密到 crypt_file.gpg
gpg -o crypt_file.gpg --symmetric file 同上
gpg -o crypt_file.asc -a -c file 对称加密,从文件到 ASCII 封装的 crypt_file.asc
gpg -o file -d crypt_file.gpg -r name 解密
gpg -o file --decrypt crypt_file.gpg 同上

10.3.3. 在 Mutt 中使用 GnuPG

增加下面内容到 "~/.muttrc",在自动启动时,避免一个慢的 GnuPG,在索引菜单中按 "S" 来允许它使用。

macro index S ":toggle pgp_verify_sig\n"
set pgp_verify_sig=no

10.3.4. 在 Vim 中使用 GnuPG

gnupg 插件可以让你对扩展名为 ".gpg", ".asc", 和 ".ppg"的文件可靠的运行 GnuPG。[6]

$ sudo aptitude install vim-scripts
$ echo "packadd! gnupg" >> ~/.vim/vimrc

10.3.5. MD5 校验和

md5sum(1) 提供了制作摘要文件的一个工具,它使用 rfc1321 里的方式制作摘要文件.

$ md5sum foo bar >baz.md5
$ cat baz.md5
d3b07384d113edec49eaa6238ad5ff00  foo
c157a79031e1c40f85931829bc5fc552  bar
$ md5sum -c baz.md5
foo: OK
bar: OK
注意

MD5 校验和的 CPU 计算强度是比 GNU Privacy Guard (GnuPG) 加密签名要少的.在通常情况下,只有顶级的摘要文件才需要加密签名来确保数据完整性.

10.3.6. 密码密钥环

在 GNOME 系统,GUI(图形用户界面)工具 seahorse(1) 管理密码,安全的在密钥环 ~/.local/share/keyrings/* 里面保存它们。

secret-tool(1) 能够从命令行存储密码到钥匙环。

让我们存储 LUKS/dm-crypt 加密磁盘镜像用到的密码

$ secret-tool store --label='LUKS passphrase for disk.img' LUKS my_disk.img
Password: ********

这个存储的密码能够被获取并给到其它程序,比如 cryptsetup(8)。

$ secret-tool lookup LUKS my_disk.img | \
  cryptsetup open disk.img disk_img --type luks --keyring -
$ sudo mount /dev/mapper/disk_img /mnt
提示

无论何时,你需要在一个脚本里面提供密码时,使用 secret-tool 来避免将密码直接硬编码到脚本里面。

10.4. 源代码合并工具

这里有许多源代码合并工具。如下的是我感兴趣的工具。

表 10.10. 源代码合并工具列表

软件包 流行度 大小 命令 说明
patch V:73, I:711 248 patch(1) 给原文件打补丁
vim V:100, I:394 网页标题:【Debian参考手册】第 10 章 数据管理
网页地址:http://www.36103.cn/qtweb/news27/28627.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联