5.1 レッスン 1
Certificate: |
Linux Essentials |
---|---|
Version: |
1.6 |
Topic: |
5 セキュリティとファイルパーミッション |
Objective: |
5.1 セキュリティの基本とユーザー種別 |
Lesson: |
1 of 1 |
はじめに
このレッスンでは、アカウント、アクセス制御、手元のLinuxシステムのセキュリティの基本的な用語と、基本的なセキュリティによるアクセス制御、ユーザーとグループのアカウントを保持するファイルを操作する CLI(command line interface)ツール、初歩的な権限昇格、などを取り上げます。
Linuxシステムの基本的なセキュリティは、Unixのアクセス制御に基づいてモデル化されています。50年近く前のものにもかかわらず、かなり新しい人気のコンシューマ向けOSと比較してもかなり効果的です。他のいくつかの人気のあるUnixベースのオペレーティングシステムでは、 “アクセスしやすさ” に焦点を当てて “自由を取る” 傾向がありますが、Linuxはそうではありません。
最新の Linux デスクトップ環境とインターフェイスでは、ユーザーの作成と管理が簡素化されていて、ユーザーがログインした際のアクセス権限の割り当てを自動化することが多いため、システム管理者の操作はほとんど必要ありません。しかしながら、基礎となる Linux オペレーティングシステムの基本的な概念を理解しておくことが重要です。
アカウント
セキュリティには多くの概念が含まれていますが、その中でも最も一般的なのはアクセス制御の概念です。所有権やパーミッションなどによるファイルへのアクセス制御に取り組む前に、Linux におけるユーザ アカウント の基本的な概念を理解しておきましょう。いくつかの種類があります。
Linuxシステムのユーザーは、ログイン情報(ユーザー名とパスワード)に加えて、どこでどのようにシステムを操作できるかを定義するためのアカウントを持っています。権限とアクセス制御が、ユーザーが操作できる 境界 を定義します。
識別子(UID/GID)
ユーザー識別子( UID )とグループ識別子( GID )は、それぞれのアカウントを参照するための数値です。初期の実装では16ビット(0から65535)でしたが、21世紀のシステムでは64ビットの UIDと GIDをサポートしています。ユーザーとグループは独立してカウントされるので、UIDと GIDには同じ数値が使われることがあります。
すべてのユーザーは、ひとつの UIDと、 プライマリ GIDを持っています。プライマリGIDは、そのユーザー専用であることも、他のユーザーと共有されていることもあります。それぞれのユーザーは、プライマリグループだけではなく、他のグループのメンバーになることもできます。
現在の多くのLinuxシステムでは、ユーザー名と同じ名前でUIDと同じGIDを割り当てたグループをそれぞれのユーザーに割り当てるのがデフォルトになっています。つまり、newuser
というユーザーを作成すると、そのプライマリグループも newuser
になります。
スーパーユーザー
Linuxでのスーパーユーザーアカウントは root
であり、そのUIDは常に 0です。スーパーユーザーとは、システム管理者 のことであり、他のユーザーを含むシステム全体に対して無制限のアクセスと制御が行えます。
スーパーユーザーのデフォルトのグループも root
であり、GIDは 0
です。スーパーユーザーのホームディレクトリは、最上位の専用ディレクトリ /root
であり、root
自身しかアクセスすることができません。
一般アカウント
root
以外のアカウントは技術的には普通のアカウントですが、Linuxシステムでは ユーザーアカウント という単語で “普通の” (特権がない)アカウントを指すことがあります。少しの例外がありますが、次のような属性(プロパティ)を持っています:
-
UIDは1000(4桁)から始まりますが、一部の古いシステムでは500からです。
-
ホームディレクトリ。通常は
/home
のサブディレクトリですが、サイト独自の設定によります。 -
ログインシェル。Linuxのデフォルトシェルは通常 BASH (Bourne Again Shell
/bin/bash
)ですが、他のシェルのこともあります(訳注: 最新のディストリビューションではzsh
(ズィーシェ)がデフォルトのものもあります)。
ユーザーアカウントの属性に有効なシェルが定義されていない場合、ユーザーは対話シェルを開くことができません。無効なシェルとして、/sbin/nologin
を指定することもあります。例えば、コンソールや SSHアクセス以外のアクセス(例えば セキュアFTP sftp
)のみを認証する場合です。
Note
|
混乱を避けるために、ここから先では ユーザーアカウント という用語を、普通の標準的なユーザーアカウントにのみ使用します。システムタイプのユーザーアカウントには、システムアカウント という用語を使います。 |
システムアカウント
システムアカウント は、システムのインストール時にあらかじめ作られるもので、スーパーユーザー権限では実行されない機能、プログラム、サービスなどが使用します。概念上、これらすべてはオペレーティングシステムの機能です。
システムアカウントはさまざまですが、次のような属性を持っています:
-
UIDは通常100未満(2桁)か、500〜999(3桁)です。
-
専用のホームディレクトリが 無い か、あるいは
/home
以外の場所にあります。 -
稀な例外を除いて、ログインシェルは無効なもの(通常は
/sbin/nologin
)です。
Linuxのほとんどのシステムアカウントはログインすることがないので、属性にシェルを定義する必要はありません。システムアカウントによって所有され実行されるプロセスの多くは、特定のシステムアカウントで実行されるシステムマネージャによって、独自の環境にフォークされます。これらのアカウントはほとんどの場合に、制限されているか、何の特権も持っていません。
Note
|
LPI Linux Essentialsの観点からは、システムアカウントの UIDは1000未満で、2桁ないし3桁です(GIDも同じ)。 |
通常、システムアカウントは有効なログインシェルを持つべきではありません。有効なログインシェルがあると、セキュリティ上の問題に繋がります。
サービスアカウント
サービスアカウント は通常、サービスをインストールして設定したときに作成されます。システムアカウントと同様に、これらはスパーユーザー特権を持たずに実行される機能やプログラム、サービス用です。
多くのドキュメントでは、システムアカウントとサービスアカウントを明確に区別していません。ホームディレクトリがあるとしても(サービスアカウントは、システムアカウントに比べると、ホームディレクトリを持っていることが多い) /home
の外であること、有効なログインシェルを持たないことなどが似ています。厳密な定義はありませんが、システムアカウントとサービスアカウントの最大の相違点は UIDと GIDです。
- システムアカウント
-
UID/GID は100未満(2桁)、ないし 500〜999(3桁)。
- サービスアカウント
-
UID/GID は1000以上(4桁以上)、ただし “標準” ないし “普通” のユーザーアカウントではないもの。
いくつかのLinuxディストリビューションには、未だに事前に予約された100未満のUIDがあり、システムのインストール時には作成されませんがシステムアカウントと見なすことができます。例えば、Fedraベース(Red Hatを含む)のLinuxディストリビューションでは、Apache Webサーバーが UID 48(GIDも同じ)を持っていて、明らかにシステムアカウントですが、ホームディレクトリを持っています(通常は /usr/share/httpd
か /var/www/html/
)
Note
|
LPI Linux Essentialsの観点からは、システムアカウントの UIDは1000未満で、通常アカウントは 1000以上です。サービスアカウントの UIDも、この範囲に含まれます。 |
ログインシェルとホームディレクトリ
ほとんどのアカウントにはログインシェルがありますが、一部のアカウントには対話的なアクセスを必要としないため、セキュリティ上の目的でログインシェルを持たないものもあります。ほとんどのLinuxディストリビューションでは、bash
すなわち Bourne Again Shell がデフォルトのログインシェルですが、Cシェル( csh
)、コーンシェル( ksh
)、Zシェル( zsh
)などの他のシェルが利用可能なことがあります。
ユーザーは、chsh
コマンドでログインシェルを変更する事ができます。デフォルトでは、コマンドは対話モードで動作し、どのシェルを使用するかを尋ねるプロンプトを表示します。以下のように、シェルの実行ファイルへのフルパスを答えます:
$ chsh Changing the login shell for emma Enter the new value, or press ENTER for the default Login Shell [/bin/bash]: /usr/bin/zsh
非対話モードでもコマンドを実行することができ、以下のように -s
オプションに続けて実行ファイルへのパスを指定します。
$ chsh -s /usr/bin/zsh
ほとんどのアカウントには、ホームディレクトリが定義されています。Linuxでは通常、そのユーザーアカウントが書き込みアクセスを持つのはホームディレクトリのみですが、いくつかの例外(例えば一時ファイルシステム)があります。また、セキュリティ上の理由で、ホームディレクトリに書き込みアクセスを持たないアカウントもあります。
ユーザーに関する情報を得る
基本的なユーザ情報を一覧表示することは、Linuxシステム上では日常的に行われていることです。場合によっては、特権を得るためにユーザーを切り替えて、特権が必要な作業を行うことがあります。
一般ユーザーであっても、以下のコマンドを使って属性を表示することができます。限定された状況における基本的な情報の表示は、特権的な操作ではありません。
自分のユーザー情報を表示することは、たった2文字のコマンド id
で行えます。出力はログインIDに応じて異なります。
$ id uid=1024(emma) gid=1024(emma) 1024(emma),20(games),groups=10240(netusers),20480(netadmin) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
先の表示では、ユーザー emma
は以下の識別子を持っています:
-
1024
= ユーザーID(UID)で、括弧内にユーザ名(ログイン名)が表示されます。 -
1024
= プライマリ グループIDで、括弧内にグループ名(共通名)が表示されます。 -
ユーザーが属している追加のGID(グループ名)の一覧です。
last
コマンドは、システムにユーザーが最後にログインした時刻を表示します:
$ last emma pts/3 ::1 Fri Jun 14 04:28 still logged in reboot system boot 5.0.17-300.fc30. Fri Jun 14 04:03 still running reboot system boot 5.0.17-300.fc30. Wed Jun 5 14:32 - 15:19 (00:46) reboot system boot 5.0.17-300.fc30. Sat May 25 18:27 - 19:11 (00:43) reboot system boot 5.0.16-100.fc28. Sat May 25 16:44 - 17:06 (00:21) reboot system boot 5.0.9-100.fc28.x Sun May 12 14:32 - 14:46 (00:14) root tty2 Fri May 10 21:55 - 21:55 (00:00) ...
列に表示される情報は異なることがあります。ここでは、次のエントリに着目します:
-
ユーザー
emma
は、ネットワーク経由で(仮想TTYpts/3
)からログインし、今もログイン中である。 -
カーネルがブートした時刻が表示されています。上の例ではユーザーがログインする25分ほど前でした。
-
スーパーユーザー(
root
)が、仮想コンソール(TTYtty2
)から、5月半ばにログインしました。
last
コマンドに類した lastb
コマンドは、失敗したログインの試みを一覧表示します。
who
コマンドと w
コマンドは、システムで活動中のログインを表示します。
$ who emma pts/3 2019-06-14 04:28 (::1) $ w 05:43:41 up 1:40, 1 user, load average: 0.25, 0.53, 0.51 USER TTY LOGIN@ IDLE JCPU PCPU WHAT emma pts/3 04:28 1:14m 0.04s 0.04s -bash
どちらのコマンドも同じ情報の一部を表示します。例では、ひとりのユーザー emma
が仮想TTYデバイス( pts/3
)から 4:28 にログインしています。
w
コマンドは、以下に示す情報も表示しています:
-
現在時刻とシステムが稼働している時間。
-
接続しているユーザー数。
-
1分、5分、15分前の ロードアベレージ
ユーザーセッション後の活動時間なども表示されます。
-
CPU利用時間の集計(
IDLE
、JCPU
、PCPU
) -
現在のプロセス(例では
-bash
)と、そのプロセスの合計CPU時間(PCPU
)
どちらのコマンドにも、さまざまな追加情報を表示するオプションがあります。
ユーザーを切り替えて特権を得る
ユーザーがタスクを完了するために権限の昇格を行う必要が無いことが理想です。システムは、さまざまなアクセスに対して適切に構成されて、“正しく動作” すれば良いのです。
幸いLinuxは「可能な限り低い権限で動作する」セキュリティモデルを取っているにもかかわらず、システム管理者ではない大部分のユーザーにとっても、理想的な状態で機能します。
とはいえ、必要に応じて権限を昇格できるコマンドがあります。最も重要なものは、su
と sudo
の2つです。
今日のLunixシステムでは、rootに権限を昇格させるためだけに su
コマンドを使用します。コマンド名の後にユーザー名を指定しない場合のデフォルトユーザーが root です。他のユーザーに切り替えることもできますが、よい習慣と言えません。システムのコンソールやターミナルからにせよ、他のシステムからネットワーク経由で接続するにせよ、目的のユーザーとしてログインすべきです。
emma ~$ su - Password: root ~#
スーパーユーザー( root
)のパスワードを入力すると、スーパーユーザーシェル(コマンドのプロンプト末尾の #
で区別できます)が起動して、あらゆる意味でスーパーなユーザー( root
)となります。
パスワードの共有はセキュリティ的に極めて良くない行為なので、現代のLinuxシステムでは su
コマンドが必要となることはほとんどありません。
特権を持たない一般ユーザのシェルでは、コマンドプロンプトの最後のドル記号( $
)ですが、スーパーユーザー( root
)のシェルではポンド記号( #
)になります。プロンプトの最後の文字をこの “誰もが理解できる” 標準から変更すべきではありません。これらの用法は、本書を含むさまざまな学習教材でも使用されています。
Warning
|
ログインシェルとするパラメータ( |
スーパーユーザー( root
)への切り替えに su
を使うことの最大の問題は何でしょう? 一般ユーザーのセッションが汚染されていた場合に、スーパーユーザー( root
)のパスワードが盗み見られてしまうことです。そこで sudo
( “Switch User Do” ないし “Superuser Do” の意)の出番です:
$ cat /sys/devices/virtual/dmi/id/board_serial cat: /sys/devices/virtual/dmi/id/board_serial: Permission denied $ sudo cat /sys/devices/virtual/dmi/id/board_serial [sudo] password for emma: /6789ABC/
上の例では、ユーザーがシステムボードのシリアル番号を調べようとしていますが、その情報には特権マークが付けられているため、許可が与えられません。
sudo
を使用する場合には、自分が誰であるかを示すために自身のパスワードを入力します。sudoers
の設定オプションで特権を持ってそのコマンドを実行することが認められていれば、実行できます。
Tip
|
デフォルトでは、 |
アクセス制御のファイル
ほぼすべてのオペレーティングシステムには、アクセス制御情報を格納するための場所があります。Linuxの場合、システム設定ファイル を置くための /etc
ディレクトリにあるテキストファイルが普通です。デフォルトでは、すべてのユーザーがこのディレクトリを読み取ることができますが、書き込めるのは root
のみです。
ユーザーアカウント、属性、アクセス制御に関連する主なファイルは以下の通りです:
/etc/passwd
-
このファイルには、UID、GID、ホームディレクトリ、シェルなど、システムのユーザーに関する基本的な情報が収められています。名前はありますが、パスワードは含まれません。
/etc/group
-
このファイルには、システムのグループに関する情報: グループ名、GID、メンバーが収められています。
/etc/shadow
-
ここにはパスワードが収められていますが、セキュリティのためにハッシュ化されています。
/etc/gshadow
-
このファイルには、ユーザーが一時的にメンバーになるときのハッシュ化されたパスワード、グループのメンバーになれるユーザーのリスト、グループの管理者など、グループの詳細情報が収められています。
Warning
|
これらのファイルは、エディタで直接編集するようには設計されていません。このレッスンでは、これらのファイルに収められた情報を取り上げますが、編集することはありません。 |
デフォルトでは、ユーザーは誰でも /etc
に入って /etc/passwd
や /etc/group
を読むことができます。また、同じくデフォルトでは、root
以外のユーザーは /etc/shadow
と /etc/gshadow
を読むことができません。
Linuxシステムには、su
コマンドと sudo
コマンドでの権限の昇格に関するファイルもあります。デフォルトでは、これらのファイルには root
ユーザーしかアクセスできません。
/etc/sudoers
-
このファイルは、
sudo
コマンドを誰がどのように使用できるかを制御します。 /etc/sudoers.d
-
このディレクトリには、
sudoers
ファイルの設定を補足するファイルが収められます。
LPI Linux Essentials試験の観点からは、sudoのデフォルトの設定ファイル /etc/sodoers
のパスとファイル名のみを知っていれば充分です。その設定は、この教材の範囲を超えています。
Warning
|
|
/etc/passwd
/etc/passwd
ファイルは一般に “パスワードファイル” と呼ばれます。各行は、コロン( :
)で区切られた複数のフィールドを含んでいます。名前とは裏腹に、現在では、このファイルにハッシュ化されたパスワードは含まれていません。
このファイルの構文は次の通りです:
ユーザー名:パスワード:UID:GID:GECOS:ホームディレクトリ:シェル
ここでは:
ユーザー名
-
ユーザー名、すなわち、
root
やnobody
、emma
といったログイン名です。 パスワード
-
以前はハッシュ化したパスワードがありました。ほとんどの場合は
x
で、パスワードは/etc/shadow
にあることを示しています。 UID
-
ユーザーID(UID)です。
0
、99
、1024
など。 GID
-
プライマリグループID(GID)です。
0
、99
、1024
など。 GECOS
-
一般的にはユーザー情報として、名前、所在地、電話番号などをカンマ区切りで記入します。例えば、
Emma Smith,42 Douglas St,555.555.5555
などです。 ホームディレクトリ
-
ユーザーのホームディレクトリへのパスです。
/root
、/home/emma
など。 シェル
-
ユーザーのデフォルトシェルです。
/bin/bash
、/sbin/nologin
、/bin/ksh
など。
例えば、次の行はユーザー emma
に関する情報です:
emma:x:1000:1000:Emma Smith,42 Douglas St,555.555.5555:/home/emma:/bin/bash
GECOS フィールドを理解する
GECOSフィールドには、コンマ( ,
)区切りで、以下のように値を指定します。(訳注: 1960年代のGECOS(ジーコス)という名前の古いシステムに由来しており、フィールド本来の意味は以下に説明されている通りですが、実際にはコメント欄として使用されています。日本語で記入することはできません)。
名前, 所在地, 連絡先
ここでは:
名前
-
ユーザーの “本名” やサービスの場合はソフトウェアの名前。
所在地
-
ビル内のユーザーの所在地など。部屋番号や部署名、サービスの場合は担当者名など。
連絡先
-
自宅やオフィスの電話番号などの連絡先。
追加のフィールドには、番地や電子メールアドレスなどの連絡先を含められます。GECOSフィールドの情報を変更するには、以下のように chfn
コマンドを使って質問に答えていきます。コマンドの後にユーザー名を指定しなければ、現在のユーザーの情報を変更します。(訳注: GECOSフィールドを単なるメモ欄として使用する場合は chfn
コマンドではなく、vipw
コマンドを使って passwdファイルを編集します。ただし、root権限が必要です。)
$ chfn Changing the user information for emma Enter the new value, or press ENTER for the default Full Name: Emma Smith Room Number []: 42 Work Phone []: 555.555.5555 Home Phone []: 555.555.6666
/etc/group
/etc/group
ファイルは、コロン( :
)で区切ったフィールドに、システムのグループに関する基本的な情報が収められていて、“グループファイル” と呼ばれることもあります。構文は次の通りです:
名前:パスワード:GID:メンバー
ここでは:
名前
-
グループ名です。
root
、users
、emma
など。 パスワード
-
以前はハッシュ化したパスワードがありました。ほとんどの場合は
x
で、パスワードは/etc/gshadow
にあることを示しています。 GID
-
グループID(GID)です。
0
、99
、1024
など。 メンバー
-
グループのメンバーとなるユーザーを、コンマで区切ったリストです。
jsmith,emma
など。
以下に、students
グループに関する情報を含む行を示します:
students:x:1023:jsmith,emma
グループがユーザーのプライマリグループである場合は、メンバーフィールドに記載する必要がありません。ユーザーを記載しても冗長なだけで、記載してもしなくても働きは同じです。
Note
|
グループパスワードの利用はこのセクションの範囲外ですが、利用する場合はハッシュ化したパスワードを |
/etc/shadow
以下の表は “シャドウファイル” とも呼ばれる、/etc/shadow
ファイルに収められている属性のリストです。コロン( :
)で区切られたフィールドが含まれています。たくさんのフィールドがありますが、最初の2フィールドを除くほとんどは、レッスンの範囲外です。
このファイルの行の構文を示します:
ユーザー名:パスワード:最終変更日:最短期間:最長期間:警告日:イナクティブ:失効日
ここでは:
ユーザー名
-
/etc/passwd
と同じユーザー名です。root
、nobody
、emma
など。 パスワード
-
ハッシュ化されたパスワードで、ソルトも含んでいます。
!!
、!$1$01234567$ABC…
、$6$012345789ABCDEF$012…
など。(訳注: ソルトとは、ハッシュの安全性を高めるために使用するランダムな文字列。) 最終変更日
-
パスワードが最後に変更された日を “epoch” からの日数で示します。
17909
など。 最短期間
-
パスワード利用期間の最小日数です。
最長期間
-
パスワード利用期間の最大日数です。
警告日
-
パスワードが無効になる前に警告する日数です。
インアクティブ
-
パスワードが無効になってからの(再設定が可能な)日数です。
失効日
-
パスワードが失効する日を “epoch” からの日数で示します。
以下に /etc/shadow
のエントリの例を示します。ここでは、インアクティブ
と 失効日
は定義されていません。
emma:$6$nP532JDDogQYZF8I$bjFNh9eT1xpb9/n6pmjlIwgu7hGjH/eytSdttbmVv0MlyTMFgBIXESFNUmTo9EGxxH1OT1HGQzR0so4n1npbE0:18064:0:99999:7:::
POSIXシステムにおける “epoch” (エポック)とは、1970年1月1日(火曜日)の協定世界時(UTC)0時0分0秒です。POSIX日付と時刻のほとんどは、“epoch” からの秒数ですが、/etc/shadow
においては “epoch” からの日数です。
Note
|
シャドウファイルは、スーパーユーザーと中核システムの認証サービスが読み出せるように設計されています。そこでは、ログイン時や認証が必要な時に、一方向ハッシュ化されたパスワードをチェックします。 |
さまざまな認証ソリューションが存在しますが、パスワードを保存する基本的な方法は、一方向の ハッシュ関数 を使用することです。システムに平文のパスワードを保管せず、元に戻せないハッシュ値を保管します。パスワードからハッシュ値を求めることはできますが、ハッシュ値をパスワードに戻すことはできません。
パスワードを破るには、パスワードの組み合わせをすべてハッシュしてみる総当たり攻撃が必要です。パスワードのハッシュが破られることを低減するために、Linuxシステムではユーザー毎のパスワードにランダムな “salt” (ソルト)を使用します。そのため、あるLinuxシステムでパスワードをハッシュ化した値と、別のLinuxシステムでハッシュ化した値は、パスワードが同じ場合でも一致しません。
/etc/shadow
ファイルにおいて、パスワードにはいくつかの形式があります。一般的なものを以下に示します:
!!
-
パスワードが設定されておらず、“無効な” アカウントであることを示します(認証されません)。
!$1$01234567$ABC…
-
ハッシュとソルトはストアされていますが、先頭が感嘆符(
!
)なので、無効なアカウントです。 $1$0123456789ABC$012…
-
ハッシュ方式、ソルト、ハッシュ文字列を含む “有効な” アカウントです。
ハッシュ方式、ソルト、ハッシュ文字列の前にはドル記号( $
)を置いて区切ります。ソルトの長さは8〜16文字です。一般的な3種の例を示します:
$1$01234567$ABC…
-
ハッシュ方式は MD5(
1
)で、ハッシュ長が8の例です。 $5$01234567ABCD$012…
-
ハッシュ方式は SHA256(
5
)で、ハッシュ長が12の例です。 $6$01234567ABCD$012…
-
ハッシュ方式は SHA512(
6
)で、ハッシュ長が12の例です。
Note
|
MD5ハッシュ方式は、今日(2010年代以降)のレベルのASICや、一般的なベクトル計算でも、暗号的に安全ではないと考えられています。たとえば、米国連邦情報処理標準(FIPS)では、MD5を暗号化機能に使用することはできません。限定された検証機能のみが使用でき、デジタル署名または同種の目的での検証には使用できません。 |
LPI Linux Essentialsの出題範囲と試験の観点からは、ローカルユーザーのハッシュ化されたパスワードが、/etc/shadow
ファイルにのみストアされて、認証サービスが読み出せること、スーパーユーザーは別のコマンドで読み出せることを理解していれば十分です。
演習
-
次の
id
コマンドの出力を見てみましょう。$ id emma uid=1000(emma) gid=1000(emma) groups=1000(emma),4(adm),5(tty),10(uucp),20(dialout),27(sudo),46(plugdev)
次の属性が収められているファイルは何ですか?
UID と GID
グループ
-
さらに、ユーザーのパスワードが収められているファイルは何ですか?
-
-
Linuxシステムで、パスワードをローカルに保存するときの暗号化方式はどれですか?
-
非対称暗号
-
一方向ハッシュ
-
対称暗号
-
ROT13
-
-
ユーザーID(UID)1000以下のアカウントの種類は何ですか?
-
システムに現在ログインしているユーザーの一覧を得る方法は何で、その人数を知る方法は何ですか?
-
grep
コマンドを使って、ユーザーemma
に関する情報を得ました。$ grep emma /etc/passwd emma:x:1000:1000:Emma Smith,42 Douglas St,555.555.5555,:/home/emma:/bin/ksh
先のコマンドの出力を使って、表の空欄を適当な情報で埋めて下さい。
ユーザー名
パスワード
UID
プライマリGID
GECOS
ホームディレクトリ
シェル
発展演習
-
last
とw
、who
の出力を比べてみましょう。それぞれのコマンドに欠けている詳細情報は何ですか? -
コマンド
who
とw -his
を実行して比較します。-
w
コマンドの “ヘッダーなし” (-h
)オプションと、“短い” (-s
)オプションで、出力から削除される情報は何ですか? -
w
コマンドの “IPアドレス” (-i
)オプションで出力に追加される情報は何ですか?
-
-
ユーザーアカウントの一方向ハッシュ化されたパスワードを収めているファイルは何ですか?
-
ユーザーアカウントがメンバーであるグループの一覧を収めているファイルは何ですか? ユーザーアカウントが所属しているグループのリストを得るには、どのようなロジックを使いますか?
-
以下のリストから、特権を持たない通常ユーザーがデフォルトでは読み出せないファイルを選びましょう。
-
/etc/group
-
/etc/passwd
-
/etc/shadow
-
/etc/sudoers
-
-
現在のユーザーのログインシェルを Kone Shell(
/usr/bin/ksh
)に、非対話モードで変更するにはどうしますか? -
root
のホームディレクトリが/home
に無いのはなぜですか?
まとめ
このレッスンでは、Linuxのユーザーとグループのデータベースを見てきました。ユーザーとグループが持つ最も重要な属性は、名前とID番号でした。パスワードのハッシュ値がLinuxでどのように使われるのか、また、ユーザーにグループをどのように割り当てるのかも調べました。
これらすべての情報は以下の4つのファイルに収められて、Linuxシステムにおける最も基本的なセキュリティとなるアクセス制御に使われます。
/etc/passwd
-
システムにローカルなユーザーアカウントの、ハッシュ化されたパスワードを除くすべてのPOSIX属性。誰でも読み出せる。
/etc/group
-
システムにローカルなグループアカウントの、すべてのPOSIX属性。誰でも読み出せる。
/etc/shadow
-
システムにローカルなユーザーのハッシュ化されたパスワード(と有効期限情報)。特別なプロセスを除き誰にも読み出せません。
/etc/sudoers
-
sudo
コマンドのための、システムにローカルな権限昇格と許可の情報。
このレッスンでは、以下のコマンドを取り上げました:
id
-
実ユーザーID(ないし実効ユーザーID)と、グループIDを表示します。
last
-
直近にログインしたユーザーを表示します。
who
-
現在ログインしているユーザーを表示します。
w
-
who
に類似していますが、追加の内容があります。 su
-
ログインシェルと共に別のユーザーに切り替える。または、別のユーザーとしてコマンドを実行する。切り替え先のユーザーのパスワードを使用する。
sudo
-
別のユーザー(ないしスーパーユーザー)に切り替えて実行する。資格があれば、(必要に応じて)自身のパスワードを入力して権限を昇格できる。
chsh
-
ユーザーのログインシェルを変更する。
chfn
-
GECOSフィールドのユーザー情報を変更する。
演習の解答
-
次の
id
コマンドの出力を見てみましょう。$ id emma uid=1000(emma) gid=1000(emma) groups=1000(emma),4(adm),5(tty),10(uucp),20(dialout),27(sudo),46(plugdev)
次の属性が収められているファイルは何ですか?
UID と GID
/etc/passwd
グループ
/etc/group
-
さらに、ユーザーのパスワードが収められているファイルは何ですか?
ハッシュ化されたユーザーパスワードが、
/etc/shadow
に収められています。
-
-
Linuxシステムで、パスワードをローカルに保存するときの暗号化方式はどれですか?
デフォルトでは、パスワードを保存するのに一方向ハッシュが使われます。
-
ユーザーID(UID)1000以下のアカウントの種類は何ですか?
通常、ユーザーID(UID)1000以下のアカウントは、システムアカウントです。
-
システムに現在ログインしているユーザーの一覧を得る方法は何で、その人数を知る方法は何ですか?
w
コマンドを使用します。ログイン中のユーザーのリストに加えて、ログイン中の人数や、システムの負荷や稼働時間も表示します。 -
grep
コマンドを使って、ユーザーemma
に関する情報を得ました。$ grep emma /etc/passwd emma:x:1000:1000:Emma Smith,42 Douglas St,555.555.5555,:/home/emma:/bin/ksh
先のコマンドの出力を使って、表の空欄を適当な情報で埋めて下さい。
ユーザー名
emma
パスワード
x
- 有効なログインアカウントではx
であることが必要ですUID
1000
プライマリGID
1000
GECOS
Emma Smith,42 Douglas St,555.555.5555
ホームディレクトリ
/home/emma
シェル
/bin/ksh
発展演習の解答
-
last
とw
、who
の出力を比べてみましょう。それぞれのコマンドに欠けている詳細情報は何ですか?w
とwho
はシステムにログインしているユーザーのみを表示するのに対して、last
は切断したユーザーも表示します。w
コマンドはwho
が表示しないシステム状況を表示します。 -
コマンド
who
とw -his
を実行して比較します。-
w
コマンドの “ヘッダーなし” (-h
)オプションと、“短い” (-s
)オプションで、出力から削除される情報は何ですか?理解に役立つヘッダーが表示されません。ログイン時間とCPU情報はどちらも表示されません。
-
w
コマンドの “IPアドレス” (-i
)オプションで出力に追加される情報は何ですか?DNS解決を試みてホスト名を表示する代わりに IPアドレスを表示します。
w
コマンドのこのオプションは、last
コマンドのデフォルトの出力に似ています。
-
-
ユーザーアカウントの一方向ハッシュ化されたパスワードを収めているファイルは何ですか?
/etc/shadow
ファイルには、一方向ハッシュ化されたパスワードが格納されていて、/etc/passwd
ファイルとは異なり通常の非特権ユーザーアカウントでは読み出せません。 -
ユーザーアカウントがメンバーであるグループの一覧を収めているファイルは何ですか? ユーザーアカウントが所属しているグループのリストを得るには、どのようなロジックを使いますか?
/etc/group
ファイルの各行は1つのグループを表しており、最後のフィールドはカンマで区切ったユーザー名のリストで “メンバー” を表しています。/etc/group
ファイルの各行の最後のフィールドはユーザーのリストで “メンバー” を表しています。カンマで区切られた書式であれば、メンバーのユーザーがグループのメンバーであることを意味しています。さらに、/etc/passwd
ファイルに収められたユーザーのプライマリグループも、/etc/group
ファイル内にそのグループ名とGIDのエントリを持っています。 -
以下のリストから、特権を持たない通常ユーザーがデフォルトでは読み出せないファイルを選びましょう。
-
/etc/group
-
/etc/passwd
-
/etc/shadow
-
/etc/sudoers
/etc/shadow
ファイルと/etc/sudoers
ファイルは、所定のサービスかスーパーユーザー以外は読み出せないのがデフォルトです。答はシステムによって異なることがあります。
-
-
現在のユーザーのログインシェルを Kone Shell(
/usr/bin/ksh
)に、非対話モードで変更するにはどうしますか?$ chsh -s /usr/bin/ksh
-
root
のホームディレクトリが/home
に無いのはなぜですか?トラブルシューティングやエラーの修復を行うには
root
アカウントが必要ですが、/home
ディレクトリのあるファイルシステムに問題が起きているのかもしれません。/home
ディレクトリが利用できないときでも、root
は完全に機能する必要があるからです。