Linuxのchmodの数字の意味!パーミッションを正しく設定する方法

[PR]

サーバー・インフラ

ファイルやディレクトリを操作していて「chmod 755」や「chmod 644」という表記を見たことがある方は多いでしょう。これらは一見ただの数字ですが、Linuxにおける権限(パーミッション)の重要な表現方法です。この記事では「Linux パーミッション chmod 数字 意味」を深く掘り下げて、数字が持つ仕組みからよく使われる例まで、最新情報を交えてわかりやすく解説します。

Linux パーミッション chmod 数字 意味の基本構造

chmod の数字は、所有者・グループ・その他のユーザーそれぞれに対する読み取り/書き込み/実行の許可を三桁の数字で表現する方式です。第一の桁が所有者、第二がグループ、第三がその他のユーザーを意味し、それぞれに 4(読み取り)・2(書き込み)・1(実行)が割り当てられています。数字はこれらの合計として求められ、例えば 7 は全ての権限がある状態を示します。数字形式は Three-digit または場合によっては四桁(特別権限含む)での指定も可能です。

所有者・グループ・その他とは何か

Linux システムではファイルやディレクトリごとに「所有者(owner/user)」「所属するグループ(group)」「上記に属さないその他のユーザー(other)」という三種類のユーザー種別があります。所有者はそのファイルを作成したユーザー、グループは所属グループ、その他のユーザーはそれ以外のすべてを指します。これら三者それぞれに対して異なるアクセス権限を設定できるのが chmod の強力な特徴です。

読み取り・書き込み・実行の三権限

それぞれのユーザー種別には三つの基本的な操作権限があります。読み取り(read=r)、書き込み(write=w)、実行(execute=x)です。読み取りは内容を参照するため、書き込みは内容を変更するため、実行はファイルとして実行したりディレクトリなら中を探索したり名前を取得したりするための権限です。これらが数字 4、2、1 に対応します。

数字の構成と計算方法

各権限に対応する値を足し合わせて数字を決めます。具体的には「読み取り=4」「書き込み=2」「実行=1」。所有者に読み書き実行を許可するなら 4+2+1=7、グループに読み実行を許可するなら 4+0+1=5、その他に読みのみなら 4+0+0=4 です。これを三桁並べて例えば「754」という指定をします。diectory や file の種類によって使い分ける数字例が数多くあります。

3桁と4桁の数字指定:特殊なビットの意味

基本の三桁数字指示に加えて、特別な権限を設定したい場合は四桁指定を使います。最初の桁は setuid/setgid/sticky bit などに対応し、通常の所有者・グループ・その他の三桁は同じ意味を持ちます。四桁指定を用いると directories やスクリプトの動作に影響する追加の制御が可能です。特殊ビットについて理解することで、セキュリティを高める設定ができます。

setuid, setgid, sticky bit の概要

最初の桁に設定される特別なフラグとして setuid、setgid、sticky bit が存在します。setuid はファイルが実行された際に実行者が所有者として実行されることを意味し、setgid は同様にグループの ID を継承させるものです。sticky bit はディレクトリに対して使われ、ユーザーが自身が所有するファイルだけを削除できるよう制限します。これらはいずれもセキュリティと管理性において有効です。

四桁指定の書式と活用例

四桁指定は通常の三桁に一桁加えた形式で、例えば 4755、2755、1777 などがあります。ここで最初の数字が特別ビットを示し、残り三桁が基本的な所有者・グループ・その他の権限を指定します。使用例として、実行可能なプログラムファイルに setuid を付けたい時や、公共ディレクトリに sticky bit を付けて不要な削除を防ぐ場面で使われます。

三桁指定との違い・注意点

四桁指定を使わない場合は三桁で十分なケースが多いですが、特殊権限が必要な時を除いてはシンプルな三桁を使うほうがミスを減らせます。四桁指定では先頭の数字を 0 にして省略できることもあり、その実体は三桁指定と同じ意味になることもあります。時にはデフォルトで sticky bit が有効になるディレクトリ設定もあり注意が必要です。

