Red Hat Enterprise Linux でファイルアクセスを制御する

Red Hat Enterprise LinuxBeginner
オンラインで実践に進む

はじめに

この実験では、RHEL 管理者にとって不可欠なスキルである、Linux ファイルシステムのパーミッション管理について包括的に理解します。ls -lを用いてファイルパーミッションを解釈し、chmodコマンドを用いてシンボリックモードと 8 進モードの両方でパーミッションを変更し、chownコマンドを用いてファイルの所有権を変更する方法を学びます。さらに、SUID、SGID、スティッキービットなどの特殊パーミッションを探求し、umaskコマンドを用いてデフォルトパーミッションを効果的に設定します。この実践的な経験を通して、Linux 環境におけるファイルおよびディレクトリのセキュリティとアクセス制御に必要な知識を習得します。

ls -l コマンドで Linux ファイルシステムのパーミッションを解釈する

このステップでは、ls -l コマンドを使用して Linux ファイルシステムのパーミッションを解釈する方法を学びます。Linux 環境でファイルやディレクトリへのアクセスを管理するには、ファイルパーミッションの理解が不可欠です。

Linux のすべてのファイルとディレクトリには、読み取り、書き込み、実行の権限を決定する関連付けられたパーミッションがあります。これらのパーミッションは、次の 3 つのカテゴリに分けられます。

  • ユーザー (所有者): ファイルの所有者のパーミッション。
  • グループ: ファイルのグループに属するユーザーのパーミッション。
  • その他: システム上の他のすべてのユーザーのパーミッション。

各カテゴリには、次の 3 つのタイプのパーミッションがあります。

  • 読み取り (r): ファイルの内容を表示したり、ディレクトリの内容を一覧表示したりできます。
  • 書き込み (w): ファイルの内容を変更したり、ディレクトリ内のファイルを作成/削除したりできます。
  • 実行 (x): 実行可能なファイルを実行したり、ディレクトリに入ったりできます。

まず、~/project ディレクトリ内に新しいディレクトリとファイルを作成して、デフォルトのパーミッションを観察してみましょう。

最初に、my_files という名前のディレクトリを作成します。

mkdir ~/project/my_files

次に、my_files ディレクトリ内に document.txt という名前の空のファイルを作成します。

touch ~/project/my_files/document.txt

次に、ls -l コマンドを使用して、document.txt ファイルの詳細なパーミッションを表示します。ls -l コマンドは、ファイルパーミッション、所有者、グループ、サイズ、変更日時など、詳細な一覧形式を提供します。

ls -l ~/project/my_files/document.txt

出力は次のようになります。

-rw-rw-r-- 1 labex labex 0 6月  6 17:36 /home/labex/project/my_files/document.txt

出力の先頭部分 -rw-rw-r-- を分解してみましょう。

  • 最初の文字 (-) はファイルタイプを示します。
    • - は通常のファイルです。
    • d はディレクトリです。
    • l はシンボリックリンクです。
  • 次の 9 つの文字は、3 つのセットの 3 文字に分けられます。
    • rw-: 所有者 (labex) のパーミッション。r (読み取り)、w (書き込み)、- (実行不可)。
    • rw-: グループ (labex) のパーミッション。r (読み取り)、w (書き込み)、- (実行不可)。
    • r--: その他 のパーミッション。r (読み取り)、- (書き込み不可)、- (実行不可)。

つまり、labex ユーザー (所有者) と labex グループのユーザーは document.txt を読み書きできますが、他のユーザーは読み取り専用です。

次に、my_files ディレクトリ自体のパーミッションを見てみましょう。ls -l をディレクトリに対して使用すると、ディレクトリの内容が表示されます。ディレクトリ 自体 のパーミッションを表示するには、ls -l-d オプションを使用する必要があります。

ls -ld ~/project/my_files

出力は次のようになります。

drwxrwxr-x 2 labex labex 4096 6月  6 17:36 /home/labex/project/my_files

パーミッション drwxrwxr-x を解釈してみましょう。

  • 最初の文字 (d) はディレクトリを示します。
  • rwx: 所有者 (labex) のパーミッション。r (読み取り)、w (書き込み)、x (実行)。
  • rwx: グループ (labex) のパーミッション。r (読み取り)、w (書き込み)、x (実行)。
  • r-x: その他 のパーミッション。r (読み取り)、- (書き込み不可)、x (実行)。

