インフラエンジニアの羅針盤

インフラエンジニア1〜3年目のための技術ガイド

Linuxパーミッション設定・特殊権限とシンボリックリンクの使い方【LinuC 101試験対策】

公開
,
LinuC Level 1 第04回 主題1.04 デバイス、Linuxファイルシステム、FHS



LinuCレベル1(101試験)の出題範囲において、マルチユーザーOSとしてのLinuxの安全性とファイル管理の根幹を支えるのが「主題1.02 ファイル・ディレクトリの操作と管理」に含まれる「1.02.1 ファイルの所有者とパーミッション(重要度3)」および「1.02.3 ハードリンクとシンボリックリンク(重要度2)」です。

Linuxシステムでは、誰がどのファイルを読み書き・実行できるかを厳格に制御するアクセス権(パーミッション)が設定されています。一般的な基本パーミッションに加え、管理者権限の一時借用を可能にする特殊権限(SUID, SGID, スティッキービット)、新規作成時の初期権限を決定するマスク値(umask)、そしてファイルの実体管理を司るiノード(inode)とリンク(ハードリンク/シンボリックリンク)の仕組みを深く理解することが求められます。

本記事の到達目標

  • 所有ユーザー・グループ・その他(u, g, o, a)に対するパーミッション(r, w, x)の記号指定および8進数指定(755, 644等)を正確に計算できる
  • chmod, chown, chgrp コマンドを用いてアクセス権と所有権を変更できる
  • 3大特殊権限(SUID: 4000, SGID: 2000, スティッキービット: 1000)の役割と小文字(s/t)と大文字(S/T)の違いを説明できる
  • umask 値に基づき、新規作成されるファイルおよびディレクトリの初期パーミッションを算出できる
  • iノードの概念を理解し、ハードリンクとシンボリックリンクの動作差(削除時の影響、別FS・ディレクトリ対応)を区別できる
  • LinuC 101試験の記述式問題(コマ問)で頻出する権限設定コマンドやリンク作成構文を正確に記述できる

検証環境情報

  • ディストリビューション:AlmaLinux 9.8 (Olive Jaguar)
  • カーネルバージョン:Linux 5.14.0-570.el9.x86_64
  • ファイルシステム:XFS (Root filesystem)
  • コアユーティリティ:GNU coreutils 8.32
  • 検証ホスト:linuc-node01 (192.168.2.138)
目次
  1. 1. Linuxのパーミッション体系とアクセス制御の仕組み
    1. 1.1 所有ユーザー・所有グループ・その他(u, g, o, a)の3層構造
    2. 1.2 読み取り(r:4)・書き込み(w:2)・実行(x:1)の数値と記号
    3. 1.3 chmodコマンドによるパーミッション変更(数値指定と記号指定)
    4. 1.4 chownとchgrpによる所有者・所属グループの変更
  2. 2. 特殊権限(SUID, SGID, スティッキービット)の役割と設定
    1. 2.1 表示記号の小文字(s, t)と大文字(S, T)の厳格な違い
  3. 3. 新規ファイルのデフォルト権限とumask値の計算
    1. 3.1 umaskコマンドの基本動作と表示形式
    2. 3.2 ファイル(基準666)とディレクトリ(基準777)の権限決定ルール
  4. 4. ハードリンクとシンボリックリンク(iノードの仕組み)
    1. 4.1 Linuxファイルシステムの根幹「iノード(inode)」の役割
    2. 4.2 ハードリンクの特徴と制約(同一iノード、別FS不可、ディレクトリ不可)
    3. 4.3 シンボリックリンクの特徴と使い方(別iノード、パス参照、ln -s)
  5. 5. 実機ハンズオン演習:AlmaLinux 9で権限設定とリンク操作を体験
    1. 5.1 検証用環境の構築
    2. 5.2 演習1:chmod, chown および特殊権限(SUID/Sticky)の実装確認
    3. 5.3 演習2:umask変更による新規ファイル作成パーミッションの実証
    4. 5.4 演習3:ln コマンドによるハードリンクとシンボリックリンクのiノード比較
  6. 6. LinuC 101試験対策まとめとコマ問頻出チェック
    1. 6.1 コマ問(記述式)頻出キーワード一覧表
    2. 6.2 Ping-t演習へのブリッジ(対象分野と推奨学習順)
  7. 7. まとめと次回予告

