前書き
Linuxは、ファイルシステムレベルでセキュリティを提供するために、file ownershipおよびpermissionsのUnixの概念に基づくマルチユーザーOSです。 Linuxのスキルを向上させることを計画している場合、所有権と権限がどのように機能するかについて十分に理解していることが不可欠です。 ファイルの所有権とアクセス許可を扱う際には多くの複雑さがありますが、それらがどのように機能するかの基本的な理解に必要な詳細まで概念を抽出するために最善を尽くします。
このチュートリアルでは、Linuxの所有権と許可を表示および理解する方法について説明します。 権限を変更する方法に関するチュートリアルを探している場合は、次のガイドを確認してください:Linux Permissions Basics and How to Use Umask on a VPS
前提条件
このシリーズの以前のチュートリアルで説明されている概念を必ず理解してください。
このチュートリアルに従うためにLinuxサーバーにアクセスすることは必ずしも必要ではありませんが、使用するサーバーを用意しておけば、実際に体験することができます。 設定する場合は、check out this linkを参照してください。
ユーザーについて
はじめに述べたように、Linuxはマルチユーザーシステムです。 Linuxのusersとgroupsは、所有権とアクセス許可が適用されるエンティティであるため、所有権とアクセス許可について説明する前に、それらの基本を理解する必要があります。 ユーザーが何であるかの基本から始めましょう。
Linuxには、system usersとregular usersの2種類のユーザーがいます。 従来、システムユーザーはシステム上で非対話型またはバックグラウンドプロセスを実行するために使用され、通常のユーザーはプロセスに対話的にログインして実行するために使用されていました。 Linuxシステムに初めてログインすると、OSが依存するサービスを実行する多くのシステムユーザーで起動することに気付く場合があります。これは完全に正常です。
システム上のすべてのユーザーを表示する簡単な方法は、/etc/passwd
ファイルの内容を確認することです。 このファイルの各行には、user name(最初の:
の前の名前)で始まる単一のユーザーに関する情報が含まれています。 次のコマンドを使用して、passwd
ファイルを出力します。
cat /etc/passwd
スーパーユーザー
2つのユーザータイプに加えて、superuserまたはrootユーザーがあり、ファイルの所有権とアクセス許可の制限を上書きすることができます。 実際には、これは、スーパーユーザーが自身のサーバー上のすべてにアクセスする権利を持っていることを意味します。 このユーザーは、システム全体の変更を行うために使用され、安全に保つ必要があります。
「スーパーユーザー権限」を引き受ける機能を持つ他のユーザーアカウントを構成することもできます。 実際、システム管理タスクに対してsudo
特権を持つ通常のユーザーを作成することは、ベストプラクティスと見なされます。
グループについて
グループは、ゼロ以上のユーザーのコレクションです。 ユーザーはデフォルトグループに属し、サーバー上の他のグループのメンバーになることもできます。
すべてのグループとそのメンバーを表示する簡単な方法は、サーバー上の/etc/group
ファイルを調べることです。 この記事ではグループ管理については説明しませんが、グループに興味がある場合は次のコマンドを実行できます。
cat /etc/group
ユーザーとグループがわかったところで、ファイルの所有権と許可について話しましょう!
所有権と権限の表示
Linuxでは、すべてのファイルは1人のユーザーと1つのグループによって所有されており、独自のアクセス許可を持っています。 ファイルの所有権と許可を表示する方法を見てみましょう。
ファイルのパーミッションを表示する最も一般的な方法は、ロングリストオプションでls
を使用することです。 ls -l myfile
。 現在のディレクトリ内のすべてのファイルのアクセス許可を表示するには、次のように引数なしでコマンドを実行します。
ls -l
Hint:空のホームディレクトリにいて、表示するファイルをまだ作成していない場合は、次のコマンドを実行して、/etc
ディレクトリの内容を一覧表示できます。%(t2 )s
出力の各列のラベルを使用して、出力がどのように見えるかのスクリーンショットの例を次に示します。
各ファイルのモード(権限を含む)、所有者、グループ、および名前がリストされていることに注意してください。 Mode列を除けば、このリストはかなり理解しやすいです。 これらすべての文字とハイフンの意味を説明するために、Mode列をそのコンポーネントに分解してみましょう。
モードを理解する
すべてのグループ化と文字の意味を説明するために、上記の例の最初のファイルのmodeのクローズアップを見てください。
ファイルの種類
Linuxには、normalとspecialの2つの基本的なタイプのファイルがあります。 ファイルタイプは、ファイルのmodeの最初の文字で示されます。このガイドでは、これをfile type fieldと呼びます。
通常のファイルは、ファイルタイプフィールドにハイフン(-
)が含まれるファイルで識別できます。 通常ファイルは、データを含むことができる単なるファイルです。 それらは、特殊ファイルと区別するために、通常ファイルまたは通常ファイルと呼ばれます。
特殊ファイルは、ファイルタイプフィールドに文字などの非ハイフン文字を含むファイルによって識別でき、通常のファイルとは異なる方法でOSによって処理されます。 [ファイルタイプ]フィールドに表示される文字は、特定のファイルの種類を示しています。 たとえば、最も一般的な種類の特殊ファイルであるディレクトリは、(前のスクリーンショットのように)ファイルタイプフィールドに表示されるd
文字で識別されます。 他にもいくつかの種類の特別なファイルがありますが、ここで学んでいることは必須ではありません。
許可クラス
この図から、Mode列がファイルの種類を示し、その後にユーザー(所有者)、グループ、その他の3つの権限のトライアドまたはクラスが続くことがわかります。 クラスの順序は、すべてのLinuxディストリビューションで一貫しています。
各アクセス許可クラスに属するユーザーを見てみましょう。
-
User:ファイルのownerはこのクラスに属します
-
Group:ファイルのグループのメンバーはこのクラスに属しています
-
Other:userまたはgroupクラスの一部ではないユーザーは、このクラスに属します。
シンボリック許可の読み取り
次に注意することは、3つの文字のセット、つまりトライアドです。これらは、各クラスが特定のファイルに対して持つ許可を記号形式で示すためです。
各トライアドでは、読み取り、書き込み、および実行のアクセス許可は次のように表されます。
-
Read:最初の位置に
r
で示されます -
Write:2番目の位置に
w
で示されます -
Execute:3番目の位置に
x
で示されます。 いくつかの特別な場合には、ここに異なるキャラクターがあるかもしれません
これらの文字のいずれかの代わりにハイフン(-
)を使用すると、それぞれのクラスでそれぞれの権限が使用できないことを示します。 たとえば、ファイルのgroupトライアドがr--
の場合、ファイルは、ファイルに関連付けられているグループに対して「読み取り専用」になります。
読み取り、書き込み、実行について
ファイルのどのアクセス許可を読み取るかがわかったので、おそらく各アクセス許可が実際にユーザーに許可していることを知りたいでしょう。 各アクセス許可について個別に説明しますが、ファイルとディレクトリへの有意義なアクセスを可能にするために、それらを互いに組み合わせて使用することが多いことに留意してください。
以下に、3つの基本的な許可タイプがユーザーに付与するアクセスの概要を示します。
Read
通常のファイルの場合、読み取り許可により、ユーザーはファイルの内容を表示できます。
ディレクトリーの場合、読み取り許可により、ユーザーはディレクトリー内のファイルの名前を表示できます。
書きます
通常のファイルの場合、書き込み許可により、ユーザーはファイルを変更および削除できます。
ディレクトリの場合、書き込み許可により、ユーザーはディレクトリを削除し、その内容を変更(ディレクトリ内のファイルを作成、削除、および名前変更)し、ユーザーが読み取れるファイルの内容を変更できます。
実行する
通常のファイルの場合、実行権限により、ユーザーはファイルを実行できます(ユーザーには読み取り権限も必要です)。 そのため、ユーザーが実行する前に、実行可能プログラムとシェルスクリプトの実行権限を設定する必要があります。
ディレクトリの場合、実行権限により、ユーザーはアクセスまたはトラバースできます(つまり、 cd
)およびディレクトリ内のファイルに関するメタデータ(ls -l
にリストされている情報)にアクセスします。
モード(および権限)の例
ファイルのモードの読み方と各許可の意味を理解したので、概念をまとめるために、一般的なモードの例を簡単な説明とともにいくつか紹介します。
-
-rw-------
:所有者のみがアクセスできるファイル -
-rwxr-xr-x
:システム上のすべてのユーザーが実行できるファイル。 「世界で実行可能な」ファイル -
-rw-rw-rw-
:システム上のすべてのユーザーが変更できるファイル。 「world-writable」ファイル -
drwxr-xr-x
:システム上のすべてのユーザーが読み取ってアクセスできるディレクトリ -
drwxrwx---
:所有者とグループによって(その内容を含めて)変更可能なディレクトリ -
drwxr-x---
:そのグループがアクセスできるディレクトリ
お気づきかもしれませんが、通常、ファイルの所有者は、他の2つのクラスと比較すると、ほとんどのアクセス許可を享受します。 通常、groupクラスとotherクラスには、所有者の権限のサブセット(同等以下)しかありません。 これは、特定の理由でファイルにアクセスする必要があるユーザーのみがファイルにアクセスできるようにする必要があるためです。
もう1つ注意すべき点は、多くのアクセス許可の組み合わせが可能であっても、ほとんどの状況で特定のアクセス許可の組み合わせだけが意味をなすことです。 たとえば、writeまたはexecuteアクセスには、ほとんどの場合、readアクセスが伴います。これは、読み取りが不可能なものを変更するのが難しく、実行できないためです。
所有権と許可の変更
このチュートリアルを簡単にするために、ここではファイルの所有権と許可を変更する方法については説明しません。 chown
、chgrp
、およびchmod
を使用してこれらのタスクを実行する方法については、次のガイドを参照してください:Linux Permissions Basics and How to Use Umask on a VPS。
結論
これで、Linuxで所有権と許可がどのように機能するかを十分に理解できるはずです。 Linuxの基本について詳しく知りたい場合は、このシリーズの次のチュートリアルを読むことを強くお勧めします。