ディレクトリの場合:

  • r (読み取り) は、ディレクトリの内容を一覧表示できます。
  • w (書き込み) は、ディレクトリ内のファイルを作成、削除、または名前変更できます。
  • x (実行) は、ディレクトリ ( cd を使用) に入り、そのファイルやサブディレクトリにアクセスできます。

つまり、labex ユーザーと labex グループのユーザーは、my_files ディレクトリにファイルを作成/削除し、入ることができます。他のユーザーはディレクトリに一覧表示し、入ることはできますが、ディレクトリ内のファイルを作成または削除することはできません。

chmod コマンド(記号モード)でファイルのパーミッションを変更する

このステップでは、chmod コマンドを用いてシンボリックモードでファイルパーミッションを変更する方法を学びます。シンボリックモードは、文字と記号を使ってパーミッション変更を表すため、特定のパーミッションを追加、削除、設定する際に直感的です。

chmod コマンドのシンボリックモードでの構文は、chmod WHO OPERATION PERMISSIONS FILE です。

  • WHO: パーミッション変更を適用する対象を指定します。
    • u: ユーザー (所有者)
    • g: グループ
    • o: その他
    • a: すべて (ユーザー、グループ、その他)
  • OPERATION: パーミッションの変更方法を指定します。
    • +: パーミッションを追加する。
    • -: パーミッションを削除する。
    • =: 指定されたパーミッションを、既存のパーミッションを上書きして正確に設定する。
  • PERMISSIONS: パーミッションの種類を指定します。
    • r: 読み取り
    • w: 書き込み
    • x: 実行

前のステップで作成した ~/project/my_files/document.txt ファイルと ~/project/my_files ディレクトリを使って、作業を続けます。

まず、document.txt からグループとその他のユーザーの書き込み権限を削除します。現在のパーミッションは -rw-rw-r-- です。

chmod go-w ~/project/my_files/document.txt

ls -l を使って変更を確認します。

ls -l ~/project/my_files/document.txt

出力は次のようになります。

-rw-r--r-- 1 labex labex 0 6月  6 17:36 /home/labex/project/my_files/document.txt

グループとその他のユーザーの書き込み権限 (w) が削除されていることがわかります。

次に、document.txt に所有者 (u) の実行権限 (x) を追加します。これは、スクリプトを実行可能にするために一般的に行われます。

chmod u+x ~/project/my_files/document.txt

変更を確認します。

ls -l ~/project/my_files/document.txt

出力は次のようになります。

-rwxr--r-- 1 labex labex 0 6月  6 17:36 /home/labex/project/my_files/document.txt

所有者には実行権限 (x) が付与されています。

次に、~/project/my_files ディレクトリで練習します。現在のパーミッションは drwxrwxr-x です。ディレクトリからその他のユーザー (o) の書き込み権限を削除します。

chmod o-w ~/project/my_files

変更を確認します。

ls -ld ~/project/my_files

出力は次のようになります。

drwxr-xr-x 2 labex labex 4096 6月  6 17:36 /home/labex/project/my_files

なぜ o-w が出力に影響しなかったのでしょうか?これは、o (その他) に既に書き込み権限がなかったためです。r-x は、読み取りと実行は許可されていますが、書き込みは許可されていません。これは、chmod は現在の状態と異なる場合にのみ変更を適用することを示しています。

今度は、パーミッションを正確に設定してみましょう。document.txt のパーミッションを rw-r--r-- (所有者、グループ、その他) に設定します。つまり、所有者は読み取り/書き込み、グループは読み取り、その他は読み取りになります。

chmod a=rw,g=r,o=r ~/project/my_files/document.txt

変更を確認します。

ls -l ~/project/my_files/document.txt

出力は次のようになります。

-rw-r--r-- 1 labex labex 0 6月  6 17:36 /home/labex/project/my_files/document.txt

このコマンド a=rw,g=r,o=r は少し冗長です。a=rw ですべてに rw を適用し、その後 g=r でグループを r に設定し ( a=rw からの w を上書き)、o=r でその他を r に設定 ( a=rw からの w を上書き) しています。rw-r--r-- を実現するより簡単な方法は chmod u=rw,go=r です。試してみましょう。

