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


33

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

有没有一种方法只能为单个用户安装应用程序?

Answers:


5

根据您要完成的工作,可能会有不同的方法来完成这项工作(或者至少要对您想要的功能进行一些粗略的表述)。

以多种方式安装软件归结为使资源可用或允许访问系统上已经存在的内容。

无论您是在谈论授予打印机访问权限,还是允许用户在某个目录中执行程序,都有多种方法可以实现,尽管它们可能是Ubuntu的本机,但这些解决方案通常(当然)将用于在安装.deb之后添加。

这是可以添加的两个一般类的安装后控件。请注意,在适当的环境下(例如,在实施严格控制的组策略时),一旦具备基本系统,这可能会更容易。这类权限甚至可以与LDAP或类似的系统绑定在一起,后者可以为每个用户或组提供身份验证和授权。

可见度控制
我本人也遇到过类似的情况,但就我而言,用户还不是很老练(所有人都在7岁以下)。对我而言,仅隐藏Gnome菜单和/或删除桌面启动器即可。

从目录中删除可执行位将消除进程搜索或遍历它们的能力。它可以有效地使它们不可见,并在用户方面使它们不可用。例如,如果您有一个默认的系统策略可以根据文件访问来创建菜单,则可以使用这种外观解决方案,然后只需很少的工作便可以将其用于后续安装。

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


3
+1用于分隔可见性和执行控制方面
塔卡特2011年

10

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

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

但是,这仅适用于某些情况。大量的程序包被分成多个块(的可执行文件或脚本/usr/bin/lib和其他garb /usr/share等),并且这些位置由构建脚本硬编码。因此,如果您尝试将这样的东西插入~,它将损坏。您可能需要花费数小时来消除依赖关系,但是您可能会在时间上做一些有用的事情,例如找到治疗癌症的方法或吸收世界上的某些美丽。

您最好能从编写该软件的任何人那里获取一个非打包版本。几乎所有免费软件都以某种形式的压缩归档文件作为源提供,因此请抓住它并进行构建。您不执行此make install步骤。您的应用程序已构建,只需将其放置在所需位置即可。


1
至于最后一个选项:在我看来,它在某些(简单程序)情况下可能会有所帮助,但是通常,该程序包例如将init脚本安装到/etc/init,在中查找配置文件/etc,或使用其他硬编码路径。
安排

2
基于autoconf的项目可能允许通过设置自定义安装目录./configure --prefix=$HOME/local
Ingo Karkat 2012年

6

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

要为除此以外的用户安装软件包,root可以使用上面的过程fakechroot代替chroot

免责声明:我没有尝试这一点,并在写作的时候没有太多的经验dpkgchroot,但是从我知道这些工具,这个过程只是威力工作。

链接中包含的信息可能对那些想要达到chrootroot能力效果的人有用:

更新资料

我现在做了一些与该主题有关的事情,并发现了更多...

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

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

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

  • 用户模式linux-以常规进程/程序运行另一个linux系统
  • mu木运行完整的虚拟计算机
  • PROOT -提供的功能chroot(1)mount --bindbinfmt_misc,和使用运行与其他架构的二进制文件的qemu-用户空间
  • Linux名称空间 -使用用户名称空间(在Linux内核版本3.8及更高版本中可用)时,允许在本地环境中具有完整的root 用户

摘要:通过在本地模拟或实际拥有root特权,可以为本地环境安装DEB软件包。


3
如果您有与先前信息相矛盾的信息(或者如果您认为它增加了任何信息),请完全重新格式化您的答案。在许多情况下,如果改写而不是添加其他“编辑”或“更新”部分,则答案将更加清晰。您的信息很有趣,但是最相关的部分可能停留在底部。
belacqua 2011年

@jgbelacqua-重新格式化,谢谢您的提示。
阿巴菲2011年

4

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

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


2

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


1
希望为单个用户安装应用程序的常见动机是避免需要使用管理特权进行安装。
ændrük

@ændrük但是,如果他已经从.deb安装,我们是否不具备管理员权限?
belacqua 2011年

@jgbelacqua据我所知,是的,从.deb安装需要管理员权限。但是,更一般而言,“仅针对单个用户”安装某些内容永远不需要提升用于系统范围管理的特权。例如,我经常通过将程序放在中来仅为自己安装程序~/bin。关于Takkat是要限制多用户应用程序的访问/可见性,还是他想安装单用户应用程序,在这个问题上存在歧义。您和安排的问题使用前一种解释,其余问题采用后者。
ændrük

1

疑。

deb文件主要是归档文件,安装后会解压缩到文件系统的根目录(加上一些配置)。如果只想为一个用户安装它们,则需要以某种方式将它们安装到/ home / user文件夹中。即使您这样做了,它们也不起作用,因为fe应用程序二进制文件将不会放在/ usr / bin中(或类似的东西),并且如果您尝试启动它们,系统将找不到它们。类似地,库等也将是无用的,因为系统不会知道/ home中的某处。您可以尝试使用蛮力方法,并调整PATH变量以指向从deb存档中提取文件的位置,但这不仅限于此非常 不安全,但是可能会导致兼容性问题(fe菜单项将不起作用,因为GNOME将.desktop文件存储在/ usr / share / applications中)。

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.