スクリプトのコマンドラインからシェルを変更する(chshを使用)


11

マシンをセットアップする起動スクリプトで、実行したい

chsh -s /bin/zsh

ただし、これはユーザーのパスワードを要求します。パスワードをパラメーターとして渡すにはどうすればよいですか?または、sudoのパワーがある場合、どうにかしてそのステップをバイパスできますか?あるいは、デフォルトの起動シェルを変更する別の方法はありますか?

回答:


21

以下は、ロックダウンされたアカウントがシェルを変更するのを防ぎ、chshsudoや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
    

シェルの変更を許可されているユーザーの場合:

    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 2016

ありがとう。これは、sudoなしでキーペアのみの認証変更シェルを使用するユーザーに許可する最もクリーンな方法のようです。このpam.dは非常に興味深いものです。
フランソワ・ドロレット

4

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は、システムを迂回し、ルート化することが非常に簡単なことです。sudoers他の方法(setuid / setgid実行可能ファイル、グループのアクセス許可など)で満たすことができない特定のニーズがない限り、変更しないことをお勧めします。

2

ユーザー名を渡す必要があります。これをsudo(またはrootで)実行すると、古いパスワードを要求されることなく、ユーザーのパスワード/シェルを設定できます。詳細については確認man chshしてください。

さて、私の質問です:なぜあなたはそれをしたいのですか?セットアップスクリプトの場合、作成時(つまり、の起動時adduser)にユーザーのシェルを変更するだけではいいのではないですか?リモートでシステムのクローンを作成する場合は、/etc/passwd最初にシステムを変更しないでください。インストールプロセス全体を自動化し、インストールするシェルの選択が最初のユーザーの作成後に行われない限り、スクリプトを使用してそれを行う理由はありません。


これはec2マシン用です(マシンの起動直後に実行するスクリプト)。デフォルトの起動シェルを変更したい。「sudo chsh -s / bin / zsh user_name」を実行しても機能しません(まだユーザーのパスワードの入力を求められます)

スクリプトを使用してみて、#!/usr/bin/sudo -s(shebang行)を使用してください。また、zshが/ binにあり、おそらく/ usr / binにないことを確認しますか?(確認するだけです。ec2には詳しくありません)
lorenzog

この回答はsudo許可を前提としているため、不完全です。sudo平均的なユーザーが必要としない別のアプローチについては、私のものを参照してください。

0

コマンド/etc/passwordを使用して、ファイル内のユーザーのシェルを変更できると思いますpasswd。まだ読んでいませんが、UNIXシェルの違いとシェルの変更方法が役立つかもしれません。


コマンドはchshまたはusermodです。passwdファイルを直接編集しないでくださいvipw。常にそのためのコマンドを使用してください。

0

してみてくださいsudo chsh -s /bin/zsh

  1. サーバーの出口
  2. 端末を再起動する
  3. サーバーにログインして確認するecho $SHELL-成功した場合は変更されました:)

これにより、実際にはzshがrootユーザーのデフォルト端末として設定されます。
lcguida

@lcguidaそうです。
dimpiax 2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.