chmod u=rw,go=r ~/project/my_files/document.txt

変更を確認します。

ls -l ~/project/my_files/document.txt

出力は依然として次のようになります。

-rw-r--r-- 1 labex labex 0 6月  6 17:36 /home/labex/project/my_files/document.txt

最後に、document.txt をすべての人に実行可能にします。

chmod a+x ~/project/my_files/document.txt

変更を確認します。

ls -l ~/project/my_files/document.txt

出力は次のようになります。

-rwxr-xr-x 1 labex labex 0 6月  6 17:36 /home/labex/project/my_files/document.txt

chmod コマンド(8 進数モード)でファイルのパーミッションを変更する

このステップでは、chmod コマンドを用いて 8 進数 (数値) モードでファイルパーミッションを変更する方法を学びます。8 進数モードは、各パーミッション (読み取り、書き込み、実行) に数値を割り当てることで、パーミッションを表す簡潔な方法です。

パーミッションの数値は以下の通りです。

  • 読み取り (r): 4
  • 書き込み (w): 2
  • 実行 (x): 1
  • パーミッションなし (-): 0

一連のパーミッション (ユーザー、グループ、その他) の 8 進数値を決定するには、許可されたパーミッションの数値を合計します。

例えば:

  • rwx (読み取り、書き込み、実行) = 4 + 2 + 1 = 7
  • rw- (読み取り、書き込み、実行不可) = 4 + 2 + 0 = 6
  • r-x (読み取り、書き込み不可、実行) = 4 + 0 + 1 = 5
  • r-- (読み取り、書き込み不可、実行不可) = 4 + 0 + 0 = 4
  • --- (パーミッションなし) = 0 + 0 + 0 = 0

chmod コマンドの 8 進数モードでは、3 桁の数値を使用します。各桁はそれぞれ、所有者、グループ、その他のパーミッションを表します。構文は chmod OGO FILE です。

  • O: 所有者のパーミッションの 8 進数値。
  • G: グループのパーミッションの 8 進数値。
  • O: その他のパーミッションの 8 進数値。

~/project/my_files/document.txt~/project/my_files を引き続き使用します。

最初に、document.txt のパーミッションを rw-r--r-- に設定します。

  • 所有者:rw- = 6
  • グループ:r-- = 4
  • その他:r-- = 4

したがって、8 進数値は 644 です。

chmod 644 ~/project/my_files/document.txt

変更を確認します。

ls -l ~/project/my_files/document.txt

出力は次のようになります。

-rw-r--r-- 1 labex labex 0 6月  6 00:48 /home/labex/project/my_files/document.txt

次に、document.txt を所有者のみ実行可能にし、所有者には読み書き、グループとその他には読み取り専用にするパーミッションを設定します。つまり、所有者は rwx (7)、グループは r-- (4)、その他は r-- (4) です。8 進数値は 744 です。

chmod 744 ~/project/my_files/document.txt

変更を確認します。

ls -l ~/project/my_files/document.txt

出力は次のようになります。

-rwxr--r-- 1 labex labex 0 6月  6 00:48 /home/labex/project/my_files/document.txt

次に、~/project/my_files ディレクトリのパーミッションを変更します。現在のパーミッションは drwxr-xr-x です。パーミッションを rwxr-x--- に設定します。

  • 所有者:rwx = 7
  • グループ:r-x = 5
  • その他:--- = 0

したがって、8 進数値は 750 です。

chmod 750 ~/project/my_files

変更を確認します。

ls -ld ~/project/my_files

出力は次のようになります。

drwxr-x--- 2 labex labex 26 6月  6 00:48 /home/labex/project/my_files

これは、所有者 (labex) にはすべてのパーミッション (読み取り、書き込み、実行) があり、グループ (labex) はディレクトリを読み取り、実行 (入力) でき、その他は全くパーミッションがないことを意味します。

最後に、実行パーミッションの設定を実証するために、新しい実行可能スクリプトファイルを作成します。

echo '#!/bin/bash' > ~/project/my_script.sh
echo 'echo "Hello from my script!"' >> ~/project/my_script.sh

デフォルトでは、新しいファイルは実行可能ではありません。パーミッションを確認します。

ls -l ~/project/my_script.sh

