如何保护文件?


24

如何使包含关键数据的某些文件受到保护?例如,假设我有一些重要的文件,是否有任何方法或策略可以使这些文件在Ubuntu上受到更多保护?我什至希望有人试图打开某些文件时要求输入密码。就安全策略而言,这会影响Ubuntu版本吗?我可以在外部使用任何加密算法吗?问候。


保护性是什么意思?您想让修改或删除文件变得更加困难吗?
Zanna

从某种意义上说,它只是一种保护,未经我的允许,或者甚至不容易删除任何修改,都无法访问。或者它需要一些密码才能通过棘手的方式打开它。
阿瓦尼·巴德卡

你的意思是简单chown rootchmod go-rwx
njzk2

要要求密码,请使用不会自动挂载的加密磁盘或磁盘映像文件。
约书亚

Answers:


32

最好的方法是chattr +i {file}。这将设置不可变属性,然后任何人(包括root)都无法修改,删除,重命名文件或创建硬链接。

唯一可以编辑文件的人是root。(S)他必须通过删除不可变位来取消此操作:chattr -i {file}然后可以对文件执行任何操作。再次设置+ i会锁定文件,无法进行任何修改。

但是,这不会阻止格式化存储文件的分区。这样可以防止文件被盗。


如果需要,您甚至可以在完整的安装点上执行此操作:

chattr +i -R /discworld

会使整个“ discworld”以及其中的任何东西都不可变(chattr -i -R /discworld撤消它;))



我想修改,删除,重命名等只能由root完成。即使root不能更改,它也只会为每个人读取,在我的情况下,我不需要。
阿瓦尼·巴德卡

@Avanibadheka根用户可以在编辑前执行chattr -i,然后再次执行chattr + i将其锁定。
Rinzwind '16

1
您也可以永久地(直到重新引导)从系统中删除修改任何不可变位的功能。
rackandboneman

它甚至无法复制?所以cat file> output或dd不起作用?
Konerak '16

1
可以复制一个不可变的文件(除非将其设置为chmod a-r)。请参阅我的终端日志以获取示例测试。
Ruslan

18

如果不执行任何特殊操作,则可以通过删除所有者以外的所有人的权限来使他人难以阅读,更改或删除文件。让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*

除此之外,请使用加密...


3
如果使用字符权限而不是八进制,则可能更容易理解。因此,例如从组和其他人中删除读取,写入和执行权限将是“ chmod go-rwx”。请参见chmod手册页。
jamesqf

12

保护文档的一种非常安全的方法是加密(前提是您销毁了原始文档并正确存储了加密版本)。

可以绕开权限(如其他答案所建议)(请参阅)。

因此,我建议您正确加密文件。方法如下:

(有关图形界面方法,请参见此答案的结尾)

确保已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应用程序。

然后,您可以从“文件”应用程序执行此操作:

GNOME文件加密的屏幕截图


1
我不同意“保护文档的唯一安全方法是加密”。加密行为并不安全,这使它变得安全。这样做是社会的一部分。如果在加密文件旁边使用“这是密码:11212324234”创建自述文件,则可以加密所有您想要保护的内容(不是)。
Rinzwind

1
@Rinzwind编辑。无论如何,由于如此愚蠢,没有什么是安全的。
UniversallyUniqueID

因预期而投票;-)
Rinzwind '16

请注意,如果您将原始未加密文件删除(rm或从文件管理器中删除),则检索原始未加密文件可能很容易。您需要覆盖它以使其不可恢复,例如使用shred。不过,这在SSD和闪存驱动器上也没有用...
Byte Commander

@ByteCommander谢谢,我已将其添加到答案中。
UniversallyUniqueID

9

只需将非常严格的权限设置为600,以便只有所有者可以读取和写入它(如果需要执行权限,则为700)。

你也可以做到这一点图形-只需右键点击该文件,选择Properties > Permissions > Set并设置所有,但owner领域不了了之。

以图片为例:

图片


嘿,我想您的答案将从显示如何使用GUI的屏幕截图中受益。
凹槽复线

完成,谢谢:)(但是我的系统是意大利语...)
dadexix86

@Zanna好观察(我修改了答案)
dadexix86

8

如果您是系统上的单个用户,并且没有人在没有您权限的情况下可以合理地访问您的计算机,那么按照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力量来读取文件,插入实时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用户联机。


TL; DR

  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
    

当然,具有root用户访问权限的用户也可以用cryptsetup记录所有输入密码的方式代替...
Hagen von Eitzen

@HagenvonEitzen是的,在计算机上没有“真正安全”之类的东西。有一点画线。
卡兹·沃尔夫

7

您可以使用encfs进行目录加密

基本上,您需要创建2个目录,其中1个目录将存储加密数据,而1个目录将访问该数据:

mkdir ~/.encrypted
mkdir ~/private

然后执行(每次要“挂载”目录时都需要执行此行):

encfs ~/.encrypted/ ~/private/

除非您对此有更多了解,否则只需按ENTER即可进行标准设置(仅在第一次时提出)。

然后输入您的密码,它将被挂载。

您的数据将仅由您的用户安全地访问~/private/(您几乎可以忽略~/.encrypted

要卸载它:

sudo umount ~/private/

要么

fusermount -u ~/private/

就那么简单。


3

您可以使用cryptkeeper加密数据,这确实是一个非常好的应用程序,可以为文件提供安全性。您可以使用以下方法安装它:

sudo apt-get update
sudo apt-get install cryptkeeper

我通常建议您以名称开头的文件夹进行加密,. 因为将其放在文件名之前会隐藏它。这是一个小技巧,但可以。

要取消隐藏文件夹,请使用Ctrl+ h或反之亦然。


1
Ctrl + h按键适用于什么应用程序?它ls肯定不会工作。
Melebius

Ctrl-H至少适用于Nautilus(及其分支(如Nemo))。至于其他文件管理器,我不知道。使用时ls,您可以使用-a开关显示所有(即包括隐藏的)文件。
s3lph
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.