如何将所有用户的默认shell更改为bash?

我希望从现在开始,每个新用户默认使用bash作为他们的shell。
我知道要将自己的shell更改为bash,可以使用命令“chsh -s /bin/bash”,但是如何自动设置所有未来用户的默认shell为bash呢?
3个回答

adduser

adduser 的默认文件是 /etc/adduser.conf。由变量 DSHELL 定义的默认 shell 是 /bin/bash

useradd

大多数情况下,您不需要使用此命令,因为 useradd 是一个非常低级别的实用程序,几乎从不直接使用。

如果您使用 useradd,请编辑 /etc/default/useradd 模板文件(但不要忘记备份)。

SHELL 变量设置为 /bin/bash,而不是 /bin/sh

现在,每次使用 useradd 添加新用户时,bash 都会自动成为他们的默认 shell。

已存在的用户

如果您想更改已存在用户的 shell,则必须编辑 /etc/passwd 文件(请确保备份)。

以下是各列的描述:

登录名 可选的加密密码 数字用户ID 数字组ID 用户姓名或注释字段 用户主目录 可选的用户命令解释器
按照这个顺序用冒号(:)分隔,就像这样。
root:x:0:0:root:/root:/bin/bash

有关该文件的更多信息,请参阅man页面man 5 passwd

8我认为更安全的更改另一个用户的shell的方法可能是类似于sudo -u $USER chsh -s $SHELL这样的方式。 - Jack O'Connor
1@JackO'Connor,你也应该把那个发表为一个回答。 - Octavian Helm
这在Ubuntu 16.04上似乎不起作用。有人知道如何修复吗? - Harshdeep

正如Octavian所指出的那样,更改默认设置的方法取决于您创建用户的方式。我刚才试着通过我的Gnome设置创建一个新用户,看起来它遵循/etc/default/useradd的规定,因此这可能是最好的选择。对于现有用户,最安全的更改他人登录Shell的方法是使用usermod命令。
usermod -s /bin/bash $USERNAME

如果你不是root用户,你需要使用sudo命令。另一种方法是以要修改的用户身份使用sudo命令,并直接运行chsh,就像这样:
sudo -u $USERNAME chsh -s /bin/bash

最好避免手动编辑/etc/passwd,因为其中的错误可能会导致各种问题。

如果你真的希望服务器上的所有用户都有bash(这实际上是问题所问的),你可以运行以下命令:
sudo dpkg-reconfigure dash

然后选择不要破折号。如本答案所述, 我如何将/bin/sh指向/bin/bash? 这不仅将bash设置为默认shell,还会正确更改sh和man页面的指向。
希望对您有所帮助。