当前位置: 首页>>技术教程>>正文


permissions – 如何保护文件?

,

问题描述

如何使包含关键数据的某些文件受到保护?例如,假设我有一些重要的文件,是否有任何方法或策略可以使这些文件在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

chmodchown带有多个参数:chmod 600 file1 file2chmod 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用户联机。


长话短说:

  1. 制作保管库:

    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
    
  2. 填充保管库:

    sudo mkdir /crypt
    sudo mount /dev/mapper/my-secret-device /crypt -o umask=0700,gid=1000,uid=1000
    
  3. 锁定保管库:

    sudo umount /crypt
    sudo cryptsetup luksClose my-secret-device
    
  4. 冻结库:

    chmod 400 ~/NSA-Data-Dump-20161012.img
    sudo chattr +i ~/NSA-Data-Dump-20161012.img
    
  5. 打开库:

    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。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/10598.html,未经允许,请勿转载。