ログインシェルに関して、次のオプションのうち正しいものは何ですか?
- ユーザーがログインするたびにログインシェルが異なります。カーネルはログイン中にシェルの可用性を決定します。
- ログインシェルは、特定のシステムのすべてのユーザーに対して固定されています。構成できません。
- 管理者は/etc/passwdファイルでログインシェルを設定できます。
- 上記のいずれもありません。
答え1
カーネルは、何か(プロセス、ファイル)のラベルであるユーザーの数値ID以外に、ユーザーについて何も知りません。ユーザー空間で発生する「ログイン」という概念はありません。
ログインプロセスを処理するプログラム(login
テキストモードコンソールではディスプレイマネージャグラフィックコンソールでは、デーモン(たとえば、sshd
リモートtelnetd
ログインなど)が最初にユーザーを認証し、他の操作を実行します。ポリアクリルアミドよく使われます。多くの能力認証、ロギング、ユーザーデータベースなどに関連しています。プログラムがrootとして実行から目的のユーザーとして実行に切り替えられた後、ログインプロセスの最後のステップ(成功した場合)はログインシェルを呼び出すことです。
ログインシェルはユーザーアカウントデータベースによって決定されます。ユーザーデータベースにはさまざまな種類があります。最も一般的なものは次のとおりです。/etc/passwd
(またはまれに他のファイルを整理して国家安全保障局)はローカルコンピュータ上の単純なテキストファイルです。国家庭園そしてLDAPWebで使用されるネットワークデータベースで、複数のコンピュータでアカウントを使用できます。
ユーザーは次のコマンドを使用してシェルを変更できますchsh
ローカルアカウントのコマンドypchsh
NIS アカウントの場合chsh.ldap
LDAP アカウントの場合。一部の場所では、chsh
使用しているすべてのアカウントデータベースタイプに適用するようにコマンドが設定されています。ユーザーはファイルにリストされているシェル間でのみ切り替えることができます/etc/shells
。これは、セキュリティ対策(リストにないシェルを持つユーザーは制限されたアカウントを持っていると見なされ、変更できません)であり、セキュリティ対策(なしに変更または制限されたシェルが効果的にロックされる可能性があります)です。アカウントから)。管理者はchsh
コマンドを実行するか、データベースを直接編集して、すべてのアカウントのログインシェルを変更できます。
正常に構成されたシステムでは、有用なシェルプログラムがリストされ、/etc/shells
これらのプログラムが実行されます。 (1)は通常、そうでなくてもログインシェルが変更される可能性があり(chsh
ユーザーまたは管理者がいつでも呼び出すことができる)、技術的に正確であり、もちろんプログラムを起動するにはカーネルにプログラムファイルをロードする必要があります。ファイルが存在しないか破損している場合。
-
ログインプログラムは、パラメータ0がプログラム名に設定され、前にダッシュが付いたログインシェルを実行します。たとえば、ログインシェルが/bin/bash
(フルパスを必要とし、クエリを実行しない$PATH
)場合、パラメータ0はです-bash
。パラメーター0は通常プログラム名です。追加ダッシュは、シェルにログインシェルとして機能するように指示します。ログインシェルは起動時/etc/profile
などの追加ファイルを実行します~/.profile
。ログインシェルと非ログインシェルの違いは何ですか?このセクションの詳細です。
この多肢選択テストは、すべてのオプションが正しいと解釈できるため、不完全に設計されています。
(1):これは実際にユーザーがログインするたびにログインシェルが決まります。ログインプロセス中にシェルを使用できるかどうかをカーネルが決定する場合も同様です。したがって、技術的に(1)は正確です(技術的精度は正確さの最良の形態です。そうですか?)。しかし、(1)は、カーネル自体がログインシェルが何であるかを決定せず、ログインやシェルの概念さえ持っていないため、誤解を招く可能性があります。
(2)は通常、ユーザーごとにログインシェルが異なる可能性があるため、正しくありません。ただし、一部の設定では、何らかの理由ですべてのユーザーが同じシェルを使用します。たとえば、システム間でアカウントが共有され、どこでも使用が保証される唯一のシェルである異機種ネットワークでは/bin/sh
。
/etc/passwd
(3)は管理者がログインシェルを設定できる場所なので、おそらく予想される答えです。しかし、/etc/passwd
自分で編集しないでください、コマンドvipw
やchsh
。また、ローカルではないアカウントは/etc/passwd
。
答え2
いくつかの事実を確認してみましょう。
テストを見てください。
echo $SHELL
。今すぐサインアウトしてからもう一度ログインしてください。echo $SHELL
。すすぎ、清掃して繰り返します。毎回同じ答え。ログインシェルは、
/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
これは管理者の知識レベルによって大きく異なります。ファイルを編集するには、
/etc/passwd
rootでテキストエディタを起動する方法と、ファイル内の個々の文字を混乱させないようにする必要があります。忍者は成功するかもしれませんが、この記事を読んでいる管理者は、man chsh
これがログインシェルを調整する手順であることに気付くでしょう。説明
chsh はログインシェルを変更するために使用されます。上記の答えのいずれかが本当なら、その答えは偽でなければなりません。