ログインシェルに関して、与えられたオプションのうちどれが正しいですか?

ログインシェルに関して、与えられたオプションのうちどれが正しいですか?

ログイン シェルに関して、指定されたオプションのうち正しいものはどれですか。

  1. ログイン シェルは、ユーザーがログインするたびに変わります。カーネルは、ログイン時にシェルが使用可能かどうかを決定します。
  2. ログイン シェルは、特定のシステム内のすべてのユーザーに対して固定されており、設定することはできません。
  3. ログイン シェルは、管理者が /etc/passwd ファイルで設定できます。
  4. 上記のどれでもない。

答え1

カーネルは、特定のもの (プロセス、ファイル) のタグとしての数値 ID 以外、ユーザーについて何も知りません。ユーザー ランドで行われる「ログイン」という概念はありません。

ログインプロセスを処理するプログラム(loginテキストモードコンソールでは、ディスプレイマネージャーsshdグラフィカル コンソールでは、やなどのデーモン (telnetdリモート ログインなど) が最初にユーザーを認証し、その他のタスクを実行します。パムよく使われます。多くの機能認証、ログ記録、ユーザー データベースなどに関するものです。プログラムが root としての実行から目的のユーザーとしての実行に切り替わった後のログイン プロセスの最後の手順 (成功した場合) は、ログイン シェルを呼び出すことです。

ログインシェルはユーザーアカウントデータベースから決定されます。ユーザーデータベースにはいくつかの種類がありますが、最も一般的なものは次のとおりです。/etc/passwd(または、まれに、NSSA)は、ローカルマシン上にある単純なテキストファイルであり、国家情報院そしてLDAP の複数のマシンからアカウントを使用できるネットワーク上で使用されるネットワーク データベースです。

ユーザーはシェルを変更できますchshローカルアカウント用のコマンド、ypchshNISアカウントの場合、またはchsh.ldapLDAP アカウントの場合。場所によっては、chsh使用中のアカウント データベースの種類に関係なくコマンドが機能するように設定されています。ユーザーは、ファイルにリストされているシェル間でのみ切り替えることができます/etc/shells。これは、セキュリティ対策 (シェルがリストされていないユーザーは制限されたアカウントを持つとみなされ、変更できません) と安全対策 (存在しないシェルまたは制限されたシェルに変更すると、アカウントが事実上ロックされる可能性があります) の両方です。管理者は、コマンドを実行するchshか、データベースを直接編集することで、任意のアカウントのログイン シェルを変更できます。

通常設定されたシステムでは、便利なシェル プログラムがリストされ/etc/shells、それらのプログラムは動作します。(1) は技術的には正しいです。なぜなら、ログイン シェルは、chsh通常は変化しなくても変化する可能性がある (ユーザーまたは管理者はいつでも呼び出すことができる) ためであり、もちろん、プログラムを起動するにはカーネルがプログラム ファイルを読み込む必要があり、ファイルが存在しないか破損している場合は失敗します。

ログイン プログラムは、引数 0 にプログラム名(-名前の前にダッシュあり) を設定してログイン シェルを実行します。たとえば、ログイン シェルが/bin/bash(フル パスが必要で、 の検索は$PATH実行されません) の場合、引数 0 は になります。引数 0 は通常プログラム名です。追加のダッシュは、シェルにログイン シェルとして動作するように指示します。ログイン シェルは、起動時にや-bashなどの追加ファイルを実行します。/etc/profile~/.profileログイン シェルと非ログイン シェルの違いは何ですか?この部分の詳細については、こちらをご覧ください。


この多肢選択式試験は、各選択肢が真実であると解釈される可能性があるため、適切に設計されていません。

(1): ユーザーがログインするたびにログイン シェルが決定されるのは事実です。また、カーネルがログイン プロセス中にシェルが使用可能かどうかを決定するのも事実です。したがって、技術的には (1) は正しいです (技術的に正しいことが最高の正確さの形です)。ただし、(1) は非常に誤解を招きます。カーネルはログイン シェルが何であるかを決定するわけではなく、ログインやシェルの概念すら持っていないからです。

(2) は、異なるユーザーが異なるログインシェルを持つことができるため、一般的には正しくありません。ただし、何らかの理由ですべてのユーザーが同じシェルを持つ設定もあります。たとえば、アカウントがマシン間で共有され、どこでも使用できることが保証されている唯一のシェルが である異種ネットワークなどです/bin/sh

(3) はおそらく意図された答えです。なぜなら は/etc/passwd管理者がログイン シェルを設定できる場所の 1 つだからです。ただし は直接編集するのではなく、コマンドまたは などのコマンドを/etc/passwd使用して編集する必要があります。さらに、非ローカル アカウントは に保存されません。vipwchsh/etc/passwd

答え2

いくつかの事実を確認してみましょう:

  1. テストします。echo $SHELL. ログアウトして再度ログインします。echo $SHELL. すすぎ、洗浄して、繰り返します。 毎回同じ答えです。

  2. ログイン シェルは、すべてのユーザーの の内容から派生します/etc/passwd。そのファイルに設定された値は、システム上の各ユーザーのログイン シェルの値になります。ユーザーが別のシェルを実行することは可能ですが、 に値が設定されていないと、そのシェルはユーザーのログイン シェルにはなりません/etc/passwd

    これを確認するには、手動で実行するさまざまなシェルからコマンドを試してください。

    bash -c "get-shell"
    sh   -c "get-shell"
    zsh  -c "get-shell"
    

    ログイン シェルの値は、ユーザーが実行するために選択したシェルではなく、 で設定されたシェルによって決まるため、これらのコマンドは、どのシェルで実行しても同じ出力を生成します/etc/passwd

    システムにない場合は、上記のコマンド内でget-shell置き換えて、ユーザーのログイン シェルを決定できます。getent passwd $(whoami) | cut -d: -f7

  3. これは管理者の知識レベルに大きく依存します。/etc/passwdファイルの編集には、ルートとしてテキスト エディターを起動する方法と、ファイル内の 1 文字も間違えない器用さが必要です。忍者ならこれをやってのけるかもしれませんが、管理者はこれを読めば、man chshログイン シェルを調整するプログラムであることがわかります。

    説明
    chshはログインシェルを変更するために使用されます

  4. 上記の回答の少なくとも 1 つが正しい場合、これは誤りであるはずです。

関連情報