1. Linuxのパーミッション体系とアクセス制御の仕組み

1.1 所有ユーザー・所有グループ・その他(u, g, o, a)の3層構造

Linux上の全ファイルおよびディレクトリには、必ず「所有ユーザー(User)」と「所有グループ(Group)」が紐づけられています。アクセス権(パーミッション)は、操作を試みるユーザーとファイルとの関係性に応じて、以下の3つの区分で独立して設定されます。

区分記号 対象 説明
u 所有ユーザー(User / Owner) ファイルを所有している特定のユーザーアカウントに対する権限
g 所有グループ(Group) ファイルが所属しているグループのメンバーに対する権限
o その他(Others) 所有ユーザーでもなく、所有グループのメンバーでもない第三者に対する権限
a 全ユーザー(All) 上記3区分(u, g, o)の全員に対する一括指定

1.2 読み取り(r:4)・書き込み(w:2)・実行(x:1)の数値と記号

パーミッションには「読み取り(Read)」「書き込み(Write)」「実行(Execute)」の3種類が存在します。ファイルとディレクトリでは、それぞれの権限が持つ意味が異なる点に注意が必要です。

権限 記号 8進数値 ファイルに対する意味 ディレクトリに対する意味
読み取り r 4 ファイルの内容を閲覧・読み込む権限(cat, less 等) ディレクトリ内のファイル一覧を表示する権限(ls 等)
書き込み w 2 ファイルの内容を変更・追記・保存する権限(vi 等) ディレクトリ内でファイルを新規作成・削除・リネームする権限
実行 x 1 ファイルをプログラムやスクリプトとして実行する権限 ディレクトリの内部に進入(移動)する権限(cd 等)
権限なし - 0 該当する操作を一切禁止する 該当する操作を一切禁止する

ディレクトリにおける実行権限(x)の重要性

ディレクトリに対して読み取り権限(r)があっても、実行権限(x)がない場合、そのディレクトリをカレントディレクトリとして移動(cd)したり、ディレクトリ内部のファイル実体にアクセスすることはできません。ディレクトリを正常に利用するためには、基本的に r-x(5)または rwx(7)の権限が必要です。

Linux パーミッション構造と特殊権限
図1:Linuxパーミッション構造と3大特殊権限(SUID / SGID / スティッキービット)

1.3 chmodコマンドによるパーミッション変更(数値指定と記号指定)

ファイルやディレクトリのパーミッションを変更するコマンドが chmod(Change Mode)です。変更方法には「数値指定(8進数)」と「記号指定」の2通りがあります。

指定方式 書式例 動作説明
数値指定 chmod 755 script.sh 所有者に rwx(7)、グループに r-x(5)、その他に r-x(5)を絶対設定
chmod 644 config.txt 所有者に rw-(6)、グループに r--(4)、その他に r--(4)を絶対設定
記号指定 chmod u+x script.sh 所有ユーザー(u)に実行権限(+x)を追加付与
chmod go-w file.txt グループ(g)とその他(o)から書き込み権限(-w)を剥奪
chmod a=r file.txt 全ユーザー(a)の権限を読み取り専用(=r)に統一設定
再帰変更 chmod -R 750 /app/dir ディレクトリ内の全ファイル・サブディレクトリを再帰的に変更

1.4 chownとchgrpによる所有者・所属グループの変更

ファイルやディレクトリの所有者(ユーザー)および所有グループを変更するコマンドです。一般ユーザーは他人の所有権を奪うことができないため、通常は管理者権限(root)で実行します。

コマンド書式 機能説明 具体例
chown [ユーザー] [ファイル] ファイルの所有ユーザーのみを変更 chown nginx index.html
chown [ユーザー]:[グループ] [ファイル] 所有ユーザーと所有グループを同時に変更 chown nginx:webdev app.conf
chown :[グループ] [ファイル] 所有グループのみを変更(ユーザーは不変) chown :developers project/
chown -R [ユーザー]:[グループ] [ディレクトリ] ディレクトリ内を再帰的に一括変更 chown -R www-data:www-data /var/www/html
chgrp [グループ] [ファイル] 所有グループのみを変更する専用コマンド chgrp webadmin index.html

