本文主要是介绍用LUKS为云盘敏感数据上锁,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
背景
通过之前的教程,我们了解如何在Linux和Windows云服务器下挂载和扩容云硬盘,解决了业务存储的性能扩展问题。那么,如何妥善地解决块存储的安全问题呢?这篇我们将一起探索在腾讯云上,为云硬盘做基于dm-crypto/LUKS的块设备加密的方法实践。
静止数据(data-at-rest)加密分层
静止数据安全 VS. 在途数据安全
静止数据(data-at-rest)加密确保文件始终以加密形式存储在磁盘上。只有在系统运行和受信任的用户解锁时,文件才会以可读的形式对操作系统和应用程序开放,此时转变为在途数据(data-in-use或data-in-transit)。而未经授权直接查看磁盘内容,只能得到无意义的随机数据,而不是实际的文件。
静止数据加密可以在以下场景保护数据不泄露:如非受信任的人可能进入机房、硬盘丢失或被盗,如笔记本电脑、上网本或外部存储设备、在修理厂修理、以及硬盘弃用后。简单点,硬盘丢了也不担心泄密。
当然,静止数据加密也不是万能的,它无法在以下场景下保证数据安全:运行时网络侵入,攻击者可以通过互联网在系统运行时并已经解锁了磁盘的加密部分后侵入系统;运行时物理侵入,在机器开机时,对机器进行获得物理访问权;被胁迫交出密码等。所以,完整的数据安全策略应该包括静止和在途的数据的加密。而对于途数据的安全就讨论更多了,很多网络安全相关协议,如最典型的TLS等等。
静止数据加密的分层模型及场景对比
正如大家熟知的网络协议的TCP/IP四层模型,各层有不同的安全方案,如传输层有TLS,网络层有IPSec等。数据存储的也在各个层面上有各自的安全加密实现,操作系统的存储栈如下图:
最上层的应用层通常可以由具体软件商自己定制的库实现,一般来说,越上层开发越灵活,但是应用层的加密对开发者其实非常不友好:第一是因为特定加密算法的细节(密钥、摘要生成等)毕竟距离业务太远,第二是应用级别的加密无法利用系统级别的缓存,如页缓存等,想获得理想性能的实现难度非常大。所以更适合更底层的抽象,如用户态加密库OpenSSL、PGP等。最底层的硬件层加密是指基于硬件实现的全盘加密(Hardware-based FDE, Full Disk Encryption),如SED(Self-encrypting Drives)或Opal兼容设备等。本节不对其做重点分析,而主要分析中间两类OS层的数据加密实现:栈式文件系统加密(stacked filesystem encryption)和块设备加密(block device encryption)。
文件系统级加密使得数据加密对应用程序是透明的,因为文件系统本身就会对数据进行加/解密,然后再将数据传递给块子系统,所以无论应用程序是否有加密支持,文件都会被加密。其灵活性还体现在,可以配置成只对某一特定目录进行加密,或者对不同的文件有不同的密钥。然而,这种灵活性是以更复杂的配置为代价的。文件系统加密通常不如块设备加密安全,因为大部分的栈式文件系统只能加密文件的内容,还做不到加密相关的元数据,如文件大小、文件数量、目录树布局等,这些对潜在的攻击者来说仍是可见的。而栈式(stacked)是指这类加密工作是在已存在的文件系统(如Ext4/Btrfs)上再加一层,在已有文件系统的基础之上再进行其中数据的加密,如相对传统(有些缺陷的)的eCryptfs、EncFS和新近的gocryptfs及CryFS等,而且其中大部分是通过FUSE技术实现。 栈式加密文件系统是目前文件系统级加密的主流实现方法。
而相对更下层的块设备加密(也称磁盘卷加密或全盘加密)也使得数据加密对应用程序甚至整个文件系统都是透明的。与文件系统层加密不同的是,它对块设备上的所有数据进行加密,包括文件元数据、可用空间、硬盘分区表信息甚至作为loop device的文件都可以。块设备加密性能通常非常高,也更安全。不过,它的灵活性较前者受限,通常是对整个块设备进行加密,所以没有按目录、按文件或按用户的配置。
选择哪一层加密取决于实际情况,应用程序和文件系统级别的加密通常是客户端系统的首选,因为它具有灵活性。家用的多用户桌面上的每个用户可能希望用自己的密钥加密他们的主目录,而不对一些共享目录进行加密。相反,在服务器系统上,尤其是云服务场景下,则推荐用启用块设备加密。毕竟,我们所有的数据都必须得到保护,因为没有例外或覆盖,不太需要上层提供的选择性灵活性。
块设备加密原理:dm-crypt/LUKS
dm-crypt
这篇关于用LUKS为云盘敏感数据上锁的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!