如何修复 encfs 加密文件夹内的损坏权限

如何修复 encfs 加密文件夹内的损坏权限

我使用 Gnome encfs 管理器管理和挂载加密文件夹,它工作了好几年。突然间,里面的文件或权限似乎被破坏了。在终端上挂载和在管理器上一样正常。根文件夹中的文件也可以访问。

但在所有子目录中,我只看到文件名权限为问号,无法打开它们,甚至使用 sudo 也无法更改权限。

root@lubuntu:/home/user/safe# ls -l   
    ls: cannot access local: Permission denied
    total 1932
    ...
    d????????? ? ?      ?           ?            ? local

local 是挂载的 encfs 加密文件夹。在 root shell 中我无法 cd 进入,使用我自己的用户我只能再次得到问号:

[~/safe/local/backup]$ ls -l
ls: cannot access index.htm: Permission denied
ls: cannot access bookmarks.html: Permission denied
total 0
d????????? ? ? ? ?                ? foo/
-????????? ? ? ? ?                ? index.html
-????????? ? ? ? ?                ? bookmarks.htm

奇怪的是,使用我的用户,我可以正常访问 ~/safe/local/ 下的文件,但无法访问其子目录中的任何文件,而 root 能做的就更少了。以 root 身份或使用 sudo 时,chown 和 chmod 会给我“权限被拒绝”。

有什么建议吗?这是否暗示硬盘出现故障?我最近从 Lubuntu 14.10 更新到了 15.10。

更新:这是安装时的详细输出:

[~/safe]$ encfs -f -v  .local test
14:37:17 (main.cpp:559) Root directory: .local/
14:37:17 (main.cpp:560) Fuse arguments: (fg) (threaded) (keyCheck) encfs test -f -o use_ino 
14:37:17 (FileUtils.cpp:174) version = 20
14:37:17 (FileUtils.cpp:177) found new serialization format
14:37:17 (FileUtils.cpp:191) subVersion = 20100713
14:37:17 (Interface.cpp:117) checking if ssl/aes(3:0:2) implements ssl/aes(3:0:0)
14:37:17 (SSL_Cipher.cpp:335) allocated cipher ssl/aes, keySize 32, ivlength 16
14:37:17 (Interface.cpp:117) checking if ssl/aes(3:0:2) implements ssl/aes(3:0:0)
14:37:17 (SSL_Cipher.cpp:335) allocated cipher ssl/aes, keySize 32, ivlength 16
14:37:17 (FileUtils.cpp:1542) useStdin: 0
EncFS Password: 
14:37:22 (Interface.cpp:117) checking if ssl/aes(3:0:2) implements ssl/aes(3:0:0)
14:37:22 (SSL_Cipher.cpp:335) allocated cipher ssl/aes, keySize 32, ivlength 16
14:37:24 (FileUtils.cpp:1550) cipher key size = 52
14:37:24 (Interface.cpp:117) checking if nameio/block(4:0:2) implements nameio/block(3:0:0)
14:37:24 (MACFileIO.cpp:71) fs block size = 1024, macBytes = 8, randBytes = 0
14:37:24 (FileNode.cpp:116) calling setIV on (null)
14:37:24 (RawFileIO.cpp:164) getAttr error on .local/uWX6wZAqMvH5RDRMW5oIb67F8V6CoVXYZPwUf6bHbu1Ms0: No such file or directory
14:37:24 (CipherFileIO.cpp:94) in setIV, current IV = 0, new IV = 11696676665880040319, fileIV = 0
14:37:24 (DirNode.cpp:641) created FileNode for .local/uWX6wZAqMvH5RDRMW5oIb67F8V6CoVXYZPwUf6bHbu1Ms0
14:37:24 (encfs.cpp:133) getattr .local/uWX6wZAqMvH5RDRMW5oIb67F8V6CoVXYZPwUf6bHbu1Ms0
14:37:24 (RawFileIO.cpp:164) getAttr error on .local/uWX6wZAqMvH5RDRMW5oIb67F8V6CoVXYZPwUf6bHbu1Ms0: No such file or directory
14:37:24 (encfs.cpp:136) getattr error: No such file or directory
14:37:24 (MACFileIO.cpp:71) fs block size = 1024, macBytes = 8, randBytes = 0
14:37:24 (FileNode.cpp:116) calling setIV on (null)
14:37:24 (RawFileIO.cpp:164) getAttr error on .local/kbZ-jP1BAg0-VpqtlMjAKr9F: No such file or directory
14:37:24 (CipherFileIO.cpp:94) in setIV, current IV = 0, new IV = 17358762804478769995, fileIV = 0
14:37:24 (DirNode.cpp:641) created FileNode for .local/kbZ-jP1BAg0-VpqtlMjAKr9F
(continues like that...)

答案1

实际上,我在测试 EncFS 和 eCryptFS 时曾见过此类错误,但直到现在我才记得具体在哪里见过。这是因为没有权限读取或列出目录中的文件(目录需要x执行权限才能列出文件),我认为解密错误也可能发生这种情况。

我之前在已挂载/解密文件的权限方面遇到过一些问题。它们似乎只反映了加密文件的权限(EncFS 手册页将其称为“rootdir”),更改已挂载/解密的文件似乎不起作用。也许“rootdir”/加密文件的所有者和权限不正确?尝试更改“rootdir”/加密权限,以便您的用户可以访问它们(rwx?)。

我认为 root 无论如何都应该能够读取任何内容...但 encfs 不需要 sudo 来运行,并且我尝试使用单个加密文件夹secret及其解密挂载点进行测试open,并且发生了同样的事情:

$ ls -go
total 0
drwxr-xr-x 2 80 Nov 11 00:14 open
drwxr-xr-x 2 80 Nov 11 00:14 secret

$ sudo ls -go
ls: cannot access open: Permission denied
total 0
d????????? ?  ?            ? open
drwxr-xr-x 2 80 Nov 11 00:14 secret

或者可能无法正确解密文件。如果您对数据进行了良好的备份,那就太好了。


我认为从 14.10 升级到 15.10 可能是原因。有时使用较新版本处理旧数据并不总是有效。

encfs我可以找到的软件包版本http://packages.ubuntu.com/目前:
在 wily (15.10) 中是版本 1.8.1-3
在 animated (15.04) 中是版本 1.7.4-5
在 14.10 中它不再在网页上,可能是 1.7.4...
在 trusty (14.04LTS) 中是版本 1.7.4-2.4ubuntu2

或者,.encfs6.xml“配置文件”可能不知何故被损坏了。尝试使用它的备份可能会有用。man encfs有一些详细信息,但看起来它仍然引用了版本 5。

我会按照偏好顺序尝试:

  1. 更改加密文件夹/文件的权限,以便您的用户可以读取所有文件(并执行文件夹以列出文件)
  2. .encfs6.xml尝试使用类似以下命令 备份配置文件( ):

    ENCFS6_CONFIG=/home/me/.encfs6.xml encfs /encryptedDir /decryptedDir
    
  3. 从良好的备份中恢复数据,并从具有最新 encfs 的新 encfs 文件夹/设置开始。
  4. 尝试使用旧版本的 encfs 来挂载文件夹,例如使用 live 14.04LTS

如果没有 HD 错误(查看系统日志甚至 SMART 数据),那么我不会立即怀疑 HD。

相关内容