为什么不以 root 身份运行 zsh-newuser-install?

为什么不以 root 身份运行 zsh-newuser-install?

我的用户 shell 是zsh,但有时我需要以 root 身份四处走动,而我的 shell 自定义(提示、别名等)并不随我而来。所以我想如果我要添加所有这些,我不妨将整个 shell 更改为zsh.

然而,令人惊讶的是,在我将 shell 更改为 后zsh,它并没有.zshrc像为我的用户那样生成 a 。在网上查看后,我了解了该zsh-newuser-install -f函数,然后抛出一个错误:

hostname: # zsh-newuser-install -f
zsh-newuser-install: won't run as root.  Read the manual.

所以我这样做了,但它没有告诉我任何新的东西。

手册:

目前配置,如果用户具有root权限,该功能将立即退出;此行为无法被覆盖。

它没有告诉我为什么, 尽管。在经历了“zsh生成for root有多难.zshrc”这个兔子洞之后,我比以往任何时候都更好奇。

我可以复制我的用户.zshrc,但为什么它不会为我生成一个?

答案1

正如我在 Linux 上的卑微经验所表明的那样,每当您看到这样的警告时,很可能存在可怕的安全漏洞 - 您应该寻找它。我认为“阅读手册”在这里的意思是“参考手册看看它的作用,并了解以 root 身份执行此操作可能产生的后果,以及这是否真的值得”。

那么,所讨论的 ZSH 脚本有什么问题呢?

  • ZSH 具有许多强大的功能,例如补全和自动加载。这些都是基于脚本的。许多脚本都附带了第三方软件包,只要按一下Tabroot基本上就会为完成脚本提供对计算机的完全 root 访问权限。

  • 我认为 ZSH 开发人员希望放弃向一堆未确定的第三方代码授予 root 权限的责任,并且我认为这是正确的做法。真正以 root 身份运行的事情应尽可能少;这就是为什么这种sudo意识形态如今已成为默认意识形态。当您运行时sudo,您正在运行的东西以 root 身份运行,但基础设施(终端、shell、完成器、突出显示器)以非特权用户身份运行。如果您以 身份运行 shell root,您必须清楚地认识到:您(以及您有意或无意地使用的所有工具)可以完全、不受限制地访问所有内容。 

    一个粗糙的、斯巴达式的、朴素的 shell 提示符是一个很好的提醒。

这是我首先想到的事情。我 99% 确信还有其他我尚未考虑的副作用。

答案2

正如其他人指出的那样将 root shell 更改为远离 /bin/sh 不是一个好主意 最好添加另一个帐户,例如 toor,其 UID 仍为 0,但有 zsh 作为 shell。这样做的好处是 root 的 shell 不会受到影响,因此它不会被破坏,并且无法通过来自不同 shell 的错误更新登录,另一种选择是当您需要以 root 身份工作超过一小部分时命令,只需执行

sudo -Es2 3

这将以 root 身份使用您的常规 rc 文件启动 zsh,并且 $HOME 将指向您的常规主目录。

现在,如果您使用 zsh 框架(例如 oh my zsh),您可能会收到警告,例如不安全的依赖完成的目录,您可以安全地禁用这些目录。

相关内容