"su"コマンドはどのように機能しますか?

bashソースコードをまったく見ずに自分だけのシェルを作成しようとしていますが、できないことが1つあります。カスタムシェル(私のシェルを含む)で「su」を実行するたびに、私のパスワードを取得し、root権限を示すハッシュ付きのbashプロンプトに移動します。 root権限があるときにシェルがハッシュプロンプトを提供することを確認するためにコードを入れましたが、これはrootとして実行したときにのみ当てはまります。これは、シェルでrootになるためにsuを試みるたびにbashを実行するように強制するためです。私が直接suを提供する方法はありますか? rootパスワードを要求して権限を付与してbashに移動せずに使用中のシェルに再送信するカスタムsu実行可能ファイルも提供できますか?ありがとうございます。

ベストアンサー1

マニュアルページはsuこの点について非常に明確です。

/etc/passwdコマンドは、ターゲット・ユーザーに指定されたシェルによって実行されます。

そして

-s, --shell シェル呼び出されるシェルです。

-m, -p, --preserve 環境現在の環境を保護してください[… ]

bash呼び出し後にシェルに入る理由は、su -これがルートのデフォルトシェルであるためです。この基本シェルをオーバーライドする 3 つの方法があります。

  1. su -s /path/to/your/shellただ電話する代わりに電話してくださいsu
  2. export SHELL=/path/to/yourshell設定されていることを確認してから電話してください。su -m
  3. ルートのデフォルトシェルの変更/etc/passwd(推奨されていません)

おすすめ記事