Nextcloud 加密功能的配置

Posted by 橙叶 on Thu, Feb 15, 2018

Nextcloud服务器端加密的主要目的是保护用户的Dropbox和Google Drive等远程存储上的文件,并在Nextcloud内部轻松无缝地执行此操作。 在Nextcloud 9.0中,服务器端加密分离了本地和远程存储的加密。这使您可以加密Dropbox和Google等远程存储,而无需在您的Nextcloud服务器上加密您的家庭存储。

你需要知道的几点

官方文档花了很多篇幅来说,我就梳理一下。

Nextcloud的服务端加密功能并不是用来保护你在服务器上的数据,因为你的加密密匙也放在服务器上。而由Nextcloud同步到外部存储上的数据则可以保证不被泄露。

[infobox]为了最大程度地保证安全,可以将外部存储设置为 检查修改:从不

这样,Nextcloud就会忽略掉从非Nextcloud途径添加的文件,不怀好意的外部存储的管理者(服务商)就没法在你不知情的情况下向Nextcloud中添加文件了。当然,如果你的外部存储所受到的更改是合理的,就不需要这样做。[/infobox]

Nextcloud存储在外部存储上的文件之所以安全是因为Nextcloud会将文件在本地加密,然后仅向外部存储上传加密后的版本,而加密动作和加密用的密匙都存储在Nextcloud的服务器上。解密的过程也是这样——下载加密后的文件->在本地解密->展示给你或作为你分享文件的对象。

[infobox]加密文件大小的问题 这个问题会在启用加密时提示,文件加密后会有一定的体积膨胀,大约增加35%(这个增量可不算小),而用户的配额却仍以加密前大小进行计算。这是在部署服务器、管理服务器存储空间时需要特别注意的。[/infobox]

由Nextcloud上传到外部存储的文件在加密后就不没法再通过外部存储共享了,共享的只是加密后的文件,你只能通过Nextcloud共享。

Nextcloud的服务器端加密生成一个强大的加密密钥,该密钥由用户的密码解锁。您的用户不需要追踪额外的密码,只需像往常一样登录即可。它只加密文件的内容,而不是文件名和目录结构。

密匙存放在以下目录,为了避免文件被永远封存,最好将定时备份他们:

data/<user>/files_encryption

(这个目录存放了用户的私有密匙以及用户各文件对应的密匙)

data/files_encryption

(存放所有的用户的密匙和能够解密所有文件的密匙)

文件的加密和解密都由Nextcloud来完成,然后将加密后的文件上传至远程存储,这可以保护你存放在外部存储中的数据。Nextcloud管理员和存储管理员只能在后台看到加密后的文件。

[warningbox]警告

加密密匙只存放在Nextcloud服务器上,请注意不要将你的数据泄露给第三方的存储提供商。如果你的服务器遭到入侵,Nextcloud将无法保护你的数据(因为密匙也存放在服务器上)。同样,Nextcloud也无法保护你的数据不被服务器管理员看到(如果你想保护自己的数据不被管理员看到,可以使用端到端加密功能)。如果你的Nextcloud服务器无需连接外部存储,那么其他类型的加密工具(例如文件分级或全盘加密)将比这个更加有效。

最好配合SSL使用,可以最大程度避免文件在传输过程中受到中间人攻击而被劫持。

[/warningbox]

在加密前……

请在启用加密前认真考虑一下,因为Web界面上的启用操作是不可逆的(需要使用OCC命令来关闭),如果你的丢失了加密密匙,那么你的文件将永远无法恢复,所以要注意及时备份密匙。

启用加密

在Web页面上启用

到后台管理页面->加密,勾选“启用服务端加密”:

仔细阅读它的提示,也可以阅读本文前文,然后点击“启用加密”。

提示没有加载加密模块,到应用->禁用应用中找到“Default encryption module”,然后启用它:

回到管理页面,可以看到默认的加密模块已经激活了,

 

