我有一个问题,由于安全原因,从根帐户中的源代码安装不是一个好主意。
我的立场是,如果有人使用 root 帐户,从解压代码开始,然后执行安装步骤,这并不重要。
#./configure
#make
#make install
与以下相反:
$./configure
$make
$sudo make install
我的逻辑是:这并不重要,因为如果它会导致安全风险,那是因为代码本身,而不是如何安装它,因为 end 命令使用 root 来安装最终的二进制文件及其安装的任何文件用它。
无论是否处于非根用户会话中,如果源代码已将恶意软件编码到其源代码中,那么无论如何它现在都在系统中。因此,无论如何,这始终是一种风险。
这与自己的代码无关,更多的是与自己的存储库有关,它没有包含应用程序,因此,请访问 git hub 或编写它的人的网站并使用源代码来安装它。甚至像安装树一样简单。
然后,用户会比他或她登录根帐户或“普通”用户帐户更担心他或她是如何获得源代码的。
我已经听过所有关于为什么不应该使用 root 的争论,因为不注意他们在终端中写入的内容可能会对系统造成不可逆转的损害;使用 sudo 可以造成同样多的损害,因此这本身就是一种多余的论点和信仰体系。因此,它甚至不是这个论点中所包含的观点的一部分。
这或多或少是一个是或否的问题。是的——我是对的,从长远来看,是否使用 root 帐户来编译源代码应用程序并将其安装到系统中并不重要。
或者
不——我错了,这很重要,因为你必须使用root权限才能做同样的事情。
答案1
如果您过度使用 root 身份运行程序,那么您就会为潜在的攻击者提供更多的攻击点,而不仅仅是“必要”的攻击点。如果没有 root 权限,尝试破坏您的系统大多数情况下是行不通的(或者会更困难)。将所有命令作为 root 执行的方法也可能会导致简单地以 root 身份执行所有操作(列出目录、打开图像、播放音乐...),这意味着许多潜在的问题点。
即使是无意的 - 当以 root 身份运行时,您运行的程序中的错误也会造成更大的损害(并且实际上不可能从软件中删除所有错误)。或者当用户输入不正确的选项时(可能性更大)。
此外,当您./configure
和时make
,您可能不想为每个人安装该程序(例如可能是只有您需要的库)。
答案2
如果您怀疑您正在安装的程序可能是恶意的,不要以 root 或普通用户身份执行它。这包括执行编译的程序和运行提供的构建脚本。一旦攻击者以您的身份运行代码,他们就拥有您的帐户(并且最迟在您从该帐户获得 root 权限后,他们将拥有您的计算机)。攻击者的代码是因为您运行make
还是因为您运行而被执行并不重要make install
。
以普通用户身份构建并以 root 身份安装的目的是为了降低以下风险:偶然问题。即便如此,除非有必要(例如安装驱动程序或系统服务),否则您通常不应以 root 身份安装自建程序。以您自己的用户身份安装到单独的目录中,然后使用诸如存放使程序在标准目录(/usr/local/bin
等)中可用。这降低了安装步骤覆盖现有软件(可能存在命名冲突)或写入非预期目录的风险,并且由于所有文件都位于一个位置,因此可以轻松卸载程序。
答案3
作为用户乔,
./configure
make
sudo make install
你通常不会需要以 root 身份配置或编译代码,仅用于安装它。如果你不这样做需要成为root,然后就不要成为root。
configure
和都make
在执行代码。当您不需要引入另一个攻击媒介时,以 root 身份运行它们(例如,有人可能能够破坏 makefile,但不能破坏源代码)。
答案4
最终的程序(及其安装)可能比建筑物更仔细地完成。任何当以 root 身份运行时,构建过程或完成健全性检查中的错误可能会损坏您的系统。最好尽可能降低风险。