安全なリンク構築サービスとしてのNextCloud

こんにちは、Habr!接続されたネットワークsmb \ cifsドライブからデータを直接ダウンロードするための安全なリンクを作成するためのサービスとしてNextCloudを設定する際の、少し重要なケースを共有したいと思います。セットアップ中に遭遇したニュアンスの解決策について説明します。



なぜこれが必要なのですか?



FTPの煩わしさや、ファイル転送にパブリックサービスとクラウド(BTsync、Google- \ Mail- \ Yandex-Disk \ Dropbox \など)を使用できないこと(NDAによる)を回避して、エンドユーザーにコンテンツを便利に配信します。










序文



私たちのオフィスには、グループに所属する従業員がいるActiveDirectoryを含む特定のインフラストラクチャがあります。



PCセッション中、ログイン後、構成されたポリシーを使用して、ネットワークドライブが各従業員にマウントされます。それを通じて、時々データが交換されます。ディスクには特定のフォルダ構造があり、その権限はこれらの同じグループを通じて構成されます。誰もが設定が彼に許可するものを見る。



通常、データを外部に送信するには、別のFTPを作成するか、データを既存のFTPにアップロードします。確かに、これは必ずしも便利ではありません。少なくとも、一時的なログインとパスワードの作成と管理(たとえば、パートナーが既製のコンテンツを提供する必要がある場合)、FTPサーバーのスペースの制御、「送信」する前にFTPサーバーに手動でアップロードすることです。



ある時点で、ネットワークドライブからエンドユーザーのデータを外部に直接提供できる必要がありました。できれば、比較的安全である必要があります。ダウンロードリンクを作成できます(有効期間、パスワード、元の権利との差別化がありました)。データなど)。



このアイデアは、パートナーの1人が社内サービスを提供していたためにプッシュされましたが、そこでは自作でした。



検索エンジンにはその場で既成のオプションはなく(それらを念頭に置いている場合は、コメントで購読を解除してください)、ゼロからの開発、テスト、およびサポートに潜在的に多くの人時間を費やしたいという願望とリソースはありませんでした。そして、多くの場合、すべてが以前にすでに発明されているのに、なぜ車輪を再発明するのか。このようにして、外部リソースをそれ自体に接続する方法を知っているNextCloudサービスが思い浮かびました。



最新の安定版、現在はバージョン19について説明しますが、セットアップ方法は以前のバージョンでも機能します。最初はバージョン16で実装し、その後徐々に更新しました。最近、最後(19)にゼロから上げたところですが、それに基づいて記事を書いています。



最終的に得たいもの:



  • ActiveDirectoty\LDAP, , Jira, Confluence, Nexus .
  • NextCloud, , , .
  • NextCloud — - , . , .
  • -, , NextCloud .* , — .
  • 従業員は、フォルダや別のファイルなど、利用可能なリソースへの一時的なパスワードで保護されたリンクを作成できます。また、それらを管理します(リンク)-取り消し、寿命の変更など。
  • 安全なリンクが送信されたエンドユーザーは、安全なリンクを開いてパスワードを入力するだけで、共有されているデータをダウンロードできます。





依存関係の展開と構成



まず、オペレーティングシステムをインストールできる別の仮想マシンまたはサーバーが必要です。次に、NextCloudが必要です。



システムとサービスの展開に関するHabréに関する記事は複数あります。



アレクサンダーSシステムインストールからクラウドの構成(年ごとの記事の更新を含む)までのプロセスを非常によく説明しましたこれをもう一度繰り返す理由はありません。



1.ネットワークドライブをNextCloudに接続しているため、システムにパッケージが必要です:smbclientlibsmbclientphp-ldap、およびphp-smbclient



備考、Dockerを使用する場合
, — samba , Dockerfile. , , php-smbclientapt install package”.



Dockerfile
FROM nextcloud:latest
RUN apt update -y &&  apt install -y --allow-unauthenticated smbclient libsmbclient libsmbclient-dev
RUN pecl install smbclient
RUN docker-php-ext-enable smbclient






2. sambaサーバー(smb1サポートが無効になっている)の設定の特殊性により、nextcloudを備えたマシンで、ファイル/etc/samba/smb.confおよび/usr/share/samba/smb.confで、プロトコルを担当する行を変更する必要がありました。



[global] 
client min protocol = SMB2
client max protocol = SMB3


Dockerfileの例の続き
RUN rm -frv /etc/samba/smb.conf /usr/share/samba/smb.conf
ADD smb.conf /etc/samba/
ADD smb.conf /usr/share/samba/




そうしないと、nextcloudはドライブに接続できませんでした。






Nextcloudのセットアップ



したがって、Nextcloudはすでにインストールされており、依存関係がインストールされており、サービスには、インストール中に作成された1人の内部ユーザーがいます。



第一歩。従業員アカウントのテンプレートを準備しています。



システムには複数の従業員がいて、徐々にその数が変わるため(作成するユーザーのテンプレートを事前に構成しない場合)、全員のホームフォルダーにいくつかのサンプルファイルがあります。nextcloudにこれ用の個別の設定config.phpで構成されているスケルトンファイル)があるのは良いことです



  'skeletondirectory' => '/var/www/html/data/donotdeletme',


つまり、空のフォルダーを作成し、そのフォルダーへのフルパスを構成で指定できます。



ステップ2。ユーザーを「読み取り専用」にする



