NextCloud作为安全的链接构建服务

哈Ha!在将NextCloud设置为用于创建安全链接的服务上,我想分享一个微不足道的案例,该服务用于直接从连接的网络smb \ cifs驱动器下载数据。我将描述设置过程中遇到的细微差别的解决方案。



为什么这是必要的?



向最终用户方便地传递内容,绕过了FTP的麻烦,并且由于NDA而无法使用公共服务和云进行文件传输(BTsync,Google- \ Mail- \ Yandex-Disk \ Dropbox \等)。










前言



我们的办公室具有一定的基础结构,其中包括Active Directory,在该基础结构中我们有成组的员工。



在PC上的会话期间,登录后,通过配置的策略,将为每个员工安装网络驱动器。通过它,不时地交换数据。磁盘具有特定的文件夹结构,可以通过这些相同的组来配置其权限。每个人都可以看到设置允许他进行的操作。



通常,为了将数据发送到外界,可以建立单独的FTP,或者将数据上传到现有的FTP。我承认这远非总是那么方便-至少,创建和管理临时登录名和密码(例如,当合作伙伴需要提供现成的内容时),控制FTP服务器上的空间,在“发送”之前手动上载到FTP服务器。



在某个时候,我们需要能够从我们的网络驱动器直接将最终用户的数据提供给外界,而且最好是相对安全的:您可以创建一个下载链接(它具有有效期,密码和对原始权利的区分)数据等)。



这个想法是由一个合作伙伴推向我们的,因为他们提供了内部服务,但是在那里它是自写的。



搜索引擎中没有即时可用的现成选项(如果您有主意,请在评论中退订),并且没有人渴望并有资源从头开始,测试和支持,花费大量的工时进行开发。以及为什么要重新发明轮子,如果以前一切都已经被发明了。这就是NextCloud服务想到的方式,该服务知道如何将外部资源连接到自身。



我们将讨论最新的稳定版本(当前为19版),但是我们的设置方法也将适用于较早的版本-我们最初在版本16上实施,然后逐步更新。最近,我只是在最后一个(19)上从头开始提出它,并以此为基础写了一篇文章。



我们最终想要得到的是:



  • ActiveDirectoty\LDAP, , Jira, Confluence, Nexus .
  • NextCloud, , , .
  • NextCloud — - , . , .
  • -, , NextCloud .* , — .
  • 员工可以创建受密码保护的临时链接,链接到他可用的任何资源-无论是文件夹还是单独的文件。并管理它们(链接)-撤消,更改寿命等。
  • 发送了安全链接的最终用户只需打开它并输入密码即可下载与他共享的数据。





展开和配置依赖项



首先,我们需要有一个单独的虚拟机或服务器,可以在其中安装操作系统,然后安装NextCloud。



在Habré上有不止一篇文章专门讨论系统和服务的部署。



亚历山大·S很好并且详细描述了从系统安装到云的非常配置的过程(包括按年更新文章)。我认为没有理由再重复一遍。



1.由于我们正在将网络驱动器连接到NextCloud,因此需要系统软件包:smbclientlibsmbclientphp-ldapphp-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',


也就是说,您可以创建一个空文件夹,并在配置中指定其完整路径。



第二步。使用户成为“只读”



在用户设置部分(http(s)://nextcloud.domain.tld/settings/users)的“ 1 B”(1个字节)中指定配额就足够了



第三步-预先修复ZipStreamer



ZipStreamerNextCloud后端中使用的库,它用于“动态”创建档案,即在下载大量文件时。







怎么运行的
, "Dowload All Files"/" ", , ( ) , .







, ( .zip, — .tar)



, , .



: Google Drive, ., ..



问题在于,由于未知原因,将zip切换到NextCloud中嵌入的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


, -, , .









.



第四步-配置链接参数



发布参数中,我们方便地配置规则。例如,我们进行强制性密码保护并设置强制性生存期。



第五步-连接网络驱动器



  1. 让我们去设置外部存储http(s)://nextcloud.domain.tld/settings/admin/externalstorages
  2. 我们选择添加SMB \ CIFS存储。
  3. 我们填写名称,域,文件夹等字段。
  4. 我们选择“凭据,存储在数据库中”-当用户通过其登录名和密码链接输入时,正是此项允许用户将磁盘连接到其在​​NextCloud中的帐户。(在会话期间存储登录名和密码的项目未删除)。
  5. 不要忘记在菜单<...>中标记“只读”复选框并允许共享。


第六步-通过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/







压力测试



“您如何处理负载?” -你最后问。



高峰时段的测量








我们的服务实例在其他虚拟机中的虚拟机中的〜6Gb Ram + 6CPU上运行。



在网络负载高峰时-使用了超过2.5Gb的RAM,处理器没有阻塞,平均回报约为5Gbit / s(记录达到8Gbit / s)。



我们注意到的唯一一件事是,当我们通过6Gbit / s传输到外界时,我们的Web界面会定期掉线,但是从用户那里下载的内容仍在继续。




已发现的缺点:



  • NextCloud无法对所有已创建的链接进行全局控制。它们仅显示在每个帐户的单独部分中。
  • 如果您使用链接共享已连接驱动器的根目录,则可能会导致数据泄漏,因为您帐户可用的所有文件夹都将在链接中共享。
  • 我注意到,在使用提升服务的一年中,此刻,数据库中的oc_filecache重约29Gb,约有10万行(我们使用的是香草MySQL 5.7.x)。这是由于错误#16834,#6395,#7312和#20349造成的在第二次监视时。





谢谢阅读。如果您有任何疑问,意见或建议,请随时提出建设性的批评。






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



All Articles