Linux Professional Institute Learning Logo.
main contentにスキップ
  • ホーム
    • 全てのリソース
    • LPI学習教材
    • コントリビューターになる
    • Publishing Partners
    • Publishing Partnerになる
    • About
    • FAQ
    • コントリビューター
    • Roadmap
    • 連絡先
  • LPI.org
5.1 レッスン 1
課題 1: Linuxコミュニティとオープンソースのキャリア
1.1 ポピュラーなOSとLinuxの発展
  • 1.1 レッスン 1
1.2 主なオープンソースのアプリケーション
  • 1.2 レッスン 1
1.3 オープンソースソフトウエアとライセンス
  • 1.3 レッスン 1
1.4 ICTスキルとLinuxでの作業
  • 1.4 レッスン 1
課題 2: Linuxシステムで自分の手法を見つける
2.1 コマンドラインの基本
  • 2.1 レッスン 1
  • 2.1 レッスン 2
2.2 コマンドラインのヘルプ機能の利用
  • 2.2 レッスン 1
2.3 ディレクトリの利用とファイルの一覧
  • 2.3 レッスン 1
  • 2.3 レッスン 2
2.4 ファイルの作成、移動と削除
  • 2.4 レッスン 1
課題 3: コマンドラインの力
3.1 コマンドラインでのファイル圧縮
  • 3.1 レッスン 1
3.2 ファイルの検索と展開
  • 3.2 レッスン 1
  • 3.2 レッスン 2
3.3 コマンドをスクリプトにする
  • 3.3 レッスン 1
  • 3.3 レッスン 2
課題 4: Linuxオペレーティングシステム
4.1 オペレーティングシステムの選択
  • 4.1 レッスン 1
4.2 コンピュータハードウエアの理解
  • 4.2 レッスン 1
4.3 データの保管場所
  • 4.3 レッスン 1
  • 4.3 レッスン 2
4.4 ネットワーク上のコンピュータ
  • 4.4 レッスン 1
課題 5: セキュリティとファイルパーミッション
5.1 セキュリティの基本と、ユーザタイプの確認
  • 5.1 レッスン 1
5.2 ユーザとグループの作成
  • 5.2 レッスン 1
5.3 ファイルのパーミッションと所有権の管理
  • 5.3 レッスン 1
5.4 特別なディレクトリとファイル
  • 5.4 レッスン 1
How to get certified
  1. 課題 5: セキュリティとファイルパーミッション
  2. 5.1 セキュリティの基本と、ユーザタイプの確認
  3. 5.1 レッスン 1

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 は、ネットワーク経由で(仮想TTY pts/3)からログインし、今もログイン中である。

  • カーネルがブートした時刻が表示されています。上の例ではユーザーがログインする25分ほど前でした。

  • スーパーユーザー( root )が、仮想コンソール(TTY tty2 )から、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 )に切り替えてはいけません。OSやソフトウェアのベンダーから指示されていない限り、su が必要なときには(ごくわずかの例外を除いて)常に su - を使います。全権を持つスーパーユーザーモードに、( - を付けずに)ユーザー環境を引き継ぐと、意図しない構成変更や問題を引き起こすことがあります。

