Linuxサーバーや開発環境を使っていると必ず出てくるのがアクセス権(パーミッション)。
「Permission denied(許可がありません)」
「このファイルは開けるのに、実行できない」
といったエラーは、ほとんどがアクセス権の設定に原因があります。
Linuxのアクセス権を理解すれば、ファイルが読めない・書けない・実行できないトラブルや、不要な権限を与えてセキュリティが低下するリスクを防げます。
この記事では、Linuxのアクセス権(rwx)の基本構造、権限の確認と変更方法(chmod・chown)、よくあるトラブル例と解決法をわかりやすく解説します。
これを読めば、Linuxのファイル管理が一気にスムーズになりますよ!
Linuxアクセス権の基本概念

アクセス権の構成要素
Linuxのアクセス権は以下の要素で構成されています:
権限の種類(rwx)
記号 | 英語名 | 日本語 | ファイルでの意味 | ディレクトリでの意味 |
---|---|---|---|---|
r | read | 読み取り | ファイル内容の読み取り | ディレクトリ内容の一覧表示 |
w | write | 書き込み | ファイル内容の変更・削除 | ファイル作成・削除・名前変更 |
x | execute | 実行 | プログラムとして実行 | ディレクトリへの移動(cd) |
権限の対象者
対象 | 記号 | 説明 |
---|---|---|
所有者 | u (user) | ファイル・ディレクトリの所有者 |
グループ | g (group) | 所有者と同じグループのユーザー |
その他 | o (other) | 上記以外のすべてのユーザー |
すべて | a (all) | 上記3つすべて |
パーミッション表記の読み方
ls -l での表示例
ls -l example.txt
出力例:
-rwxr-xr-- 1 user1 group1 1024 Mar 15 14:30 example.txt
詳細な解析
ファイルタイプと権限:-rwxr-xr--
位置 | 文字 | 意味 |
---|---|---|
1文字目 | - | ファイルタイプ(- :通常ファイル、d :ディレクトリ、l :シンボリックリンク) |
2-4文字目 | rwx | 所有者の権限(読み・書き・実行) |
5-7文字目 | r-x | グループの権限(読み・実行、書き込み不可) |
8-10文字目 | r-- | その他の権限(読み取りのみ) |
その他の情報:
1
:ハードリンク数user1
:所有者名group1
:グループ名1024
:ファイルサイズ(バイト)Mar 15 14:30
:最終更新日時
ファイルタイプの識別
主要なファイルタイプ
記号 | ファイルタイプ | 例 |
---|---|---|
– | 通常ファイル | テキスト、実行ファイル、画像など |
d | ディレクトリ | フォルダ |
l | シンボリックリンク | ショートカット |
c | キャラクターデバイス | /dev/tty* |
b | ブロックデバイス | /dev/sda* |
p | 名前付きパイプ | FIFO |
s | ソケット | ネットワーク通信用 |
実例での確認
# 様々なファイルタイプの確認
ls -la /
ls -la /dev/
ls -la /tmp/
数値表記による権限設定
8進数(オクタル)表記
基本的な数値の意味
数値 | 2進数 | 権限 | 意味 |
---|---|---|---|
0 | 000 | --- | 権限なし |
1 | 001 | --x | 実行のみ |
2 | 010 | -w- | 書き込みのみ |
3 | 011 | -wx | 書き込み+実行 |
4 | 100 | r-- | 読み取りのみ |
5 | 101 | r-x | 読み取り+実行 |
6 | 110 | rw- | 読み取り+書き込み |
7 | 111 | rwx | すべての権限 |
よく使われる権限設定
数値 | 権限 | 用途 | 例 |
---|---|---|---|
644 | rw-r--r-- | 一般的なファイル | テキストファイル、設定ファイル |
755 | rwxr-xr-x | 実行ファイル | スクリプト、バイナリ |
666 | rw-rw-rw- | 共有ファイル | 一時ファイル |
777 | rwxrwxrwx | フルアクセス | 一時ディレクトリ(非推奨) |
600 | rw------- | 個人用ファイル | SSH秘密鍵、設定ファイル |
700 | rwx------ | 個人用ディレクトリ | ホームディレクトリ |
セキュリティを考慮した推奨設定
ファイル用途別推奨権限:
ファイル種類 | 推奨権限 | 理由 |
---|---|---|
設定ファイル | 644 | 管理者のみ編集、他は読み取り |
実行スクリプト | 755 | 所有者のみ編集、他は実行可能 |
ログファイル | 644 | アプリのみ書き込み、管理者は読み取り |
データベースファイル | 600 | データベースユーザーのみアクセス |
SSH秘密鍵 | 600 | 所有者のみアクセス |
Webコンテンツ | 644 | Webサーバーが読み取り、管理者が編集 |
chmodコマンドによる権限変更

