私は CentOS サーバーを所有しており、そのサーバーには Apache、Django、Django CMS、mod_wsgi がインストールされています。Django プロジェクト ファイルは/srv
ディレクトリに保存されており、セキュリティ上の理由から SELinux が有効になっています。
Django-CMS を Django に正常に統合することができ、ローカル IP にアクセスするとページが表示されます。ただし、/admin (CMS 機能を利用できるようになる場所) にアクセスしようとすると、次のエラーが表示されますDatabaseError at /admin/ attempt to write a readonly database
。
わかった。
.sqlite
プロジェクト フォルダーにファイルがあるので、ls -l
それに対して を実行すると、次の結果が返されました。
-rw-r--r--. 1 root root 133120 Jan 5 11:53 DATABASE.sqlite
さて、Apache は何らかの権限上の理由でそのファイルを読み取れないのではないかと考え、Stackoverflow で同様の問題についていろいろ調べた後、次のコマンドを実行しました。
> chmod 664 DATABASE.sqlite
> chown apache /srv/mysite
> chown apache /srv/mysite/DATABASE.sqlite
出力は次ls -l
のようになります。
-rw-rw-r--. 1 apache root 133120 Jan 5 11:53 DATABASE.sqlite
残念ながら、Django アプリで /admin にアクセスしようとすると、同じエラーが引き続き発生します。どなたか助けていただければ幸いです。おそらく SELinux の権限に関係していると思われますが、権限の問題が何なのかを診断するにはどこから始めればよいのかわかりません。
編集:
私は走った
> chown apache:apache /srv/mysite
> chown apache:apache /srv/mysite/DATABASE.sqlite
すると、ディレクトリとファイルls -l
の所有者が現在 であることがすぐにわかります。ただし、ページにアクセスしようとすると、まだエラーが発生します。ディレクトリを 757 に、ファイルを 756 に設定しました。これが、権限を正常に機能させる最善の方法だからです。これはセキュリティ上のリスクであると聞きましたが、権限を少なくしてエラーを回避する方法がわかりません。SELinux が原因でしょうか?mysite
.sqlite
apache
/admin
chmod
/srv/mysite
DATABASE.sqlite
unable to read/open database file
参考までに、私は CentOS の通常のユーザー アカウントで操作しており、昇格する必要があるときは常に sudo を使用しています。
[noblerare@localhost ]$
ベストアンサー1
SQLite データベースが保存されているディレクトリに書き込み権限を追加する必要があります。 を実行するとchmod -R u+w /srv/mysite/
役立つはずです。
サーバーがカスタム ユーザー (例www-data
) を使用してデータベースにアクセスしている場合、解決策としてはデータベースの所有者を変更することが考えられます。
chown www-data:www-data /srv/mysite
chown www-data:www-data /srv/mysite/DATABASE.sqlite