ACy*_*lic 2 linux unix root installation
这是一个关于 *nix 的设计选择的问题,而不是如何避免它。
要求 root 访问权限来安装大多数软件包的目的是什么?要求您使用 root 似乎是一个潜在的安全漏洞,因为大多数软件包不需要修改内核或需要 root 权限才能运行。如果目的只是为所有用户在每台机器上安装一次软件包以节省空间,那么为什么不为此目的设置一个不同的非 root 用户呢?
更新:我在这里假设没有 root 访问权限安装的软件包不会安装到受 root 保护的目录中,而是安装在其他地方。
正如其他人在评论中指出的那样,需要 root 权限的一个明显原因是预构建的包安装到共享系统目录,这不应该是任何人都可以写的。为什么不是“不同的非 root 用户”?我想说是因为有足够多的包需要对共享系统文件和目录进行更改,因此不值得花费复杂性来跟踪哪些包确实需要 root 哪些不需要,并且因为不以 root 身份安装并不能满足所有人的需求这么多 - 您已经对许多核心软件包的供应商充满信心,那么还有什么。但最终,是的,存在安全权衡,似乎供应商已经决定简单性在这里获胜。
这给我们带来了一个问题,为什么包不能安装到用户的主目录。实际上,在许多情况下,它们可以,但前提是您使用基于源的发行版,例如 Gentoo。在这种情况下,您只需使用适当的编译程序--prefix
或类似的论点(许多但不是全部的软件支持这样的概念)。然而,大多数发行版都是基于二进制的,在这种情况下,问题在于许多 Unix 程序的编写方式是在编译时将各种路径硬编码到程序中,并且需要大量的工作和协调当您处理数以千计的软件包及其维护者时,可以改变这一点。在 Unix 世界中协调尤其困难,因为系统供应商相对较多,不像 Windows,微软可以在很大程度上决定更改——即使是微软也很难让每个人都一致,因此需要兼容性措施,例如UAC 虚拟化。
更深入地讨论硬编码路径问题,考虑一个foo
需要访问某种数据库的程序。这个文件在哪里?一个合理的路径是/usr/share/foo/foo.db
,它将被硬编码到程序中,以便它确切地知道要查找的位置。您可能会反对一个程序$HOME/usr/share/foo/foo.db
如果找不到它的硬编码文件就可以简单地尝试或类似。这是真的,这会很好,除了这类事情没有真正的标准或约定,所以大多数程序只是没有实现这种回退机制(再次出现协调问题)。可以说,它也增加了复杂性,使一小部分用户受益,但这是另一种蠕虫。
一个相关的问题是程序如何加载它所依赖的共享库。动态链接器ld.so
需要知道在哪里可以找到所有这些共享库。基本上,路径列表可以(再次)在编译时硬编码到可执行文件中,在这种情况下ld.so
将首先搜索这些路径;如果失败,则ld.so
搜索中配置的目录/etc/ld.so.conf
。这个问题实际上相对容易克服,例如,通过LD_LIBRARY_PATH
适当地设置环境变量。
因此,最重要的是,许多程序的设计(在运行时)在查找文件的方式方面并不灵活,因此,打包开发人员认为提供安装到替代的选项不值得目录。并不是说这在技术上是不可能的——只是到目前为止,还没有意愿创建一个标准并使每个人都遵循它。有关说明它在技术上并非不可能的示例,您可以查看我对这个问题的回答:在没有 sudo 的情况下在服务器上安装 git。请注意这是一种丑陋的解决方法,这就是事情的可悲状态。
作为记录,我实际上分享了您无法轻松将二进制包安装到备用位置的挫败感,并且多年来我在手动编译包或解决打包问题上花费了大量时间和精力(以类似于我在上一段中链接的问题)在系统管理员不合作安装我想要使用的软件包的系统上运行时。
归档时间: |
|
查看次数: |
1959 次 |
最近记录: |