我不是 Linux 专家,但我几天前才学了文件权限,然后发现了一些令人担忧的事情(可能是因为我不太了解它)。假设我有一个恶意脚本并运行此命令sudo chmod +x malcious_script
。如果我理解正确的话,我现在已经在我的计算机中为该脚本赋予了可执行权限,只要我知道自己在做什么,那就没问题,但是假设我将这个脚本上传到 github 并且有人将其克隆到他们的机器上。这个脚本还应该具有可执行权限吗?(从我尝试的情况来看(我使用 ubuntu 14(如果这很重要)首先编写脚本并赋予其权限。然后我将脚本下载到另一个虚拟机,该脚本仍然具有可执行权限。))
答案1
好的,有几件不同的事情:
- 说得更严谨一点,您没有授予脚本可执行权限,而是授予了用户执行脚本的权限。这听起来像是同一件事,但实际上却大不相同。该文件是惰性文件,因此用户必须采取可能在这里起作用的操作。
- 简单来说,整体情况是这样的:Linux 文件系统权限在创建它的文件系统之外不再存在。如果您在 Windows 计算机上使用相同的脚本,Windows 将无法理解 Linux 上“755”权限的含义。
- 最后,git 基本上放弃了除执行位之外的所有 Linux 文件系统权限。除了执行位之外,由 git 创建的文件的
git clone
权限由您的umask。
编辑:回答其他问题:
- 文件权限确实使 Linux 更安全。例如,您的用户实际上应该只对您的主目录具有写入权限。如果您做了一些愚蠢的事情或运行了病毒,那么唯一可以写入内容的地方(没有像私有) 是您的主目录。此时清理起来非常简单,只需删除您的主目录并重新开始即可。当系统上有多个用户时,文件权限也很有用,以确保除非获得该权限,否则他们无法读取/写入彼此的文件。
- 至于权限实际存储在哪里,该信息作为文件元数据保存在文件系统中。打个比方,文件就像信封里的信件。编辑等会看信件,而权限、文件名等则在信封上,信封作为文件系统元数据存储。如果你想了解详细信息,其中一些元数据存储在索引节点有些存储在包含目录条目中。传输文件时,只有数据(信件)被传输,元数据(信封)被丢弃,除非有其他机制来保存元数据(例如 tar 文件、如前所述的 git 等)。