Linux におけるファイルモードとは
Linuxにおけるファイルモードとは、ファイルまたはディレクトリに設定されたアクセス権限のことを指します。ファイルモードは、読み取り、書き込み、実行の3つの権限のセットから成り、各セットは所有者、グループ、その他の特定のユーザーグループに適用されます。
読み取り権限は、ファイルまたはディレクトリの内容を閲覧できるようにし、書き込み権限はファイルまたはディレクトリを変更または削除できるようにし、実行権限はファイルを実行またはディレクトリにアクセスできるようにします。
ファイルモードは、ファイルの種類、所有者、グループ、その他の権限、setuid
やsetgid
などの特殊な権限を表す10文字の文字列で表されます。Linuxシステムでファイルやディレクトリのアクセスを管理するためには、ファイルモードを理解することが重要です。
ファイルモードの確認方法
Linuxでファイルモードをチェックするには、ls
コマンドに-l
オプションを付けてファイルの長い形式のリストを表示します。ファイルモードは、ファイルの種類、アクセス権限、および特殊権限を含む10文字の文字列として表示されます。
以下は、"example.txt" というファイルのファイルモードをチェックする方法の例です。
$ ls -l example.txt
-rw-r--r-- 1 user user 0 Mar 3 10:31 example.txt
ファイルモードのコンポーネント
Linuxにおけるファイルモードは、3つの主要なコンポーネントで構成されています:ファイルタイプ、アクセス権限、および特殊な権限。これらのコンポーネントを理解することは、Linuxでのファイルの管理に不可欠です。
ファイルタイプ
Linuxには、ファイルモードの最初の文字で識別できる複数のファイルタイプがあります。これらのファイルタイプは、ファイルにアクセスしたり使用したりする方法を決定します。以下は、Linuxにおけるいくつかのファイルタイプの例です。
通常ファイル
通常ファイルは、Linuxにおけるもっとも一般的なファイルタイプです。テキスト、画像、コードなど、あらゆる種類のデータを含むことができます。通常ファイルは、ファイルモードにおいてハイフン(-
)で表されます。
-rw-r--r-- 1 user user 1024 Mar 1 10:30 myfile.txt
この例では、「myfile.txt」は、所有者(ユーザー)に対して読み取りと書き込みの権限があり、グループおよびその他のユーザーに対して読み取り専用の権限がある通常ファイルです。
ディレクトリ
ディレクトリは、ファイルを階層的な構造で組織化するために使用されます。他のファイルやディレクトリを含むフォルダーのようなものと考えることができます。ディレクトリは、ファイルモードにおいて「d」で表されます。
drwxr-xr-x 2 user user 4096 Mar 1 11:00 mydir/
この例では、「mydir」は、所有者に対して読み取り、書き込み、および実行の権限があり、グループとその他のユーザーに対して読み取りと実行の権限があるディレクトリです。
シンボリックリンク
シンボリックリンクは、別のファイルまたはディレクトリを指すファイルです。異なる場所のファイルまたはディレクトリへのショートカットやエイリアスを作成するために使用されます。シンボリックリンクは、ファイルモードでl
で表されます。
lrwxrwxrwx 1 user user 15 Mar 1 12:00 mylink -> /home/user/file
この例では、「mylink」は、「/home/user/file」を指すシンボリックリンクです。
ブロックデバイス
ブロックデバイスは、データをブロックまたはチャンクで転送するファイルです。ハードドライブやUSBドライブなどのハードウェアデバイスとのやりとりに使用されます。ブロックデバイスは、mknod
コマンドを使用して作成できます。
brw-rw---- 1 user disk 8, 1 Mar 3 12:15 sda1
ここでは、文字 "b" がブロックデバイスを示しています。
文字デバイス
文字デバイスはブロックデバイスに似ていますが、データを文字単位で転送します。これらは、プリンターやシリアルポートなどのハードウェアデバイスとのやり取りに使用されます。文字デバイスは、mknod
コマンドを使用して作成することもできます。
crw-rw---- 1 user lp 6, 0 Mar 3 12:15 lp0
ここで、文字 "c" は文字デバイスを示します。
名前付きパイプ
名前付きパイプ、またはFIFOとしても知られているファイルは、2つ以上のプロセス間でのプロセス間通信を提供します。これらは、一時ファイルの必要なしにプロセス間でデータを転送するために使用されます。名前付きパイプは、mkfifo
コマンドを使用して作成することができます。
prw-r--r-- 1 user user 0 Mar 3 12:15 mypipe
ソケット
ソケットは、ネットワークを介したプロセス間通信を提供するファイルです。これらは、異なるコンピュータ上で実行されるプロセス間でデータを転送するために使用されます。ソケットは、socketシステムコールを使用して作成することができます。
srwxrwxrwx 1 user user 0 Mar 3 12:15 mysocket
ここで、文字 "s" はソケットを示します。
権限
Linuxファイルの権限は、合計9文字の3つの3文字セットで表されます。3つのセットは、ファイル所有者の権限、ファイルのグループの権限、およびその他の全てのユーザーの権限を表します。
各3文字セットは、次の3つの権限ビットを表します。
r
(読み取り)w
(書き込み)x
(実行)
最初の権限ビットのセットは、ファイル所有者の権限を表し、2番目のセットはファイルグループの権限を表し、3番目のセットはその他の全てのユーザーの権限を表します。
以下は、ファイルの権限の例です。
rw-r--r--
: このファイルは所有者によって読み書きが可能で、グループおよびその他のユーザーには読み取りのみが許可されます。rwxr-xr-x
: このファイルは所有者によって読み取り、書き込み、実行が可能で、グループおよびその他のユーザーには読み取りと実行が許可されます。drwxr-xr-x
: このディレクトリは所有者によって読み取り、書き込み、アクセス(つまり、入力)が可能で、グループおよびその他のユーザーには読み取りとアクセスが許可されます。
ファイルの権限を設定または変更するには、所望の権限に続いてchmodコマンドを使用できます。例えば、コマンド「chmod 755 myfile」は、所有者がファイルを読み取り、書き込み、実行できるようにし、グループおよびその他のユーザーがファイルを読み取り、実行できるようにしますが、書き込みはできません。
機密ファイルを保護し、不正アクセスを防止するために、ファイルの権限を責任を持って使用することが重要です。
特別な権限
Linuxファイルモードでは、特別な権限とは、ファイルまたはディレクトリに設定できる次の3つの追加の権限を指します。
- setuid(SUID)
- setgid(SGID)
- スティッキービット
これらの権限は、ファイルまたはディレクトリの動作を特定の方法で変更します。
Setuid(SUID)
実行可能ファイルに設定された場合、SUIDは、ファイルを実行するユーザーの権限ではなく、ファイルの所有者の権限で実行できるようにします。これは、パスワード変更プログラムなど、特権が必要なプログラムに一般的に使用されます。 SUIDファイルの例としては、「passwd」があります。
-rwsr-xr-x 1 root root 27832 Oct 17 2018 /usr/bin/passwd
Setgid (SGID)
ディレクトリに設定された場合、SGIDは、そのディレクトリで作成された新しいファイルが、ファイルを作成したユーザーのグループ所有権ではなく、ディレクトリのグループ所有権を継承するようにします。複数のユーザーがアクセスして変更する必要があるディレクトリには便利です。SGIDディレクトリの例としては、Webサーバーのコンテンツに使用される「/var/www」ディレクトリがあります。
drwxrwsr-x 2 root www-data 4096 Oct 23 14:23 /var/www
スティッキービット
ディレクトリに設定された場合、スティッキービットは、そのディレクトリ内のファイルの削除を、ファイルの所有者またはルートユーザーに制限します。これは、共有書き込みアクセスを持つディレクトリ(/tmp
ディレクトリなど)で一般的に使用されます。
drwxrwxrwt 14 root root 4096 Mar 4 07:20 /tmp