おそらく -rw-r--r-- などのパーミッションが表示されます。所有者とグループに対して実行可能にするには、rwxrwx--- を設定します。

  • 所有者:rwx = 7
  • グループ:rwx = 7
  • その他:--- = 0

したがって、8 進数値は 770 です。

chmod 770 ~/project/my_script.sh

変更を確認します。

ls -l ~/project/my_script.sh

出力は次のようになります。

-rwxrwx--- 1 labex labex 41 6月  6 00:52 /home/labex/project/my_script.sh

これでスクリプトを実行できます。

~/project/my_script.sh

出力は次のようになります。

Hello from my script!

chown コマンドでファイルの所有者変更

このステップでは、chown コマンドを使用してファイルおよびディレクトリの所有者とグループを変更する方法を学びます。これは重要な管理タスクであり、ファイルの所有者を変更できるのは root ユーザーだけです。labex ユーザーは sudo 権限を持っているため、これらの操作を実行できます。

chown の基本的な構文は次のとおりです。chown [OPTIONS] NEW_OWNER[:NEW_GROUP] FILE(s)

所有権変更のデモを行うために、新しいユーザーとグループを作成します。この環境はコンテナベースであるため、デモのためにシンプルなユーザーとグループを作成します。

最初に、devs という名前の新しいグループを作成します。

sudo groupadd devs

次に、developer という名前の新しいユーザーを作成し、devs グループに追加します。このデモでは、ホームディレクトリやログインシェルを持たないシステムユーザーを作成します。

sudo useradd -r -g devs -s /sbin/nologin developer

次に、~/project/my_files/document.txt の所有者を labex から developer に変更します。

sudo chown developer ~/project/my_files/document.txt

ls -l を使用して変更を確認します。

ls -l ~/project/my_files/document.txt

出力には、所有者として developer が表示されます。

-rwxr--r-- 1 developer labex 0 6月  6 00:48 /home/labex/project/my_files/document.txt

グループ所有権 (labex) は変更されていないことに注意してください。

owner:group 構文を使用して、所有者とグループを同時に変更することもできます。document.txt の所有者を labex に、グループを devs に戻します。

sudo chown labex:devs ~/project/my_files/document.txt

変更を確認します。

ls -l ~/project/my_files/document.txt

出力には、所有者として labex、グループとして devs が表示されます。

-rwxr--r-- 1 labex devs 0 6月  6 00:48 /home/labex/project/my_files/document.txt

chown コマンドは、-R (再帰的) オプションもサポートしており、これにより、ディレクトリツリー全体に対して所有権を変更できます。~/project/my_files ディレクトリとそのすべてのコンテンツの所有者を developer に、グループを devs に変更します。

sudo chown -R developer:devs ~/project/my_files

ディレクトリに対する変更を確認します。

ls -ld ~/project/my_files

出力は新しい所有権を反映するはずです。

drwxr-x--- 2 developer devs 26 6月  6 00:48 /home/labex/project/my_files

ディレクトリ所有権を developer:devs に変更した後、labex ユーザーは、ディレクトリパーミッションが drwxr-x--- (所有者とグループはアクセスできますが、その他はできません) であり、labex は所有者 (developer) でもグループ (devs) のメンバーでもないため、ディレクトリ内のファイルにアクセスできなくなります。今、ファイル一覧を試すと:

ls -l ~/project/my_files/document.txt

「権限がありません」エラーが表示されます。これは、所有権とパーミッションが連携してアクセスを制御する方法を示しています。

chown :NEW_GROUP FILE(s) を使用して、グループ所有権のみを変更することもできます。これは chgrp コマンドを使用することと同じです。~/project/my_script.sh のグループを devs に変更します。

sudo chown :devs ~/project/my_script.sh

変更を確認します。

ls -l ~/project/my_script.sh

出力には、グループ所有者として devs が表示され、ファイル所有者として labex が維持されます。

-rwxrwx--- 1 labex devs 41 6月  6 00:52 /home/labex/project/my_script.sh

最後に、所有権を labex:labex に戻し、developer ユーザーと devs グループを削除してクリーンアップします。

sudo chown -R labex:labex ~/project/my_files
sudo userdel developer
sudo groupdel devs

特殊パーミッション (SUID、SGID、スティッキービット) の理解と適用

