如果程序不应该由 root 编译,如何将其安装在 /usr/local 中?

如果程序不应该由 root 编译,如何将其安装在 /usr/local 中?

在我大脑深处的某个地方,我记得读过一条警告性的互联网语音警告,警告不要make以 root 用户身份进行编译(即运行)。也许是这样的这个故事cprogramming.com。

同时,通常建议 root 用户拥有/usr/local及其子目录。

这使得从源代码安装软件变得很麻烦:

# as root
mkdir program
chown user.user program

# as user
wget/curl/mv program.tar.gz program/.
cd program/
./configure --prefix=/usr/local
make

# as root
make install

这是在系统范围内从源代码安装软件的最简单、最正确的方法吗?make作为 root确实很危险,但make install事实并非如此?

答案1

一切都是为了降低风险;如果make做了一些破坏性的事情,您只能丢失运行它的用户可以修改(或删除)的任何数据。因此,您make以普通用户身份运行以限制该用户文件的范围,并且您以普通用户身份运行make installroot因为如果您想/usr/local通常安装,则必须这样做。

请注意,在您给出的示例中,无需创建programas root;将 tarball 下载到您的主目录或其他您可以写入的目录,解压它,以普通用户身份配置和构建:

$ wget ...
$ tar xf program...tar.gz
$ cd program...
$ ./configure --prefix=/usr/local
$ make

一般/usr/local是默认前缀,所以可以省略。

如果你想最大限度地提高安全性,请使用专门的用户来构建软件(这样如果出现问题,你就不会丢失自己的文件),当然至少要阅读构建系统。make -n可以提供帮助:它将向您展示无需实际执行任何操作即可完成的操作。您还可以创建一个具有写入权限的特殊用户或组/usr/local,并在运行时使用它make install

答案2

这归结为信任与便利。确实,make可能会缺乏安全感,但也有可能make install。只是表面攻击区域应该(希望)更小make install,并且更有可能快速浏览Makefile会发现任何奇怪的东西。然而,$PATH无论谁编译了软件,安装软件都是有风险的,所以可以说整个问题有点没有实际意义。

就我个人而言,我经常将自己和其他管理员放在该staff组中,并授予该组对/usr/local.然后我就可以玩tar.. configure..make游戏而根本不需要root权限,并sudo帮助我安装二进制文件。

不,它并不完美。是的,这非常方便。

相关内容