2. 特殊権限(SUID, SGID, スティッキービット)の役割と設定

Linuxのセキュリティモデルには、標準の9ビット(rwxrwxrwx)では実現できない特別なアクセス制御を可能にする「3つの特殊権限」が用意されています。これらはパーミッションの先頭(4桁の8進数)として指定します。

特殊権限名 8進数値 記号表示位置 機能と主な実用例
SUID
(Set User ID)
4000 所有者の実行権限位置
rwsr-xr-x
実行ファイルを実行した際、実行者ではなくファイルの所有ユーザー(通常root)の権限でプロセスが動作する。
例: /usr/bin/passwd(一般ユーザーが自身のパスワードを変更する際、root権限が必要な /etc/shadow への書き込みを可能にする)
SGID
(Set Group ID)
2000 グループの実行権限位置
rwxr-sr-x
① 実行ファイル:ファイルの所有グループ権限で動作する。
② ディレクトリ:そのディレクトリ内に作成された新規ファイル・ディレクトリの所有グループが、親ディレクトリと同じグループに自動継承される(プロジェクト共有フォルダ等で多用)。
スティッキービット
(Sticky Bit)
1000 その他の実行権限位置
rwxrwxrwt
ディレクトリに対して設定される。誰でもファイルの作成ができる共有領域において、「ファイルの所有者」または「rootユーザー」以外は削除・リネームができないように保護する。
例: /tmp(777権限だが他人のファイルを勝手に削除できない)

2.1 表示記号の小文字(s, t)と大文字(S, T)の厳格な違い

ls -l でパーミッションを確認した際、特殊権限が付与されている位置に「小文字(s, t)」が表示される場合と、「大文字(S, T)」が表示される場合があります。LinuC試験では、この違いが頻繁に問われます。

表示記号 実行権限(x)の状態 判定・意味
小文字 s または t 実行権限(x)が存在する 正常な特殊権限(例: chmod 4755-rwsr-xr-xchmod 1777drwxrwxrwt
大文字 S または T 実行権限(x)が存在しない 特殊権限は設定されているが、元の実行権限(x)が付与されていない不完全な状態(例: chmod 4644-rwSr--r--chmod 1776drwxrwxrwT

3. 新規ファイルのデフォルト権限とumask値の計算

3.1 umaskコマンドの基本動作と表示形式

Linuxにおいて、新規にファイルやディレクトリを作成した際に自動的に適用されるパーミッションを決定するのが「マスク値(umask)」です。umask コマンドを実行することで、現在のマスク値の確認や変更が行えます。

[user01@linuc-node01 ~]$ umask
0022

[user01@linuc-node01 ~]$ umask -S
u=rwx,g=rx,o=rx

先頭の 0 は特殊権限ビットを表し、後ろの3桁(022)がそれぞれ所有者、グループ、その他に対するマスク値を示します。-S オプションを付与すると、シンボリック表記(有効な権限)で表示されます。

3.2 ファイル(基準666)とディレクトリ(基準777)の権限決定ルール

OSはセキュリティ上の安全策として、いかなる場合であっても新規作成される「通常のファイル」に最初から実行権限(x)を付与しません。そのため、計算の基準となる最大値がファイルとディレクトリで異なります。

対象種別 基準となる最大値 umask 022 の場合 umask 027 の場合
ディレクトリ 777rwxrwxrwx 777 - 022 = 755rwxr-xr-x 777 - 027 = 750rwxr-x---
ファイル 666rw-rw-rw- 666 - 022 = 644rw-r--r-- 666 - 027 ➔ 640rw-r-----

奇数マスク値(例: 027)での注意点

ファイルに対する計算で単純な引き算を行うと、その他(others)の権限が 6 - 7 = -1 となり破綻します。厳密な内部処理は「基準値 AND (NOT umask)」の論理演算です。ファイルの基準値 6rw-)には最初から実行権限 1x)が含まれていないため、マスク値 7rwx を禁止)を適用しても奪われるのは r(4)と w(2)のみとなり、結果は 0---)になります。したがって umask 027 の場合の新規ファイル権限は 640rw-r-----)となります。

