centos7基于luks对磁盘进行加密

  • 1,504 views
  • A+
所属分类:linux

LUKS(Linux Unified Key Setup)为Linux硬盘加密提供了一种标准,它不仅能通用于不同的Linux发行版本,还支持多用户/口令。因为它的加密密钥独立于口令,所以如果口令失密,我们可以迅速改变口令而无需重新加密真个硬盘。通过提供一个标准的磁盘上的格式,它不仅方便之间分布的兼容性,而且还提供了多个用户密码的安全管理。必须首先对加密的卷进行解密,才能挂载其中的文件系统。

工具:cryptsetup(默认已经安装)

[root@node1 ~]# cryptsetup --help
cryptsetup 1.7.4
用法: cryptsetup [选项…] <动作> <动作特定参数>
--version 打印软件包版本
-v, --verbose 显示更详细的错误信息
--debug 显示调试信息
-c, --cipher=STRING 用于加密磁盘的密文(参见 /proc/crypto)
-h, --hash=STRING 用于从密码创建加密密钥的哈希值
-y, --verify-passphrase 两次询问密码以进行验证
-d, --key-file=STRING 从文件读取密钥。
--master-key-file=STRING 从文件读取卷(主)密钥。
--dump-master-key 转储卷(主)密钥而不是键槽信息。
-s, --key-size=位 加密密钥大小
-l, --keyfile-size=字节 限制从密钥文件读取
--keyfile-offset=字节 要从密钥文件跳过的字节数
--new-keyfile-size=字节 限制从新增密钥文件的读取
--new-keyfile-offset=字节 要从新增密钥文件跳过的字节数
-S, --key-slot=INT 新密钥的槽号(默认为第一个可用的)
-b, --size=扇区 设备大小
-o, --offset=扇区 后端设备的起始偏移量
-p, --skip=扇区 从开头要跳过的加密数据扇区数量
-r, --readonly 创建只读映射
-i, --iter-time=毫秒 LUKS 默认 PBKDF2 迭代时间(毫秒)
-q, --batch-mode 不要请求确认
-t, --timeout=秒 交互式密码提示符超时长度(秒)
-T, --tries=INT 输入密码的最大重试频率
--align-payload=扇区 于 <n> 个扇区边界处对其载荷数据 - 供 luks 格式用
--header-backup-file=STRING 带有 LUKS 数据头和密钥槽备份的文件。
--use-random 使用 /dev/random 生成卷密钥。
--use-urandom 使用 /dev/urandom 生成卷密钥。
--shared 与另一个不重合的加密段共享设备。
--uuid=STRING 设备使用的 UUID 已占用。
--allow-discards 允许设备的 discard(或称 TRIM)请求。
--header=STRING 带有分离 LUKS 数据头的设备或文件。
--test-passphrase 不要激活设备,仅检查密码。
--tcrypt-hidden 使用隐藏数据头(隐藏 TCRYPT 设备)
--tcrypt-system 设备为系统 TCRYPT 驱动器(带有引导器)。
--tcrypt-backup 使用备份(次级)TCRYPT 标头。
--veracrypt 同时扫描 VeraCrypt 兼容的设备。
-M, --type=STRING 设备元数据类型:luks, 纯粹 (plain), loopaes, tcrypt.
--force-password 禁用密码质量检查 (如果已启用)。
--perf-same_cpu_crypt 使用 dm-crypt same_cpu_crypt 性能兼容性选项。
--perf-submit_from_crypt_cpus 使用 dm-crypt submit_from_crypt_cpus 性能兼容性选项。 帮助选项:
-?, --help 显示此帮助
--usage 显示简短用法 <动作> 为其中之一:
open <设备> [--type <类型>] [<名称>] - 以映射 <名称> 打开设备
close <名称> - 关闭设备(移除映射)
resize <名称> - 改变活动设备大小。
status <名称> - 显示设备状态
benchmark [--cipher <cipher>] - 测试密文
repair <设备> - 尝试修复磁盘上的元数据
erase <设备> - 清空所有密钥槽(移除加密密钥)
luksFormat <设备> [<新密钥文件>] - 格式化一个 LUKS 设备
luksAddKey <设备> [<新密钥文件>] - 向 LUKS 设备添加密
luksRemoveKey <设备> [<密钥文件>] - 移除 LUKS 设备中指定的密钥或密钥文件
luksChangeKey <设备> [<密钥文件>] - 更改 LUKS 设备中指定的密钥或密钥文件
luksKillSlot <设备> <密钥槽> - 从 LUKS 设备清理标号为 <key slot> 的密钥
luksUUID <设备> - 输出 LUKS 设备的 UUID(唯一标识符)
isLuks <设备> - 从 <device> 探测 LUKS 分区标头
luksDump <设备> - 调出 LUKS 分区信息
tcryptDump <设备> - 调出 TCRYPT 设备信息
luksSuspend <设备> - 挂起 LUKS 设备并清除密钥(冻结所有 IO 操作)。
luksResume <设备> - 恢复已暂停的 LUKS 设备。
luksHeaderBackup <设备> - 备份 LUKS 设备标头和密钥槽
luksHeaderRestore <设备> - 恢复 LUKS 设备标头和密钥槽 你亦可使用老的 <动作> 语法别名:
open: create (plainOpen), luksOpen, loopaesOpen, tcryptOpen
close: remove (plainClose), luksClose, loopaesClose, tcryptClose <name> 为要在 /dev/mapper 创建的设备
<device> 为加密设备
<key slot> 为需要更改的 LUKS 密钥槽
<key file> 提供给 luksAddKey 动作的密钥文件 默认集成的密钥和密码参数:
密钥文件的最大大小:8192kB, 交互式密码的最大长度:512 (字符)
LUKS 的默认 PBKDF2 迭代时间:2000 (毫秒) 默认集成的设备密文参数:
loop-AES:aes, 256 位密钥
plain:aes-cbc-essiv:sha256, 密钥:256 位, 密码哈希:ripemd160
LUKS1:aes-xts-plain64, 密钥:256 bits, LUKS 数据头哈希:sha256, RNG:/dev/urandom

