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

12 linux shell

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

chsh -s /bin/zsh
Run Code Online (Sandbox Code Playgroud)

但是,这需要用户的密码。如何将密码作为参数传递?或者如果我有 sudo 权限,我可以以某种方式绕过这一步吗?或者,是否有另一种方法可以更改默认启动 shell?

小智 22

以下内容可防止锁定帐户更改其外壳,并有选择地让人们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
    
    Run Code Online (Sandbox Code Playgroud)
  2. 创建 chsh 组:

    groupadd chsh
    
    Run Code Online (Sandbox Code Playgroud)

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

    usermod -a -G chsh username
Run Code Online (Sandbox Code Playgroud)

金钱射击:

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:~$ 
Run Code Online (Sandbox Code Playgroud)


lor*_*zog 2

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

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