メインコンテンツへスキップ
中級15分で読める

chmodとchownでファイル権限を完全マスター

Linuxのファイル権限管理の要となるchmodとchownコマンドの使い方を、実践的な例とトラブルシューティングを交えて徹底解説します。

基礎編chmodchown権限管理セキュリティ基本コマンド

🎯 この記事で学べること

  • 1
    Linuxの権限システム(rwx)の仕組みを理解できます
  • 2
    `chmod`で数値・シンボル表記を使った権限変更ができるようになります
  • 3
    `chown`でファイルの所有者とグループを変更する方法がわかります
  • 4
    セキュリティを意識した適切な権限設定ができるようになります
  • 5
    特殊ビット(setuid、setgid、sticky)の意味と使い方を学べます

読了時間: 約15

ファイル権限って何だろう?

こんにちは!今回は、Linuxシステムの安全を守る重要な仕組み、ファイル権限について学んでいきましょう。

Windowsを使っている方は「読み取り専用」という設定を見たことがあるかもしれませんね。Linuxの権限システムはそれをもっと細かく、もっと強力にしたものだと思ってください。誰が何をできるのか、きめ細かくコントロールできるんです!

Linuxの権限システムの基礎

3つの権限タイプを理解しよう

Linuxでは、ファイルやディレクトリに対して3種類の権限があります。それぞれ頭文字で表されますよ:

  • r(read)読み取り権限: ファイルの中身を見る、ディレクトリの一覧を表示する
  • w(write)書き込み権限: ファイルを編集する、ディレクトリ内でファイルを作成・削除する
  • x(execute)実行権限: ファイルをプログラムとして実行する、ディレクトリに入る

ディレクトリの実行権限(x)は「中に入る権限」です。これがないと、そのディレクトリにcdできません!

3つのユーザーグループ

権限は3つのグループに対して設定されます:

  • u(user)所有者: ファイルを作った人、または所有権を持つ人
  • g(group)グループ: ファイルが属するグループのメンバー
  • o(others)その他: 上記以外のすべてのユーザー

権限の見方をマスターしよう

ls -lコマンドで権限を確認してみましょう:

-rwxr-xr-- 1 user group 1234 Jan 1 12:00 script.sh

この表示の読み方を一緒に見ていきましょうね:

  1. 最初の1文字: ファイルタイプ

    • -: 通常のファイル
    • d: ディレクトリ
    • l: シンボリックリンク
  2. 次の9文字: 権限(3文字×3グループ)

    • rwx: 所有者の権限(読み・書き・実行すべてOK)
    • r-x: グループの権限(読みと実行はOK、書き込みはNG)
    • r--: その他の権限(読みだけOK)

chmodコマンドの使い方

chmodは「change mode」の略で、ファイルやディレクトリの権限を変更するコマンドです。2つの記法があるので、両方マスターしていきましょう!

数値表記(8進数)による設定

権限を数字で表す方法です。覚え方は簡単:

  • 4: 読み取り(r)
  • 2: 書き込み(w)
  • 1: 実行(x)

これらを足し算して使います!

# よく使う権限の組み合わせ
7 = 4 + 2 + 1 = rwx(全部OK)
6 = 4 + 2     = rw-(読み書きOK、実行NG)
5 = 4 + 1     = r-x(読みと実行OK、書き込みNG)
4 = 4         = r--(読みだけOK)

実際に使ってみましょう:

# 755: 所有者は全権限、他は読みと実行のみ
chmod 755 script.sh

# 644: 所有者は読み書き、他は読みだけ
chmod 644 document.txt

# 600: 所有者のみ読み書き(重要ファイルに最適)
chmod 600 secrets.conf

最初は「755」と「644」を覚えておけば、ほとんどの場面で困りません!

シンボル表記による設定

もっと直感的な方法もあります。権限を追加(+)、削除(-)、設定(=)できます:

# 所有者に実行権限を追加
chmod u+x script.sh

# グループから書き込み権限を削除  
chmod g-w document.txt

