Answers:
以下内容可防止锁定的帐户更改其外壳,并有选择地让人们使用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
创建chsh组:
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:~$
尽管用户只能在/ 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
(或通过root)执行此操作将允许您设置用户的密码/ shell,而无需询问旧密码。请检查man chsh
更多信息。
现在我的问题是:您为什么要这样做?如果是设置脚本,您是否不应该在创建时(即在启动时adduser
)更改用户的外壳程序?如果要远程克隆系统,是否不应该/etc/passwd
先更改它?我认为没有理由通过脚本执行此操作,除非您使整个安装过程自动化,并且要安装的外壳的选择是在创建第一个用户之后进行的。
#!/usr/bin/sudo -s
(shebang行)。另外,您确定zsh在/ bin中,而不是在/ usr / bin中?(只是检查,我对ec2不熟悉)
我相信您可以/etc/password
通过使用passwd
命令来更改文件中用户的外壳。我还没有读完它,但这可能很有用:UNIX shell差异以及如何更改shell。