ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|---|
|
エラーの状況
java.io.FileNotFoundException: /var/log/app.log (許可がありません)
at java.base/java.io.FileOutputStream.open0(Native Method)
at java.base/java.io.FileOutputStream.open(FileOutputStream.java:298)
at java.base/java.io.FileOutputStream.(FileOutputStream.java:237)
# 英語環境
java.io.FileNotFoundException: /var/log/app.log (Permission denied)
メッセージは「FileNotFoundException」ですが、ファイル自体は存在するのに「権限がない」状態。Java の例外設計の歴史的事情で、権限エラーもこのクラスで返ります。
原因と対処
原因 1: 読み取り権限がない
# 権限確認
$ ls -l /path/to/file
-rw------- 1 root root 1024 May 15 12:00 /path/to/file
# ↑ owner だけが r/w 可能、appuser からは読めない
# 対処: 権限付与
$ sudo chmod 644 /path/to/file # owner rw, others r
$ sudo chmod o+r /path/to/file # others に読み権限追加
# または owner を変更
$ sudo chown appuser:appuser /path/to/file
原因 2: 書き込み権限がない
# Java が書き込もうとしているディレクトリ・ファイルを確認
$ ls -ld /var/log/myapp
drwxr-xr-x 2 root root 4096 May 15 12:00 /var/log/myapp/
# → root だけが書ける、tomcat ユーザは書けない
# 対処
$ sudo chown tomcat:tomcat /var/log/myapp
$ sudo chmod 755 /var/log/myapp
# または共有グループに
$ sudo chgrp -R appgroup /var/log/myapp
$ sudo chmod g+w /var/log/myapp
原因 3: ディレクトリの実行 (x) 権限がない
ファイルを開くには、そのファイルが属する全パスに対する実行権限 (x) が必要:
# /home/admin/private/file.txt を開きたい場合
$ ls -ld /home /home/admin /home/admin/private
drwxr-xr-x /home
drwx------ /home/admin ← appuser は admin 配下に入れない (x なし)
drwxr-xr-x /home/admin/private
# 対処: 中間ディレクトリに x を付与
$ sudo chmod o+x /home/admin
原因 4: アプリ実行ユーザの権限不足
# 実行中の Java プロセスのユーザを確認
$ ps -o user,pid,command -p
USER PID COMMAND
tomcat 1234 /usr/bin/java -jar /opt/app.jar
# tomcat ユーザでアクセスしたいファイル
$ ls -l /var/lib/myapp/data
-rw------- 1 root root 1024 ... data
# tomcat には読めない
# 対処
$ sudo chmod 644 /var/lib/myapp/data
# または owner を tomcat に
$ sudo chown tomcat:tomcat /var/lib/myapp/data
原因 5: SELinux でブロックされている (RHEL/CentOS)
# SELinux ステータス確認
$ getenforce
Enforcing
# 該当ファイルのコンテキスト
$ ls -Z /var/log/app.log
unconfined_u:object_r:default_t:s0 /var/log/app.log
# Tomcat 等が書ける tomcat_log_t に変更
$ sudo chcon -t tomcat_log_t /var/log/app.log
# 永続化
$ sudo semanage fcontext -a -t tomcat_log_t "/var/log/app.log"
$ sudo restorecon -v /var/log/app.log
# 一時的に SELinux を緩める (デバッグ用)
$ sudo setenforce 0 # Permissive
# 問題なければ原因は SELinux
# 拒否ログ確認
$ sudo ausearch -m AVC -ts recent
原因 6: Windows のセキュリティ
- ファイル右クリック → プロパティ → セキュリティタブ
- 「グループ名またはユーザー名」に実行ユーザがあるか
- 「アクセス許可」で読み取り・書き込みが許可されているか
- 編集 → 追加 → ユーザを追加 → 必要な権限にチェック
原因 7: ファイルが他プロセスでロックされている (Windows)
Windows ではファイルが他プロセスに開かれていると排他的にロックされ、Java からアクセスできなくなることがあります:
# Windows: どのプロセスがファイルを使用中か
> handle.exe -p path\to\file # Sysinternals
# または Resource Monitor (resmon) → CPU → 関連付けられたハンドル
権限の見方
$ ls -l file.txt
-rw-r--r-- 1 alice users 1024 May 15 12:00 file.txt
^^^^^^^^^^
│└─ "rw-" "r--" "r--"
│ │ │ │
│ │ │ └ others (rwx の有無)
│ │ └─ group の権限
│ └─ owner の権限
└ ファイル種別 (-:通常, d:ディレクトリ, l:シンボリックリンク)
# 数値表現 (8 進数)
# r=4, w=2, x=1
# 644 = rw- r-- r-- (owner=6, group=4, others=4)
# 755 = rwx r-x r-x
# 777 = rwx rwx rwx (危険、避ける)
権限の典型的な設定値
| 用途 | 権限 | 備考 |
|---|---|---|
| 一般ファイル | 644 | owner rw, others r |
| 機密ファイル | 600 | owner のみ |
| 実行可能ファイル | 755 | owner rwx, others rx |
| ディレクトリ | 755 | 標準 |
| 共有書き込みディレクトリ | 775 + sticky bit (g+s) | グループ共有 |
| Web 公開ファイル | 644 | owner rw, others r (Nginx/Apache が読める) |
| パスワードファイル | 600 / 640 | 絶対に others へ読み権限を渡さない |
関連エラー
FileNotFoundException: ... (No such file or directory): 本当にファイルがないAccessDeniedException: NIO の権限エラー(Java 7+)SecurityException: Java の SecurityManager がブロックIOException: Stale NFS file handle: NFS マウントの異常IOException: Read-only file system: ファイルシステムが ro でマウント
関連記事
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページ
子ページはありません
同階層のページ
- java.lang.NoSuchMethodError
- java.lang.ClassCastException: java.util.Date cannot be cast to java.sql.Date
- java.lang.UnsupportedClassVersionError
- version less than X.X is not supported.
- パッケージ~は存在しません
- org.apache.jasper.JasperException: ...The jsp:param action must not be...
- java.io.FileNotFoundException: ファイル名 (許可がありません)
- java.sql.SQLException: Cannot convert value 'YYYY-MM-DD ...' from column n(YYYY-MM-DD ...) to TIMESTAMP.
- 警告: この文字は、エンコーディング[文字コード]にマップできません
- java.text.ParseException: Unparseable date
- Unsupported major.minor version 52.0
- エンティティ" ... "への参照は';'デリミタで終了する必要があります。
- java.math.BigDecimal cannot be cast to java.lang.String
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Laravel キャッシュクリア完全ガイド(cache:clear / config:clear / 2026-05-18 07:42:07
- プロジェクトの作成と削除 2026-05-18 07:42:07
- インストール直後にNetbeansが反応しない 2026-05-18 07:42:07
- 動画やチャンネルの検索 2026-05-18 07:42:07
- APIキー取得方法 2026-05-18 07:42:07
- チャンネル情報の取得 2026-05-18 07:42:07
- API 入門 — Web API(REST / GraphQL / gRPC / 2026-05-18 07:42:07
- インストール(eclipseプラグイン) 2026-05-18 07:42:07
- Laravel「Dotenv values containing spaces must be surrounded 2026-05-18 07:42:07
- エラー一覧 2026-05-18 07:42:07
- curl: (51) SSL: certificate subject name '~' does not match 2026-05-18 07:42:07
- インストール方法(Windows版) 2026-05-18 07:42:07
- JSONから配列に変換 2026-05-18 07:42:07
- 処理を一定時間待つ 2026-05-18 07:42:07
- A non well formed numeric value encountered 2026-05-18 07:42:07
コメントを削除してもよろしいでしょうか?