# その他のユーザーは読み取りのみに設定
chmod o=r public.txt

# 全員に実行権限を追加
chmod a+x program

aは「all(全員)」の意味です。chmod a+xは全員に実行権限を与えます。

ディレクトリ全体の権限を変更

-Rオプションで、ディレクトリとその中身すべてに権限を適用できます:

# プロジェクト全体を755に設定
chmod -R 755 myproject/

# 注意:ファイルとディレクトリで別々の権限が必要な場合
find myproject -type d -exec chmod 755 {} \;  # ディレクトリのみ
find myproject -type f -exec chmod 644 {} \;  # ファイルのみ

🎮 理解度チェック

Q1: chmod 755 file.txtを実行すると、グループユーザーはどんな操作ができますか?

chmod 755 file.txtを実行すると、グループユーザーはどんな操作ができますか?

chownコマンドの使い方

chownは「change owner」の略で、ファイルやディレクトリの所有者を変更します。システム管理でとても重要なコマンドですね!

基本的な使い方

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

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

# グループのみ変更(:を先頭に)
chown :newgroup file.txt

chownコマンドは通常、root権限(sudo)が必要です。自分が所有していないファイルの所有者は変更できません。

実践的な使用例

Webサーバーのファイル所有者を設定する例を見てみましょう:

# Webサーバー用のディレクトリを作成
sudo mkdir /var/www/mysite

# Webサーバーのユーザー(www-data)に所有権を渡す
sudo chown -R www-data:www-data /var/www/mysite

# 開発者グループも編集できるようにする
sudo chown -R developer:www-data /var/www/mysite
sudo chmod -R 775 /var/www/mysite

実践!よくあるシナリオ

シナリオ1: 実行可能なスクリプトを作る

新しいシェルスクリプトを作って、実行できるようにしてみましょう:

# スクリプトを作成
echo '#!/bin/bash
echo "Hello, Linux!"' > hello.sh

# 権限を確認(最初は実行権限がない)
ls -l hello.sh

# 実行権限を追加
chmod +x hello.sh
# または
chmod 755 hello.sh

# 実行してみる
./hello.sh

シナリオ2: 共有フォルダを作る

チームで使う共有フォルダを設定してみましょう:

# 共有ディレクトリを作成
sudo mkdir /shared/team-docs

# グループを設定
sudo chown :developers /shared/team-docs

# グループメンバーが読み書きできるように
sudo chmod 770 /shared/team-docs

# 新規ファイルも同じグループになるように(setgidビット)
sudo chmod g+s /shared/team-docs

シナリオ3: セキュアな設定ファイル

パスワードなどを含む設定ファイルを保護しましょう:

# 設定ファイルを作成
touch database.conf

# 所有者のみ読み書き可能に
chmod 600 database.conf

# 確認
ls -l database.conf
# -rw------- 1 user group 0 Jan 1 12:00 database.conf

🎮 理解度チェック

Q2: Webサーバーのログファイルを、所有者は読み書き、グループは読み取りのみ、その他はアクセス不可にしたい。どのコマンドを使いますか?

ログファイルを所有者は読み書き、グループは読み取りのみ、その他はアクセス不可にする権限は?

特殊な権限ビット

通常の権限以外に、3つの特殊なビットがあります。上級者向けですが、知っておくと便利ですよ!

setuidビット(4000)

実行時に、ファイル所有者の権限で動作します:

# passwdコマンドの例(一般ユーザーでも自分のパスワードを変更できる)
ls -l /usr/bin/passwd
# -rwsr-xr-x 1 root root ... /usr/bin/passwd

# setuidビットを設定
chmod u+s myprogram
# または
chmod 4755 myprogram

setgidビット(2000)

ディレクトリに設定すると、新規ファイルが親ディレクトリのグループを継承します:

# 共有ディレクトリに設定
chmod g+s /shared/project
# または
chmod 2775 /shared/project

スティッキービット(1000)

ディレクトリ内のファイルは、所有者だけが削除できるようになります:

