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

"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(推奨されていません)

答え2

私が直接suを提供する方法はありますか? rootパスワードを要求して権限を付与してbashに移動せずに使用中のシェルに再送信するカスタムsu実行可能ファイルも提供できますか?ありがとうございます。

いいえ。 Unixの特権昇格メカニズムには、新しいプロセスの実行が含まれます。実行su可能ファイルには、実行可能ファイルが実行されたときにプロセスの有効なユーザーIDが実行可能ファイルの所有者IDになるようにする「set-user-IDビット」または「setuid」という特別な権限ビットがあります。

認証が成功すると、su新しいシェルが実行されます。

同じシェルでスーパーユーザー権限を持つ一般的な方法は、このsudoユーティリティを使用して権限モードで個々のコマンドを実行することです。

特定のコンピュータを定期的に管理している場合は、rootユーザーとして使用するカスタム環境を設定できます。ルートになったら、お気に入りのシェルを実行し、その設定ファイルをルートのホームディレクトリに設定するだけです。

$ su
password:
root # exec /path/to/favorite/shell

上司なら、このシェルをルートのログインシェルに設定できます。

関連情報