当前位置: 首页>>技术问答>>正文


如何仅为单个用户安装DEB文件的应用程序?

, , ,

问题描述

通过软件中心或DEB文件安装应用程序时,通常会在系统范围内为所有用户安装应用程序。

有没有办法只为单个用户安装应用程序?

最佳解决办法

根据您想要完成的任务,可能有不同的方法来完成这项工作(或者至少给出了您想要的功能的hacky外观)。

以多种方式安装软件归结为使资源可用,或允许访问系统中已存在的东西。

无论您是在谈论授予对打印机的访问权限,还是允许用户在某个目录中执行程序,都有办法实现这一点,虽然它们可能是Ubuntu的原生,但这些解决方案通常(当然)会去在安装.deb之后添加。

以下是可以添加的两个通用类post-installation控件。请注意,在适当的环境下,例如,当一个严格控制的组策略到位时,一旦你有了基本系统,这可能会更容易。这些权限甚至可以绑定到LDAP或类似的系统,它可以提供per-user或组认证和授权。

Visiblity控制我自己也有类似的情况,但在我的情况下,用户还不是(非常)非常复杂(所有这些都不到7岁)。对我来说,只是隐藏Gnome菜单和/或删除桌面启动器工作。

从目录中删除可执行位会消除进程搜索或遍历它们的能力。它可以有效地使它们不可见,并且user-wise使它们不可用。例如,如果您有基于文件访问权限创建菜单的默认系统策略,则可以使用此类化妆品解决方案,然后将其用于后续安装,而无需额外工作。

执行控制资源的控制可以通过Unix权限,apparmor配置文件,SELinux权限等来完成。可能存在其他级别的控制过滤,其可以根据应用而发挥作用。在没有更有针对性的解决方案的情况下,您可能必须围绕某些程序编写包装来控制用户或进程访问。

次佳解决办法

那么dpkg不会帮助你,因为这不是它的设计目标。它希望成为系统上安装的软件包的root-owned唯一普查。

跳到脑海的唯一一件事就是提取包并尝试手动将文件放在home目录中。

然而,这只适用于某些事情。大量的软件包被分成块(/usr/bin中的可执行文件或脚本,/lib中的库和/usr/share中的其他服装等),这些位置是构建脚本中的hard-coded。因此,如果您尝试将此类内容输入~,它将会中断。你可以花几个小时来解开依赖关系,但你可以做一些有用的时间,比如找到治愈癌症或吸收世界上的一些美丽。

只要从编写软件的人那里获取non-packaged版本,你就会做得更好。几乎所有的免费软件都以某种形式的压缩存档作为源代码提供,因此抓住它并构建它。您没有执行make install步骤。您的应用程序已构建,只需将其放在您想要的位置即可。

第三种解决办法

我不太了解这个主题,但从其他答案中可以看出,你可以使用–root参数将一个包安装到另一个目录而不是/用dpkg,然后对chroot做一个chroot包是”installed”的目录(当然可以是用户主目录中的目录)。

要为root以外的用户安装软件包,可以将上述过程与fakechroot一起使用,而不是使用chroot

免责声明:我没有尝试过这个,并且在撰写dpkgchroot时没有太多经验,但是根据我对这些工具的了解,这个过程可能会起作用。

具有可能对想要在没有root功能的情况下实现chroot效果的人有用的信息的链接:

  • This页面关于read-only绑定坐骑(看起来这对于做”standard” chroot的人来说也很有用

  • 这个页面在serverfault.com上

  • 关于Linux容器的These pages

  • fakechroot手册页)

Update

我现在已经做了一些关于这个主题的事情,并发现了更多……

碎片(本地环境构建块):

  • Fakechroot – 模拟chroot(1)

  • Debootstrap – 在目录中创建另一个Debian文件系统层次结构

  • Fakeroot-NG /fakeroot – 可以伪装成某些东西的根

  • EmDebian – 使用较少空间的debian变体和is often used in chroot environments

  • binfmt_misc – 可以使用他们的解释器运行文件,就好像它们是本机二进制文件一样;与qemu-user一起用于处理外部体系结构的二进制文件(或(假)chroot)(随QEMU源代码自带的scripts/qemu-binfmt-conf.sh)

  • Qemu user space – 可以运行其他架构的二进制文件;当它们不支持某些处理器体系结构时,可以与其中一些工具一起使用

  • LwIP – 可以从用户空间运行的TCP /IP网络堆栈

完整(完整的本地环境提供商):

  • User mode linux – 作为常规进程/程序运行另一个Linux系统

  • Qemu – 运行完整的虚拟计算机

  • PRoot – 使用qemu-user-space提供chroot(1)mount --bindbinfmt_misc和其他架构的运行二进制文件的功能

  • Linux namespaces – 当使用user namespaces时,允许在本地环境中具有完全root,这是Linux内核版本3.8及更高版本中提供的功能。

简介:通过在本地模拟或实际拥有root权限,可以为本地环境安装DEB包。

第四种办法

您可以使用dpkg--root选项安装到另一个目录。但如果应用程序在/etc等固定位置查找内容,可能会遇到问题。

总之,我认为没有一个简单的方法。

第五种办法

您可以更改可执行文件的所有权,以便只有一个用户可以运行它。然后,如果需要,您可以从其他用户的菜单中删除该应用程序。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/2849.html,未经允许,请勿转载。