よく使われるchmodの数字パターンとその意味

現場で頻繁に使われる chmod の数字指定には、パターンがあります。それぞれ、目的やセキュリティレベルに応じて使い分けられています。ここでは代表的な例を取り上げ、それぞれの数字がどのような権限設定を意味するかを解説します。数値に慣れるためにも比較表を使って視覚的に理解すると便利です。

代表的な例:644 と 755 の違い

「644」は所有者が読み書き可能、グループとその他は読み取りのみ可能です。ウェブサーバーの公開ファイルやログファイル設定などでよく使われます。「755」は所有者に読み書き実行を許可し、グループとその他には読み取りと実行を許可する設定であり、スクリプトやディレクトリを他のユーザーに実行させる必要がある場合に使われます。これら二つの違いは実用上頻繁に遭遇します。

777 の危険性と使いどころ

「777」は所有者・グループ・その他すべてに対して読み取り・書き込み・実行を許可する設定です。非常に柔軟ですが、同時にセキュリティリスクが高まります。特に公開サーバー上でこの設定を無条件で使うと、不正アクセスやデータ改ざんの可能性があります。使うならば必要最小限の範囲に限定することが重要です。

ディレクトリ/ファイルでの実行権限の意味の違い

ファイルに対する実行権限はそのファイルをプログラムとして実行できるという意味です。一方、ディレクトリにおける実行権限は中のファイルやサブディレクトリ名を取得したり、中身を検索できるかに関わります。ディレクトリには読み・実行の両方が許可されていないと、中の内容にアクセスできないため設定の際にはこの違いを意識する必要があります。

シンボリック表記との比較と使い分け法

chmod の数字指定以外に、シンボリック表記(rwx や u、g、o、+、−、= を使う方式)があります。こちらは部分的な権限変更に便利で、具体的にどの権限を付与/剥奪するかがわかりやすくなる利点があります。一方で数字指定は一度にすべてを指定するので、完全な設定を行いたい時に効率的です。状況に応じて両方を使い分けることが望ましいです。

シンボリック表記の基本

シンボリック表記では「u」「g」「o」「a」(全て)と、「+」「−」「=」の演算子を組み合わせて、読み取り・書き込み・実行の権限を操作します。例えば「chmod u=rw,g=r,o=r file.txt」は所有者に読み書き、グループ・その他に読み取りだけを与える指定です。部分変更が必要なケースで誤設定を避けたい場合に便利です。

数字表記が適しているシーン

権限を完全に決めたい時や、多数のファイル・ディレクトリに一律のパーミッションを設定したい時には数字表記が適しています。スクリプトや設定ファイル、サーバーの環境構築などで使われることが多く、数字さえ正しければ一度で明確な権限付与ができます。特殊ビットも含めて一括指定できる点が強みです。

どちらを使うべきかの判断基準

部分的な変更や既存の権限を維持したいならシンボリック表記が安全で、完全な設定を行いたいなら数字表記が効率的です。ディレクトリとファイルでそれぞれ必要な実行権限の有無を確認し、必要最小限の権限原則(least privilege)の観点から設定することがベストです。

特殊なケース:sticky bit や setuid/setgid の注意点

特別なビットを設定することで、システムの動作やセキュリティが変わるケースがあります。これらのビットは四桁指定で前に追加する数字で指定され、そのファイルやディレクトリのふるまいを変えるため、設定ミスがセキュリティホールになることもあります。正しく理解して適切に用いることが求められます。

sticky bit の目的と用いられる状況

sticky bit は主にディレクトリに設定され、「他人のファイルを自分で削除できない」ように制限します。共有ディレクトリやテンポラリディレクトリなどで頻繁に使われます。数値形式では最初の桁に「1」を付けて表わされ、例えば 1777 と指定すると全ユーザーに rwx を許可しつつ sticky bit も有効になります。

setuid と setgid の動作とリスク

