Raspberry Pi Model 2、Gentoo Linux、およびNginxサーバー上のセキュアMoodle

こんにちは、

Gentoo LinuxオペレーティングシステムとNginxウェブサーバを実行しているRaspberry Pi Model 2ハードウェアにMoodleをインストールしたときの経験を共有したいと思います。それはここに到達することができます: [1]

最初に私はこの手引きに従ってRaspberry Pi Model 2ハードウェアにGentoo Linuxをインストールしました: [2]

それから私はこれらのガイドに従ってNginxウェブサーバーをインストールしてセットアップしました: [3] [4]

私のnginx.configファイルは次のとおりです。

ユーザーnginx nginx。
worker_processes 1 ;

error_log / var / log / nginx / error_log情報。

イベント{
        worker_connections 1024 ;
        epollを使う
}

http {
        / etc / nginx / mime.typesを含めます。
        default_typeアプリケーション/オクテットストリーム。

        log_formatメイン
        '$ remote_addr  -  $ remote_user [$ time_local]'
        '"$ request" $ status $ bytes_sent'
        '"$ http_referer" "$ http_user_agent"'
        '"$ gzip_ratio"' ;

        client_max_body_size 15m。
        client_header_timeout 10m。
        client_body_timeout 10m。
        send_timeout 10メートル。

        connection_pool_size 256 ;
        client_header_buffer_size 1k。
        large_client_header_buffers 4 2 k;
        request_pool_size 4k。

        gzipオフ

        output_buffers 1 32k。
        postpone_output 1460 。

        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;

        keepalive_timeout 75 20 ;

        ignore_invalid_headers on;

        index index.html index.php;

        add_header厳密トランスポートセキュリティ"max-age = 15768000; includeSubDomains"常に。

        サーバー{
                443 SSL HTTP2を聞きます。
                listen [ :: ]443 ssl http2;

                server_name www.cspl.hu;

                root / var / www / localhost / htdocs;
                location = / KisTechTavOktKulcsosPicike.ico {
                log_not_found off;
                access_logオフ。
                }

                ssl_certificateの/ etc / sslの/ certsの/ chained.pem。
                ssl_certificate_key / etc / ssl / private / domain.key;
                ssl_session_timeout 5メートル。
                ssl_protocols TLSv1 TLSv1.1 TLSv1.2。
                ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-S
HA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-
AES256-SHA:DHE-RSA-AES128-SHA:EECDH + CHACHA20:EECDH + AES128:RSA + AES128:EECDH + AES256:RSA + AES256:EECDH + 3DES:
RSA + 3DES:! MD5;
                ssl_session_cache共有:SSL:50メートル。
                ssl_dhparamの/ etc / sslの/ certsの/ dhparam.pem。
                ssl_prefer_server_ciphers on;

                access_log / var / log / nginx / localhost.access_log main;
                error_log / var / log / nginx / localhost.error_log info;

                access_log / var / log / nginx / localhost.ssl_access_log main;
                error_log / var / log / nginx / localhost.ssl_error_log情報;

                location〜 [ ^ / ] \ .php  / | $  {
                fastcgi_split_path_info ^(+ \ phpの。?。)$(/ *。);
                if  !- f $ document_root $ fastcgi_script_name  {
                404を 返します。
                }

                fastcgi_pass UNIXの場合:/ var /実行/ PHP-FPM / PHP-fpm.sock。
                fastcgi_index index.php;
                fastcgi_paramsを含める。
                fastcgi.confをインクルードします。

                }


                location / dataroot / {
                内部;
                別名 / var / www / localhost / moodle / ; #パスが/で終わることを確認してください。
                }

                location / moodlelib / {
                内部;
                別名 / var / www / localhost / htdocs / moodle / lib / ; #パスが/で終わることを確認してください。
                }

                location / moodlepix / {
                内部;
                別名 / var / www / localhost / htdocs / moodle / pix / ; #パスが/で終わることを確認してください。
                }

                場所/ムードリム/ {
                内部;
                別名 / var / www / localhost / htdocs / moodle / theme / ; #パスが/で終わることを確認してください。
                }

        }

                サーバー{
                        80を聞きます。
                        聞く[ :: ]80 ;
                        server_name www.cspl.hu;
                        301 https: // $ server_name $ request_uriを 返します。
                }

} 

私のfastcgi.configファイルは次のとおりです。

 fastcgi_param SCRIPT_FILENAME $ document_root $ fastcgi_script_name ;
fastcgi_param QUERY_STRING $ query_string ;
fastcgi_param REQUEST_METHOD $ request_method ;
fastcgi_param CONTENT_TYPE $ content_type ;
fastcgi_param CONTENT_LENGTH $ content_length ;

fastcgi_param SCRIPT_NAME $ fastcgi_script_name ;
fastcgi_param REQUEST_URI $ request_uri ;
fastcgi_param DOCUMENT_URI $ document_uri ;
fastcgi_param DOCUMENT_ROOT $ document_root ;
fastcgi_param SERVER_PROTOCOL $ server_protocol ;
fastcgi_param REQUEST_SCHEME $スキーム 。
fastcgi_param HTTPS $ https if_not_empty;

fastcgi_param GATEWAY_INTERFACE CGI / 1.1 ;
fastcgi_param SERVER_SOFTWARE nginx / $ nginx_version ;

fastcgi_param REMOTE_ADDR $ remote_addr ;
fastcgi_param REMOTE_PORT $ remote_port ;
fastcgi_param SERVER_ADDR $ server_addr ;
fastcgi_param SERVER_PORT $ server_port ;
fastcgi_param SERVER_NAME $ server_name ;

#PHPのみ。PHPが--enable-force-cgi-redirectでビルドされている場合に必要
fastcgi_param REDIRECT_STATUS 200

