通过脚本中的命令行更改 shell(使用 chsh)

通过脚本中的命令行更改 shell(使用 chsh)

在设置机器的启动脚本中,我想运行

chsh -s /bin/zsh

但是,这要求输入用户的密码。我该如何将密码作为参数传递?或者,如果我有 sudo 权限,我能以某种方式绕过该步骤吗?或者,还有其他方法可以更改默认启动 shell 吗?

答案1

以下命令可防止锁定的帐户更改其 shell,并有选择地让人们使用chsh自己而不使用 sudo 或 su:

简单且安全的设置:

  1. 添加最顶部的/etc/pam.d/chsh

    # This allows users of group chsh to change their shells without a password.
    #
    # Per: http://serverfault.com/questions/202468/changing-the-shell-using-chsh-via-the-command-line-in-a-script
    #
    auth       sufficient   pam_wheel.so trust group=chsh
    
  2. 创建 chsh 组:

    groupadd chsh
    

对于任何允许更改其 shell 的用户:

    usermod -a -G chsh username

赚钱:

user@host:~$ getent passwd $USER
user:x:1000:1001::/home/user:/bin/bash
user@host:~$ chsh -s `which zsh`
user@host:~$ getent passwd $USER
user:x:1000:1001::/home/user:/usr/bin/zsh
user@host:~$ 

答案2

chsh 实际上会更改 /etc/passwd 中与用户相关的行,尽管用户只能更改 /etc/passwd 中自己的“行”。因此,如果您想更改其他用户的 shell,您需要他/她的密码。

如果你真的想这样做(考虑到 Lorenzo 的帖子中的顾虑以及可能的安全问题),可以按照以下方法操作:

#visudo

这需要root权限。

假设你当前以“alice”身份运行,并且想要在没有密码的情况下更改“bob”的shell;

添加到文件:

Cmnd_Alias     SHELL = /usr/bin/chsh
Runas_Alias    SH    = Bob
alice          ALL   = (SH) NOPASSWD: SHELL

这确保“alice”可以在所有主机上以 SH 组中的用户身份无需密码运行 SHELL 中的命令组。

这样做可能有点牵强,但这是可能的。

在使用“visudo”更改 sudores 文件之前,请务必阅读“man sudoers”,尤其是与安全相关的消息!

答案3

您需要传递用户名;通过sudo(或通过 root)执行此操作将允许您设置用户的密码/shell,而无需输入旧密码。请查看man chsh更多信息。

现在我的问题是:你为什么要这么做?如果它是一个设置脚本,难道你不应该在创建时(即启动时adduser)更改用户的 shell 吗?如果你正在远程克隆系统,难道你不应该/etc/passwd先更改它吗?我认为没有理由通过脚本来执行此操作,除非你自动化了整个安装过程,并且在创建第一个用户之后选择要安装的 shell。

答案4

我相信您可以在文件中更改用户的 shell /etc/password,可能通过使用passwd命令。我还没有读过,但这可能有用:UNIX shell 差异以及如何更改 shell

相关内容