在设置机器的启动脚本中,我想运行
chsh -s /bin/zsh
Run Code Online (Sandbox Code Playgroud)
但是,这需要用户的密码。如何将密码作为参数传递?或者如果我有 sudo 权限,我可以以某种方式绕过这一步吗?或者,是否有另一种方法可以更改默认启动 shell?
小智 22
以下内容可防止锁定帐户更改其外壳,并有选择地让人们chsh在没有 sudo 或 su 的情况下使用自己:
添加以下内容/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)创建 chsh 组:
groupadd chsh
Run Code Online (Sandbox Code Playgroud) 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)
您需要传递用户名;通过sudo(或 root)执行此操作将允许您设置用户的密码/shell,而无需询问旧密码。请查看man chsh更多信息。
现在我的问题是:你为什么要这样做?如果它是一个设置脚本,您不应该在创建时(即启动时adduser)更改用户的 shell 吗?如果您要远程克隆系统,难道不应该/etc/passwd先更改它吗?我认为没有理由通过脚本来完成此操作,除非您自动化了整个安装过程,并且在创建第一个用户之后选择要安装的 shell。