LinuxやUnixのファイルシステムでは、ファイルやディレクトリに対するアクセス権限(ファイルのアクセス許可、または「ファイルパーミッション」)を管理することが重要です。これにより、システムのセキュリティが確保され、異なるユーザーやグループが適切にアクセスできるようになります。以下では、LinuxおよびUnixシステムにおけるファイル権限について詳しく解説します。
ファイルパーミッションの基本
LinuxおよびUnixシステムでは、ファイルやディレクトリには、ユーザー(user)、グループ(group)、およびその他のユーザー(others)の3つの異なるカテゴリに対して設定される権限があります。それぞれのカテゴリには、以下の3つの基本的な権限があります:
-
読み取り権限(r)
この権限を持つユーザーは、ファイルの内容を読み取ることができます。ディレクトリに対しては、ディレクトリの内容を一覧表示することができます。 -
書き込み権限(w)
この権限を持つユーザーは、ファイルの内容を変更したり、ファイルを削除したりすることができます。ディレクトリに対しては、ディレクトリ内のファイルやサブディレクトリを追加、削除、または名前を変更することができます。 -
実行権限(x)
この権限を持つユーザーは、ファイルを実行することができます。たとえば、スクリプトやプログラムファイルを実行できるようになります。ディレクトリに対しては、そのディレクトリに移動(cd
コマンド)できるようになります。
ファイル権限の表記方法
ファイル権限は、一般的に次のように表示されます:
diff-rwxr-xr-x
この文字列は、10文字で構成されており、各部分には特定の意味があります。各文字は、ファイルまたはディレクトリの権限を示します。
-
最初の文字(-)
最初の文字は、対象がファイルなのかディレクトリなのかを示します。-
は通常のファイルを示し、d
はディレクトリを示します。 -
次の3文字(rwx)
これらの3文字は、所有者(user)の権限を示します。最初の文字は読み取り権限(r)、次に書き込み権限(w)、最後に実行権限(x)を示します。 -
次の3文字(r-x)
これらの3文字は、グループ(group)の権限を示します。同様に、読み取り(r)、書き込み(w)、実行(x)権限が示されます。 -
最後の3文字(r-x)
最後の3文字は、その他のユーザー(others)の権限を示します。同様に、読み取り(r)、書き込み(w)、実行(x)権限が示されます。
例えば、-rwxr-xr-x
という権限設定は、ファイルの所有者が読み取り、書き込み、実行でき、グループとその他のユーザーは読み取りおよび実行のみ可能であることを意味します。
数値(オクタル)によるファイル権限の指定
ファイル権限は、数字(オクタル)で指定することもできます。この方法では、各権限に対応する数値を加算して設定します。
- 読み取り(r)は4
- 書き込み(w)は2
- 実行(x)は1
これらを組み合わせることで、権限を指定します。例えば:
rwx
(読み取り、書き込み、実行)は、4 + 2 + 1 = 7r-x
(読み取り、実行)は、4 + 1 = 5rw-
(読み取り、書き込み)は、4 + 2 = 6
したがって、次のように指定できます:
bashchmod 755 filename
ここで、7
は所有者の権限(rwx)、5
はグループの権限(r-x)、5
はその他のユーザーの権限(r-x)を示します。
ファイルの権限を変更するコマンド
ファイルの権限は、chmod
(change mode)コマンドを使って変更できます。chmod
コマンドには、2つの主な使用方法があります:シンボリックモードと数値モード。
-
シンボリックモード
シンボリックモードでは、権限を文字で指定します。たとえば:chmod u+x filename
(所有者に実行権限を追加)chmod g-w filename
(グループから書き込み権限を削除)chmod o=r filename
(その他のユーザーに読み取り権限のみを設定)
-
数値モード
数値モードでは、上記のように権限を数値で指定します。たとえば:chmod 644 filename
(所有者に読み取りおよび書き込み、グループおよびその他のユーザーに読み取りのみ)chmod 777 filename
(すべてのユーザーに読み取り、書き込み、実行権限を与える)
所有者とグループの変更
ファイルやディレクトリの所有者やグループを変更するには、chown
コマンドを使用します。例えば:
chown user:group filename
(ファイルの所有者をuser
に、グループをgroup
に変更)
所有者またはグループを変更することにより、特定のユーザーやグループがファイルにアクセスできるようになります。
特殊なファイルパーミッション
LinuxやUnixでは、通常のアクセス権限に加えて、特殊な権限も設定することができます。これらには次のものがあります:
-
setuid(セットユーザーID)
ファイルに対してsetuidビットが設定されている場合、そのファイルは実行されると、実行したユーザーの権限ではなく、ファイルの所有者の権限で実行されます。これは、特定の管理者権限を持つプログラム(例:passwd
)で使用されます。 -
setgid(セットグループID)
ファイルに対してsetgidビットが設定されている場合、ファイルが実行されると、その実行プロセスはファイルのグループの権限で実行されます。ディレクトリにsetgidビットが設定されていると、そのディレクトリ内に作成される新しいファイルが、親ディレクトリと同じグループを持つようになります。 -
sticky bit(スティッキービット)
sticky bitは、主にディレクトリに設定されます。このビットが設定されているディレクトリ内では、ユーザーは自分のファイルを削除できますが、他のユーザーのファイルを削除することはできません。/tmp
ディレクトリにこのビットが設定されているのが一般的です。
まとめ
LinuxおよびUnixにおけるファイルパーミッションは、システムのセキュリティと管理において非常に重要な役割を果たします。ファイルの所有者、グループ、およびその他のユーザーに対して適切なアクセス権限を設定することで、システムを安全に保ち、ユーザーの作業環境を保護することができます。chmod
、chown
、および特殊なビット(setuid、setgid、sticky bit)を使用することで、細かい制御が可能になります。