このステップでは、Linux の特殊パーミッションである SUID(Set User ID)、SGID(Set Group ID)、およびスティッキービットについて探求します。これらのパーミッションは、ファイルの実行とディレクトリの動作をより詳細に制御できます。

特殊パーミッションは、標準の 3 桁(所有者、グループ、その他)の前に配置される、8 進数のパーミッションモードに追加の数字で表されます。

  • SUID(Set User ID):
    • 8 進数値: 4
    • ファイルへの影響: SUID が設定された実行可能ファイルが実行されると、それを実行したユーザーではなく、ファイルの所有者のパーミッションで実行されます。これは、passwdコマンド(rootが所有する/etc/shadowファイルに書き込む必要がある)など、特定のタスクを実行するために高い権限を必要とするプログラムでよく使用されます。
    • ls -l出力での表示: 所有者のx(実行)パーミッションの代わりにsが表示されます。所有者に実行パーミッションがない場合は、大文字のSが表示されます。
  • SGID(Set Group ID):
    • 8 進数値: 2
    • ファイルへの影響: SUID と同様ですが、実行可能ファイルはファイルのグループ所有者のパーミッションで実行されます。
    • ディレクトリへの影響: SGID が有効になっているディレクトリ内で作成されたファイルとサブディレクトリは、それらを作成したユーザーのプライマリグループではなく、そのディレクトリのグループ所有権を継承します。これは、すべてのファイルが特定のグループに属する必要がある共有ディレクトリに非常に役立ちます。
    • ls -l出力での表示: グループのx(実行)パーミッションの代わりにsが表示されます。グループに実行パーミッションがない場合は、大文字のSが表示されます。
  • スティッキービット:
    • 8 進数値: 1
    • ファイルへの影響: 影響なし。
    • ディレクトリへの影響: ユーザーはディレクトリ内にファイルを作成できますが、所有しているファイルのみを削除または名前変更できます。これにより、ユーザーは共有ディレクトリ(例:/tmp)内の他のユーザーのファイルを削除または移動できなくなります。
    • ls -l出力での表示: その他のx(実行)パーミッションの代わりにtが表示されます。その他に実行パーミッションがない場合は、大文字のTが表示されます。

これらの特殊パーミッションを実際に見てみましょう。

SUID の例

制限されたファイルを読み込もうとする簡単な C プログラムを作成します。

まず、rootだけが読み取れるファイルを作成します。

sudo touch ~/project/secret_data.txt
sudo chmod 600 ~/project/secret_data.txt
sudo chown root:root ~/project/secret_data.txt

パーミッションを確認します。

ls -l ~/project/secret_data.txt

出力:

-rw------- 1 root root 0 Jun  6 17:36 /home/labex/project/secret_data.txt

次に、このファイルを読み込もうとする C プログラムread_secret.cを作成します。

nano ~/project/read_secret.c

次のコードをread_secret.cに貼り付けます。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main() {
    FILE *fp;
    char buffer[256];

    printf("Attempting to read /home/labex/project/secret_data.txt...\n");

    fp = fopen("/home/labex/project/secret_data.txt", "r");
    if (fp == NULL) {
        perror("Error opening file");
        return 1;
    }

    while (fgets(buffer, sizeof(buffer), fp) != NULL) {
        printf("%s", buffer);
    }

    fclose(fp);
    printf("Successfully read file.\n");
    return 0;
}

nanoを保存して終了します(Ctrl+S、Ctrl+X)。

プログラムをコンパイルします。

gcc ~/project/read_secret.c -o ~/project/read_secret

次に、labexとして実行してみます。

~/project/read_secret

「Error opening file: Permission denied」というメッセージが表示されるはずです。これは、labexにはsecret_data.txtへの読み取りアクセス権がないためです。

次に、read_secretrootが所有するようにし、SUID ビットを設定します。

sudo chown root:root ~/project/read_secret
sudo chmod u+s ~/project/read_secret

パーミッションを確認します。

ls -l ~/project/read_secret

出力:

-rwsr-xr-x 1 root root 17704 Jun  6 01:02 /home/labex/project/read_secret

所有者のパーミッションセットにsがあることに注目してください。次に、labexとしてプログラムをもう一度実行します。

~/project/read_secret

今回は、ファイルが正常に読み込まれます(空なので何も出力されませんが、「Successfully read file.」というメッセージは成功を示しています)。これは、SUID ビットによってプログラムがrootのパーミッションで実行されたためです。

