Nextcloud 보안 및 설정 경고 해결

6862 단어 nextcloudnginx

경위



반년전에 서버의 이전에 수반해 Nextcloud도 이사했지만, 몇개의 에러나 경고가 나오고 있었으므로, 치명적인 에러만 수정해 다른 경고는 방치하고 있었다.

그래서, 마침내 요 전날 무거운 허리를 올리고 나머지 오류 수정에 나섰기 때문에 그것에 대한 이야기.


환경


  • AWS Lightsail
  • 우분투 18.04
  • PHP7.3
  • 다른 앱의 요구로 PHP7.4도 가동중이지만, Nextcloud는 7.3을 사용하고 있었다.

  • Nextcloud 버전 : 17.07 -> 18.07 (작업 도중에 업데이트되었습니다.)
  • 웹 서버: nginx
  • nginx의 유저명: nginx(본래는 www-data로 하는 것이 관례였던 것 같다.)


  • 데이터베이스 업데이트


    occ db:convert-filecache-bigint 를 실행하라고 했으므로 그렇게 한다.
    $ cd /path/to/nextcloud # Nextcloudのディレクトリへ移動
    
    $ sudo -u nginx php occ db:convert-filecache-bigint # nginx ユーザーとして phpでコマンドを実行
    This version of Nextcloud is not compatible with > PHP 7.3.<br/>You are currently running 7.4.8. # サポート外のphp7.4が呼び出されてしまい、エラー
    
    # 念のためphp7.3を起動してから再度バージョンを指定してphpのコマンドを実行
    $ sudo systemctl start php7.3-fpm.service 
    $ sudo -u nginx php7.3 occ db:convert-filecache-bigint
    Nextcloud or one of the apps require upgrade - only a limited number of commands are available
    You may use your browser or the occ upgrade command to do the upgrade
    Following columns will be updated:
    
    * mounts.storage_id
    * mounts.root_id
    * mounts.mount_id
    
    This can take up to hours, depending on the number of files in your instance!
    Continue with the conversion (y/n)? [n] y
    

    이것으로 완료한 것 같다.

    무엇을 생각했는가 이 단계에서 왜지 Nextcloud 갱신을 해 버렸다. 그래서 여기에서 버전이 18.07로 바뀐다.

    버전 업 하면 추가로 데이타베이스에 수정이 있었던 것처럼 occ db:add-missing-indices 를 실행하도록(듯이) 말해졌으므로 대응.
    $ sudo -u nginx php occ db:add-missing-indices # バージョンつけ忘れてたが実行できた。Nextcloud18.07でPHP7.4に対応したのだろうか?
    Command "db:add-missing-indices" is not defined. #コマンドが定義されないといわれたがそのまま実行できた。
    Do you want to run "db:add-missing-indices" instead?  (yes/no) [no]:
    > yes
    
    Check indices of the share table.
    Check indices of the filecache table.
    Check indices of the twofactor_providers table.
    Check indices of the login_flow_v2 table.
    Check indices of the whats_new table.
    Check indices of the cards table.
    Check indices of the cards_properties table.
    Check indices of the calendarobjects_props table.
    Adding calendarobject_calid_index index to the calendarobjects_props table, this can take some time...
    calendarobjects_props table updated successfully.
    Check indices of the schedulingobjects table.
    Adding schedulobj_principuri_index index to the schedulingobjects table, this can take some time...
    schedulingobjects table updated successfully.
    

    환경 변수 설정



    Installation on Linux — Nextcloud latest Administration Manual latest documentation

    php-fpm은 디폴트에서는 몇개의 환경 변수를 무효화하고 있는 것 같고, 그것을 유효하게 할 필요가 있는 것 같다.
    구체적으로는 이하의 항목이 디폴트에서는 코멘트 아웃 되어 있으므로 # 를 제거하는 것만으로 OK.

    /etc/php/7.3/fpm/pool.d/www.conf
    env[HOSTNAME] = $HOSTNAME
    env[PATH] = /usr/local/bin:/usr/bin:/bin
    env[TMP] = /tmp
    env[TMPDIR] = /tmp
    env[TEMP] = /tmp   
    

    이번은 Nextcloud 이외의 PHP의 어플리케이션은 사용하지 않게 되는 방향성이었기 때문에 문제 없었지만, 다른 어플리케이션에 영향을 주지 않는 것일까…

    HSTS 설정



    조사한 느낌이라고 이번과 같이 완전히 자신 전용 사이트에 대해서는 설정할 필요가 없는 생각도 했지만 일단 수정했다.

    HSTS란?



    우선 무엇을 모르기 때문에 조사했다.
    Wikipedia에 따르면,
    HTTP Strict Transport Security의 약자 같다.
    안전한 사이트를 운용하는 경우, 액세스를 HTTPS만으로 하고, HTTP로 액세스하면, HTTPS의 주소에 리디렉션 하는 것이 일반적인 처리라고 생각한다.
    이 리디렉션 자체는 HTTP를 위해 변조를 할 수 있고, 다른 사이트로 리디렉션 목적지를 바꾸거나 하는 것이 가능해 버리는 것으로, 그것을 막기 위한 구조가 HSTS인것 같다.
    일단 HTTPS로 통신한 사이트에 이것이 설정되어 있으면, 이후 브라우저측에서 HTTP의 주소를 지정했을 때에 HTTPS로 옮겨놓는다든가.

    Nginx 설정



    nginx 사이트 별 구성 파일의 HTTPS에 대한 설정에 add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;를 추가합니다.

    /etc/nginx/conf.d/nextcloud.conf
    server {
        listen 443 ssl http2;
        # 中略
        add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
        # 中略
    }
    
    

    참고



    HTTP Strict Transport Security (HSTS) and NGINX - NGINX
    Hardening and security guidance — Nextcloud latest Administration Manual latest documentation

    결과





    이것으로 안심.

    좋은 웹페이지 즐겨찾기