在我大脑深处的某个地方,我记得读过一条警告性的互联网语音警告,警告不要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 install
是root
因为如果您想/usr/local
通常安装,则必须这样做。
请注意,在您给出的示例中,无需创建program
as 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
帮助我安装二进制文件。
不,它并不完美。是的,这非常方便。