将root的shell设置为默认值以外的东西是不好的做法吗?


16

我的一个朋友(经验丰富的Unix / Linux用户)告诉我,将root的shell设置为sh以外的其他东西(即bash或zsh)可能会产生问题,因为某些脚本可能会假定shell是sh并做了奇怪的事情。

但是,我认为Ubuntu的默认根shell设置为bash,Gentoo也使用bash。有人可以打破神话吗?

Answers:


12

是。如果系统在引导过程中失败,则可以登录到root shell。如果您有单独的/ usr,则某些shell可能无法成功启动。

我建议toor使用非标准外壳程序创建帐户(uid 0,gid 0),而使用默认外壳程序保留根目录。


当我从FBSD 7.2升级到8.0时,这发生在我身上,我忘记了重建bash。我以单用户模式启动以进行修复,但它仅能正常工作,因为/bin/sh它仍链接到and FBSD的for bourne和not bash
gvkv

只是为了使事情更清楚,如果我说安装zsh并且某种程度上/usr被损坏,我会有问题吗?但我的系统有/bin/sh指向/bin/bashbash自身,为什么不会sh受到影响?
phunehehe

1
系统将启动的根“保证”的默认值-升级指南将至少能够登录到根。但是,其他情况可能并非如此。解决方案是使用非默认外壳通过toor复制root帐户,以供日常使用,并保持root身份不变。
Maciej Piechotka

1
zsh/usr/bin/如果安装错误,则不应插入。所有炮弹都应放在/bin
xenoterracide 2010年

1
@xenoterracide:Gentoo上的zsh在,/bin但在中保留了一些文件/usr/share。我也清楚地指出,问题出在引导期间的登录期间(某些服务失败时)。
Maciej Piechotka 2010年

7

应该不是问题。

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

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

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


$ SHELL通常在启动时由crondaemon设置为/ bin / sh。
echox

3

为bourne shell编写的脚本在大多数情况下将针对BASH或ZSH或$ foo运行,而不会出现任何问题。

在许多Linux系统上,没有安装原始的sh,而是经常与/ bin / bash建立符号链接。

如果某些脚本只是“假定”该外壳程序显式处于sh状态,则应重写它们。有shebang机制来选择脚本需要的解释器。如果是sh,则脚本应包含#!/bin/sh为第一行。

您的默认外壳程序设置在这种情况下应该无关紧要。


2

我认为更改root的外壳不会造成任何麻烦。我似乎还记得一些将tcsh作为root的默认shell的unices(也许是BSD的一些变体?)。

无论如何,根登录很少。通常,您将登录到自己的帐户,然后使用su或sudo root。

重要的是,root用户的shell应该具有尽可能少的依赖关系,以便可以在系统修复上下文中使用。例如,最好有一个静态链接的根外壳。有些发行版提供了bash或zsh或sash(内置许多标准实用程序的shell)的静态链接版本。但是,如果可以轻松地从应急CD或USB驱动器引导系统,那么这并不是很重要。


出于依赖性的原因,我认为将外壳保持原样是有意义的,这样,大型系统修改(如升级)就不会搞砸了。我同意使用实时CD或USB进行修复很容易,但是我不必首先修复它。
phunehehe

1

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


抱歉,我犯了一个错误,实际上是在我的计算机上bash并且zsh都在/bin
phunehehe 2010年

0

我有bash作为root的默认外壳。我使用zsh已有一段时间,但后来又回到了bash。您使用什么外壳都没关系。

如果有多个用户具有root用户访问权限,这只是一个问题。在这种情况下,您可以选择一个通常使用bash的“公共分母”,因为这是使用最广泛的shell。


0

在就Solaris / Illumos的的Solaris根壳牌迷你常见问题

某些系统管理员仍然建议不要在
Solaris系统上更改根shell 。询问原因,您可能会被告知root需要一个
静态链接的shell,该shell不依赖于
/ usr / lib下的动态库。过去确实如此,但
今天不一定如此。如果配置正确,Solaris就像任何其他版本的Unix一样,可以支持您为root或任何其他帐户定义的任何shell。

因此,是的,如果您使用的是Solaris或illumos,则可以使用以外的shell sh

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.