パーミッション拒否エラー
ファイルおよびディレクトリパーミッションの問題はXOOPSインストールでよくあり、特にアップロードやサーバー移行後に発生します。このガイドはパーミッション問題の診断と解決を支援します。
ファイルパーミッションの理解
Section titled “ファイルパーミッションの理解”Linux/Unix パーミッション基礎
Section titled “Linux/Unix パーミッション基礎”ファイルパーミッションは3桁のコードで表されます:
rwxrwxrwx||| ||| |||||| ||| +-- 他のユーザー||| +------ グループ+--------- 所有者
r = 読み取り (4)w = 書き込み (2)x = 実行 (1)
755 = rwxr-xr-x (所有者は完全、グループと他は読み取り/実行)644 = rw-r--r-- (所有者は読み取り/書き込み、グループと他は読み取り)777 = rwxrwxrwx (全員に完全アクセス - 非推奨)一般的なパーミッションエラー
Section titled “一般的なパーミッションエラー”アップロードで「パーミッション拒否」
Section titled “アップロードで「パーミッション拒否」”Warning: fopen(/var/www/html/xoops/uploads/file.jpg): failed to open stream:Permission denied in /var/www/html/xoops/class/file.php on line 42「ファイルに書き込みできません」
Section titled “「ファイルに書き込みできません」”Error: Unable to write file to /var/www/html/xoops/cache/「ディレクトリを作成できません」
Section titled “「ディレクトリを作成できません」”Error: mkdir(/var/www/html/xoops/uploads/temp/): Permission deniedXOOPSの重要なディレクトリ
Section titled “XOOPSの重要なディレクトリ”書き込みパーミッションが必要なディレクトリ
Section titled “書き込みパーミッションが必要なディレクトリ”| ディレクトリ | 最小値 | 目的 |
|---|---|---|
/uploads | 755 | ユーザーアップロード |
/cache | 755 | キャッシュファイル |
/templates_c | 755 | コンパイル済みテンプレート |
/var | 755 | 変数データ |
mainfile.php | 644 | 設定(読み取り可能) |
Linux/Unix トラブルシューティング
Section titled “Linux/Unix トラブルシューティング”ステップ 1:現在のパーミッションをチェック
Section titled “ステップ 1:現在のパーミッションをチェック”# ファイルパーミッションをチェックls -l /var/www/html/xoops/
# 特定のファイルをチェックls -l /var/www/html/xoops/mainfile.php
# ディレクトリパーミッションをチェックls -ld /var/www/html/xoops/uploads/ステップ 2:Web サーバーユーザーを特定
Section titled “ステップ 2:Web サーバーユーザーを特定”# Apache ユーザーをチェックps aux | grep -E '[a]pache|[h]ttpd'# 通常:www-data(Debian/Ubuntu)または apache(RedHat/CentOS)
# Nginx ユーザーをチェックps aux | grep -E '[n]ginx'# 通常:www-data または nginxステップ 3:所有権を修正
Section titled “ステップ 3:所有権を修正”# 正しい所有権を設定(www-data ユーザーと仮定)sudo chown -R www-data:www-data /var/www/html/xoops/
# Web に書き込み可能なディレクトリのみ修正sudo chown www-data:www-data /var/www/html/xoops/uploads/sudo chown www-data:www-data /var/www/html/xoops/cache/sudo chown www-data:www-data /var/www/html/xoops/templates_c/sudo chown www-data:www-data /var/www/html/xoops/var/ステップ 4:パーミッションを修正
Section titled “ステップ 4:パーミッションを修正”オプション A:制限的なパーミッション(推奨)
Section titled “オプション A:制限的なパーミッション(推奨)”# すべてのディレクトリ:755(rwxr-xr-x)find /var/www/html/xoops -type d -exec chmod 755 {} \;
# すべてのファイル:644(rw-r--r--)find /var/www/html/xoops -type f -exec chmod 644 {} \;
# 書き込み可能なディレクトリを除いてchmod 755 /var/www/html/xoops/uploads/chmod 755 /var/www/html/xoops/cache/chmod 755 /var/www/html/xoops/templates_c/chmod 755 /var/www/html/xoops/var/オプション B:すべてをまとめたスクリプト
Section titled “オプション B:すべてをまとめたスクリプト”#!/bin/bashXOOPS_PATH="/var/www/html/xoops"WEB_USER="www-data"
echo "XOOPS パーミッションを修正しています..."
# 所有権を設定sudo chown -R $WEB_USER:$WEB_USER $XOOPS_PATH
# ディレクトリパーミッションを設定find $XOOPS_PATH -type d -exec chmod 755 {} \;
# ファイルパーミッションを設定find $XOOPS_PATH -type f -exec chmod 644 {} \;
# 書き込み可能なディレクトリを確認chmod 755 $XOOPS_PATH/uploads/chmod 755 $XOOPS_PATH/cache/chmod 755 $XOOPS_PATH/templates_c/chmod 755 $XOOPS_PATH/var/
echo "完了!パーミッションを修正しました。"ディレクトリごとのパーミッション問題
Section titled “ディレクトリごとのパーミッション問題”uploads ディレクトリ
Section titled “uploads ディレクトリ”問題: ファイルをアップロードできない
# 解決策sudo chown www-data:www-data /var/www/html/xoops/uploads/chmod 755 /var/www/html/xoops/uploads/find /var/www/html/xoops/uploads -type f -exec chmod 644 {} \;find /var/www/html/xoops/uploads -type d -exec chmod 755 {} \;cache ディレクトリ
Section titled “cache ディレクトリ”問題: キャッシュファイルが書き込まれない
# 解決策sudo chown www-data:www-data /var/www/html/xoops/cache/chmod 755 /var/www/html/xoops/cache/templates cache
Section titled “templates cache”問題: テンプレートがコンパイルされない
# 解決策sudo chown www-data:www-data /var/www/html/xoops/templates_c/chmod 755 /var/www/html/xoops/templates_c/Windows トラブルシューティング
Section titled “Windows トラブルシューティング”ステップ 1:ファイルプロパティをチェック
Section titled “ステップ 1:ファイルプロパティをチェック”- ファイルを右クリック → プロパティ
- 「セキュリティ」タブをクリック
- 「編集」ボタンをクリック
- ユーザーを選択してパーミッションを確認
ステップ 2:書き込みパーミッションを付与
Section titled “ステップ 2:書き込みパーミッションを付与”GUI 経由:
Section titled “GUI 経由:”1. フォルダを右クリック → プロパティ2. 「セキュリティ」タブを選択3. 「編集」をクリック4. 「IIS_IUSRS」または「NETWORK SERVICE」を選択5. 「変更」と「書き込み」をチェック6. 「適用」と「OK」をクリックコマンドライン(PowerShell):
Section titled “コマンドライン(PowerShell):”# PowerShell を管理者として実行
# IIS アプリプールパーミッションを付与$path = "C:\inetpub\wwwroot\xoops\uploads"$acl = Get-Acl $path$rule = New-Object System.Security.AccessControl.FileSystemAccessRule( "IIS_IUSRS", "Modify", "ContainerInherit,ObjectInherit", "None", "Allow")$acl.SetAccessRule($rule)Set-Acl -Path $path -AclObject $aclPHP スクリプトでパーミッションをチェック
Section titled “PHP スクリプトでパーミッションをチェック”<?php$paths = [ XOOPS_ROOT_PATH . '/uploads' => 'uploads', XOOPS_ROOT_PATH . '/cache' => 'cache', XOOPS_ROOT_PATH . '/templates_c' => 'templates_c', XOOPS_ROOT_PATH . '/var' => 'var', XOOPS_ROOT_PATH . '/mainfile.php' => 'mainfile.php'];
echo "<h2>XOOPS パーミッションチェック</h2>";echo "<table border='1'>";echo "<tr><th>パス</th><th>読み取り可能</th><th>書き込み可能</th></tr>";
foreach ($paths as $path => $name) { $readable = is_readable($path) ? 'YES' : 'NO'; $writable = is_writable($path) ? 'YES' : 'NO';
echo "<tr>"; echo "<td>$name</td>"; echo "<td style='background: " . ($readable === 'YES' ? 'green' : 'red') . "'>$readable</td>"; echo "<td style='background: " . ($writable === 'YES' ? 'green' : 'red') . "'>$writable</td>"; echo "</tr>";}
echo "</table>";?>ベストプラクティス
Section titled “ベストプラクティス”1. 最小権限の原則
Section titled “1. 最小権限の原則”# 必要なパーミッションのみを付与# 777 や 666 を使用しない
# 悪い例chmod 777 /var/www/html/xoops/uploads/ # 危険!
# 良い例chmod 755 /var/www/html/xoops/uploads/ # セキュア2. 変更前にバックアップ
Section titled “2. 変更前にバックアップ”# 現在の状態をバックアップgetfacl -R /var/www/html/xoops > /tmp/xoops-acl-backup.txtクイックリファレンス
Section titled “クイックリファレンス”# クイック修正(Linux)sudo chown -R www-data:www-data /var/www/html/xoops/find /var/www/html/xoops -type d -exec chmod 755 {} \;find /var/www/html/xoops -type f -exec chmod 644 {} \;関連ドキュメント
Section titled “関連ドキュメント”- White-Screen-of-Death - その他の一般的なエラー
- Database-Connection-Errors - データベースの問題
- ../../01-Getting-Started/Configuration/System-Settings - XOOPS設定
最終更新: 2026-01-31 適用対象: XOOPS 2.5.7+ OS: Linux、Windows、macOS