導入
Linuxは、定義上、ファイル所有権とアクセス権のUnixコンセプトに基づいたマルチユーザーOSです。ファイルシステムレベルでセキュリティを提供します。クラウドサーバーを信頼性よく管理するには、所有権とアクセス権がどのように機能するかを理解することが不可欠です。ファイル所有権とアクセス権の取り扱いには多くの複雑な点がありますが、このチュートリアルでは良い導入を提供します。
このチュートリアルでは、Linuxの所有権とアクセス権を表示して理解する方法について説明します。アクセス権を変更する方法についてのチュートリアルを探している場合は、Linuxのアクセス権の基礎とVPSでUmaskを使用する方法を読んでください。
前提条件
このシリーズの前のチュートリアルでカバーされている概念を理解していることを確認してください:
このチュートリアルに従うためには、クラウドサーバーへのアクセスが必要です。 DigitalOceanのドロップレットを作成するガイドに従ってください。
ユーザーについて
導入で述べたように、Linuxはマルチユーザーシステムです。所有権とアクセス許可が適用されるエンティティであるため、Linuxのユーザーとグループの基礎を理解しておく必要があります。では、ユーザーが何かを始めましょう。
Linuxでは、システムユーザーと通常のユーザーの2種類のユーザーがあります。伝統的に、システムユーザーはシステム上で非対話型またはバックグラウンドプロセスを実行するために使用され、通常のユーザーはログインして対話型プロセスを実行するために使用されます。Linuxシステムを初期化してログインすると、OSが依存するサービスを実行するために既に多くのシステムユーザーが作成されていることに気づくかもしれません。これは正常です。
システム上のすべてのユーザーを表示するには、/etc/passwd
ファイルの内容を見ることでできます。このファイルの各行には、そのユーザーに関する情報が含まれており、最初の:
の前の名前がユーザー名です。 passwd
ファイルの内容をcat
で表示できます:
Output…
sshd:x:109:65534::/run/sshd:/usr/sbin/nologin
landscape:x:110:115::/var/lib/landscape:/usr/sbin/nologin
pollinate:x:111:1::/var/cache/pollinate:/bin/false
systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin
lxd:x:998:100::/var/snap/lxd/common/lxd:/bin/false
vault:x:997:997::/home/vault:/bin/bash
stunnel4:x:112:119::/var/run/stunnel4:/usr/sbin/nologin
sammy:x:1001:1002::/home/sammy:/bin/sh
スーパーユーザー
2つのユーザータイプに加えて、スーパーユーザーまたはルートユーザーと呼ばれるものが存在し、このユーザーは任意のファイル所有権およびアクセス許可制限をオーバーライドする能力を持っています。実際、これはスーパーユーザーが自分自身のサーバー上のすべてにアクセス権を持っていることを意味します。このユーザーはシステム全体の変更を行うために使用されます。
また、「スーパーユーザー権限」を持つ他のユーザーアカウントを構成することも可能です。これは一般に、管理者レベルのコマンドの前にsudo
を付けて一時的にスーパーユーザー権限を取得できるユーザーのことを指します。実際、システム管理タスク用にsudo
特権を持つ通常のユーザーを作成することがベストプラクティスとされています。これにより、ルートユーザーアカウントの使用をより控えめにすることができます。
グループについて
グループはゼロ以上のユーザーの集まりです。ユーザーはデフォルトのグループに属し、サーバー上の他のいずれかのグループのメンバーでもあることができます。
システム上のすべてのグループとそのメンバーを確認するには、/etc/passwd
と同様に/etc/group
ファイルを見ることができます。この記事ではグループ管理については扱いません。
ユーザーとグループが何かを理解したところで、ファイルの所有権とアクセス権について話しましょう!
所有権とアクセス権の表示
Linuxでは、すべてのファイルは1つのユーザーと1つのグループによって所有され、それぞれ独自のアクセス権を持っています。ファイルの所有権とアクセス権を表示する方法を見てみましょう。
ファイルのアクセス権を表示する最も一般的な方法は、長いリストオプション-l
を使ってls
を使用することです。例:ls -l myfile
。現在のディレクトリのすべてのファイルのアクセス権を表示したい場合は、myfile
引数なしでコマンドを実行します。
注意:空のホームディレクトリにいて、まだ表示するファイルを作成していない場合は、次のコマンドを実行して/etc
ディレクトリの内容をリストすることで、手順に従うことができます:ls -l /etc
こちらは、ls -l
の出力の例と、各列のラベルが付いたスクリーンショットです:
各ファイルには、モード(アクセス権を含む)、所有者、グループ、および名前がリストされます。これらの文字とハイフンが何を意味するのかを説明するために、モード列をその構成要素に分解してみましょう。
理解モード
上記の例の最初のファイルのモードメタデータの説明を支援するために、以下にすべてのグループと文字が何を意味するかを説明します。
ファイルの種類
Linuxには、2種類のファイルがあります:通常と特殊。ファイルの種類は、ファイルのモードの最初の文字によって示されます。このガイドでは、これを「ファイルの種類フィールド」と呼びます。
通常のファイルは、ファイルの種類フィールドにハイフン(-
)があることで識別できます。通常のファイルにはデータやその他のものが含まれています。これらは特殊ファイルと区別するために通常ファイルまたは通常ファイルと呼ばれます。
特殊ファイルは、ファイルの種類フィールドに文字(例えば、文字)を含むことで識別できます。通常のファイルとは異なり、OSによって異なる方法で処理されます。ファイルの種類フィールドに表示される文字は、特定のファイルがどのような種類の特殊ファイルであるかを示します。たとえば、ディレクトリは、そのファイルの種類フィールドに表示されるd
文字によって識別されます(前のスクリーンショットのように)。その他にもいくつかの種類の特殊ファイルがあります。
アクセス権クラス
この図から、mode列がファイルタイプを示し、その後に三つのトライアド、またはクラス、が続くことがわかります:ユーザー(所有者)、グループ、その他。クラスの順序はすべてのLinuxシステムで一貫しています。
三つの権限クラスは次のように機能します:
- ユーザー:ファイルの所有者がこのクラスに属しています。
- グループ:ファイルのグループのメンバーがこのクラスに属しています。グループの権限は、特定のファイルに対して複数のユーザーに権限を割り当てる便利な方法です。
- その他:このファイルのユーザーまたはグループクラスの一部でないすべてのユーザーがこのクラスに属しています。
シンボリック権限の読み取り
次に注目するべきは、それらの三つ組のセットです。これらは、与えられたファイルの各クラスが持つシンボリック形式の権限を示しています。
各三つ組では、読み取り、書き込み、実行権限が次のように表されます:
- 読み取り:最初の位置に
r
が示されます。 - 書き込み:二番目の位置に
w
が示されます。 - 実行: 3 番目の位置に
x
があることで示されます。 一部の特殊な場合では、ここに異なる文字があるかもしれません。
A hyphen (-
) in the place of one of these characters indicates that the respective permission is not available for the respective class. For example, if the group (second) triad for a file is r--
, the file is “read-only” to the group that is associated with the file.
読み取り、書き込み、実行の理解
ファイルの権限を読み取る方法を知ったので、実際に各権限がユーザーに何を許可するかを知っておく必要があります。 このチュートリアルでは各権限を個別に説明しますが、ファイルやディレクトリへの有用なアクセスを許可するためにしばしば互いに組み合わせて使用されます。
以下は、3つの権限タイプがユーザーに与えるアクセスの分解です:
読み取り
通常のファイルの場合、読み取り権限はユーザーがファイルの内容を表示することを許可します。
ディレクトリの場合、読み取り権限はユーザーがディレクトリ内のファイル名を表示することを許可します。
書き込み
通常のファイルの場合、書き込み権限はユーザーがファイルを変更および削除することを許可します。
ディレクトリに対する書き込み権限は、ユーザーがディレクトリを削除し、その内容を変更することを許可します(ファイルの作成、削除、および名前の変更)、およびユーザーが書き込み権限を持つファイルの内容を変更することができます。
実行
通常のファイルに対して、実行権限はユーザーがファイルを実行(実行)できるようにします — ユーザーは読み取り権限も持っている必要があります。ユーザーがそれらを実行する前に、実行可能なプログラムとシェルスクリプトに対して実行権限を設定する必要があります。
ディレクトリに対して、実行権限はユーザーがディレクトリにアクセスしたり(つまり、cd
を使用して移動したり)、ディレクトリ内のファイルのメタデータにアクセスしたり(ls -l
でリストされる情報)することを許可します。
モード(および権限)の例
ファイルのモードを読み取り、各権限の意味を理解したので、いくつかの一般的なモードの例と、概要を示す簡単な説明を見てみましょう。
-rw-------
: 所有者のみがアクセス可能なファイル-rwxr-xr-x
: システム上のすべてのユーザーに実行可能なファイル。 「ワールド実行可能」ファイル-rw-rw-rw-
: システム上のすべてのユーザーによる変更が可能なファイル。 「ワールド書き込み可能」ファイルdrwxr-xr-x
:システム上のすべてのユーザーが読み取りおよびアクセスできるディレクトリdrwxrwx---
:所有者およびグループによって変更可能(その内容を含む)なディレクトリdrwxr-x---
:グループによってアクセス可能なディレクトリ
通常、ファイルの所有者は他の2つのクラスと比較して最も多くの権限を享受します。典型的には、グループおよびその他のクラスは所有者の権限のサブセットしか持たないことが多いです(同等かそれ以下)。これは、ファイルは特定の理由で必要なユーザーのみがアクセスできるべきだからです。
もう一つ注目すべきことは、多くの権限の組み合わせが可能であるにも関わらず、ほとんどの状況で意味をなすのは一部のみです。たとえば、書き込みまたは実行アクセスはほぼ常に読み取りアクセスと一緒に使用されます。なぜなら、読み取れないものを変更することは難しく、実行できないからです。
結論
これで、Linuxでの所有権と権限の仕組みが理解できたはずです。これらの権限をchown
、chgrp
、chmod
を使用して変更する方法については、Linux Permissions Basics and How to Use Umask on a VPSを参照してください。
Linuxの基本についてもっと学びたい場合は、このシリーズの次のチュートリアル、Linux入出力リダイレクション入門を読んでください。
Source:
https://www.digitalocean.com/community/tutorials/an-introduction-to-linux-permissions