将软件安装到 /usr/local 的推荐方法 - 使用 sudo 还是 chown?

将软件安装到 /usr/local 的推荐方法 - 使用 sudo 还是 chown?

我想将软件从源代码(例如第三方 GitHub 存储库)安装到我的计算机上。通常 /usr/local/bin 和 /usr/local/src 用于非特定于发行版的软件,对吧?

获得 /usr/local 的所有权似乎有风险:以我的权限运行的任何内容都可能对 /usr/local/bin 中的可执行文件或 /usr/local/src 中的源代码进行恶意更改。

但另一种选择,即以 root ( sudo) 身份构建和安装,对我来说没有意义。GitHub 警告不要git以 root 身份运行。即使我从其他地方的本地存储库复制了源代码,我也必须运行makeand make installas sudo,这意味着我正在安装的软件可能会劫持我的计算机的其余部分。

我可以把所有东西都放在 /home 中,但这似乎是一种逃避——这不是 /usr/local 吗为了

答案1

不要拥有/usr/local.用于sudo安装软件。但请使用您自己的帐户建造它。

git clone …    # or tar -x or …
cd …
./configure
make
sudo make install

为什么不拥有所有权/usr/local?你成功了。这将允许您帐户上运行的任何程序都可以在那里写入。对抗恶意程序,无论如何你都输了——感染本地帐户是重要的一步,升级到 root 并不困难(例如,通过在下次运行时搭载sudo)。但对于配置错误的程序,最好不要在系统范围的目录中包含可写位。

至于/usr/local您的主目录之间的选择:您的主目录用于存放您只想用于您的帐户的东西,/usr/local用于存放系统范围内安装的东西。

答案2

方法

此解决方案有两种方法。

  1. /usr/local/{src,bin}用于由系统管理员安装的定制软件,即 ,root在这种情况下应始终使用sudo或,使这个问题成为一个没有实际意义的问题。su -
  2. 安装预编译的二进制更新,即在您的发行版包管理机制中找到的更新,但/opt.同样在这种情况下,由系统管理员完成。

推理

在这两种情况下,您的发行版上游都不支持安装在这些位置的软件,因此需要 root 权限才能覆盖潜在的危险操作。另外,/usr/local/src不是编译源代码的地方。这是存储源的地方。记住这两项可以确保诸如在 CentOS 7 上使用 Awesome 窗口管理器不要发生。


不要混淆

如果您只想更新已安装的软件,则应通过向发行版添加测试软件的首选方法来完成此操作。一些主要方法:

  • 基于拱门 - 的尿素尿率,又名 Arch 用户存储库
  • 基于 Debian - 的苯丙胺,又名个人包裹档案
  • 基于 Redhat 的 -EPEL,又名第三方存储库

答案3

大多数构建系统都遵循默认值--prefix=$path/usr/local

所以通常你构建+测试+安装,其中构建+测试步骤可以发生在你有写权限的任何地方+安装步骤通常是......

sudo make install(安装到--prefix

设置构建环境的一种方法是拥有一个包含 work + attic 子目录的构建目录。

我的构建环境是...

/smartbuild/work - 包的构建位置(来自 tarball 或 git/svn/etc)
/smartbuild/attic- tarball 缓存的位置(因此重建会跳过 tarball 下载)

相关内容