ユーザー設定セクション(http(s)://nextcloud.domain.tld/settings/users)の「1B」(1バイト)でクォータを指定するだけで十分です。



ステップ3-事前にZipStreamerを修正する



ZipStreamer、NextCloudバックエンドで使用されるライブラリであり、その場で、つまり大量のファイルをダウンロードするときにアーカイブを作成するために使用されます。







使い方
, "Dowload All Files"/" ", , ( ) , .







, ( .zip, — .tar)



, , .



: Google Drive, ., ..



問題は、不明な理由で、NextCloudに埋め込まれたzipをzip64に切り替えるロジックが失敗するという事実にあります。フォルダ内に65536を超えるファイルがある場合、および/またはそれらの合計重量が4GBを超える場合、ダウンロードされた問題に直面する可能性があります。ファイルが破られるか、4GBをダウンロードした後にダウンロードが中断されます。



この問題には十分な時間が割り当てられました。GitHubにはクローズドチケット(#1755、#15871、#8798)がありますが、問題は解決されたと思われますが、それでも問題は解決され、さまざまな成功を収めて再現されました。 、仕事に大きく干渉します。私はそれをもっと根本的に解決しなければなりませんでした。



決定
100% 64 , 64- . « ».



<, nextcloud>/lib/private/Streamer.php:

- $this->streamerInstance = new ZipStreamer(['zip64' => false]);
+ $this->streamerInstance = new ZipStreamer(['zip64' => true]);


, Docker
Integrity Check ( /usr/src/nextcloud/* /var/www/html/*).



/var/www — , .



/usr/src/nextcloud/lib/private/ CI . , .



Dockerfile
RUN rm -frv /usr/src/nextcloud/lib/private/Streamer.php
ADD Streamer.php /usr/src/nextcloud/lib/private/
RUN chown nobody:nogroup /usr/src/nextcloud/lib/private/Streamer.php


, -, , .









.



ステップ4-リンクパラメータを調整する



出版パラメータ、我々はそれは便利であるようルールを設定しました。たとえば、必須のパスワード保護を作成し、必須の有効期間を設定します。



ステップ5-ネットワークドライブを接続する



  1. 外部ストレージの設定に進みましょうhttp(s)://nextcloud.domain.tld/settings/admin/externalstorages
  2. SMB \ CIFSストレージを追加することを選択します。
  3. 名前、ドメイン、フォルダなどのフィールドに入力します。
  4. 「資格情報、データベースに保存」を選択します。ユーザーがログインとパスワードのリンクを使用して入力したときに、ユーザーがディスクをNextCloudのアカウントに接続できるようにするのはこのアイテムです。(セッション中にログインとパスワードを保存するアイテムは離陸しませんでした)。
  5. メニュー<...>で、「読み取り専用」チェックボックスと共有の許可をマークすることを忘れないでください。


ステップ6-LDAPを介してユーザーを起動する



すべての準備が整ったので、マーケットプレイスからプラグインをインストールし、LDAP接続した直後にインストールします。私たちのシステムでは、NextcloudAccessグループに属する従業員にアクセスを許可しましたあなたは同じことをすることができます。






結論



これで、これらすべての単純な操作の後で、最も明白な操作ではない場合があります。サービスが機能し、ディスクが接続され、従業員が追加され、ユーザーがダウンロードして満足しています。



Dockerfileの完全な例
FROM nextcloud:latest
ENV DEBIAN_FRONTEND noninteractive

#installing smbclient
RUN apt update -y &&  apt install -y --allow-unauthenticated smbclient libsmbclient libsmbclient-dev
RUN pecl install smbclient
RUN docker-php-ext-enable smbclient

#fix of ZipStreammer
RUN rm -frv /usr/src/nextcloud/lib/private/Streamer.php
ADD Streamer.php /usr/src/nextcloud/lib/private/
RUN chown nobody:nogroup /usr/src/nextcloud/lib/private/Streamer.php

#fix of smb config
RUN rm -frv /etc/samba/smb.conf /usr/share/samba/smb.conf
ADD smb.conf /etc/samba/
ADD smb.conf /usr/share/samba/







ストレステスト



「荷物はどうですか?」-とうとうお願いします。



ラッシュアワー時の測定








私たちのサービスインスタンスは、他のVMの中でも仮想マシンの約6Gb Ram + 6CPUで実行されます。



ネットワーク負荷のピーク時には、2.5Gbを少し超えるRAMが使用され、プロセッサは目詰まりせず、平均リターンは約5Gbit / sでした(レコードは8Gbit / sに達しました)。



私たちが気付いた唯一のことは、6Gbit / sを超えて外の世界に転送すると、Webインターフェイスが定期的に落ちるが、ユーザーからのダウンロードは継続しているということです。




特定された欠点:



  • NextCloudは、作成されたすべてのリンクをグローバルに制御することはできません。これらは、各アカウント内の個別のセクションにのみ表示されます。
  • リンクを使用して接続されたドライブのルートを共有する場合、アカウントで使用可能なすべてのフォルダーがリンクで共有されるため、これは潜在的なデータリークとして機能する可能性があります。
  • 発生したサービスを1年間使用していた現在、データベースのoc_filecacheテーブルの重量は約29Gbで、行数は約10万行です(バニラMySQL 5.7.xを使用しています)。これは、バグ#16834、#6395、#7312、#20349が原因です。2番目のインスタンスに監視がありますが。





読んでくれてありがとう。ご質問、ご意見、ご提案がございましたら、お気軽にご質問ください。建設的な批判をお待ちしております。






 : nextcloud 16, 17, 18, 19
 : 26.07.2020
 : 24.09.2020
 :  .  Areso.
: 1.0.0.9



All Articles