数値モードでの変更
基本的な使用法
# 基本構文
chmod [権限] [ファイル/ディレクトリ]
# 例:ファイルに644権限を設定
chmod 644 document.txt
# 例:スクリプトに実行権限を付与
chmod 755 script.sh
複数ファイルの一括変更
# 複数ファイルを同時に変更
chmod 644 file1.txt file2.txt file3.txt
# ワイルドカードの使用
chmod 644 *.txt
chmod 755 *.sh
# ディレクトリ内すべてのファイル
chmod 644 /path/to/directory/*
再帰的な権限変更
# ディレクトリとその中身すべてを変更
chmod -R 755 /path/to/directory
# ファイルとディレクトリを区別して設定
find /path/to/directory -type f -exec chmod 644 {} \;
find /path/to/directory -type d -exec chmod 755 {} \;
シンボリックモードでの変更
基本的な操作子
操作子 | 意味 | 例 |
---|---|---|
+ | 権限を追加 | chmod u+x file |
– | 権限を削除 | chmod g-w file |
= | 権限を設定(他をクリア) | chmod o=r file |
対象者の指定
# 所有者に実行権限を追加
chmod u+x script.sh
# グループから書き込み権限を削除
chmod g-w document.txt
# その他のユーザーにすべての権限を削除
chmod o-rwx private_file.txt
# すべてのユーザーに読み取り権限を追加
chmod a+r public_file.txt
複雑な権限設定例
# 所有者にフル権限、グループに読み取り+実行、その他に読み取りのみ
chmod u=rwx,g=rx,o=r script.sh
# 複数の操作を同時実行
chmod u+x,g-w,o-rwx file.txt
# 条件付き権限設定
chmod u+x,go-rwx secret_script.sh
特殊な権限設定
Setuid(SUID)
# SetuidビットON(4000を追加)
chmod 4755 /usr/bin/passwd
# 表示例:-rwsr-xr-x
# sは実行権限があるときのSetuid表示
Setgid(SGID)
# SetgidビットON(2000を追加)
chmod 2755 /shared/directory
# 表示例:drwxr-sr-x
# sは実行権限があるときのSetgid表示
Sticky bit
# Sticky bitON(1000を追加)
chmod 1777 /tmp
# 表示例:drwxrwxrwt
# tは実行権限があるときのSticky bit表示
chownとchgrpによる所有者変更
chownコマンドの使用法
基本的な所有者変更
# 所有者のみ変更
sudo chown newuser file.txt
# 所有者とグループを同時変更
sudo chown newuser:newgroup file.txt
# グループのみ変更(所有者は変更しない)
sudo chown :newgroup file.txt
実用的な例
# Webサーバー用ファイルの所有者設定
sudo chown www-data:www-data /var/www/html/index.html
# ログファイルの所有者をsyslogに変更
sudo chown syslog:adm /var/log/application.log
# ユーザーのホームディレクトリ所有者修正
sudo chown -R user1:user1 /home/user1
chgrpコマンド
グループのみの変更
# 基本的なグループ変更
sudo chgrp developers project_file.py
# 再帰的なグループ変更
sudo chgrp -R www-data /var/www/project
所有者情報の確認
詳細な所有者情報表示
# 基本的な確認
ls -l file.txt
# 数値IDでの表示
ls -ln file.txt
# ユーザーとグループの詳細情報
stat file.txt
# 現在のユーザー・グループ確認
id
whoami
groups
実践的なトラブルシューティング

よくあるエラーと解決法
Permission denied エラー
エラー例1:ファイル実行時
./script.sh
# bash: ./script.sh: Permission denied
原因と解決:
# 現在の権限確認
ls -l script.sh
# 出力例:-rw-r--r-- 1 user group 123 Mar 15 14:30 script.sh
# 実行権限追加
chmod +x script.sh
# または
chmod 755 script.sh
エラー例2:ディレクトリアクセス時
cd /restricted/directory
# bash: cd: /restricted/directory: Permission denied
原因と解決:
# ディレクトリ権限確認
ls -ld /restricted/directory
# 実行権限(移動権限)が必要
sudo chmod +x /restricted/directory
ファイル編集・削除エラー
エラー例:
echo "new content" > readonly_file.txt
# bash: readonly_file.txt: Permission denied
原因と解決:
# 権限確認
ls -l readonly_file.txt
# 出力例:-r--r--r-- 1 user group 123 Mar 15 14:30 readonly_file.txt
# 書き込み権限追加
chmod u+w readonly_file.txt
セキュリティ関連のトラブル
過度に緩い権限設定
問題のある設定例:
# 危険:すべてのユーザーに書き込み権限
chmod 777 important_config.conf
# 危険:秘密鍵が他ユーザーから読み取り可能
chmod 644 ~/.ssh/id_rsa
安全な設定への修正:
# 設定ファイルの適切な権限
chmod 644 important_config.conf
# SSH秘密鍵の適切な権限
chmod 600 ~/.ssh/id_rsa
SSHキー関連の権限問題
SSH接続エラー:
ssh user@server
# Warning: Unprotected private key file!
解決方法:
# SSH関連ファイルの適切な権限設定
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub
chmod 644 ~/.ssh/known_hosts
chmod 600 ~/.ssh/config
高度なアクセス権管理
umaskによるデフォルト権限設定
umaskの確認と設定
# 現在のumask確認
umask
# umaskを8進数で表示
umask -S
# umaskの設定(例:022)
umask 022
umaskの計算方法
計算例:
- デフォルトファイル権限:666
- デフォルトディレクトリ権限:777
- umask:022
結果:
- ファイル:666 – 022 = 644
- ディレクトリ:777 – 022 = 755
恒久的なumask設定
# ~/.bashrcに追加
echo "umask 022" >> ~/.bashrc
# システム全体での設定
sudo vim /etc/profile
# または
sudo vim /etc/bash.bashrc
ACL(Access Control List)
ACLの基本概念
通常のLinux権限の拡張機能で、より細かい権限制御が可能:
ACLの確認:
# ACLをサポートしているか確認
getfacl filename
# ファイルシステムでACLが有効か確認
mount | grep acl
ACLの設定例
# 特定ユーザーに読み取り権限を付与
setfacl -m u:username:r filename
# 特定グループに書き込み権限を付与
setfacl -m g:groupname:rw filename
# ACLエントリの削除
setfacl -x u:username filename
# すべてのACLを削除
setfacl -b filename
特殊なアクセス権シナリオ
Webサーバー環境での権限設定
# Apache用ディレクトリ設定
sudo chown -R www-data:www-data /var/www/html
sudo find /var/www/html -type d -exec chmod 755 {} \;
sudo find /var/www/html -type f -exec chmod 644 {} \;
# アップロードディレクトリ(書き込み可能)
sudo chmod 755 /var/www/html/uploads
sudo chown www-data:www-data /var/www/html/uploads
データベース環境での権限設定
# MySQL データディレクトリ
sudo chown -R mysql:mysql /var/lib/mysql
sudo chmod 750 /var/lib/mysql
sudo find /var/lib/mysql -name "*.frm" -exec chmod 660 {} \;
sudo find /var/lib/mysql -name "*.MYD" -exec chmod 660 {} \;
sudo find /var/lib/mysql -name "*.MYI" -exec chmod 660 {} \;
スクリプトでの権限管理自動化

権限確認スクリプト
#!/bin/bash
# check_permissions.sh - ファイル権限チェックスクリプト
check_file_permission() {
local file="$1"
local expected_perm="$2"
if [ ! -e "$file" ]; then
echo "ERROR: $file が存在しません"
return 1
fi
actual_perm=$(stat -c "%a" "$file")
if [ "$actual_perm" = "$expected_perm" ]; then
echo "OK: $file の権限は正しく設定されています ($actual_perm)"
else
echo "WARNING: $file の権限が不正です (実際: $actual_perm, 期待: $expected_perm)"
fi
}
# 使用例
check_file_permission "/etc/passwd" "644"
check_file_permission "/etc/shadow" "640"
check_file_permission "/tmp" "1777"
権限修正スクリプト
#!/bin/bash
# fix_permissions.sh - 権限修正スクリプト
# Webアプリケーション用権限修正
fix_webapp_permissions() {
local web_root="$1"
echo "Webアプリケーション権限を修正中: $web_root"
# 所有者をwww-dataに変更
sudo chown -R www-data:www-data "$web_root"
# ディレクトリは755、ファイルは644に設定
sudo find "$web_root" -type d -exec chmod 755 {} \;
sudo find "$web_root" -type f -exec chmod 644 {} \;
# 実行可能ファイルには実行権限を付与
sudo find "$web_root" -name "*.sh" -exec chmod 755 {} \;
sudo find "$web_root" -name "*.pl" -exec chmod 755 {} \;
sudo find "$web_root" -name "*.py" -exec chmod 755 {} \;
echo "権限修正完了"
}
# 使用例
fix_webapp_permissions "/var/www/html"
セキュリティ監査スクリプト
#!/bin/bash
# security_audit.sh - セキュリティ監査スクリプト
echo "=== セキュリティ監査開始 ==="
# 危険な権限を持つファイルを検索
echo "1. 危険な権限(777)を持つファイル:"
find / -type f -perm 777 2>/dev/null | head -10
echo "2. SUIDビットが設定されたファイル:"
find / -type f -perm -4000 2>/dev/null | head -10
echo "3. 他ユーザーが書き込み可能なファイル:"
find / -type f -perm -002 2>/dev/null | head -10
echo "4. グループが書き込み可能なファイル:"
find / -type f -perm -020 2>/dev/null | head -10
echo "5. ホームディレクトリの権限確認:"
ls -ld /home/*
echo "=== セキュリティ監査完了 ==="
ベストプラクティスとセキュリティ
セキュアな権限設定の原則
最小権限の原則
基本的な考え方:
- 必要最小限の権限のみを付与
- 定期的な権限の見直し
- 不要になった権限の即座な削除
実装例:
# 悪い例:過度に緩い権限
chmod 777 /shared/documents
# 良い例:必要最小限の権限
chmod 775 /shared/documents
chgrp developers /shared/documents
権限の階層化
ユーザーとグループの適切な管理:
# 開発プロジェクト用のグループ作成
sudo groupadd developers
sudo groupadd testers
sudo groupadd admins
# ユーザーをグループに追加
sudo usermod -a -G developers user1
sudo usermod -a -G testers user2
# プロジェクトディレクトリの権限設定
sudo chown -R root:developers /opt/project
sudo chmod -R 775 /opt/project
定期的なセキュリティチェック
月次セキュリティ監査
#!/bin/bash
# monthly_security_check.sh
REPORT_FILE="/var/log/security_audit_$(date +%Y%m).log"
{
echo "=== Monthly Security Audit - $(date) ==="
echo "1. Files with dangerous permissions (777):"
find / -type f -perm 777 2>/dev/null
echo "2. SUID files:"
find / -type f -perm -4000 2>/dev/null
echo "3. SGID files:"
find / -type f -perm -2000 2>/dev/null
echo "4. World-writable files:"
find / -type f -perm -002 2>/dev/null
echo "5. SSH key permissions:"
find /home -name ".ssh" -exec ls -ld {} \; 2>/dev/null
find /home -name "id_*" -exec ls -l {} \; 2>/dev/null
} >> "$REPORT_FILE"
まとめ
Linuxのアクセス権(パーミッション)について、重要なポイントをまとめます:
基本的な理解
- rwx権限:読み取り、書き込み、実行の3つの基本権限
- 3つの対象:所有者、グループ、その他のユーザー
- 数値表記:8進数での権限指定(644、755など)
- シンボリック表記:記号での権限変更(u+x、g-wなど)
実用的なコマンド
- 確認:
ls -l
、stat
、getfacl
- 変更:
chmod
(権限)、chown
(所有者)、chgrp
(グループ) - 設定:
umask
(デフォルト権限)、setfacl
(ACL)
セキュリティの要点
- 最小権限の原則:必要最小限の権限のみ付与
- 定期的な監査:危険な権限設定の検出
- 適切な所有者設定:サービス専用ユーザーの活用
- 特殊権限の注意:SUID、SGID、Sticky bitの慎重な使用
よくある問題と対処
- Permission denied:権限不足による実行・アクセス拒否
- セキュリティリスク:過度に緩い権限設定
- SSH接続問題:不適切なSSHキー権限
- Webサーバー問題:不適切なWebファイル権限
トラブル予防
- 権限確認の習慣化:ファイル作成後の権限チェック
- スクリプト化:権限設定の自動化
- ドキュメント化:権限設定ルールの明文化
- 教育・訓練:チームメンバーへの権限管理教育
コメント