CentOS Docker环境部署云盘NextCloud
开源云盘经测试NextCloud、ownCloud、Seafile、Cloudreve、dzzoffice、kiftd、Onionshare,NextCloud功能性、安全性、社区活跃度条件均具备优势。
服务端支持Linux,客户端支持Windows、MacOS、Linux、Android、IOS、browser;
用户体验友好,用户界面美观,文档支持包括管理手册、用户手册、开发者手册;
安全性维护CVE database、注重数据安全和隐私保护、支持数据存储完整性校验、数据传输保密性、数据存储保密性、用户标识和身份鉴别、双因素鉴别、单点认证、第三方认证、用户共享、群组共享、公开共享口令、访问控制、恢复已删除的文件、找回文件历史版本、安全策略配置、文件监控和日志、安全日志审计、病毒扫描等功能。
CentOS部署Docker环境
试用部署NextCloud
操作系统版本:CentOS Linux release 7.9.2009 (Core)
Docker版本:Docker version 20.10.12, build e91ed57
NextCloud版本:24.0.1
PHP版本:8.0.20
虚拟CPU:4 虚拟内存:5G 虚拟硬盘:50G
搜索nextcloud容器镜像
sudo docker search nextcloud
拉取nextcloud容器镜像至本地
sudo docker pull nextcloud
创建并启动nextcloud容器,使用–name参数命名为nextcloud,使用-p参数将nextcloud容器80端口映射至宿主机8088端口
sudo docker run -it -d -p8088:80 --name nextcloud nextcloud
默认使用HTTP的方式访问nextcloud,IP地址为宿主机IP地址,端口为宿主机8088端口
http://localhost:8088
正常访问nextcloud管理界面后,在该位置创建管理员账号,自定义用户名、口令点击安装并遵循安装指引完成安装即可
正式部署NextCloud
操作系统版本:CentOS Linux release 7.9.2009 (Core)
Docker版本:Docker version 20.10.12, build e91ed57
NextCloud版本:24.0.1
MySQL/MariaDB版本:10.8.3
PHP版本:8.0.20
虚拟CPU:4 虚拟内存:5G 虚拟硬盘:50G
安装MySQL/MariaDB
搜索mariadb数据库容器镜像
sudo docker search mariadb
拉取mariadb数据库容器镜像至本地
sudo docker pull mariadb
创建并启动mariadb数据库容器,正式环境需要注意自定义用户名不能够使用常见的默认用户名、口令8位以上数字、字母、特殊字符组合,使用–name参数命名为mariadb,使用–env配置数据库用户名MARIADB_USER、数据库口令MARIADB_PASSWORD、数据库root用户口令MARIADB_ROOT_PASSWORD、数据库MARIADB_DATABASE,使用–restart=always配置Docker启动服务时mariadb容器随之启动
sudo docker run -it -d --name mariadb --env MARIADB_USER=nextcloud --env MARIADB_PASSWORD=N2yg_A9SQ --env MARIADB_ROOT_PASSWORD=D57g_5QZd --env MARIADB_DATABASE=nextcloud --restart=always mariadb
安装onlyoffice
搜索onlyoffice容器镜像
sudo docker search onlyoffice
拉取onlyoffice容器镜像至本地
sudo docker pull onlyoffice/documentserver
创建并启动onlyoffice容器,使用-p参数将onlyoffice容器80端口映射至宿主机8089端口,使用-p参数将onlylffice容器443端口映射至宿主机8443端口,使用–restart=always配置Docker启动服务时onlyoffice容器随之启动
sudo docker run -it -d -p8443:443 -p8089:80 --name onlyoffice --restart=always onlyoffice/documentserver
安装NextCloud
搜索nextcloud容器镜像
sudo docker search nextcloud
拉取nextcloud容器镜像至本地
sudo docker pull nextcloud
创建并启动nextcloud容器,使用–name参数命名为nextcloud,使用-p参数将nextcloud容器80端口映射至宿主机80端口,使用-p参数将nextcloud容器443端口映射至宿主机443端口,使用–link参数使正在创建的nextcloud容器网络连接至mariadb数据库容器,onlyoffice因配置时不支持使用该方式直接访问,故仍然使用端口访问的方式配置,使用–restart=always配置Docker启动服务时nextcloud容器随之启动
sudo docker run -it -d -p443:443 -p8088:80 --name nextcloud --link mariadb --restart=always nextcloud
初始化NextCloud
默认使用HTTP的方式访问NextCloud,IP地址为宿主机IP地址,端口为宿主机8088端口
http://localhost:8088
正常访问nextcloud管理界面后,在该位置创建管理员账号,自定义用户名、口令,选择存储与数据库使用MySQL/MariaDB后点击安装并遵循安装指引完成安装
初始化时创建管理员用户,该位置用户名、口令为手动配置
http://localhost:8088
username:management
password:NAyQ_29Sg
配置NextCloud连接的数据库,配置数据库连接用户名、口令,该位置host因使用nextcloud容器已使用–link参数连接mariadb,可填写mariadb或填写IP地址
MySQL/MariaDB
username:nextcloud
password:N2yg_A9SQ
database:nextcloud
host:mariadb
点击安装-安装推荐的应用,或者点击取消可以取消安装应用,安装完成后亦可以自定义增删应用
安装完成后默认进入仪表盘,使用说明参见https://docs.nextcloud.com/server/latest/user_manual/
启用onlyoffice
登录管理员用户-用户(右上角头像)-应用-搜索-ONLYOFFICE-下载并启用
将会curl https://github.com/ONLYOFFICE/onlyoffice-nextcloud/releases/download/v7.5.2/onlyoffice.tar.gz,github无法访问时下载将出错,需要手动下载onlyoffice插件且有坑,挑个好时机访问github下载
登录管理员用户-用户(右上角头像)-设置-管理-ONLYOFFICE
ONLYOFFICE Docs地址http://onlyoffice_ip_address:8089/
此处的onlyoffice_ip_address可以是onlyoffice的IP地址或域名
根据使用情况勾选默认关联的文件格式并保存
因同时存在多种文档预览编辑器时,onlyoffice需要右键手动选择打开,且Nextcloud Office默认开启存在问题,故禁用默认的Nextcloud Office以保持onlyoffice单击开启
登录管理员用户-用户(右上角头像)-应用-搜索-Nextcloud Office-禁用
安全性配置
启用安全策略
OnlyOffice安装时默认启用Password policy,可直接配置
登录管理员用户-用户(右上角头像)-设置-管理-安全-口令规则
配置 | 内容 |
---|---|
10 | 最小口令长度 |
5 | 用户口令记录 |
90 | 用户口令过期前的天数 |
5 | 用户账户被锁定前的登录尝试次数(0表示无限制) |
开启 | 禁止普通口令 |
开启 | 强制要求大写和小写字符 |
开启 | 强制要求数字字符 |
开启 | 强制要求特殊字符 |
开启 | 检查口令是否在haveibeenpwded.com的泄露口令列表中 |
启用服务器端加密
登录管理员用户-用户(右上角头像)-应用-搜索-Default encryption module-启用
登录管理员用户-用户(右上角头像)-设置-管理-安全-服务器端加密
创建文件测试存储加密效果,在NextCloud容器可以看到目录和文件名正常显示,文件内容密文存储,要注意的是密钥的存储情况以及随机数的生成情况仍有一定限制
root@0ef41a5f58e3:/var/www/html/data/management/files# ls
Documents 'Nextcloud Manual.pdf' 'Nextcloud intro.mp4' Nextcloud.png Photos Readme.md 'Reasons to use Nextcloud.pdf' encryption_file_test.md ''$'\346\250\241\346\235\277'
root@0ef41a5f58e3:/var/www/html/data/management/files# more encryption_file_test.md
HBEGIN:oc_encryption_module:OC_DEFAULT_MODULE:cipher:AES-256-CTR:signed:true:HEND--------------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
CzPZ7lwwcevMpkfEHSKTW9YuCluYEhX8/9rG7Es6FiRjOwnbhXjBUUt2CNcokEYzQ+8UJVxDwyz7QyV13QCmp7QYAWLYJ8aa8NTh1+/hsJjU4vHFwbIiLKess4b5W8nK9LudQRnxJ1qA1LZn24qDyecoCSoeYoUu7ndaCK7a
is8FgCelEW5L25vfC7D2PvMbtf+mjXRVxw7Cuw1QDABmNxTamR0AhGXDI3ua1lunLcfE5LdRZoY/YXehHT46npkazV205BWUFfXMyLTv2UQiElc/F/1kvMv6MpHbrDFancUGuB6Bc/l4JH+23j0nFt+oqDdCr71Ecka0oXTFL2D/z2Hk1rncWQTT8PZr/oQaMwhPzkTxTUKhLxUdc
qfo3nKHk2Up2K9JiV9ooMsOaGPMRNILz5divJtgX7VYeF8azZSeFLyLZNo=00iv00��� �?)��F>
Fm00sig00708f604dbb2e5174345a0312db8923df94789feacb999258033a7f62504db975xxx
删除不必要的应用
登录管理员用户-用户(右上角头像)-应用,根据需要启用和禁用的情况自定义选择,这里因只需要文件存储和共享的应用,故选择禁用Activity、Calendar、Contacts、Dashboard、Photos、Mail等
双因素鉴别
登录管理员用户-用户(右上角头像)-应用-搜索-TOTP-下载并启用
登录管理员用户-用户(右上角头像)-设置-管理-安全-两步验证
当用户通过口令鉴别后,将跳转至设置TOTP令牌鉴别
手机在应用商店内搜索OTP、TOTP等关键字,不限定App测试可用即可,根据界面提示输入动态令牌,一次绑定、二次登录
如android
IOS应可直接搜索TOTP下载
使用企业自建OTP,则搜索OTP,下载并启用OpenOTP Two Factor Authentication登录管理员用户-用户(右上角头像)-设置-管理-OpenOTP身份验证,根据企业情况配置
病毒扫描
使用Antivirus for files进行病毒扫描,因为Antivirus for files需要依赖ClamAV,首先安装ClamAV
sudo docker exec -it nextcloud /bin/bash
apt-get update
apt-get -y install clamav clamav-daemon
/usr/bin/freshclam
登录管理员用户-用户(右上角头像)-应用-搜索-Antivirus for files-下载并启用
登录管理员用户-用户(右上角头像)-设置-管理-安全-病毒克星
ClamAV以三种模式之一运行:
守护进程(套接字):ClamAV与Nextcloud在同一台服务器上运行。ClamAV守护进程,clamd,在后台运行。没有活动时clamd将最小的负载放在您的系统上。如果您的用户上传大量文件你会看到高CPU使用率。
守护进程:ClamAV在不同的服务器上运行。这是一个不错的选择适用于具有大量文件上传的Nextcloud服务器。
可执行文件:ClamAV与Nextcloud在同一台服务器上运行,并且clamscan命令在每次文件上传时启动然后停止。clamscan对于按需使用来说很慢并且并不总是可靠的;这是最好使用其中一种守护程序模式。
因为该位置ClamAV与Nextcloud在同一台服务器上运行,故这里采用ClamAV可执行模式
配置默认共享权限
登录管理员用户-用户(右上角头像)-设置-管理-共享-默认共享权限-取消勾选默认权限,这样对于文件的共享仅默认保留只读,更加妥当
安全审计策略
OnlyOffice安装时默认启用Log Reader,会将错误日志直接回显至OnlyOffice界面
MySQL/MariaDB安全加固
登录mariadb数据库容器中的mariadb数据库,数据库不采用远程登录且未配置映射至宿主机端口,采用本地登录,登录默认最高权限root用户,口令为创建mariadb容器时设置的root口令
sudo docker exec -it mariadb /bin/bash
mysql -uroot -p
D57g_5QZd
mariadb安装口令复杂度模块,安装时默认会配置口令复杂度
INSTALL SONAME 'simple_password_check';
mariadb设置登录失败处理次数为5次
set global max_password_errors=5;
mariadb查看口令复杂度策略和登录失败处理次数
show variables like '%password%';
MariaDB [(none)]> show variables like '%password%';
+-----------------------------------------+-------+
| Variable_name | Value |
+-----------------------------------------+-------+
| default_password_lifetime | 0 |
| disconnect_on_expired_password | OFF |
| max_password_errors | 5 |
| old_passwords | OFF |
| report_password | |
| simple_password_check_digits | 1 |
| simple_password_check_letters_same_case | 1 |
| simple_password_check_minimal_length | 8 |
| simple_password_check_other_characters | 1 |
| strict_password_validation | ON |
+-----------------------------------------+-------+
10 rows in set (0.001 sec)
mariadb安装audit模块
INSTALL PLUGIN server_audit SONAME 'server_audit.so';
mariadb开启审计策略
set global server_audit_logging=ON;
mariadb查看审计策略
show variables like '%audit%';
MariaDB [(none)]> show variables like '%audit%';
+-------------------------------+-----------------------+
| Variable_name | Value |
+-------------------------------+-----------------------+
| server_audit_events | |
| server_audit_excl_users | |
| server_audit_file_path | server_audit.log |
| server_audit_file_rotate_now | OFF |
| server_audit_file_rotate_size | 1000000 |
| server_audit_file_rotations | 9 |
| server_audit_incl_users | |
| server_audit_logging | ON |
| server_audit_mode | 0 |
| server_audit_output_type | file |
| server_audit_query_log_limit | 1024 |
| server_audit_syslog_facility | LOG_USER |
| server_audit_syslog_ident | mysql-server_auditing |
| server_audit_syslog_info | |
| server_audit_syslog_priority | LOG_INFO |
+-------------------------------+-----------------------+
15 rows in set (0.001 sec)
因数据库本地登录故不配置SSL
HTTPS
因正式环境采用HTTPS的方式访问,故创建nextcloud自签名证书
mkdir -p /app/apache2/certs
cd /app/apache2/certs
openssl genrsa -des3 -out server.key 2048
openssl rsa -in server.key -out server.key
openssl req -new -x509 -key server.key -out ca.crt -days 3650
openssl req -new -key server.key -out server.csr
openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey server.key -CAcreateserial -out server.crt
cat server.key server.crt > server.pem
将nextcloud证书从宿主机复制到nextcloud容器内
sudo docker exec -it nextcloud mkdir /etc/apache2/certs
sudo docker cp /app/apache2/certs nextcloud:/etc/apache2/
启用nextcloud ssl
sudo docker exec -it nextcloud /bin/bash
a2enmod ssl
a2ensite default-ssl
配置apache2 ssl
cat > /etc/apache2/sites-available/default-ssl.conf
<IfModule mod_ssl.c>
<VirtualHost *:443>
DocumentRoot "/var/www/html"
ServerName 172.17.0.4
SSLEngine on
SSLCertificateFile /etc/apache2/certs/server.crt
SSLCertificateKeyFile /etc/apache2/certs/server.key
SSLCACertificateFile /etc/apache2/certs/ca.crt
</VirtualHost>
</IfModule>
重载apache2服务
apache2ctl configtest
service apache2 reload
在访问时会显示需要修改/var/www/html/config/config.php的访问配置
sudo docker exec -it nextcloud /bin/bash
sed -i 's/0 => 'localhost:8088',/0 => 'localhost:443',/g' /var/www/html/config/config.php
https://localhost
因正式环境采用HTTPS的方式访问,onlyoffice也须同步保持HTTPS连接以同步使用,故创建onlyoffice自签名证书,并在创建onlyoffice容器时明确证书路径以使其采用HTTPS
在宿主机创建onlyoffice自签名证书
mkdir -p /app/onlyoffice/DocumentServer/data/certs
cd /app/onlyoffice/DocumentServer/data/certs
openssl genrsa -out onlyoffice.key 2048
openssl req -new -key onlyoffice.key -out onlyoffice.csr
openssl x509 -req -days 3650 -in onlyoffice.csr -signkey onlyoffice.key -out onlyoffice.crt
openssl dhparam -out dhparam.pem 2048
chmod 400 /app/onlyoffice/DocumentServer/data/certs/onlyoffice.key
创建并启动onlyoffice容器,使用–name参数命名为onlyoffice,使用-v参数映射宿主机、onlyoffice容器路径,映射的路径中有我们创建的onlyoffice自签名证书,因onlyoffice内置不同的初始化方式,使用HTTP、HTTPS的初始化方式不同,HTTPS须在宿主机创建onlyoffice自签名证书后方可初始化,使用-p参数将onlyoffice容器80端口映射至宿主机8088端口,使用-p参数将mariadb容器443端口映射至宿主机8443端口,使用–restart=always配置Docker启动服务时onlyoffice容器随之启动
删除onlyoffice容器后重新创建
sudo docker run -it -d -p8443:443 -p8089:80 -v /app/onlyoffice/DocumentServer/data:/var/www/onlyoffice/Data --name onlyoffice --restart=always onlyoffice/documentserver
使用已申请的证书可直接替换证书文件并放置到相应的位置即可
皮肤
登录管理员用户-用户(右上角头像)-设置-管理-主题
内置网站链接直接跳转至NextCloud官网,将其重置为内置域名或IP使其不关联,同时修改皮肤颜色、登录LOGO均可,看起来就有企业范了
参考链接:
Docker仓库中查看NextCloud容器——https://hub.docker.com/_/nextcloud
Docker仓库中查看MariaDB容器——https://hub.docker.com/_/mariadb
Docker仓库中查看OnlyOffice容器——https://hub.docker.com/r/onlyoffice/documentserver
NextCloud服务器端加密——https://docs.nextcloud.com/server/16/admin_manual/configuration_files/encryption_configuration.html
NextCloud备份——https://docs.nextcloud.com/server/latest/admin_manual/maintenance/backup.html
数据库SSL配置——https://docs.nextcloud.com/server/latest/admin_manual/configuration_database/linux_database_configuration.html?highlight=ssl
NextCloud HTTPS——https://docs.nextcloud.com/server/latest/admin_manual/installation/harden_server.html?highlight=ssl#use-https