4. ハードリンクとシンボリックリンク(iノードの仕組み)

4.1 Linuxファイルシステムの根幹「iノード(inode)」の役割

Linuxのファイルシステム(ext4やxfs等)では、ディスク上のデータ実体と「ファイル名」が直接結びついているわけではありません。カーネルは、ファイルサイズ、所有者、パーミッション、データブロックの格納位置といったファイルのメタデータを「iノード(inode)」と呼ばれる管理台帳番号で管理しています。

ディレクトリエントリは、単に「ファイル名」と「対応するiノード番号」のペアを対応付ける目次テーブルにすぎません。

ハードリンクとシンボリックリンクのiノード構造比較
図2:ハードリンクとシンボリックリンクのiノード構造比較および動作差

4.2 ハードリンクの特徴と制約(同一iノード、別FS不可、ディレクトリ不可)

「ハードリンク(Hard link)」は、既存のファイルとまったく同一のiノード番号を指す新しいファイル名を作成するリンク方式です。

項目 ハードリンクの特性 技術的理由
iノード番号 元ファイルと完全に同一 同じデータ実体を別の名前で参照しているため
リンクカウント ハードリンクを作成するたびに +1 加算される ls -l の第2フィールドに表示される数値
元ファイル削除時 データは削除されず残る リンクカウントが -1 減るだけで、リンクカウントが 0 になるまでデータ実体は消えない
ファイルシステム跨ぎ 作成不可(異なるパーティション間はNG) iノード番号はパーティション(ファイルシステム)ごとに独立して付番されているため
ディレクトリへのリンク 作成不可(一般ユーザー・root問わず禁止) ディレクトリツリーに無限ループ(循環参照)が発生することを防止するため

4.3 シンボリックリンクの特徴と使い方(別iノード、パス参照、ln -s)

「シンボリックリンク(Symbolic link / ソフトリンク)」は、Windowsのショートカットと同様に、独立した新しいiノードを持ち、ファイルの内容として「元ファイルへのパス文字列」を格納する特殊ファイルです。

