2023-06-24 08:25:46 来源:哔哩哔哩
近日上层对原有老旧FTP云盘平台提出升级要求,具体如下:
搭建一个类似于Dropbox的新云盘,提供Web网页、移动App等诸多访问方式,提高易用性和性能水平;
兼顾老同事的使用习惯,保留传统的FTP使用方式(使用Windows文件资源管理器访问),做到无缝衔接、用户无感知平滑过渡;
(资料图片仅供参考)
提供统一的服务体验,使得新云盘可以和FTP合作,同步文件访问、文件修改;
为确保用户敏感信息安全,希望采用统一身份验证方案,多平台实现用户凭据统一存储、修改、查验。
经过综合考虑,我们选择了NextCloud作为新一代云盘平台。作为一款免费的云盘项目,其提供了Web网页端、移动端、WebDAV等多种访问方式,能够满足跨平台协作的需求;同时NextCloud操作简便、易于上手,且易于安装维护,可以极大节省人力成本,降低后期运营维护技术门槛。通过启用插件,NextCloud还可以进一步扩展其功能,从而满足更多需求。
原有FTP平台采用Windows Server 2003+Serv-U 6.x方案,经综合测试考虑,我们采用了Linux+vsftpd解决方案。作为一款开源、免费的FTP服务端软件,vsftpd支持MySQL、LDAP等多种外部认证方案,同时配置灵活度高,可定制选项丰富,能够最大限度满足用户需要。
对于统一身份验证方案,我们采用了LDAP。相比于MySQL,LDAP能够实现数据快速检索读取,减少服务器资源开销。同时LDAP被众多应用程序和服务器支持,几乎不会遇到兼容性、支持性问题,便于快速对接。
针对统一协作、数据同步的需求,经过研究讨论,最终决定将vsftpd的数据目录设置为NextCloud的数据目录,让两者共同使用www-data账户,共同读取、操作相同的文件目录。
初步规划完成,开始着手测试。
NextCloud安装配置
本例中,我们使用传统的手动下载离线安装包的方式进行NextCloud的部署。除了下载zip离线安装包外,NextCloud还提供了snap一键安装、VM打包镜像等方式进行部署,可以根据实际需要合理选择。
下图列出了官方的系统要求。推荐阅读NextCloud的官方Admin手册。
下载安装包
默认情况下,NextCloud官网提供最新的zip安装包。如果希望下载旧版本,可以点击下方的 older versions or major releases 超链接,下载旧版本NextCloud。
安装NextCloud
将zip文件夹拷贝至Linux系统中,并解压缩至/var/www/html/目录下。
设置该文件夹的权限,确保www-data用户对nextcloud目录有合适的权限。
本例选择了Ubuntu 22.04 LTS系统。出于排错调试考虑,本例安装了带有桌面体验的系统版本。
安装Apache、PHP等组件
出于个人习惯考虑,我选择了Apache。使用nginx之类的也没有问题。
NextCloud官方目前已经支持到PHP 8.2,本例部署时间较早,仍然使用PHP 8.0。出于安全性等考虑,推荐各位小伙伴使用新版PHP 8.2。
初步配置运行Apache
本地浏览器访问localhost,看到欢迎界面表示配置成功。
安装配置MySQL
具体添加、删除用户和修改密码的命令不再赘述。
此处创建nextcloud使用的MySQL数据库账号和数据库。
我并不会告诉你,为了偷懒,我直接用MySQL Workbench连接到了127.0.0.1并使用GUI界面完成了用户添加和数据库创建。XD。
修改PHP配置
打开/etc/php/8.0/fpm/php.ini,将下方三个值改大,提高性能。这里我统一改成了4096.
修改NC配置文件
修改默认语言为CN中文,同时增加受信任域名(FQDN或IP地址)。只有通过受信任域名才能访问NC。
NC默认将文件夹映射关系存储在数据库中,因而本地文件目录可能与NC中文件目录不同。因此应如本例所示,增添一行filesystem_check_changes项,使NC同步本地目录。
完成NextCloud安装
浏览器访问NextCloud域名或IP地址,根据引导完成数据库连接配置、管理员密码设置等,进入初始界面。
配置LDAP
在初始页面,点击个人头像-应用,找到名为“LDAP user and group backend”的应用,点击 启用。当其按钮变为 禁用 时,表明该应用已经成功启用。
点击个人头像-管理设置,从左侧列表中找到LDAP/AD集成,进行LDAP配置。
考虑文章篇幅限制,这里不再赘述如何搭建LDAP服务器。本例中,我在本机上使用OpenLDAP搭建了LDAP服务,管理员用户名:密码=admin:admin,域名为mywebpc.com,并创建了cn=test2、userPassword=admin的测试用户。
本例中的LDAP配置仅供参考,各人实际情况不完全相同。
当所有信息都填写完毕后,点击“测试 Base DN”,我们应该看到其提示“配置完成”。此时点击继续。
第二步中,选择我们希望允许登录的用户的对象类(Object Class)。
完成后,点击“验证设置和统计用户”,确保用户数量和预期的一致,然后点击“继续”。
第三步、第四步中,根据自己的实际需求进行设置。
这里需要注意一点,默认情况下,NextCloud会自动同步LDAP中的用户信息,并使用用户的UUID作为用户文件夹的名称。这对于NC自己来说没什么,但对于vsftpd无疑是增加了一道障碍(原因详见下文),因此我们需要多一步配置。
点击右上角的“专家”,修改内部用户名属性。由于我在LDAP服务器中将cn配置成了用户名,因此我在这里修改为“cn”。这样,NC将以cn属性(用户名)命名用户文件夹。
如图,修改前用户文件夹如第一个所示,修改后用户文件夹如最后一个所示。
此外,我们希望用户可以通过NC重置、修改LDAP中的密码。因此我们点击“高级”-“目录设置”,勾选“每个用户可以更改LDAP密码”。下次修改密码时,NC默认会以SSHA方式加密密码并存储在LDAP中。
至此,NC配置基本完成。此时,我们应该可以在NextCloud的用户列表里看到test2用户。使用test2:admin登录NC,成功来到用户主页。
vsftpd配置
安装vsftpd
安装、配置pam_ldap对接模块
安装过程中会提示我们手动输入相关信息完成配置。这里不再赘述。
安装完毕后,查看pam_ldap配置文件,确认配置正确。
本例中的LDAP配置文件内容仅供参考,各人实际情况不完全相同。
修改vsftpd外部验证方案配置文件
通过安装、配置pam_ldap模块,我们得以让应用程序借助该模块连接LDAP服务器并完成用户身份验证;而要想让应用程序通过LDAP方式实现身份验证,我们需要明确告诉应用程序:请采用LDAP身份验证方案。因此我们修改vsftpd的外部验证方案配置文件,使其指向pam_ldap模块:
配置文件最下方追加如下两行:
创建、修改vsftpd用户配置文件
这一步的意义,请参见下文“修改vsftpd主配置文件”中的第二条!
格式:/var/www/html/nextcloud/data/{username}/files
修改vsftpd主配置文件
这里需要说明几个配置项:
为了让vsftpd读取刚才的外部验证方案配置文件,我们添加一项:pam_service_name=vsftpd,这里的值就是配置文件的文件名。这样,vsftpd就会读取该配置文件,而配置文件中又明确指向了pam_ldap模块,所以vsftpd会采用LDAP验证方式验证用户身份。在LDAP配置文件中,我们配置了LDAP服务器的URI地址、用户名、Base DN等信息,这使得pam_ldap模块可以成功连接到LDAP服务器并进行用户身份查验。至此,vsftpd就可以顺利通过LDAP方式验证用户身份。
验证用户身份后,vsftpd需要知道这个用户的FTP文件夹根目录的位置,而每个用户的文件夹随自身用户名变化,显然各有不同。因此我们配置一项: user_config_dir=/etc/vsftpd/user_conf ,告诉vsftpd用户配置文件的路径,这样vsftpd将会读取/etc/vsftpd/user_conf/{username}这个配置文件。每个用户的用户名都不同,所以我们需要创建以用户名为文件名、等量于用户数量的配置文件,并在配置文件中指定用户的根目录。这一步可以通过Linux脚本进行批量创建设置。
由于NextCloud将数据存放在data/{username}/files目录中,该目录显然不能设置为只读,否则NC将无法删除该用户。但出于安全性考虑,vsftpd默认强制要求用户FTP根目录为只读,否则将会在登录成功后收到错误提醒并被强制关闭连接。因此我们增添一项 allow_writeable_chroot=YES ,从而让vsftpd允许用户FTP根目录不为只读。
默认情况下,FTP虚拟用户创建的文件夹的umask为077,这代表该文件夹的权限为700。这看起来没有什么问题,但在实际测试中发现,无论文件所有者是谁,FTP用户都无法读取权限为700的文件夹内容。在掉了一把又一把头发之后,我明智地决定,将umask修改为011,从而使新文件夹的权限变为766,成功解决该问题。后来测试中发现,只要将权限设置为704即可解决问题。原因未知。欢迎各位小伙伴交流反馈!
在vsftpd中,LDAP中的用户(从配置文件、MySQL等外部数据源读取的用户)被视作虚拟用户,虚拟用户被映射到一个Linux上的真实用户身上,从而使得虚拟用户可以“附身”真实用户进行文件增删改操作。为了简便配置、减少文件权限冲突,我们使用www-data用户作为映射用户,这样无论是从vsftpd还是从NC创建的文件(夹),都将以www-data为所有者。为此我们增添两条配置:guest_enable=YES;guest_username=www-data。其中guest就是映射用户。
重新启动vsftpd服务
在另一台机器上打开FTP客户端,使用test2:admin登录,我们应该可以成功登录FTP服务器,并看到和在NC主界面一样的文件内容。
尝试在FTP中对文件进行修改,然后在NC中查看文件的变化。反之亦然。我们应该会看到,两边的文件目录和文件内容始终保持一致。比如,在FTP中删除一个PDF,那么在NC中,这个PDF也将消失。进行多轮测试,确保两边的数据同步体验一致。
尝试在NC中修改用户密码,然后分别尝试使用旧密码和新密码登录FTP。我们应该看到,使用旧密码登录失败,而使用新密码登录成功。这表明我们成功通过LDAP实现了用户凭据的统一管理。
至此,Quest Clear.
感兴趣的话,不妨点个赞呗!
关键词:
上一篇:大陆女明星奴隶园 明星奴隶园之迪丽热巴
下一篇:最后一页