Linux 介绍_8 基础备份加密技术
基础备份技术
我的博客
将以如下几个部分进行讨论:
- 归档文件
- 制作备份
- 加密数据
介绍
虽然 Linux
是一个十分安全的操作系统,即便它被设计来不关机持续运行,数据依然可能丢失。数据丢失有时候是用户的过失,有时候是系统故障 (比如硬盘故障),因此备份重要的数据是十分必要的操作。
准备你的数据
使用 tar 归档
大部分情况下,我们首先会把要备份的数据收集到一个独立的归档文件中,后续要对它进行压缩。在 Linxu
中,通常使用 tar
命令实现,tar
用来归档数据,制作 tarball
。
tar
有很多选项,最重要的如下:
选项 | 功能 |
---|---|
-v | 打印过程信息 |
-t | 测试,查看 tarball 中的文件 |
-x | 提取归档文件 |
-c | 创建归档文件 |
-f archivedevice | 使用 archivedevice 作为 tarball 的源或目的 |
-j | 通过 bzip2 过滤 |
通常在使用 tar
命令时,不在前面加上 -
前缀。
下面的例子,创建一个归档文件,并把归档的文件解除打包:
gaby:~> ls images/
me+tux.jpg nimf.jpg
gaby:~> tar cvf images-in-a-dir.tar images/
images/
images/nimf.jpg
images/me+tux.jpg
gaby:~> cd images
gaby:~/images> tar cvf images-without-a-dir.tar *.jpg
me+tux.jpg
nimf.jpg
gaby:~/images> cd
gaby:~> ls */*.tar
images/images-without-a-dir.tar
gaby:~> ls *.tar
images-in-a-dir.tar
gaby:~> tar xvf images-in-a-dir.tar
images/
images/nimf.jpg
images/me+tux.jpg
gaby:~> tar tvf images/images-without-dir.tar
-rw-r--r-- gaby/gaby 42888 1999-06-30 20:52:25 me+tux.jpg
-rw-r--r-- gaby/gaby 7578 2000-01-26 12:58:46 nimf.jpg
gaby:~> tar xvf images/images-without-a-dir.tar
me+tux.jpg
nimf.jpg
gaby:~> ls *.jpg
me+tux.jpg nimf.jpg
这个例子分别进行了目录的打包以及一系列文件的打包。强烈建议只打包压缩目录,这样在解包的时候就不会导致到处都是文件了。
使用 gzip/bzip2 进行压缩、解压缩
数据,包括 tarball
,可以使用 zip
工具进行压缩,gzip
命令将会添加 suffix.gz
并删除源文件。
Arvin@XDD:~/tardir$ ls -la | grep tar
-rw-rw-r-- 1 Arvin Arvin 419840 1月 15 19:23 mtar.tar
Arvin@XDD:~/tardir$ gzip mtar.tar
Arvin@XDD:~/tardir$ ls
mtar.tar.gz
Arvin@XDD:~/tardir$ ls -la mtar.tar.gz
-rw-rw-r-- 1 Arvin Arvin 64588 1月 15 19:23 mtar.tar.gz
使用 -d
选项,解压缩文件:
Arvin@XDD:~/tardir$ gzip -d mtar.tar.gz
Arvin@XDD:~/tardir$ ls -la | grep tar
-rw-rw-r-- 1 Arvin Arvin 419840 1月 15 19:23 mtar.tar
bzip2
以类似的方式工作,但是使用了提升后的压缩算法,因此压缩得到的目标文件更小。
Linux
软件包通常以 gzip
压缩过的 tar
包存在。
GNU
的 tar
命令可以应用在 gzip
压缩的文件上,解压文件使用命令:
tar zxvf file.tar.gz
解压使用 bzip2
压缩的 tarball
,使用命令:
tar jxvf file.tar.bz2
使用 rsync
进行文件同步
介绍
rsync
程序是进行远程备份的快速灵活的工具。这个命令在 UNIX
及类 UNIX
系统上一般都有,可以以脚本形式进行灵活配置。这里说的 远程
不要以字面去理解他,你的远程设备可能是一个 USB
存储设备或你硬盘上的另一个分区,而不需要是两台互相分离的设备。
例子,同步到 USB
设备
首先挂载 USB
设备:
root@theserver# mkdir /mnt/usbstore
root@theserver# mount -t vfat /dev/sda1 /mnt/usbstore
开始备份,目录 /home/karl
下的内容:
karl@theserver:~> rsync -avz /home/karl/ /mnt/usbstore
加密
一般说明
为什么要加密数据
有时候你会选择将备份的数据放到你不能控制访问用户的位置,比如某个服务器上。有时候,你希望对你邮件的内容加密。
GNU 隐私护卫
在 Linux
系统上,有 GnuPG
,GNU
的隐私护卫。
生成密钥
在你加密你的数据之前,你需要首先创建一对密钥。这对密钥包含公钥与私钥。你可以将公钥发送给相关人员,他们可以用这个公钥来为发送给你的数据加密,你在接收到数据之后,通过你的私钥解密。你需要一直私有掌管这个私钥,不与别人分享,否则,其他拿到你的那把私钥的人,可以将发送给你的数据使用这把私钥解密。为防意外发生,使用密码保护这把私钥。密钥对通过如下命令创建:
Arvin@XDD:~$ gpg --generate-key
gpg (GnuPG) 2.2.19; Copyright (C) 2019 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
gpg: 目录‘/home/Arvin/.gnupg’已创建
gpg: 钥匙箱‘/home/Arvin/.gnupg/pubring.kbx’已创建
注意:使用 “gpg --full-generate-key” 以获得一个功能完整的密钥产生对话框。
GnuPG 需要构建用户标识以辨认您的密钥。
真实姓名: Arvin
电子邮件地址: 6171905030@stu.jiangnan.edu.cn
您选定了此用户标识:
“Arvin <6171905030@stu.jiangnan.edu.cn>”
依据提示,输入这对密钥的密码,牢记你的密码。
这样密钥对就生成了。
关于密钥
在你的密钥被创建之后,你会得到签名信息。是一串由 40
位十六进制数组成的数码,因为数字很长,因此很难再次生成一样的密钥。你可以确定,这对密钥就是世界上唯一的密钥对,你可以通过如下命令查看密钥信息:
Arvin@XDD:~$ gpg --list-keys
gpg: 正在检查信任度数据库
gpg: marginals needed: 3 completes needed: 1 trust model: pgp
gpg: 深度:0 有效性: 1 已签名: 0 信任度:0-,0q,0n,0m,0f,1u
gpg: 下次信任度数据库检查将于 2024-01-15 进行
/home/Arvin/.gnupg/pubring.kbx
------------------------------
pub rsa3072 2022-01-15 [SC] [有效至:2024-01-15]
# 本人给删除了密钥信息
uid [ 绝对 ] Arvin <6171905030@stu.jiangnan.edu.cn>
sub rsa3072 2022-01-15 [E] [有效至:2024-01-15]
密钥 ID
为 rsa3072
,你可以发送你的密钥 ID
以及你的名字到一个密钥服务器,这样其他人可以获取到关于你的这段信息,使用它来加密发送给你的数据。或者,你可以直接将你的公钥发送给你需要发送的人。你的密钥的公钥部分也是一个非常长的数字,可以使用如下命令查看:
gpg --export -a
加密数据
现在,你可以加密一个 .tar
文档或压缩文档了,像如下这样使用 gpg
命令:
gpg -e -r uid 要加密的文档
-e
选项告知 gpg
去做加密动作,-r
选项告知 gpg
为谁加密,需要注意的是,只有 -r
后面跟着的这个用户才能解密数据:
Arvin@XDD:~$ gpg -e -r Arvin pyshtables.py
解密文件
使用 -d
选项,可以解密为你加密的文件。
Arvin@XDD:~/decry$ ls
pyshtables.py.gpg
Arvin@XDD:~/decry$ gpg -d -o test.py pyshtables.py.gpg
gpg: 由 3072 位的 RSA 密钥加密,标识为 略了一些数据,生成于 2022-01-15
“Arvin <6171905030@stu.jiangnan.edu.cn>”
Arvin@XDD:~/decry$ ls
pyshtables.py.gpg test.py