項目 シンボリックリンクの特性 コマンド・書式
作成コマンド ln -s [元ファイル] [リンク名] 必ず -s オプションを付ける
iノード番号 元ファイルとは異なる独立した番号 リンクファイル自体が独自のメタデータを持つ
ファイル種別記号 ls -l の先頭1文字が l(エル)になる lrwxrwxrwx 1 user group 8 ... link -> target
ファイルシステム跨ぎ 作成可能(異なるパーティション間もOK) 単なるテキストパスの参照であるため制限なし
ディレクトリへのリンク 作成可能 ディレクトリのショートカットとして広く実用(例: /bin -> usr/bin
元ファイル削除時 リンク切れ(dangling link)となる 参照先のパスが存在しなくなるため、アクセスするとエラーになる

5. 実機ハンズオン演習:AlmaLinux 9で権限設定とリンク操作を体験

5.1 検証用環境の構築

手元のAlmaLinux 9環境で検証用作業ディレクトリを作成し、パーミッション変更とリンク操作の実証を行います。

[user01@linuc-node01 ~]$ mkdir -p /tmp/perm_lab && cd /tmp/perm_lab

5.2 演習1:chmod, chown および特殊権限(SUID/Sticky)の実装確認

特殊権限を設定し、小文字と大文字の表示差、およびスティッキービットの挙動を確認します。

  1. 基本パーミッションの変更
    [user01@linuc-node01 perm_lab]$ touch test_file.txt
    [user01@linuc-node01 perm_lab]$ chmod 640 test_file.txt
    [user01@linuc-node01 perm_lab]$ ls -l test_file.txt
    -rw-r-----. 1 user01 user01 0  9月  8 07:04 test_file.txt
  2. SUIDの設定と小文字s / 大文字Sの比較
    [user01@linuc-node01 perm_lab]$ touch suid_demo.sh
    [user01@linuc-node01 perm_lab]$ chmod 4755 suid_demo.sh
    [user01@linuc-node01 perm_lab]$ ls -l suid_demo.sh
    -rwsr-xr-x. 1 user01 user01 0  9月  8 07:04 suid_demo.sh
    
    [user01@linuc-node01 perm_lab]$ chmod 4644 suid_demo.sh
    [user01@linuc-node01 perm_lab]$ ls -l suid_demo.sh
    -rwSr--r--. 1 user01 user01 0  9月  8 07:04 suid_demo.sh

    実行権限(x)がない状態でSUIDを付与すると大文字 S になることが確認できます。

  3. スティッキービットの設定
    [user01@linuc-node01 perm_lab]$ mkdir shared_dir
    [user01@linuc-node01 perm_lab]$ chmod 1777 shared_dir
    [user01@linuc-node01 perm_lab]$ ls -ld shared_dir
    drwxrwxrwt. 2 user01 user01 6  9月  8 07:04 shared_dir

    末尾が t(実行権あり+スティッキー)に変化します。

5.3 演習2:umask変更による新規ファイル作成パーミッションの実証

サブシェル内で umask を切り替え、新規作成されるファイルとディレクトリの初期権限を検証します。

[user01@linuc-node01 perm_lab]$ ( umask 022 && touch f22.txt && mkdir d22 && ls -l f22.txt && ls -ld d22 )
-rw-r--r--. 1 user01 user01 0  9月  8 07:04 f22.txt
drwxr-xr-x. 2 user01 user01 6  9月  8 07:04 d22

[user01@linuc-node01 perm_lab]$ ( umask 027 && touch f27.txt && mkdir d27 && ls -l f27.txt && ls -ld d27 )
-rw-r-----. 1 user01 user01 0  9月  8 07:04 f27.txt
drwxr-x---. 2 user01 user01 6  9月  8 07:04 d27

umask 027 の場合、ファイルは 640-rw-r-----)、ディレクトリは 750drwxr-x---)で生成されることが実証されます。

5.4 演習3:ln コマンドによるハードリンクとシンボリックリンクのiノード比較

ハードリンクとシンボリックリンクを作成し、iノード番号(ls -i)とリンクカウント、および元ファイル削除時の動作差を確認します。

  1. 元ファイルと2種のリンクを作成
    [user01@linuc-node01 perm_lab]$ echo "LinuC Master Data" > original.txt
    [user01@linuc-node01 perm_lab]$ ln original.txt hard_link.txt
    [user01@linuc-node01 perm_lab]$ ln -s original.txt sym_link.txt
  2. iノード番号とリンクカウントの確認
    [user01@linuc-node01 perm_lab]$ ls -l -i original.txt hard_link.txt sym_link.txt
    33751537 -rw-r--r--. 2 user01 user01 18  9月  8 07:04 hard_link.txt
    33751537 -rw-r--r--. 2 user01 user01 18  9月  8 07:04 original.txt
    33751538 lrwxrwxrwx. 1 user01 user01 12  9月  8 07:04 sym_link.txt -> original.txt

    original.txthard_link.txt は同一のiノード番号(33751537)を持ち、リンクカウントが 2 になっています。sym_link.txt は別番号(33751538)です。

  3. 元ファイル削除時の挙動検証
    [user01@linuc-node01 perm_lab]$ rm -f original.txt
    [user01@linuc-node01 perm_lab]$ cat hard_link.txt
    LinuC Master Data
    
    [user01@linuc-node01 perm_lab]$ cat sym_link.txt
    cat: sym_link.txt: そのようなファイルやディレクトリはありません

    ハードリンクはデータを保持し続けていますが、シンボリックリンクはリンク切れとなり読み込めなくなります。

検証終了後は rm -rf /tmp/perm_lab で作業ディレクトリを消去します。

6. LinuC 101試験対策まとめとコマ問頻出チェック

6.1 コマ問(記述式)頻出キーワード一覧表

