问题描述
通过软件中心或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
。
免责声明:我没有尝试过这个,并且在撰写dpkg
或chroot
时没有太多经验,但是根据我对这些工具的了解,这个过程可能会起作用。
具有可能对想要在没有root
功能的情况下实现chroot
效果的人有用的信息的链接:
-
This页面关于read-only绑定坐骑(看起来这对于做”standard”
chroot
的人来说也很有用 -
这个页面在serverfault.com上
-
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 --bind
,binfmt_misc
和其他架构的运行二进制文件的功能 -
Linux namespaces – 当使用user namespaces时,允许在本地环境中具有完全root,这是Linux内核版本3.8及更高版本中提供的功能。
简介:通过在本地模拟或实际拥有root权限,可以为本地环境安装DEB包。
第四种办法
您可以使用dpkg
的--root
选项安装到另一个目录。但如果应用程序在/etc
等固定位置查找内容,可能会遇到问题。
总之,我认为没有一个简单的方法。
第五种办法
您可以更改可执行文件的所有权,以便只有一个用户可以运行它。然后,如果需要,您可以从其他用户的菜单中删除该应用程序。