你可以在上图中下方“默认加密模块”中取消勾选“加密主目录储存”,这样Nextcloud只会加密上传到外部存储的文件,有利于减少Nextcloud服务器的资源消耗。

加密效果

我们看一下加密效果,现在访问data目录,进入一个用户的目录:

加密不会影响文件和文件夹名,但是如果查看其中的文件(比如About.txt),可以看到内容已经被加密了:

使用OCC命令管理加密功能

使用OCC命令可以设置更多的加密选项,关于OCC加密命令,在ownCloud/Nextcloud OCC命令行工具详解(2) 中已有概括性的介绍,可以先看一下。下面是一些具体的步骤:

启用加密的具体步骤

获取当前的加密启用状况和加密模块的加载状况:
sudo -u www-data php occ encryption:status   
 - enabled: false     #加密禁用
 - defaultModule: OC_DEFAULT_MODULE  #加载的加密模块
启用服务端加密:
sudo -u www-data php occ encryption:enable
Encryption enabled

Default module: OC_DEFAULT_MODULE

列出可用的加密模块:

sudo -u www-data php occ encryption:list-modules
 - OC_DEFAULT_MODULE: Default encryption module [default*]  #“OC_DEFAULT_MODULE”为模块ID

选择一个加密模块(目前可用的只有OC_DEFAULT_MODULE):

sudo -u www-data php occ \
encryption:set-default-module [Module ID].

(Module ID)要使用encryption:list-modules中列出的模块ID:

sudo -u www-data php occ encryption:set-default-module OC_DEFAULT_MODULE                                                               
"OC_DEFAULT_MODULE"" is already the default module

启用加密后,为了节约服务器资源,Nextcloud只会加密新增加的文件,你可以使用以下命令加密所有已存在的文件。

官方文档建议在加密之前开启维护模式,然而实测维护模式开启时会禁用所有插件(APP),包括加密模块,最终导致加密时提示:

[errorbox]

[OC\Encryption\Exceptions\ModuleDoesNotExistsException]

Default encryption module not loaded

[/errorbox]

所以这儿仅贴出启用命令以供参考:

sudo -u www-data php occ maintenance:mode --on
Maintenance mode enabled
加密所有文件:
sudo -u www-data php occ encryption:encrypt-all                                                                                        

You are about to encrypt all files stored in your Nextcloud installation.
Depending on the number of available files, and their size, this may take quite some time.
Please ensure that no user accesses their files during this time!
Note: The encryption module you use determines which files get encrypted.

Do you really want to continue? (y/n) y #输入"y" 开始加密

Encrypt all files with the Default encryption module

Use master key to encrypt all files.

Start to encrypt users files

all files encrypted
[============================]

完成后会为每个用户创建加密密匙对,并加密他们的所有文件。

文件解密

你可以一次性解密所有用户的文件,或者仅解密某个用户的文件:
sudo -u www-data php occ encryption:decrypt-all [用户名]

禁用加密

禁用加密功能仅能使用OCC命令。

禁用前先开启维护模式:

sudo -u www-data php occ maintenance:mode --on
Maintenance mode enabled

禁用加密:

sudo -u www-data php occ encryption:disable
Nextcloud is in maintenance mode - no apps have been loaded                                                                                                                             
                                                                                                                                                                                        
Encryption disabled

关闭维护模式:

sudo -u www-data php occ maintenance:mode --off

不受加密保护的文件

只有在data/<user>/files目录下的文件才会被加密,文件名和目录结构都会保持原样。以下文件不会被加密:
  • 在回收站和版本控制中存在的文件。只有新增的或加密启用后被修改的文件会被加密。
  • 版本控制中存在的文件
  • 画廊中图片的缩略图
  • 文件的缩略图
  • 全文搜索APP的搜索目录(实测启用加密后使用Solr仍然无法正常执行全文搜索)
  • 第三方APP数据
也许还有其他的文件不会被加密,但是存放到外部存储的文件可以保证受到加密保护。

comments powered by Disqus