SGID の例(ディレクトリに対して)

共有ディレクトリと新しいグループを作成しましょう。

sudo groupadd shared_group
sudo mkdir ~/project/shared_dir
sudo chown labex:shared_group ~/project/shared_dir
sudo chmod 770 ~/project/shared_dir

次に、shared_dirに SGID ビットを設定します。

sudo chmod g+s ~/project/shared_dir

パーミッションを確認します。

ls -ld ~/project/shared_dir

出力:

drwxrws--- 2 labex shared_group 6 Jun  6 01:02 /home/labex/project/shared_dir

グループのパーミッションセットにsがあることに注目してください。

次に、shared_dir内にファイルを作成します。

touch ~/project/shared_dir/new_file.txt

new_file.txtの所有権を確認します。

ls -l ~/project/shared_dir/new_file.txt

出力:

-rw-r--r-- 1 labex shared_group 0 Jun  6 01:02 /home/labex/project/shared_dir/new_file.txt

labexのプライマリグループはlabexですが、new_file.txtは SGID ビットのためにshared_dirからshared_groupのグループ所有権を継承しました。

スティッキービットの例

/tmpディレクトリは、スティッキービットが設定されたディレクトリの典型的な例です。同様のディレクトリを作成しましょう。

sudo mkdir ~/project/public_upload
sudo chmod 1777 ~/project/public_upload

17771は、スティッキービットの 8 進数値です。777は、所有者、グループ、およびその他に完全なパーミッションを付与します。

パーミッションを確認します。

ls -ld ~/project/public_upload

出力:

drwxrwxrwt 2 root root 6 Jun  6 01:02 /home/labex/project/public_upload

その他のパーミッションセットにtがあることに注目してください。

次に、別のユーザーがこのディレクトリにファイルを作成するシミュレーションを行います。labexユーザーしかいないため、labexとしてファイルを作成し、所有権をrootに変更した後(別のユーザーをシミュレート)、削除を試みます。

labexとしてファイルを作成します。

touch ~/project/public_upload/labex_file.txt

所有権をrootに変更します。

sudo chown root:root ~/project/public_upload/labex_file.txt

次に、labexとしてlabex_file.txtを削除しようとします。

rm ~/project/public_upload/labex_file.txt

書き込み保護されたファイルを削除するかどうかを尋ねるプロンプトが表示され、yで確認すると、「Operation not permitted」というエラーが表示されます。これは、スティッキービットにより、labexpublic_uploadディレクトリへの書き込み権限を持っているにもかかわらず、ユーザーが所有していないファイルをそのディレクトリ内で削除できないためです。rootまたはlabex_file.txtの所有者(この場合はroot)のみがそれを削除できます。

クリーンアップするには、labex_file.txtを削除するためにsudoが必要です。

sudo rm ~/project/public_upload/labex_file.txt

クリーンアップ

作成したファイルとディレクトリ、およびユーザー/グループを削除します。

sudo rm -f ~/project/secret_data.txt ~/project/read_secret.c ~/project/read_secret
sudo rm -rf ~/project/shared_dir ~/project/public_upload
sudo groupdel shared_group

umask コマンドでデフォルトのパーミッションを設定する

この最終ステップでは、新しく作成されたファイルとディレクトリに割り当てられるデフォルトのパーミッションを制御する umask について学びます。 umask (ユーザーファイル作成モードマスク) は、最大可能なパーミッションからパーミッションを 削除 するビットマスクです。

新しいファイルの最大パーミッションは 666 (rw-rw-rw-) で、全員が読み取りと書き込みができることを意味します。セキュリティ上の理由から、新しいファイルはデフォルトでは実行パーミッションを取得しません。
新しいディレクトリの最大パーミッションは 777 (rwxrwxrwx) で、全員が読み取り、書き込み、実行できることを意味します。

umask の値は、これらの最大パーミッションから差し引かれ、実際のデフォルトパーミッションが決定されます。

現在の umask の値を表示するには、単に umask と入力します。

umask

おそらく 0002 または 0022 が表示されます。この環境では、labex ユーザーに対して 0022 です。

