问题描述
如何使包含关键数据的某些文件受到保护?例如,假设我有一些重要的文件,是否有任何方法或策略可以使这些文件在Ubuntu上受到更多保护?我什至希望有人试图打开某些文件时要求输入密码。就安全策略而言,这会影响Ubuntu版本吗?我可以在外部使用任何加密算法吗?问候。
最佳方案
最好的方法是chattr +i {file}
。这将设置不可变属性,然后任何人(包括root)都无法修改,删除,重命名文件或创建硬链接。
唯一可以编辑文件的人是root。 (S)他必须通过删除不可更改的位chattr -i {file}
来取消此操作,然后可以对文件执行任何操作。再次设置+ i会锁定文件,无法进行任何修改。
但是,这不会阻止格式化存储文件的分区。这样可以防止文件被盗。
如果需要,您甚至可以在完整的安装点上执行此操作:
chattr +i -R /discworld
会使整个”discworld”及其中的任何东西都不可变(使用chattr -i -R /discworld
可以将其撤消;))
次佳方案
如果不执行任何特殊操作,则可以通过删除除所有者以外的所有人的权限来使他人难以阅读,更改或删除文件。让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*
除此之外,请使用加密…
第三种方案
保护文档的一种非常安全的方法是加密(前提是您销毁了原始文档并正确存储了加密版本)。
可以绕开权限(如其他答案所建议)(请参阅this)。
因此,我建议您正确加密文件。方法如下:
(有关图形界面方法,请参见此答案的结尾)
确保已安装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
。
NOTE: This will only protect the contents of the encrypted
.gpg
file from being read by anyone (using encryption), but anyone can remove, copy or move it! For basic protection from that, use the permission methods of the other answers on the encrypted.gpg
file.
图形界面(GUI)方法
安装Seahorse应用程序。
然后,您可以从“文件”应用程序执行此操作:
第四种方案
只需将非常严格的权限设置为600,以便只有所有者才能读取和写入它(如果需要执行权限,则为700)。
您也可以以图形方式进行操作-只需右键单击文件,选择Properties > Permissions > Set
,然后将除owner
以外的所有字段都设置为空。
以图片为例:
第五种方案
如果您是系统上的单个用户,并且没有人没有您的许可就无法合理地访问您的计算机,那么按照Zanna’s answer的说明,您可以使用此命令来阻止访问:
sudo chown root:root /my/secret/file.txt
sudo chmod 600 /my/secret/file.txt
在这种情况下,该文件只能由root
用户读取和/或写入。如果没有人在未经您许可的情况下无法引导您的计算机或提起硬盘驱动器,则将其视为”secure enough”。在这种情况下,我们使用的是root
用户,因为root
用户始终可以读取文件,即使它们没有权限。通过使用root用户,我们强制只有一个用户可以访问它。
如果要以任何方式,形状或形式将文件标记为不可更改,则可以使用i
属性将文件标记为不可变。在这种情况下,文件的权限将被锁定,并且在任何情况下都不得更改。因此,您可以执行以下命令以使文件不可更改,并保护其免受删除和权限更改的影响:
sudo chattr +i /my/secret/file.txt
如果要更改它,请将+i
替换为-i
,以临时解锁文件。有关更多in-depth的视图,请参见Rinzwind’s answer。
现在,如果其他人可以访问您的计算机(远程sudo
访问或任何形式的物理访问),这将立即崩溃。攻击者可以使用root
来读取文件,插入实时USB或仅拉动硬盘驱动器。
因此,我们需要加密文件。我个人更喜欢使用“文件容器”,以便您可以在其中粘贴更多内容并根据需要进行扩展。仍建议使用chattr +i
,以免意外删除(或更改)文件。最后,如果您使用的是加密映像,则可以设置权限,以使其他人在装入磁盘时可以访问非常有限的文件子集,从而使其非常适合服务器。该指南最初是here,现在已在此处改编使用。
首先,您要创建一个磁盘映像以供使用。在此示例中,我们将其设为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
,并且可以在其中存储所有敏感文件。完成后,需要卸载并分区re-encrypt。
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
第六种方案
您可以使用encfs for directory encryption。
基本上,您需要创建2个目录,其中1个目录将存储加密数据,而1个目录将访问该数据:
mkdir ~/.encrypted
mkdir ~/private
然后执行(您每次要对目录’mount’都需要执行此行):
encfs ~/.encrypted/ ~/private/
除非您对此有更多了解,否则只需按ENTER
即可进行标准设置(仅在第一次时提出)。
然后输入您的密码,它将被挂载。
只有您的用户可以安全地在~/private/
中访问您的数据(您几乎可以忽略~/.encrypted
)
要卸载它:
sudo umount ~/private/
要么
fusermount -u ~/private/
就那么简单。
第七种方案
您可以使用cryptkeeper加密数据,这确实是一个非常好的应用程序,可以为您的文件提供安全性。您可以使用以下方法安装它:
sudo apt-get update
sudo apt-get install cryptkeeper
我通常建议您以.
开头的名称加密文件夹,因为将其放在文件名之前会隐藏它。这是一个小技巧,但是可以用。
要取消隐藏文件夹,请使用Ctrl
+ h
或vise-versa。