ルートではないか、パスワードを入力せずにスクリプトから永久にzshに切り替えます。

ルートではないか、パスワードを入力せずにスクリプトから永久にzshに切り替えます。

chsh -s /bin/zshルートなしでパスワードなしで実行する方法はありますか?私はこれをルートによって呼び出されない非対話型スクリプトに入れたいと思います。

答え1

ログインシェルを変更する権限がない場合は、bash(bashがログインシェルであると仮定)にzshに置き換えるように指示できます。 yoursに~/.bash_login次の行を追加します。

exec /bin/zsh --login

答え2

あなたのバージョンにchshパスワードが必要な場合(私はそうでした)、特別な権限を使用してsudoを設定する必要があります。次のように、パスワードを要求せずにすべてのプログラムにアクセスできるように構成できます。

user   ALL=(ALL) NOPASSWD:/usr/bin/chsh

ここで、「user」はユーザー名(または%プレフィックスが付いたグループ名)です。chshこれにより、ユーザーは root で他のものを実行することはできません (スクリプトを含む)、バイナリはパスワードなしで root として実行できるため、ユーザーのパスワードプロンプトをバイパスできます。

答え3

特定の要件に基づいて長いスクリプトを実行していて、質問の途中で中断したくないので、これを行う場合は、事前にパスワードを要求してから権限を使用してchsh実行できます。sudoのパスワードですstdin

read -p 'What is your password?' sudo_password

# rest of the script here

sudo -S chsh -s '/bin/zsh' "${USER}" <<< "${sudo_password}"

-Ssudoでパスワードを読みますstdin。気づく考えられるセキュリティリスクこのアプローチを使用してください(しかし、私はこれを再現することはできず、必要に応じて問題にならないかもしれません)。

関連情報