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