ファイルのアクセス権は、Linux システムが使用するセキュリティモデルの中心的役割を担います。ファイルのアクセス権によって、誰が、どのように、システム上のファイルやディレクトリにアクセスできるのかが決まります。この記事では、Linux ファイルのアクセス権の概要、その仕組み、変更方法について説明します。
Linux ファイルのアクセス権の表示方法
ls
コマンドに -l
(詳細なリスト) オプションを指定すると、ファイルのアクセス権セットを含む、Linux ファイルのメタデータが表示されます。
$ ls -l
drwxr-xr-x. 4 root root 68 Jun 13 20:25 tuned
-rw-r--r--. 1 root root 4017 Feb 24 2022 vimrc
この例では、2 つのリストが表示されています。ls -l
からの出力の最初のフィールドは、各ファイルへのアクセス権を含むメタデータのグループです。以下は、vimrc
のリストを構成する要素です。
- ファイルタイプ:
-
- アクセス権設定:
rw-r--r--
- 拡張属性:ドット (
.
) - ユーザーオーナー:
root
- グループオーナー:
root
「ファイルタイプ」と「拡張属性」のフィールドは、この記事では取り上げませんが、上記の出力例では、vimrc
ファイルは通常のファイルであり、ファイルタイプは -
です (つまり、特殊なタイプではありません)。
一方、tuned
のリストは、 d
、つまりディレクトリタイプのファイルです。他にもファイルタイプはありますが、この 2 つが最も一般的です。使用できる属性は、ファイルが保存されているファイルシステムの形式によって決まります。Red Hat Enterprise Linux 7、8、9 の場合、デフォルトのファイルシステム形式は XFS です。
ファイルのアクセス権の解釈方法
この記事のテーマは、ファイルのアクセス権設定です。興味深いことに、vimrc
リストのアクセス権は次のようになっています。
rw-r--r–
この文字列は、実は以下の 3 つのアクセス権を示す式です。
- rw-
- r--
- r--
1 つ目のアクセス権セットは、ファイルのオーナーに適用されます。2 つ目のアクセス権セットは、このファイルを所有するユーザーグループに適用されます。3 つ目のアクセス権セットは、一般的に「その他」と呼ばれます。Linux ファイルはすべて、オーナーとグループに属します。
アクセス権とユーザーをアルファベットで表記することを、シンボリックモードと呼びます。ユーザーの場合、u
はユーザーオーナー、g
はグループオーナー、o
はその他を意味します。アクセス権の場合、r
は読み取り、w
は書き込み、x
は実行を意味します。
[ 成功するための Linux 環境管理の方法を学ぶ ]
皆さんがファイルを操作する際、システムはファイルのアクセス権を調べ、次のような一連のチェックを行って、どのような情報を提供すべきかを判定します。
- システムはまず、あなたがそのファイルのオーナーかどうかを確認します。オーナーであれば、ユーザーオーナーのアクセス権が付与され、それ以上のチェックは行われません。
- ファイルを所有するユーザーでない場合は、次に、グループメンバーシップを確認します。あなたがファイルのグループオーナーに該当するグループに属しているかどうかを確認します。そのグループに属していれば、グループオーナーのアクセス権フィールドの適用対象となり、それ以上のチェックは行われません。
- 「その他」のアクセス権は、ファイルのユーザーオーナーでもファイルを所有するグループのメンバーでもないアカウントがファイルを操作する場合に適用されます。別の言い方をすれば、これら 3 つのフィールドは互いに排他的です。つまり、ファイルのアクセス権設定において、あるユーザーが複数のフィールドに属することはありません。
アクセス権は、ファイルを操作できるユーザーのタイプを決めるだけではありません。各ユーザーに、3 つの基本的なアクセス権タイプを含む式が与えられます。上記の例では、ファイルのオーナーに以下のアクセス権が与えられています。
rw-
この式の文字はそれぞれ、特定のアクセス権が付与されているか否かを示します。上記の例では、ファイルの読み取り (r
) アクセス権と書き込み (w
) アクセス権が付与されています。しかし、実行アクセス権 (x
) は付与されていないため、-
記号が式に含まれています。このフィールドのアクセス権は無効です。
こちらの例で、グループオーナーのアクセス権について考えてみましょう。
r--
グループのメンバーに読み取り (r
) アクセス権は付与されていますが、書き込みと実行は無効になっています。
[ よく使うコマンドをすぐに確認できる Linux コマンドチートシートはこちら ]
8 進数とは
Linux ファイルのアクセス権を数字で表すことを、数値モードと呼びます。数値モードでは、3 桁の数値で特定のファイルのアクセス権を表します (744 など)。これを 8 進数と呼びます。数値の左から 1 桁目はオーナーのアクセス権、2 桁目はグループのアクセス権、3 桁目はその他のユーザーのアクセス権を表します。アクセス権ごとに数値が割り当てられています。
- r (読み取り):4
- w (書き込み):2
- x (実行):1
アクセス権の値が 744 の場合、数字の左から 1 桁目はユーザー、2 桁目はグループ、3 桁目はその他に対応します。ユーザーの分類ごとの値を合計することで、ファイルのアクセス権がわかります。
たとえば、あるファイルに対して、オーナーは読み取り、書き込み、実行のアクセス権を持ち、その他のすべてのユーザーは読み取りアクセス権のみを持つとします。その場合、次にようになります。
- オーナー:rwx = 4+2+1 = 7
- グループ:r-- = 4+0+0 = 4
- その他:r-- = 4+0+0 = 4
その結果、744 という 3 桁の値ができます。
Linux ファイルのアクセス権の実際の仕組み
ここまでで、ファイルのアクセス権の表示方法、適用対象、有効または無効になっているアクセス権の確認方法について説明しました。では、アクセス権は具体的にどのような機能を果たすのでしょうか?
読み取り (r)
読み取りアクセス権は、ファイルの内容にアクセスするために使用されます。cat
や less
などのツールをファイルに使用して、ファイルの内容を表示できます。また、Vi や view
といったテキストエディターを使ってファイルを開き、ファイルの内容を表示することもできます。ファイルのコピーを作成するには、そのファイルの読み取りアクセス権が必要です。ファイルを複製するには、そのファイルの内容にアクセスする必要があるからです。
書き込み (w)
書き込みアクセス権があれば、ファイルの内容を修正または変更できます。また、書き込みアクセス権があれば、シェルでリダイレクトまたは追記の演算子 (>
または >>
) を使用してファイルの内容を変更することもできます。書き込みアクセス権がない場合、ファイルの内容を変更できません。
実行 (x)
実行アクセス権があれば、ファイルの内容を実行できます。通常、実行可能なファイルとは、コマンドやコンパイルされたバイナリー・アプリケーションなどです。一方で、実行アクセス権があれば、Bash シェルスクリプト、Python プログラム、そして各種インタプリター型言語も実行できます。
[ システム管理者のための Bash スクリプトガイドをダウンロード ]
実行アクセス権がなくても、ファイルの内容を実行する方法はあります。たとえば、実行アクセス権を持つインタプリターを使用して、インタプリターが実行する指示が書かれたファイルを読み込む方法です。Bash シェルスクリプトの呼び出しがその一例です。
$ bash script.sh
ここで実行されている実行可能ファイルは、 bash
です。script.sh
ファイルが Bash インタプリターによって読み込まれ、そのコマンドが実行されます。この記事の内容は一般的なものですが、Linux では多くの場合、さまざまな方法でタスクを実行できます。
ディレクトリのアクセス権の仕組み
ディレクトリ・ファイル・タイプは、d
で示されます。考え方としては、アクセス権はファイルと同じように機能しますが、ディレクトリの場合、操作の解釈が異なります。
読み取り (r)
通常のファイルと同様に、読み取りアクセス権があれば、ディレクトリの内容を閲覧できます。ただし、それはディレクトリ内に保存されている内容 (ファイル) を表示できるという意味です。ls
コマンドなどが機能するためには、このアクセス権が必須です。
書き込み (w)
通常のファイルと同様に、書き込みアクセス権があれば、ディレクトリの内容を変更できます。ディレクトリの内容を変更するには、ディレクトリにファイルを追加するか、ディレクトリからファイルを削除します。そのため、ディレクトリにファイルを移動する (mv
)、またはディレクトリからファイルを削除する (rm
) ための書き込みアクセス権が必要になります。また、ディレクトリ内に新しいファイルを作成する (touch
またはファイルリダイレクト演算子を使用)、またはディレクトリにファイルをコピーする (cp
) ための書き込みアクセス権も必要です。
実行 (x)
このアクセス権は、ファイルとディレクトリでは大きく異なります。基本的には、実行アクセス権があれば、ディレクトリにアクセスできると考えていいでしょう。ディレクトリの実行アクセス権がある場合、そのディレクトリ内のファイルの拡張情報を (ls -l
などを使って) 参照できます。さらに、作業ディレクトリの変更 (cd
を使用) や、このディレクトリを通じてその配下のサブディレクトリに移動することもできます。
興味深いポイントとして、ディレクトリに対する実行アクセス権がないことで、他のアクセス権が制限されることがあります。たとえば、(書き込みアクセス権によって) ディレクトリに新しいファイルを追加するとき、ディレクトリのメタデータにアクセスして新しい追加ファイルの情報を保存できない場合は、どうすればよいのでしょうか?この場合、ファイルは追加できません。このため、ディレクトリタイプのファイルでは、通常、ユーザーオーナー、グループオーナー、その他のうちの 1 つ以上に実行アクセス権が付与されます。
[ システム管理者スキルの力試しとしてスキル評価を受ける ]
Linux ファイルのアクセス権の変更方法
ファイルやディレクトリのアクセス権は、chmod
コマンドで変更できます。このコマンドは「モードの変更」を意味します。数値モードでファイルのアクセス権を変更するには、chmod
と希望する 8 進数値 (744 など) をファイル名と一緒に入力します。シンボリックモードでファイルのアクセス権を変更するには、ユーザークラスと付与したいアクセス権に続けてファイル名を入力します。たとえば、次のようにします。
$ chmod ug+rwx example.txt
$ chmod o+r example2.txt
これにより、ユーザーとグループには読み取り、書き込み、実行の各アクセス権が、その他には読み取りアクセス権のみが付与されます。シンボリックモードでは、chmod u
はユーザーオーナーのアクセス権を表し、chmod g
はファイルのグループ内の他のユーザーを表し、chmod o
はファイルのグループに属さないその他のユーザーを表します。すべてのユーザーには、chmod a
を使用します。
場合によっては、ユーザーオーナーそのものを変更することもあるでしょう。その場合は、chown
コマンドを使用します。同様に、chgrp
コマンドを使って、ファイルのグループオーナーシップを変更できます。
ファイルの特殊アクセス権とは
ファイルとディレクトリには特殊アクセス権があり、このアクセス権があると、これまで説明してきた標準アクセス権セットに追加の権限が加わります。
- SUID は、ユーザーアクセスレベルの特殊アクセス権であり、コマンドを実行するユーザーが誰であっても、常にファイルを所有するユーザーとして実行されます。
- SGID は、ファイルをそのファイルのグループオーナーとして実行できます。ディレクトリ内で作成されたファイルは、グループオーナーシップがディレクトリオーナーに設定されます。この特殊アクセス権は、グループ内のさまざまなメンバーがコラボレーションに使用するディレクトリに有効です。メンバー全員が新しいファイルにアクセスし、実行できるからです。
「スティッキービット」とは、ディレクトリレベルの特殊アクセス権であり、ファイルの削除を制限します。つまり、そのディレクトリ内のファイルは、ファイルのオーナーのみが削除できます。
特殊アクセス権についてさらに詳しく知りたい方は、「Linux アクセス権:SUID、SGID、スティッキービット」をご覧ください。
まとめ
Linux ファイルのアクセス権 (その確認方法、解釈方法、変更方法) を理解しておくことは、システムのメンテナンスとセキュリティ保護における重要なポイントです。Red Hat Enterprise Linux ファイルのアクセス権についてさらに詳しく知りたい方は、ドキュメントを参照するか、ファイルのアクセス権の使用に関する自習型のラボで演習に取り組んでください。
[ チートシート:サーバーとネットワークの管理に役立つ Linux ユーティリティとコマンドのリストを見る ]
執筆者紹介
類似検索
チャンネル別に見る
自動化
テクノロジー、チームおよび環境に関する IT 自動化の最新情報
AI (人工知能)
お客様が AI ワークロードをどこでも自由に実行することを可能にするプラットフォームについてのアップデート
オープン・ハイブリッドクラウド
ハイブリッドクラウドで柔軟に未来を築く方法をご確認ください。
セキュリティ
環境やテクノロジー全体に及ぶリスクを軽減する方法に関する最新情報
エッジコンピューティング
エッジでの運用を単純化するプラットフォームのアップデート
インフラストラクチャ
世界有数のエンタープライズ向け Linux プラットフォームの最新情報
アプリケーション
アプリケーションの最も困難な課題に対する Red Hat ソリューションの詳細
オリジナル番組
エンタープライズ向けテクノロジーのメーカーやリーダーによるストーリー
製品
ツール
試用、購入、販売
コミュニケーション
Red Hat について
エンタープライズ・オープンソース・ソリューションのプロバイダーとして世界をリードする Red Hat は、Linux、クラウド、コンテナ、Kubernetes などのテクノロジーを提供しています。Red Hat は強化されたソリューションを提供し、コアデータセンターからネットワークエッジまで、企業が複数のプラットフォームおよび環境間で容易に運用できるようにしています。
言語を選択してください
Red Hat legal and privacy links
- Red Hat について
- 採用情報
- イベント
- 各国のオフィス
- Red Hat へのお問い合わせ
- Red Hat ブログ
- ダイバーシティ、エクイティ、およびインクルージョン
- Cool Stuff Store
- Red Hat Summit