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