60

Apache、Django、Django CMS、および mod_wsgi がある CentOS サーバーがあります。私の 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.sqliteapache/adminchmod/srv/mysiteDATABASE.sqliteunable to read/open database file

参考までに、昇格する必要があるときはいつでも CentOS と sudo の通常のユーザー アカウントで操作しています。

[noblerare@localhost ]$
4

9 に答える 9

92

sqlite データベースが保存されているディレクトリに書き込み権限を追加する必要があります。したがって、ランニングchmod 664 /srv/mysiteが役立つはずです。

これはセキュリティ リスクであるため、データベースの所有者を次のように変更することをお勧めしますwww-data

chown www-data:www-data /srv/mysite
chown www-data:www-data /srv/mysite/DATABASE.sqlite
于 2014-01-10T22:07:38.697 に答える
8

この問題は SELinux が原因です。あなたと同じようにファイルの所有権を設定した後、私はこの問題にぶつかりました。このaudit2why(1)ツールを使用して、ログから SELinux 拒否を診断できます。

(django)[f22-4:www/django/demo] ftweedal% sudo audit2why -a
type=AVC msg=audit(1437490152.208:407): avc:  denied  { write }
      for  pid=20330 comm="httpd" name="db.sqlite3" dev="dm-1" ino=52036
      scontext=system_u:system_r:httpd_t:s0
      tcontext=unconfined_u:object_r:httpd_sys_content_t:s0
      tclass=file permissive=0
    Was caused by:
    The boolean httpd_unified was set incorrectly. 
    Description:
    Allow httpd to unified

    Allow access by executing:
    # setsebool -P httpd_unified 1

案の定、実行sudo setsebool -P httpd_unified 1すると問題が解決しました。

何のためにあるのかを調べたところ、 fedora-selinux-list の投稿httpd_unifiedに出くわしました。

このブール値はデフォルトでオフになっています。オンにすると、すべての httpd 実行可能ファイルが、http ファイル コンテキストでラベル付けされたすべてのコンテンツに完全にアクセスできるようになります。オフのままにしておくと、ある httpd サービスが別のサービスに干渉できないようになります。

したがって、オンにすると、同じサーバー上の複数のインスタンス (すべてユーザーとして実行)が互いのものをいじるhttpd_unifiedのを防ぐデフォルトの動作を回避できます。httpdapache

私の場合、 を 1 つしか実行httpdしていないので、 をオンにして問題ありませんでしたhttpd_unified。これができない場合は、さらにきめ細かいラベル付けが必要だと思います。

于 2015-07-21T15:07:41.447 に答える
3

私は同じ問題に直面しましたが、Ubuntu Server で発生しました。したがって、djangoの仮想環境をアクティブにする前にスーパーユーザーに変更してから、djangoサーバーを実行しました。それは私にとってはうまくいきました。

初コピペ

sudo su

次に、仮想環境がある場合はそれをアクティブにします。

source myvenv/bin/activate

最後に、django サーバーを実行します。

python3 manage.py runserver

うまくいけば、これはあなたを助けるでしょう。

于 2020-04-21T08:19:45.977 に答える
1

同様の問題に遭遇しました。SELinux に問題があるかどうかを確認するには、実行ステータスを次のコマンドで確認できます。

sestatus

一時的に無効にします

setenforce 0

これは、少なくとも問題を絞り込むのに役立ちます。

于 2014-11-15T22:00:47.650 に答える
0

データベース ファイルとそのフォルダの所有者を次のように変更できますdjango

chown django:django /home/django/mysite
chown django:django /home/django/mysite/my_db.sqlite3

これは DigitalOcean の 1-Click Django Droplet で機能します

于 2021-02-24T11:19:16.660 に答える
-12

ここで私の解決策:

root@fiq:/home/django/django_project# chmod 777 db.sqlite3
root@fiq:/home/django/django_project# cd ..
root@fiq:/home/django# chmod 777 *

<'your_website/admin'>ユーザー名とパスワードを入力してください..それだけです。

于 2016-05-31T19:23:04.353 に答える