setuid を持つ実行可能ファイルは、実行者の権限ではなく所有者の権限で動作します。setgid はグループ ID を継承して実行されます。これにより便利な機能が実現できますが、不正なプログラムや意図しない実行に突かれると大きなリスクとなるため、厳格な所有者設定・ファイルの信頼性確保が重要です。

特殊ビットを設定するためのコマンド例

特別権限を設定するには四桁指定を用います。例として setuid を持つスクリプトを所有者に渡すには 4755、setgid を含めるには 2755、sticky bit を含めるには 1777 などです。これらの数字を用いると、ファイルやディレクトリの動作制御がより詳細に行えます。

実践!安全にパーミッションを設定する方法と考え方

安全で効率的なパーミッション設定は、ただ数値を当てはめるだけでは達成できません。環境やユーザーの役割、共有範囲を考慮すると同時に、運用・保守性を見据えたルールを設けることが長期的に見て非常に価値があります。ここでは最新のベストプラクティスを踏まえて実践的な方法を紹介します。

必要最小限の原則(Least Privilege)の適用

ユーザーやプロセスには必要な権限のみを与えることがセキュリティの基本です。所有者以外には不要な書き込みや実行権限を与えないように設定します。特に公開サーバーや共有環境では読み取り専用または読み取り+実行くらいに抑えることが望ましいです。

ディレクトリ構造を考慮した権限設計

ディレクトリとその中のファイルで必要な権限は異なります。ディレクトリには実行権限がないと中に入れない、読み取り権限がないと内容を一覧できないなどの制約があります。各階層ごとにどのユーザーが何をできるか設計し、再帰的設定(-R オプション)使用時には特に注意します。

アクセスログや所有者の把握を習慣化する

どのファイル/ディレクトリが誰の管理下にあるか、どのユーザーがどのグループに属しているかを定期的に確認しておくことが有効です。また、パーミッションを変更した際にログを残す設定やレビューをすることで、意図しない権限が付与されてしまう事態を防止できます。

よくある誤解とトラブルシューティング

chmod の数字指定に関しては誤解やミスによるトラブルが頻繁に発生します。ここでは代表的な誤解とその原因、対処法を整理します。初心者だけでなく経験者にも役立つ内容です。

000 や 666 の意図しない使用

権限が完全に「なし」になっている 000 や、全員に読み書きを許可する 666 は、それぞれアクセス不能なファイルを作るか、データ改ざんのリスクを増大させます。000 は元に戻すための管理アカウントが必要であり、666 は不要な書き込み権限を他人にも与えてしまいます。使用は慎重にします。

実行権限がないためにファイルが動かないケース

スクリプトやバイナリに実行権限を与えていないと実行できないため、しばしば「permission denied」が発生します。実行可能にしたいファイルには所有者に実行権限を付ける数字(例 700、755 など)を設定します。ディレクトリの場合は実行権限が中身へのアクセスに関わるため設定が特に重要です。

権限変更後の期待値と現実のずれ

数字を変えただけで期待通りに動かない場合、所有者・グループ設定やマウントオプション、ファイルシステムの種類(例えば NTFS や FAT など)も関係している可能性があります。また umask によって新規作成ファイルのデフォルト権限が制限されることもあり、権限表示と実際の設定に差が出ることがあります。

まとめ

Linux の chmod 数字指定は、「所有者・グループ・その他」に対して読み取り・書き込み・実行をそれぞれ 4,2,1 の組み合わせで設定する強力かつシンプルな仕組みです。三桁数字で基本権限を設定し、必要に応じて四桁目で特殊なビットを加えることが可能です。代表的な例である 644、755、777 の違いを理解するだけで実用レベルでは多くの状況に対応できます。

実践では必要最小限の原則に立ち返り、権限を付与しすぎないことが肝要です。また、シンボリック表記との使い分けやファイル・ディレクトリごとの特性を理解して使うことで、トラブルを防ぎながら安全な環境を保つことができます。

関連記事

特集記事

コメント

この記事へのトラックバックはありません。

TOP
CLOSE