出題区分 コマンド / 構文 出題の論点・記述ポイント
パーミッション数値設定 chmod 755 file 所有者7、グループ5、その他5 の8進数指定
記号による権限付与 chmod u+x file 対象記号(u/g/o/a)と演算子(+/-/=)
SUID付与 chmod 4755 file 先頭に4を付与(記号指定は u+s
SGID付与 chmod 2755 dir 先頭に2を付与(記号指定は g+s
スティッキービット付与 chmod 1777 dir 先頭に1を付与(記号指定は +t または o+t
所有者・グループ変更 chown user:group file コロン区切りで同時変更する書式
再帰的所有者変更 chown -R user dir 大文字の -R オプション
グループ変更専用 chgrp group file グループのみを変更するコマンド名
マスク値確認・変更 umask 022 4桁または3桁のマスク値指定
ハードリンク作成 ln file link オプションなし(元ファイル、リンク名の順)
シンボリックリンク作成 ln -s target link 小文字の -s オプション
iノード番号表示 ls -i 小文字の -i(inode)オプション

6.2 Ping-t演習へのブリッジ(対象分野と推奨学習順)

  1. 「主題1.02 ファイル・ディレクトリの操作と管理(1.02.1 ファイルの所有者とパーミッション)」の未出題問題を解き、基本パーミッションの8進数計算と umask の算出をマスターする
  2. 特殊権限(SUID: 4000, SGID: 2000, スティッキービット: 1000)の問題を集中的に演習し、小文字大文字の判定ミスをゼロにする
  3. 「主題1.02 ファイル・ディレクトリの操作と管理(1.02.3 ハードリンクとシンボリックリンク)」の問題を解き、iノードの制約(別FS、ディレクトリ)を頭に叩き込む
  4. Ping-tの「コマ問道場」で、chmod 4755, chmod 1777, chown user:group, ln -s などの記述式問題を反復入力する

確認演習問題 1

ディレクトリ /project/share に対し、グループ所属メンバー全員が読み書き・移動可能とし、かつそのディレクトリ内に作成されたすべての新規ファイルの所有グループが自動的に親ディレクトリの所有グループを継承するように設定したい。適切なパーミッションを特殊権限を含めた4桁の8進数値で記述しなさい(所有者権限はrwx、その他はアクセス不可とする)。

解答と解説を見る

正解: 2770

解説: ディレクトリ配下のグループ継承を行う特殊権限は SGID(2000)です。所有者権限 rwx(7)、グループ権限 rwx(7)、その他権限 ---(0)と組み合わせることで、4桁の数値は 2770 となります。

確認演習問題 2

現在のシェル環境において umask 027 が設定されている。この状態で touch newfile.txt を実行して新規ファイルを作成した際、設定されるパーミッションを3桁の8進数値で記述しなさい。

解答と解説を見る

正解: 640

解説: 新規ファイルの最大パーミッションは 666rw-rw-rw-)です。マスク値 027(所有者: 0, グループ: 2, その他: 7)を適用すると、所有者は 6rw-)、グループは 6 - 2 = 4r--)、その他は 6 から rwx をすべて禁止されるため 0---)となり、正解は 640 です。

7. まとめと次回予告

本記事では、Linuxの基本パーミッション(r, w, x)の計算と変更(chmod)、所有者・グループの管理(chown, chgrp)、3大特殊権限(SUID, SGID, スティッキービット)、umask によるデフォルト作成権限の決定、およびiノードを基盤とするハードリンクとシンボリックリンクの挙動の違いを解説しました。

パーミッションとリンクの正確な理解は、安全なシステム運用の土台であり、LinuC試験でも確実に得点すべき定番トピックです。

次回は、システムのライフサイクルの起点である「Linuxのインストール・SSH接続とデスクトップ環境【主題1.01 (1.01.1, 1.01.5)】」を取り上げます。UEFI/BIOSの起動順序、インストール手順、システムの起動・停止(shutdown, systemctl)、SSH鍵認証接続(authorized_keys, id_rsa)、およびX Window System(GUIデスクトップ環境)の基本構造を網羅します。

前の記事
次の記事