如何保护包含关键数据的文件?例如,假设我有一些重要的文件,有什么方法或策略可以让这类文件在 Ubuntu 上更安全吗?我甚至想让某些文件在有人尝试打开时要求输入密码。这会影响 Ubuntu 版本的安全策略吗?我可以使用任何外部加密算法吗?问候。
答案1
最好的方法是chattr +i {file}
。这将设置不可变属性,然后文件不能被任何人(包括 root)修改、删除、重命名或创建硬链接。
唯一可以编辑该文件的人是 root。他/她必须通过删除不可变位来撤消此操作:chattr -i {file}
然后才能对文件进行任何操作。再次设置 +i 可锁定文件以防止任何修改。
但这并不能阻止格式化存储文件的分区。但它可以防止文件被盗。
如果你愿意的话,你甚至可以在完整的挂载点上执行此操作:
chattr +i -R /discworld
会使整个“碟形世界”和其中的一切变得不可变(chattr -i -R /discworld
撤消它 ;) )
答案2
无需执行任何特殊操作,您可以通过删除除所有者之外的所有人权限来使其他人难以读取、更改或删除文件。让 root 成为文件的所有者,并将其放在只有 root 才有权访问的目录中...
sudo mkdir /home/secret #this directory will be owned by root, no need to chown
sudo chmod 700 /home/secret
移动(sudo mv file /home/secret
)你的文件到那里并执行
sudo chown root: /home/secret/file
sudo chmod 600 /home/secret/file
chmod
并chown
采用多个参数:chmod 600 file1 file2
或chmod 600 file*
除此之外,使用加密...
答案3
保护文档的一个非常安全的方法是加密(前提是您销毁原始文档并妥善存储加密版本)。
权限(如其他答案所建议)可以被规避(参见这)。
因此,我建议您正确加密该文件。方法如下:
(图形界面方法见本回答结尾)
确保您已gpg
安装。
例如,要加密名为 的文件Important_File.txt
,请使用
$ gpg -c Important_File.txt
现在输入密码(稍后读取时会用到)。
现在您将获得一个具有原始名称和.gpg
扩展名的文件,例如Important_File.txt.gpg
。
删除原始文件并保留版本.gpg
。如果不使用安全shred
实用程序(在 SSD 驱动器或 SD 卡上仍然不起作用),从磁盘获取原始文件可能很容易:
$ shred Important_File.txt
现在我们只剩Important_File.txt.gpg
下我们自己了。
无论何时你需要阅读它,只需
$ gpg Important_File.txt.gpg
然后输入第一个命令中设置的密码,即可得到原始的Important_File.txt
。
笔记:这只会保护内容加密
.gpg
文件不会被任何人读取(使用加密),但任何人都可以删除、复制或移动它! 提供基本保护,防止那,在加密文件上使用其他答案的权限方法.gpg
。
图形界面(GUI)方法
安装 Seahorse 应用程序。
然后您可以从文件应用程序中执行此操作:
答案4
如果你是系统上的唯一用户,并且没有人可以在没有你权限的情况下合理地访问你的计算机,那么你可以使用此命令阻止访问,如下所示Zanna 的回答:
sudo chown root:root /my/secret/file.txt
sudo chmod 600 /my/secret/file.txt
在这种情况下,该文件只能由用户读取和/或写入root
。如果没有人可以在未经您许可的情况下启动您的计算机或窃取您的硬盘,则认为这“足够安全”。我们在这种情况下使用用户root
,因为root
即使用户没有权限,他们也始终可以读取文件。通过使用 root 用户,我们强制执行仅有的一个用户可以访问它。
如果您想以任何方式、形状或形式将文件标记为不可更改,则可以使用i
将文件标记为不可变的。在这种情况下,文件的权限被锁定,在任何情况下都不能更改。因此,您可以执行以下命令使文件不可更改,并保护它免遭删除和权限更改:
sudo chattr +i /my/secret/file.txt
如果你想改变它,请+i
用-i
以暂时解锁文件。请参阅Rinzwind 的回答以获得更深入的了解。
现在,如果其他人可以访问您的计算机(无论是远程sudo
访问还是任何形式的物理访问),那么这就会立即失效。攻击者可以使用root
权限读取您的文件、插入 Live USB 或直接拔出您的硬盘。
因此,我们需要加密文件。我个人更喜欢使用“文件容器”,这样你可以将更多文件放入其中,并根据需要增加文件大小。chattr +i
仍然建议这样做,以免文件被意外删除(或更改)。最后,如果您使用的是加密映像,则可以设置权限,让其他人在安装磁盘时访问非常有限的文件子集,这对服务器来说很有用。本指南最初可用这里,并被改编以适合于此处使用。
首先,您需要创建一个磁盘映像以供使用。在此示例中,我们将它的大小设为 5 GB。
dd if=/dev/zero bs=1M count=5000 of=~/NSA-Data-Dump-20161012.img
然后,我们需要加密你的图像:
sudo cryptsetup luksFormat ~/NSA-Data-Dump-20161012.img
您可以在此处选择输入您喜欢的加密密码。完成后,我们需要公开原始块设备:
sudo cryptsetup luksOpen ~/NSA-Data-Dump-20161012.img my-secret-device
现在,我们有一个解密的文件容器,但没有文件系统,它几乎毫无用处。让我们修复这个问题:
sudo mkfs.ext4 /dev/mapper/my-secret-device
现在,我们需要一个地方来安装我们的新分区。在本例中,我将把它放在/crypt
。我是用户 1000,因此,我将设置我的分区,使其仅允许我(和 root)从中读取/写入。
sudo mkdir /crypt
sudo mount /dev/mapper/my-secret-device /crypt -o umask=0700,gid=1000,uid=1000
现在,我可以使用文件工具导航到那里/crypt
,并将所有敏感文件存储在那里。完成后,我需要卸载并重新加密我的分区。
sudo umount /crypt
sudo cryptsetup luksClose my-secret-device
现在,我将在我的图像文件上设置适当的分区,以便只有我和root可以访问它,并且它不能再被更改。
chmod 400 ~/NSA-Data-Dump-20161012.img
sudo chattr +i ~/NSA-Data-Dump-20161012.img
每当我想打开此文件进行读取时,我只需要运行这两个命令,我可以轻松地为它们添加别名:
sudo cryptsetup luksOpen ~/NSA-Data-Dump-20161012.img my-secret-device
sudo mount /dev/mapper/my-secret-device /crypt -o umask=0700,gid=1000,uid=1000,ro
我的加密数据将在 处可用,/crypt
并且它将保持只读状态,只有我和 root 可以访问。
如果我想更改文件,我需要更改权限然后挂载:
sudo chattr -i ~/NSA-Data-Dump-20161012.img
chmod 700 ~/NSA-Data-Dump-20161012.img
sudo cryptsetup luksOpen ~/NSA-Data-Dump-20161012.img my-secret-device
sudo mount /dev/mapper/my-secret-device /crypt -o umask=0700,gid=1000,uid=1000,ro
现在,您需要小心谨慎,因为如果用户在其系统上拥有 root 权限,他们可以修改/破坏您的加密分区,使其变得毫无用处。他们还可以从驱动器中窃取数据,但只有在驱动器打开时才可以。但是,如果您不明确打开它,他们就无法窃取数据,甚至看不到数据的存在。因此,您有责任确保您的系统足够安全,在您打开加密卷时不会有任何 root 用户在线。
总结:
制作保险库:
dd if=/dev/zero bs=1M count=5000 of=~/NSA-Data-Dump-20161012.img sudo cryptsetup luksOpen ~/NSA-Data-Dump-20161012.img my-secret-device sudo mkfs.ext4 /dev/mapper/my-secret-device
填满金库:
sudo mkdir /crypt sudo mount /dev/mapper/my-secret-device /crypt -o umask=0700,gid=1000,uid=1000
锁上保险库:
sudo umount /crypt sudo cryptsetup luksClose my-secret-device
冻结保险库:
chmod 400 ~/NSA-Data-Dump-20161012.img sudo chattr +i ~/NSA-Data-Dump-20161012.img
打开保险库:
sudo cryptsetup luksOpen ~/NSA-Data-Dump-20161012.img my-secret-device sudo mount /dev/mapper/my-secret-device /crypt -o umask=0700,gid=1000,uid=1000,ro