スーパーユーザー( 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

デフォルトでは、sudo コマンドがいったん許可されると、後続のコマンドは短い期間、自動的に認証されます。システム管理者がこの設定を行います。

アクセス制御のファイル

ほぼすべてのオペレーティングシステムには、アクセス制御情報を格納するための場所があります。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/sudoers はテキストファイルですが、直接編集してはいけません。このファイルの内容を変更するときは、visudo ユーティリティを使います。

/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/gshadow ファイルに記載します。これも、本章の範囲外です。(訳注: 現在、グループパスワードを使うことはほぼありません)。

/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 ファイルにのみストアされて、認証サービスが読み出せること、スーパーユーザーは別のコマンドで読み出せることを理解していれば十分です。

演習

  1. 次の 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

    グループ

    • さらに、ユーザーのパスワードが収められているファイルは何ですか?

  2. Linuxシステムで、パスワードをローカルに保存するときの暗号化方式はどれですか?

    • 非対称暗号

    • 一方向ハッシュ

    • 対称暗号

    • ROT13

  3. ユーザーID(UID)1000以下のアカウントの種類は何ですか?

  4. システムに現在ログインしているユーザーの一覧を得る方法は何で、その人数を知る方法は何ですか?

  5. 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

    ホームディレクトリ

    シェル

発展演習

  1. last と w、who の出力を比べてみましょう。それぞれのコマンドに欠けている詳細情報は何ですか?

  2. コマンド who と w -his を実行して比較します。

    • w コマンドの “ヘッダーなし” ( -h )オプションと、“短い” ( -s )オプションで、出力から削除される情報は何ですか?

    • w コマンドの “IPアドレス” ( -i )オプションで出力に追加される情報は何ですか?

  3. ユーザーアカウントの一方向ハッシュ化されたパスワードを収めているファイルは何ですか?

  4. ユーザーアカウントがメンバーであるグループの一覧を収めているファイルは何ですか? ユーザーアカウントが所属しているグループのリストを得るには、どのようなロジックを使いますか?

  5. 以下のリストから、特権を持たない通常ユーザーがデフォルトでは読み出せないファイルを選びましょう。

    • /etc/group

    • /etc/passwd

    • /etc/shadow

    • /etc/sudoers

  6. 現在のユーザーのログインシェルを Kone Shell( /usr/bin/ksh )に、非対話モードで変更するにはどうしますか?

  7. 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フィールドのユーザー情報を変更する。

演習の解答

  1. 次の 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 に収められています。

  2. Linuxシステムで、パスワードをローカルに保存するときの暗号化方式はどれですか?

    デフォルトでは、パスワードを保存するのに一方向ハッシュが使われます。

  3. ユーザーID(UID)1000以下のアカウントの種類は何ですか?

    通常、ユーザーID(UID)1000以下のアカウントは、システムアカウントです。

  4. システムに現在ログインしているユーザーの一覧を得る方法は何で、その人数を知る方法は何ですか?

    w コマンドを使用します。ログイン中のユーザーのリストに加えて、ログイン中の人数や、システムの負荷や稼働時間も表示します。

  5. 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

発展演習の解答

  1. last と w、who の出力を比べてみましょう。それぞれのコマンドに欠けている詳細情報は何ですか?

    w と who はシステムにログインしているユーザーのみを表示するのに対して、last は切断したユーザーも表示します。w コマンドは who が表示しないシステム状況を表示します。

  2. コマンド who と w -his を実行して比較します。

    • w コマンドの “ヘッダーなし” ( -h )オプションと、“短い” ( -s )オプションで、出力から削除される情報は何ですか?

      理解に役立つヘッダーが表示されません。ログイン時間とCPU情報はどちらも表示されません。

    • w コマンドの “IPアドレス” ( -i )オプションで出力に追加される情報は何ですか?

      DNS解決を試みてホスト名を表示する代わりに IPアドレスを表示します。w コマンドのこのオプションは、last コマンドのデフォルトの出力に似ています。

  3. ユーザーアカウントの一方向ハッシュ化されたパスワードを収めているファイルは何ですか?

    /etc/shadow ファイルには、一方向ハッシュ化されたパスワードが格納されていて、/etc/passwd ファイルとは異なり通常の非特権ユーザーアカウントでは読み出せません。

  4. ユーザーアカウントがメンバーであるグループの一覧を収めているファイルは何ですか? ユーザーアカウントが所属しているグループのリストを得るには、どのようなロジックを使いますか?

    /etc/group ファイルの各行は1つのグループを表しており、最後のフィールドはカンマで区切ったユーザー名のリストで “メンバー” を表しています。

    /etc/group ファイルの各行の最後のフィールドはユーザーのリストで “メンバー” を表しています。カンマで区切られた書式であれば、メンバーのユーザーがグループのメンバーであることを意味しています。さらに、/etc/passwd ファイルに収められたユーザーのプライマリグループも、/etc/group ファイル内にそのグループ名とGIDのエントリを持っています。

  5. 以下のリストから、特権を持たない通常ユーザーがデフォルトでは読み出せないファイルを選びましょう。

    • /etc/group

    • /etc/passwd

    • /etc/shadow

    • /etc/sudoers

      /etc/shadow ファイルと /etc/sudoers ファイルは、所定のサービスかスーパーユーザー以外は読み出せないのがデフォルトです。答はシステムによって異なることがあります。

  6. 現在のユーザーのログインシェルを Kone Shell( /usr/bin/ksh )に、非対話モードで変更するにはどうしますか?

    $ chsh -s /usr/bin/ksh
  7. root のホームディレクトリが /home に無いのはなぜですか?

    トラブルシューティングやエラーの修復を行うには root アカウントが必要ですが、/home ディレクトリのあるファイルシステムに問題が起きているのかもしれません。/home ディレクトリが利用できないときでも、root は完全に機能する必要があるからです。

Linux Professional Insitute Inc. All rights reserved. 学習資料をご覧ください: https://learning.lpi.org
ここでの作成物は、Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Licenseの下でライセンスされています。

次のレッスン

5.2 ユーザとグループの作成 (5.2 レッスン 1)

次のレッスンを読む

Linux Professional Insitute Inc. All rights reserved. 学習資料をご覧ください: https://learning.lpi.org
ここでの作成物は、Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Licenseの下でライセンスされています。

LPIは非営利団体です。

© 2023 Linux Professional Institute(LPI)は、オープンソースプロフェッショナル向けのグローバルな認定基準およびキャリアサポート組織です。200,000人以上の認定保持者を擁する、世界初かつ最大のベンダー中立Linuxおよびオープンソース認定機関です。LPIは180か国以上で認定プロフェッショナルを擁し、複数の言語で試験を実施し、何百ものトレーニングパートナーを擁しています。

私たちの目的は、オープンソースの知識とスキルの認定資格を世界中からアクセスできるようにすることで、誰にとっても経済的で創造的な機会を可能にすることです。

  • LinkedIn
  • flogo-RGB-HEX-Blk-58 Facebook
  • Twitter
  • お問い合わせ
  • 個人情報とCookieポリシー

間違いを見つけたり、このページを改善したいですか? 私たちに知らせてください。.

© 1999–2023 The Linux Professional Institute Inc. All rights reserved.