私のfastcgi_paramsファイルは:

 fastcgi_param PATH_INFO $ fastcgi_path_info ;

fastcgi_param QUERY_STRING $ query_string ;
fastcgi_param REQUEST_METHOD $ request_method ;
fastcgi_param CONTENT_TYPE $ content_type ;
fastcgi_param CONTENT_LENGTH $ content_length ;

fastcgi_param SCRIPT_NAME $ fastcgi_script_name ;
fastcgi_param REQUEST_URI $ request_uri ;
fastcgi_param DOCUMENT_URI $ document_uri ;
fastcgi_param DOCUMENT_ROOT $ document_root ;
fastcgi_param SERVER_PROTOCOL $ server_protocol ;
fastcgi_param REQUEST_SCHEME $スキーム 。
fastcgi_param HTTPS $ https if_not_empty;

fastcgi_param GATEWAY_INTERFACE CGI / 1.1 ;
fastcgi_param SERVER_SOFTWARE nginx / $ nginx_version ;

fastcgi_param REMOTE_ADDR $ remote_addr ;
fastcgi_param REMOTE_PORT $ remote_port ;
fastcgi_param SERVER_ADDR $ server_addr ;
fastcgi_param SERVER_PORT $ server_port ;
fastcgi_param SERVER_NAME $ server_name ;

#PHPのみ。PHPが--enable-force-cgi-redirectでビルドされている場合に必要
fastcgi_param REDIRECT_STATUS 200

ここから証明書を取得します。 [5]

最後に、私は以下のことをこの順序で行いました:

  1. webapp-configの助けを借りて以前のMoodleインストールを削除します
    1.  webapp-config -Cムードル3.2.3 
    2. (私のMoodleサイトをHTTPからHTTPSに移行する前に3.2.3バージョンのmoodleをインストールしました)
  2. emergeでGentoo moodleパッケージを削除してください。
    1.  emerge --depclean www-apps / moodle 
  3. アンインストールしてから、ゴーストインストールのためにwebapp-configパッケージを再インストールしてください(これについてはここを見てください: [6]
    1.  emerge --unmerge app-admin / webapp-config 
    2.  rm -rf / var / db / webapps / 
    3.  emerge -a app-admin / webapp-config 
    4. 派遣確認
      1. ここで私は「u」を選択しますが、その後/ etc / vhosts / webapp-configを編集する必要があります
      2.  vhost_server = "nginx" 
  4. 再度moodleパッケージをインストールしてください(ただし、これは新しい3.3.1バージョンです)。
    1.  emerge -a www-apps / moodle 
    2.  webapp-config -I moodle 3.3.1 
    3. インストール後、メッセージ「POST-INSTALL INSTRUCTIONS」が表示されます。このメッセージには、Moodleサイトのインストールをどのように進めるかを案内しています。 mysqlおよびpostgresqlデータベース、実行するコマンドなどについて
  5. config.phpファイルを設定します。

私のconfig.phpファイルは次のとおりです。

 <?php
設定解除  $ CFG  ; //この行を無視
グローバル $ CFG  //これはPHPUnitの実行に必要です
$ CFG = new stdClass   ;

$ CFG - > dbtype = 'pgsql' ; // 'pgsql'、 'mariadb'、 'mysqli'、 'mssql'、 'sqlsrv'、または 'oci'
$ CFG - > dblibrary = 'native' ; //現時点では 'ネイティブ'
$ CFG - > dbhost = 'localhost' ; // 'localhost'、 'db.isp.com'、IPなど
$ CFG - > dbname = 'moodle' ; //データベース名、例えばmoodle
$ CFG - > dbuser = 'postgres' ; //データベースのユーザー名
$ CFG - > dbpass = 'secret_password' ; //データベースのパスワード
$ CFG - > prefix = 'mdl_' ; //すべてのテーブル名に使用する接頭辞
$ CFG - > dboptions = array 
    'dbpersist' => false  //持続的データベース接続を確立する
                                // 中古?最も安定している場合は 'false'に設定します。
                                //設定、 'true'はパフォーマンスを向上させることができます
                                // 時々
    'dbsocket' => '/ var / run / postgresql /'  // UNIXソケット経由の接続を使うべきか
                                // 'true'またはカスタムパスに設定した場合
                                //ここでdbhostを 'localhost'に設定します
                                //(mysqlは常にソケットを使用していることに注意してください。
                                // dbhostが 'localhost'の場合 - 必要な場合
                                //ローカルポート接続は「127.0.0.1」を使用)
    'dbport' => ''  //接続時に使用するTCPポート番号
                                //サーバーに。空の文字列を
                                //デフォルトポート
);

$ CFG - > wwwroot = 'https://www.cspl.hu/moodle' ;
$ CFG - > dataroot = '/ var / www / localhost / moodle' ;
$ CFG - > ディレクトリ 権限 = 02777 

$ CFG - > admin = 'admin' ;

$ CFG - > slasharguments = true ;

$ CFG - > xsendfile = 'X-Accel-Redirect' ;
$ CFG - > xsendfilealiases = array 
'/ dataroot /' => $ CFG - > dataroot 
'/ moodlelib /' => '/ var / www / localhost / htdocs / moodle / lib' 
'/ moodlepix /' => '/ var / www / localhost / htdocs / moodle / pix' 
'/ moodletheme /' => '/ var / www / localhost / htdocs / moodle / theme'
);

require_once  dirname  __ FILE__   '/lib/setup.php'  ; //編集しない
 

最後に、私を助けてくれた人々、 Matteo ScaramucciaKen Task 、そして他の多くの人々にも感謝します。

- PálCsányitalk )2017年7月22日、4時01分(AWST)