回答:
以下は、ロックダウンされたアカウントがシェルを変更するのを防ぎ、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:~$
chshは実際には/ etc / passwd内のユーザーに関連する行を変更しますが、ユーザーは/ etc / passwd内の自分の「行」しか変更できません。したがって、別のユーザーのシェルを変更する場合は、そのユーザーのパスワードが必要です。
あなたが本当にそれをしたいのであれば(ロレンツォの投稿での懸念と考えられるセキュリティの懸念を踏まえて)、これを行う方法は次のとおりです:
#visudo
これにはroot権限が必要です。
現在「alice」として実行していて、パスワードなしで「bob's」シェルを変更したいとします。
ファイルに追加:
Cmnd_Alias SHELL = /usr/bin/chsh
Runas_Alias SH = Bob
alice ALL = (SH) NOPASSWD: SHELL
これにより、SHELLのコマンドグループのパスワードなしで、SHグループのユーザーとしてすべてのホストで「alice」を実行できるようになります。
おそらくこの方法でそれを行うには少し遠いですが、それは可能です。
sudoresファイルを「visudo」で変更する前に、「man sudoers」、特にセキュリティに関連するメッセージを必ずお読みください。
ユーザー名を渡す必要があります。これをsudo
(またはrootで)実行すると、古いパスワードを要求されることなく、ユーザーのパスワード/シェルを設定できます。詳細については確認man chsh
してください。
さて、私の質問です:なぜあなたはそれをしたいのですか?セットアップスクリプトの場合、作成時(つまり、の起動時adduser
)にユーザーのシェルを変更するだけではいいのではないですか?リモートでシステムのクローンを作成する場合は、/etc/passwd
最初にシステムを変更しないでください。インストールプロセス全体を自動化し、インストールするシェルの選択が最初のユーザーの作成後に行われない限り、スクリプトを使用してそれを行う理由はありません。
#!/usr/bin/sudo -s
(shebang行)を使用してください。また、zshが/ binにあり、おそらく/ usr / binにないことを確認しますか?(確認するだけです。ec2には詳しくありません)
コマンド/etc/password
を使用して、ファイル内のユーザーのシェルを変更できると思いますpasswd
。まだ読んでいませんが、UNIXシェルの違いとシェルの変更方法が役立つかもしれません。
してみてくださいsudo chsh -s /bin/zsh
:
echo $SHELL
-成功した場合は変更されました:)