将 root 的 shell 设置为默认值以外的其他值是不是不好的做法?

将 root 的 shell 设置为默认值以外的其他值是不是不好的做法?

有一次我的一个朋友(他是一位经验丰富的 Unix/Linux 用户)告诉我,将 root 的 shell 设置为 sh 以外的其他内容(即 bash 或 zsh)可能会产生问题,因为某些脚本可能会假设 shell 是 sh 并执行一些奇怪的操作。

不过,我认为 Ubuntu 的默认 root shell 设置为 bash,Gentoo 也使用 bash。有人能打破这个神话吗?

答案1

是的。如果系统在启动过程中出现故障,您可以登录 root shell。如果您有单独的 /usr,某些 shell 可能无法成功启动。

我建议toor使用非标准 shell 创建帐户(uid 0,gid 0),同时使用默认 shell 保留 root 权限。

答案2

应该不是问题。

Shell 脚本文件显式编码它们使用哪个 shell 执行。它被编码在第一行,或者其他程序或脚本执行特定的 shell 并将 shell 脚本作为参数。

我能想到的唯一使用用户帐户 shell 信息(除了登录过程)的程序是 procmail。如果你的用户在邮件服务器上设置了 shell /bin/false ,那真的很有趣......但是你通常不会以 root 身份执行 procmail 。

另一个候选者是 root 的 crontab 中的行。我不知道 crond 的策略是什么,使用哪个 shell。

答案3

为 bourne shell 编写的脚本大多数时候可以在 BASH 或 ZSH 或 $foo 上运行,不会出现任何问题。

在许多 Linux 系统上并没有安装原始的 sh,而是通常是针对 /bin/bash 的符号链接。

如果某些脚本只是“假设”shell 是明确的 sh,则应该重写它们。有 shebang 机制来选择您的脚本需要哪个解释器。如果是 sh,则脚本应包含#!/bin/sh在第一行。

您的默认 shell 设置不应与此上下文相关。

答案4

用户的登录 shell 不会影响启动过程。您可以将此 shell 设置为您想要的任何内容。并非所有系统都有 bash 并且它们工作正常。另外,如果/usr/bin/zsh安装错误,所有系统 shell 都应该是/bin.但是,您不应该更改/bin/sh为指向默认值以外的其他内容(除非您知道自己在做什么),因为许多脚本#!/bin/sh通常都指向 bash,而它们应该指向 bash,#!/bin/bash因为它们使用了 bashisms 和其他不会指向的行为。从事zsh或 的工作dash

相关内容