1. 环境


  • OS: centos7
  • Kernel: 3.10.0-693.el7.x86_64
  • tools: cryptsetup.x86_64 0:1.7.4-4.el7

2. 创建加密分区


首先,我们添加一块硬盘/dev/sdb作为测试用,如下:

[root@node1 ~]# fdisk -l
磁盘 /dev/sdb:8589 MB, 8589934592 字节,16777216 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘 /dev/sda:8589 MB, 8589934592 字节,16777216 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000bfe7f 设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 16777215 7339008 8e Linux LVM 磁盘 /dev/mapper/centos-root:6652 MB, 6652166144 字节,12992512 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘 /dev/mapper/centos-swap:859 MB, 859832320 字节,1679360 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节

下来我们格式化加密分区

[root@node1 ~]# cryptsetup luksFormat /dev/sdb

WARNING!
========
这将覆盖 /dev/sdb 上的数据,该动作不可取消。
Are you sure? (Type uppercase yes): YES # 注意这里必须是大写的YES
输入密码:
确认密码:

5. 利用 key file 加密分区


除了密码之外,还可以选择使用 key file 解密你的硬盘,也就是相当于一个密钥,当然可以也可以只使用 key file 或者同时使用密码与 key file

5.1 生成随机 key file


[root@node1 ~]# dd if=/dev/urandom of=/root/enc.key bs=1 count=4096
记录了4096+0 的读入
记录了4096+0 的写出
4096字节(4.1 kB)已复制,0.00967434 秒,423 kB/秒
[root@node1 ~]# ls
anaconda-ks.cfg enc.key kubernetes

5.2 添加 key file 作为密码之一


[root@node1 ~]# cryptsetup luksAddKey /dev/sdb /root/enc.key
输入任意已存在的密码:

