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


11

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

chsh -s /bin/zsh

但是,这要求输入用户密码。如何将密码作为参数传递?或者,如果我具有sudo功能,是否可以以某种方式绕过该步骤?或者,是否存在另一种更改默认启动外壳的方法?

Answers:


21

以下内容可防止锁定的帐户更改其外壳,并有选择地让人们使用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:~$ 

工作解决方案,想知道这仍然没有被接受。
dimpiax

谢谢。这似乎是让使用仅密钥对身份验证的用户更改shell而无需sudo的最干净的方法。这个pam.d的东西非常有趣!
弗朗索瓦·德罗雷

4

尽管用户只能在/ etc / passwd中更改他/她自己的“行”,但chsh实际上在/ etc / passwd中更改了与用户有关的行。因此,如果您想为另一个用户更改外壳,则需要他/她的密码。

如果您真的想这样做(考虑到Lorenzo的帖子所涉及的问题以及可能的安全问题),则可以这样做:

#visudo

这需要root特权。

假设您当前正在以“ alice”身份运行,并且想要更改不带密码的“ bob”外壳程序;

添加到文件:

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

这确保了“ alice”可以作为SH组中的用户在所有主机上运行,​​而无需输入SHELL中的命令组密码。

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

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


问题sudo在于,规避和建立系统非常容易。最好不要进行更改,sudoers除非有无法以其他任何方式满足的特定需求(setuid / setgid可执行文件,组权限等)。

2

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

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


它用于ec2机器(机器启动后立即运行的脚本)。我想更改默认的启动外壳。做“ sudo chsh -s / bin / zsh用户名”也不起作用(仍然要求输入用户密码)

尝试使用脚本,然后使用#!/usr/bin/sudo -s(shebang行)。另外,您确定zsh在/ bin中,而不是在/ usr / bin中?(只是检查,我对ec2不熟悉)
lorenzog 2010年

此答案不完整,因为它需要sudo许可。请参阅我的其他方法,该方法不需要sudo普通用户使用。


0

尝试sudo chsh -s /bin/zsh,然后:

  1. 退出服务器
  2. 重新启动终端
  3. 登录服务器,然后检查echo $SHELL-成功的话,它已更改:)

实际上,这会将zsh设置为root用户的默认终端。
lcguida

@lcguida对。
dimpiax
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.