# /tmpディレクトリのような共有スペースに最適
chmod +t /shared/temp
# または
chmod 1777 /shared/temp

# 確認すると最後に「t」が表示される
ls -ld /shared/temp
# drwxrwxrwt 2 root root 4096 Jan 1 12:00 /shared/temp

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

推奨される権限設定

用途に応じた適切な権限を設定しましょう:

| ファイルの種類 | 推奨権限 | 説明 | |--------------|---------|------| | 設定ファイル | 600 | 所有者のみ読み書き | | 実行ファイル | 755 | 所有者は全権限、他は読みと実行 | | 公開ドキュメント | 644 | 所有者は読み書き、他は読みのみ | | プライベートディレクトリ | 700 | 所有者のみアクセス可能 | | 共有ディレクトリ | 775 | 所有者とグループは全権限 |

避けるべき設定

# 危険!誰でも何でもできる
chmod 777 sensitive_file

# 危険!設定ファイルを実行可能に
chmod +x config.conf

# 危険!ログを誰でも編集可能に
chmod o+w /var/log/app.log

chmod 777は「誰でも何でもできる」という意味です。セキュリティ上、非常に危険なので避けましょう!

トラブルシューティング

よくあるエラーと対処法

「Permission denied」エラー

# エラー例
chmod 755 /etc/important.conf
chmod: changing permissions of '/etc/important.conf': Operation not permitted

# 対処法1: 所有者か確認
ls -l /etc/important.conf

# 対処法2: sudoを使う(管理者権限が必要な場合)
sudo chmod 755 /etc/important.conf

実行できないスクリプト

# エラー例
./myscript.sh
-bash: ./myscript.sh: Permission denied

# 対処法: 実行権限を追加
chmod +x myscript.sh

🎮 理解度チェック

Q3: ディレクトリに設定すると、そのディレクトリ内で作成されたファイルが親ディレクトリのグループを継承する特殊ビットは?

新規ファイルが親ディレクトリのグループを継承する特殊ビットは?

便利なスクリプト例

最後に、実務で使える権限修正スクリプトを紹介します:

#!/bin/bash
# Webプロジェクトの権限を一括修正するスクリプト

PROJECT_DIR="/var/www/myproject"
WEB_USER="www-data"
WEB_GROUP="www-data"

echo "プロジェクトの権限を修正しています..."

# 所有者を設定
sudo chown -R $WEB_USER:$WEB_GROUP $PROJECT_DIR

# ディレクトリに適切な権限を設定(755)
find $PROJECT_DIR -type d -exec chmod 755 {} \;

# ファイルに適切な権限を設定(644)
find $PROJECT_DIR -type f -exec chmod 644 {} \;

# アップロードディレクトリは書き込み可能に
chmod -R 775 $PROJECT_DIR/uploads

# ログディレクトリも書き込み可能に
chmod -R 775 $PROJECT_DIR/logs

echo "権限の修正が完了しました!"

📝 まとめ

今回はchmodchownについて学びました!

  • 権限の基本: 読み(r)・書き(w)・実行(x)の3種類を、所有者・グループ・その他の3対象に設定
  • chmod: 数値表記(755など)とシンボル表記(u+xなど)で権限を変更
  • chown: ファイルの所有者とグループを変更(通常はroot権限が必要)
  • セキュリティ: 最小限の権限を設定することが大切(777は避ける)
  • 特殊ビット: setuid、setgid、stickyビットで高度な制御が可能

権限管理はLinuxシステムの安全を守る要です。適切な権限設定で、セキュアで使いやすい環境を作っていきましょう!

次はpsコマンドでプロセス管理について学びます。システムで動いているプログラムを見る方法を身につけましょう!

YouTube動画で復習

動画でさらに詳しく学びたい方は、CommandAcademyのYouTubeチャンネルをチェック!視覚的にコマンドの動作を確認できます。

権限管理は最初は複雑に感じるかもしれませんが、実際に手を動かして練習すれば必ず理解できます。セキュリティの基本なので、しっかりマスターしていきましょう!