6. 移除解密密码


移除普通密码

[root@node1 ~]# cryptsetup luksRemoveKey /dev/sdb
输入要移除的密码:

移除 key file 密码

[root@node1 ~]# cryptsetup luksRemoveKey -d /root/enc.key /dev/sdb
WARNING!
========
这是最后一个密钥槽。设备在清空此密钥后将不可用。
Are you sure? (Type uppercase yes): YES

注意:千万不要将所有密码移除,至少需要留有一个密码访问设备,移除操作不可撤销

7分区映射与挂载


7.1 分区映射


[root@node1 ~]# cryptsetup luksOpen /dev/sdb data2
输入 /dev/sdb 的密码:

7.2 key file分区映射


也可以通过key file做映射

[root@node1 ~]# cryptsetup luksOpen -d /root/enc.key /dev/sdb data2

7.3 创建文件系统


在挂载使用之前,我们仍然需要对设备创建文件系统才可以使用,可以选择任何你喜欢的文件系统,例如 btrfs,ext4,vfat,ntfs等

[root@node1 ~]# mkfs.ext4 /dev/mapper/data2
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
524288 inodes, 2096640 blocks
104832 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=2147483648
64 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632 Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成

7.4 挂载


现在可以像正常分区一样挂载我们的加密分区设备了

