在设置机器的启动脚本中,我想运行
chsh -s /bin/zsh
但是,这要求用户的密码。 我如何传递密码作为参数? 或者如果我有sudo权力,我可以绕过那一步吗? 或者,还有另一种方法来更改默认的启动shell?
以下内容可以防止locking的帐户更改其shell,并有select地让人们使用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
创buildchsh组:
groupadd chsh
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:~$
你需要通过用户名; 通过sudo (或root)执行此操作将允许您设置用户的密码/ shell而不需要询问旧密码。 请查看man chsh获取更多信息。
现在我的问题是:你为什么想这样做? 如果它是一个设置脚本,你不应该在创build时更改用户的shell(即启动adduser )吗? 如果你在远程克隆一个系统,你不应该先在/etc/passwd改变它吗? 除非您自动执行整个安装过程,并且在创build第一个用户之后select要安装的shell,否则我没有看到通过脚本执行此操作的理由。
chsh实际上改变了/ etc / passwd中与用户有关的行,尽pipe用户只能在/ etc / passwd中更改他/她自己的“行”。 因此,如果你想换另一个用户的shell,你需要他/她的密码。
如果你真的想这样做(考虑到洛伦佐的post中的担忧,以及可能的安全问题),可以这样做:
#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”,特别是与安全有关的消息!
试试sudo chsh -s /bin/zsh ,然后:
echo $SHELL检查 – 在成功的情况下它改变了:) 我相信你可以通过使用passwd命令来更改/etc/password文件中的用户shell。 我还没有通读它,但这可能是有用的: UNIX shell的差异,以及如何改变你的shell 。