ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子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.<init>(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 <pid>
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
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- 【django】ログイン 認証機能 2026-09-08 03:22:09
- MySQL ERROR 1063 Incorrect column specifier for column|原因と直し方 2026-09-08 03:11:09
- 【PHPエラー】Object of class stdClass could not be converted to string 2026-09-07 07:46:04
- Julia Genie ローカル開発サーバ起動完全ガイド 2026-09-07 07:46:04
- Wi-Fi とは|規格と世代(Wi-Fi 4〜7)・周波数帯・CSMA/CA・WPA3 NEW 2026-09-07 07:45:13
- set コマンドでシェルオプションと位置パラメータを操作 | bash 2026-09-07 07:45:13
- JPEG(.jpg/.jpeg)画像形式の完全ガイド — 仕様・マジックナンバー・他形式との比較・EXIF 2026-09-07 07:45:13
- UE5 Get Overlapping Actorsで特定クラスだけ処理|Class Filter・Cast To 2026-09-07 07:45:13
- Linuxで特定拡張子のファイルを再帰削除|find -deleteの安全手順 2026-09-07 07:45:13
- Django CBVでテンプレートに値を渡す|get_context_data・extra_context 2026-09-07 07:45:13
- Linuxで複数ファイルの文字列を一括置換|find・sed・xargsの安全手順 2026-09-07 07:45:13
- Laravelルートグループ|prefix・middleware・nameで一括管理 2026-09-07 07:45:13
- Linux whichコマンドの使い方|絶対パス取得とtype・command -vの違い 2026-09-07 07:45:13
- Linux catコマンドの使い方|行番号表示・複数ファイル連結 2026-09-07 07:45:13
- unable to execute 'gcc': No such file or directory 2026-09-07 07:45:13
コメントを削除してもよろしいでしょうか?