[root@node1 ~]# mkdir /data2
[root@node1 ~]# mount /dev/mapper/data2 /data2
[root@node1 ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 6.2G 1.8G 4.5G 28% /
devtmpfs 4.4G 0 4.4G 0% /dev
tmpfs 4.4G 0 4.4G 0% /dev/shm
tmpfs 4.4G 8.5M 4.4G 1% /run
tmpfs 4.4G 0 4.4G 0% /sys/fs/cgroup
/dev/sda1 1014M 143M 872M 15% /boot
tmpfs 883M 0 883M 0% /run/user/0
/dev/mapper/data2 7.8G 36M 7.3G 1% /data2

7.5 卸载挂载点并关闭加密分区


[root@node1 /]# umount /data2
[root@node1 /]# cryptsetup luksClose data2

8. 总结


在完成整个步骤以后,您现在需要做的就是妥善保管您的加密存储,可采用同样的方式加密多个设备进行备份,因为谁也不能保证这移动设备会不会在什么时候丢掉。

centos7基于luks对磁盘进行加密的更多相关文章

  1. (转)Centos7.2 给grub菜单做加密

    Centos7.2 给grub菜单做加密 原文:http://www.cnblogs.com/hanhy/articles/7274340.html#top 1.简述linux开机启动流程: 1) 启 ...

  2. 基于RC4加密算法的图像加密

    基于RC4加密算法的图像加密 某课程的一个大作业内容,对图像加密.项目地址:https://gitee.com/jerry323/RC4_picture 这里使用的是RC4(流.对称)加密算法,算法流 ...

  3. SNMP学习笔记之SNMPv3的报文格式以及基于USM的认证和加密过程

    下面我们就主要讲解SNMPv3的报文格式以及基于USM的认证和加密过程! 1.SNMPv3的消息格式 如下图1: 图 1 其中,整个SNMPv3消息可以使用认证机制,并对EngineID.Contex ...

  4. 基于 Azure 托管磁盘配置高可用共享文件系统

    背景介绍 在当下,共享这个概念融入到了人们的生活中,共享单车,共享宝马,共享床铺等等.其实在 IT 界,共享这个概念很早就出现了,通过 SMB 协议的 Windows 共享目录,NFS 协议的网络文件 ...

  5. win10和centos7双系统双磁盘引导的实现

    win10和centos7双系统双磁盘引导的实现1.背景:dell5460笔记本电脑M2-120G固态盘无法在bios中引导,新装了M360G固态盘后,考虑把120G固态盘安装centos7.5系统做 ...

  6. 用luks方式对磁盘进行加密以及加密磁盘的自动挂载

    1.关于luks加密 LUKS(Linux Unified Key Setup)为Linux硬盘分区加密提供了一种标准,它不仅能通用于不同的 Linux发行版本,还支持多用户/口令.因为它的加密密钥独 ...

  7. centos7基于SVN+Apache+IF.svnadmin实现SVN的web管理

    一.介绍 本文介绍的是CentOS7上搭建基于Apache.SVN Server.iF.svnadmin实现web后台可视化管理SVN. iF.SVNAdmin应用程序是Subversion授权文件基 ...

  8. 基于SSL实现MySQL的加密主从复制

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u012974916/article/details/53316758 大家都知道MySQL的主从复制 ...

  9. [cipher][archlinux][disk encryption][btrfs] 磁盘分区加密 + btrfs

    科普链接:https://wiki.archlinux.org/index.php/Disk_encryption 前面的链接关于硬盘加密,讲了几种,基本上就是选dm-crypt with LUKS ...

随机推荐

  1. Processing 状态机应用研究(线性转换)

    状态机(State Machine)是一个抽象概念,是一个逻辑严谨的数学抽象.它的这种概念在现实生活中处处都有应用,或者说现实世界就充满状态机.要讨论状态机,就涉及到相关概念,比如:State 状态, ...

  2. 考前自救题库NABCD分析

    考前自救题库NABCD分析 项目 内容 这个作业属于哪个课程 2021春季软件工程(罗杰 任健) 这个作业的要求在哪里 团队项目-初次邂逅,需求分析 项目名称:考前自救题库(暂定) 项目简介:本产品计 ...

  3. Spring Boot demo系列(二):简单三层架构Web应用

    2021.2.24 更新 1 概述 这是Spring Boot的第二个Demo,一个只有三层架构的极简Web应用,持久层使用的是MyBatis. 2 架构 一个最简单的Spring Boot Web应 ...

  4. 002-Java的标识符和关键字

    目录 一.标识符 1.什么是标识符 2.标识符的命名规则 3.标识符的命名规范 二.关键字 1.什么是关键字 2.Java中的关键字 一.标识符 1.什么是标识符   标识符就是程序员自己规定的代表一 ...

  5. Day09_47_Map

    Map 集合 Map集合** 继承关系** <interface>: Map(接口)<---HashMap(class)/HashTable(class)/SortedMap(子接口 ...

  6. 光猫和路由器都支持ipv6,却无法使用ipv6?

    这些年很多地方的光猫都能获得ipv6地址了,而且新出的路由基本都支持ipv6,但是还是有很多人在http://test-ipv6.com看不到自己的ipv6地址,也上不了ipv6网站. 我也遇到这个问 ...

  7. 【目录】python全栈工程师

    第一阶段:Python 语言核心编程1. Python核心   -- 2048 游戏核心算法2. 面向对象   -- 天龙八部游戏技能系统3. Python高级   -- 集成操作框架项目:2048游 ...

  8. 【Java】 Java中的浅拷贝和深拷贝

    先抛出结论: 浅拷贝是引用拷贝,A对象拷贝B以后,A对象和B对象指向同一块内存地址,改变A对象的属性值会触发B对象属性的改变,有安全风险 深拷贝是对象拷贝,A对象拷贝B以后,A对象和B对象指向不同的额 ...

  9. hdu2363 枚举最短路

    (1) 二分     把所有的高度都拿过来,组合起来,sort一遍,然后二分,找到能连通的最小的那个,但这里存在一起情况,就是遇到高度差相等的时候会bug.... (2) 枚举 连通直接break   ...

  10. 病毒木马查杀实战第021篇:Ring3层主动防御之编程实现

    前言 我们这次会依据上次的内容,编程实现一个Ring3层的简单的主动防御软件.整个程序使用MFC实现,程序开始监控时,会将DLL程序注入到explorer.exe进程中,这样每当有新的进程创建,程序首 ...