umask0022 の場合、次のことを意味します。

  • 最初の 0 は、特殊パーミッション (SUID, SGID, Sticky Bit) 用で、デフォルトでは umask の影響を受けません。
  • 2 番目の 0 は、所有者からパーミッションが削除されないことを意味します。
  • 3 番目の 2 は、グループから書き込みパーミッション (値 2) が削除されることを意味します。
  • 4 番目の 2 は、その他から書き込みパーミッション (値 2) が削除されることを意味します。

umask0022 の場合のデフォルトパーミッションを計算してみましょう。

  • ファイルの場合 (最大 666):

    • 所有者:6 - 0 = 6 (rw-)
    • グループ:6 - 2 = 4 (r--)
    • その他:6 - 2 = 4 (r--)
    • 結果のファイルパーミッション:644 (rw-r--r--)
  • ディレクトリの場合 (最大 777):

    • 所有者:7 - 0 = 7 (rwx)
    • グループ:7 - 2 = 5 (r-x)
    • その他:7 - 2 = 5 (r-x)
    • 結果のディレクトリパーミッション:755 (rwxr-xr-x)

これをテストしてみましょう。新しいファイルとディレクトリを作成します。

touch ~/project/new_file_umask.txt
mkdir ~/project/new_dir_umask

それらのパーミッションを確認します。

ls -l ~/project/new_file_umask.txt
ls -ld ~/project/new_dir_umask

ファイルに対して -rw-r--r--、ディレクトリに対して drwxr-xr-x のようなパーミッションが表示されるはずです。これは、0022 umask の効果を確認しています。

次に、umask0077 に変更してみましょう。この umask は、グループとその他のすべてのパーミッションを削除します。

umask 0077

umask が変更されたことを確認します。

umask

出力:

0077

次に、umask0077 の場合のデフォルトパーミッションを計算してみましょう。

  • ファイルの場合 (最大 666):

    • 所有者:6 - 0 = 6 (rw-)
    • グループ:6 - 7 = -1 (実質的に 0, ---)
    • その他:6 - 7 = -1 (実質的に 0, ---)
    • 結果のファイルパーミッション:600 (rw-------)
  • ディレクトリの場合 (最大 777):

    • 所有者:7 - 0 = 7 (rwx)
    • グループ:7 - 7 = 0 (---)
    • その他:7 - 7 = 0 (---)
    • 結果のディレクトリパーミッション:700 (rwx------)

この新しい umask をテストしてみましょう。別の新しいファイルとディレクトリを作成します。

touch ~/project/restricted_file.txt
mkdir ~/project/restricted_dir

それらのパーミッションを確認します。

ls -l ~/project/restricted_file.txt
ls -ld ~/project/restricted_dir

ファイルに対して -rw-------、ディレクトリに対して drwx------ のようなパーミッションが表示されるはずです。

umask 設定は、通常、シェル初期化ファイル ( ~/.bashrc/etc/profile など) で設定され、ユーザーがログインしたときに自動的に適用されます。この実験(Lab)では、umask の変更は一時的であり、現在のターミナルセッションにのみ適用されます。

labex ユーザーのデフォルトに umask を戻すには、単に 0022 に設定し直すことができます。

umask 0022

最後に、このステップで作成したファイルとディレクトリをクリーンアップします。

rm ~/project/new_file_umask.txt ~/project/restricted_file.txt
rmdir ~/project/new_dir_umask ~/project/restricted_dir

まとめ

この実験では、Linux ファイルシステムのパーミッション管理の基本的な側面を探求しました。まず、ls -l コマンドを使いこなしてファイルとディレクトリのパーミッションを解釈し、ユーザー、グループ、その他というカテゴリ、読み取り、書き込み、実行というパーミッションの意味を理解しました。この基礎知識を基に、chmod コマンドを用いてシンボリックモードと 8 進モードの両方でパーミッションを変更し、アクセス権の設定に柔軟性を持たせる方法を学びました。

さらに、ファイル所有権を chown コマンドで変更する方法を学びました。これは、管理権限を割り当てる上で非常に重要です。この実験では、実行とファイル作成の動作を高度に制御する特殊パーミッション (SUID、SGID、スティッキービット) の理解と適用についても学びました。最後に、umask を使って新しく作成されたファイルとディレクトリに対するデフォルトパーミッションを設定する方法を探求し、システム全体で一貫したパーミッション設定を確保する方法を学びました。