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

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

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

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

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

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

以下是可以添加的两种通用安装后控制类。 请注意,在适当的环境下,例如,当一个严格控制的组策略到位时,一旦您拥有基本系统,这可能会更容易。 这些权限甚至可以绑定到LDAP或类似的系统,可以为每个用户或组提供身份validation和授权。

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

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

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

好吧, dpkg对你没有帮助,因为这不是它的设计目标。 它希望成为系统上安装的软件包的根拥有的唯一普查。

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

然而,这只适用于某些事情。 大量的软件包被分成块( /usr/bin可执行文件或脚本, /usr/bin /lib/usr/share其他服装等),这些位置由构建脚本硬编码。 因此,如果你尝试将这样的东西拉进~ ,它就会破裂。 你可能花费数小时来解除依赖关系,但你可能正在做一些有用的事情,比如找到治愈癌症或吸收世界上的一些美丽。

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

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

要为除root之外的用户安装软件包,可以使用fakechroot而不是chroot来使用上述过程。

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

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

  • 这个页面关于只读绑定挂载(似乎这对于做“标准” chroot人来说也很有用
  • 这个页面在serverfault.com上
  • 这些有关Linux容器的页面
  • fakechroot的手册页 )

更新

我现在对触及这个主题的事情做了一点点,并发现了更多…

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

  • Fakechroot – 仿效chroot(1)
  • Debootstrap – 在目录中创建另一个Debian文件系统层次结构
  • Fakeroot-NG / fakeroot – 可以伪装成某些东西的根
  • EmDebian – 一种使用较少空间的debian变体, 通常用于chroot环境
  • binfmt_misc – 可以使用他们的解释器运行文件,就好像它们是本机二进制文件一样; 与qemu-user一起用于处理外部体系结构的二进制文件(或(假)chroot)( 脚本/ qemu-binfmt-conf.sh随QEMU源代码自动执行此操作)
  • Qemu用户空间 – 可以运行其他架构的二进制文件; 当它们不支持某些处理器体系结构时,可以与其中一些工具一起使用
  • LwIP – 可以从用户空间运行的TCP / IP网络堆栈

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

  • 用户模式linux – 作为常规进程/程序运行另一个Linux系统
  • Qemu – 运行完整的虚拟计算机
  • PRoot – 使用qemu-user-space提供chroot(1)mount --bindbinfmt_misc和从其他体系结构运行二进制文件的function
  • Linux命名空间 – 在使用用户命名空间时 ,允许在本地环境中具有完全根,这是Linux内核版本3.8及更高版本中可用的function。

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

您可以使用dpkg--root选项安装到另一个目录。 但是如果应用程序在像/etc这样的固定位置寻找东西,可能会遇到问题。

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

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

疑。

deb的主要是存档 ,在安装时会被提取到文件系统的根目录 (加上一些配置)。 如果您只想为一个用户安装它们,则需要以某种方式将它们安装到/ home / user文件夹。 即使你这样做了,它们也行不通,因为fe应用程序二进制文件不会登陆/ usr / bin(或者类似),如果你试图启动它们,系统将找不到它们。 类似的库等也没用,因为系统不知道/ home中有某处。 您可以尝试使用暴力方法 ,并调整PATH变量以指向从deb存档中提取文件的任何位置,但这不仅非常不安全,而且可能导致兼容性问题(fe菜单条目不起作用) ,因为GNOME将.desktop文件扩展到/ usr / share / applications中。

此外,如果您仅为某些用户安装了一个软件包,则可能会导致疯狂的依赖性问题,如果任何其他用户安装的软件包与您自己安装的另一个软件包冲突 – 并且可能会出现大量其他软件包管理相关问题。

所有这些麻烦使得为用户单独管理包非常困难,因此似乎不可能只为一个用户安装它们,因为.debs背后的想法不允许这样做。