メインコンテンツへスキップ
レッスン 9 / 10推定時間: 30

パーミッションと所有権

Linuxのファイルパーミッションと所有権の仕組みを理解し、chmod、chownコマンドを使って管理する方法を学びます

このレッスンの学習目標

  • パーミッションの表記方法を理解する
  • ファイルのパーミッションを変更できる
  • 所有者とグループを変更できる
  • セキュリティを考慮した適切な権限設定ができる

Linuxのパーミッションシステム

Linuxでは、すべてのファイルとディレクトリに対して「誰が」「何を」できるかを細かく制御できます。

パーミッションの基本構造

CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$

ファイルツリー

/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log

ls -lの出力例:

-rw-r--r-- 1 user group 0 Jan 1 12:00 myfile.txt
drwxr-xr-x 2 user group 64 Jan 1 12:00 mydir

最初の10文字がパーミッション情報です。

パーミッションの読み方

-rwxrwxrwx
│└┬┘└┬┘└┬┘
│ │  │  └── その他(other)の権限
│ │  └───── グループ(group)の権限
│ └──────── 所有者(user)の権限
└────────── ファイルタイプ

権限の種類

記号権限ファイルへの意味ディレクトリへの意味
r読み取り(read)ファイルの内容を読めるディレクトリの一覧を表示できる
w書き込み(write)ファイルを編集できるファイルの作成・削除ができる
x実行(execute)プログラムとして実行できるディレクトリに移動できる

ファイルタイプ

記号タイプ
-通常ファイル
dディレクトリ
lシンボリックリンク
cキャラクタデバイス
bブロックデバイス

パーミッションの変更:chmod

chmod(Change Mode)は、ファイルやディレクトリのパーミッションを変更します。

シンボリックモード

CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$

ファイルツリー

/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log

シンボリックモードの構文:

  • u: 所有者(user)
  • g: グループ(group)
  • o: その他(other)
  • a: すべて(all)
  • +: 権限を追加
  • -: 権限を削除
  • =: 権限を設定

例:chmod u+x script.sh

数値モード(8進数)

各権限には数値が割り当てられています:

  • 読み取り(r)= 4
  • 書き込み(w)= 2
  • 実行(x)= 1
CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$

ファイルツリー

/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log

よく使われるパーミッション:

  • 644: rw-r--r-- (一般的なファイル)
  • 755: rwxr-xr-x (実行可能ファイル)
  • 700: rwx------ (プライベートファイル)
  • 777: rwxrwxrwx (フルアクセス - 危険!)

実践的なchmodの使用例

スクリプトファイルの実行権限

CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$

ファイルツリー

/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log
# 実行権限を追加
chmod +x myscript.sh
# または
chmod 755 myscript.sh

# 特定のユーザーのみ実行可能
chmod u+x,go-x myscript.sh

ディレクトリの権限

# ディレクトリに入れるようにする
chmod +x directory/

# プライベートディレクトリ
chmod 700 private/

# 読み取り専用の共有ディレクトリ
chmod 755 public/

再帰的な変更

# ディレクトリ内のすべてのファイル
chmod -R 644 documents/

# ディレクトリとファイルを分けて設定
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;

所有者の変更:chown

chown(Change Owner)は、ファイルやディレクトリの所有者を変更します。

CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$

ファイルツリー

/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log

通常、chownはroot権限が必要です。 このプレイグラウンドでは制限があるため、実際のLinuxシステムでの動作とは異なる場合があります。

chownの使用例

# 所有者を変更
sudo chown newuser file.txt

# 所有者とグループを同時に変更
sudo chown newuser:newgroup file.txt

# グループのみ変更
sudo chown :newgroup file.txt

# 再帰的に変更
sudo chown -R user:group directory/

グループの変更:chgrp

chgrp(Change Group)は、グループのみを変更する専用コマンドです。

# グループを変更
chgrp developers project/

# 再帰的に変更
chgrp -R webteam /var/www/html/

umask - デフォルトパーミッション

umaskは、新しく作成されるファイルやディレクトリのデフォルトパーミッションを設定します。

CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$

ファイルツリー

/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log

umaskの仕組み:

  • ファイルの最大権限:666(rw-rw-rw-)
  • ディレクトリの最大権限:777(rwxrwxrwx)
  • umask値を引いた値が実際のパーミッション

例:umask 022の場合

  • ファイル:666 - 022 = 644(rw-r--r--)
  • ディレクトリ:777 - 022 = 755(rwxr-xr-x)

特殊なパーミッション

SUID、SGID、スティッキービット

ビット記号説明
SUIDs (user)実行時に所有者の権限で実行
SGIDs (group)実行時にグループの権限で実行
Stickyt (other)ディレクトリ内のファイルは所有者のみ削除可能
# SUID設定
chmod u+s program

# SGID設定
chmod g+s directory/

# スティッキービット設定
chmod +t /tmp/

実践演習

以下の演習に挑戦してみましょう:

CommandAcademy Terminal
Welcome to CommandAcademy Terminal!
Type "help" to see available commands.
user@cmdac:~$

ファイルツリー

/
etc
hosts35B
passwd76B
home
user
tmp
usr
bin
share
var
log

課題

  1. deploy.shに実行権限を付与
  2. docsディレクトリを読み取り専用に設定
  3. srcディレクトリをグループメンバーが書き込み可能に
  4. プロジェクト全体を他のユーザーから見えないように設定

解答例:

# 1. 実行権限を付与
chmod +x project/scripts/deploy.sh

# 2. 読み取り専用
chmod 555 project/docs/

# 3. グループ書き込み可能
chmod 775 project/src/

# 4. 他のユーザーから隠す
chmod -R o-rwx project/

セキュリティのベストプラクティス

1. 最小権限の原則

# 悪い例
chmod 777 file.txt

# 良い例
chmod 640 config.txt  # 所有者は読み書き、グループは読み取りのみ

2. 重要なファイルの保護

# 設定ファイル
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub

# パスワードファイル
chmod 600 .env

3. ディレクトリの適切な設定

# Webサーバーのドキュメントルート
chmod 755 /var/www/html
chmod 644 /var/www/html/*.html

# 共有ディレクトリ
chmod 1777 /tmp  # スティッキービット付き

よくあるトラブルと対処法

Permission denied

# 原因の確認
ls -l file.txt
whoami
groups

# 解決策
chmod u+r file.txt  # 読み取り権限を追加
sudo command       # root権限で実行

スクリプトが実行できない

# 実行権限の確認
ls -l script.sh

# 実行権限を付与
chmod +x script.sh

# シェバンの確認
head -1 script.sh  # #!/bin/bash があるか

まとめ

このレッスンでは、Linuxのパーミッションシステムについて学びました。適切な権限設定は、システムのセキュリティを保つ上で非常に重要です。

次のレッスンでは、これまで学んだコマンドを組み合わせた実践的な演習を行います。

⚠️ 権限設定は慎重に!特に本番環境では、777のような緩い権限は避け、必要最小限の権限を設定しましょう。

さらに学習を続けるには

素晴らしい学習ペースです!次のレッスンに進むには、無料会員登録をお願いします。無料会員では各コース3レッスンまで学習できます。

無料で続きを学ぶ

各コース3レッスンまで学習可能

学習進捗の自動保存

コース修了証明書の発行