有人告诉我 noexec 是开发环境 /home 文件夹的标准设置。有人可以提供一些参考吗?
在 /home 上使用 noexec 会阻止 IDE、编辑器等应用程序按预期正常工作。
答案1
noexec
除非在非常受限的环境中,否则作为直接的安全对策是无用的。如果您想执行文件系统中的文件noexec
,您可以:
/lib/ld.so myfile
如果它是动态链接的可执行文件,请直接使用动态链接器(例如 )运行它。/bin/sh myscript
如果它是脚本,请直接使用解释器运行它(例如)。- 将其复制到另一个允许可执行文件(例如
cp myfile /tmp && /tmp/myfile
)的文件系统(如果有可以写入的文件系统)。
如果您允许某人在计算机上运行程序,他们将能够在计算机上运行程序......开发商机器,你确实希望它们运行程序。不仅如此,您还希望它们运行没有人验证过的程序(因为五分钟前该程序还不存在)。
noexec
作为一个稍微有用被动的安全对策,因为它确实可以防止尝试下载文件并执行它的恶意软件。当然,恶意软件可以轻松解决这个问题,但前提是恶意软件的开发人员考虑到了这一点。大多数恶意软件不受影响(特别是针对浏览器的恶意软件不受影响,因为它仅在浏览器上下文中运行)。因此,它对罕见威胁的保护很弱。不值得这么麻烦。
所以noexec
用处/home
极小。对于开发人员来说,这确实具有破坏性。例如,它破坏了很多图书馆管理程序。所以这是一个坏主意。
即使在由于用户只需要运行一些特定程序而更加锁定的系统上,这也根本不是常见的设置。
答案2
有人告诉我这
noexec
是开发环境的 /home 文件夹的标准设置。
这是我在其他地方从未见过的观点。
不,这没有什么“标准”。标准意味着标准化,我还没有看到 ISO 标准或 RFC 谈论任何特定于/home
.
事实上,大多数 Linux 发行版甚至不(提供)分配/home
为单独的分区,如果不是,那么您就不能使用任何特定的安装选项。
答案3
“这些库是在与主目录不同的驱动器/文件夹中开发和运行/测试的。”
就这样吧。这只是愚蠢和糟糕的。
noexec 的目的最初是在不受信任的媒体上设置它,这样 suid 程序就不起作用。出于同样的原因,我们还得到了nosuid和nodev。
但现在,在本世纪,人们正在将 noexec 推向一个它并非设计的目的;这是迫切需要让用户无法运行外部二进制文件(包括他们安装的二进制文件)。这在正常系统上是没有意义的,因为有足够的东西可以/usr/bin
对所有内容进行哈希处理(乍一看:bochs
, dd
, ex
, gdb
, hexedit
, m4
, tar
, 排除这样的事实:如果存在lua
, node
, perl
, 或等正常的东西python
,我不需要运行我自己的二进制文件代码);但可以成为手机等设备的实际安全防御。
然而;如果用户对任何没有 noexec 的文件系统具有写权限,它根本不起作用。管理员们正在打一场失败的战斗,同时表现出无能并在工作过程中破坏东西。
他们可能在某处将“防止运行未经批准的软件”作为复选框。让这一点深入人心;根据定义,开发人员运行未经批准的软件(他们正在开发的新更改),因此他们可以运行未经批准的软件,并且任何配置更改都无法撤消这一点。