国产化操作系统改造实践(未完)

一、项目背景

    2020 年,红帽公司宣布,将在 2021 年 12 月 31 日和 2024 年 6 月 30 日分别终止对 CentOS 8 和 CentOS 7 的服务支持,把 CentOS 项目的工作和投资集中在CentOS Stream 上。

在这里插入图片描述

    CentOS Linux 8已于2021年12月31日停止维护,CentOS Linux7也 将于2024年6月停服。所谓CentOS Stream 版本放在了 RHEL 的上游(即CentOS 从RHEL的下游变成了上游),这样它的安全性和稳定性都大打折扣,企业在生产环境之中使用 CentOS 不再被官方建议, CentOS 的版本停服也意味着漏洞更新的停止,缺少安全保障的企业业务将无法进行。另外这些广泛使用的系统都是美国控制范围之内,停服之后,我国将面临产品中断、安全漏洞、运维困难、生态缺失等综合复杂问题。为降低非自主可控OS对网络安全及供应链的影响,国家及中移集团要求各单位要积极推进CentOS、RedHat及其衍生版本以及SUSE操作系统迁移,提前准备其他品牌非国产操作系统的迁移;目标系统采用基于国内开源社区欧拉社区和龙蜥社区发布的版本OpenEuler(欧拉)和OpenAnolis(龙蜥)。
在这里插入图片描述

二、国产系统选择

在这里插入图片描述
在这里插入图片描述
一般OS 版本后缀标识说明:

LTS 版本:长期支持(Long Term Support)版是指在一个较长的周期内承诺持续维护的版本,通常长于5年。Anolis OS 8 提供为期十年的长期支持,因而无论是否显性添加 LTS 后缀名,Anolis OS 8 在任何场合均为 LTS 版本;

GA 版本:正式可用(Generally Available)版是指结束了所有的开发、测试周期,进行发布评审并通过的版本,通常也指代第一个可用版本;

QU 版本:优选更新(Quality Updates)版是指经过 OpenAnolis 龙蜥社区评审后决定将必要的软件更新追加到上一个正式发布的小版本中的增量更新版。该版本通常有较好的二进制接口兼容性,同时具备安全增强,推荐所有用户更新。优选更新版发布后,上一个正式发布版本自动成为过期版本,不再推荐用户使用;

Beta 版本、RC 版本、Preview (预览)版本:上述均为正式版本前的测试版本。在发布周期较长的版本研发阶段,通常会形成 Beta → RC → GA 甚至 Beta → RC1 → RC2 … RCn → GA 等多个测试版本。在发布周期较为乐观的情况下,可能会直接推出单个预览版本。

在这里插入图片描述

OpenEuler是面向企业级的开源全国产化操作系统。openEuler 是一款开源操作系统。openEuler 内核源于 Linux,支持鲲鹏及其它多种处理器,能够充分释放计算芯片的潜能,是由全球开源贡献者构建的高效、稳定、安全的开源操作系统,适用于数据库、大数据、云计算、人工智能等应用场景。同时,openEuler 是一个面向全球的操作系统开源社区,通过社区合作,打造创新平台,构建支持多处理器架构、统一和开放的操作系统,推动软硬件应用生态繁荣发展。

openEuler 快速发展,2021 年装机量已经达到 102 万套,其中物理机装机量达到 52.7 万套,商业发行版装机量达到 34.5 万套。2022 年 11 月 9 日,华为公司副总裁、计算产品线总裁邓泰华在“2022 全连接大会”上表示,目前 openEuler 欧拉操作系统的累计装机量达到 245 万套。2)生态持续完善:截至 2022 年 11 月 13 日,欧拉社区已经有超过 75 万社区用户,贡献者超过 1.2 万。据 openEuler 官网披露,openEuler 操作系统支持鲲鹏、飞腾、RSIC-V、昇腾、海光等多种计算架构与芯片,并对统信软件 DDE 及麒麟软件 UKUI 等第三方桌面环境进行支持。结合华为自研的鲲鹏芯片以及 openGuass 开源数据库系统,openEuler 操作系统作为中枢,能够有效支持华为全国产化数字底座,并对各类第三方应用软件进行支持实现生态功能丰富化。在金融、运营商等领域,openEuler已经拥有大量成功案例和大客户。

社区版本分为长期支持版本和创新版本。社区版本按照交付年份和月份进行版本号命名。例如,openEuler 20.09于2020年09月发布。生命周期如下:

长期支持版本:发布间隔周期定为2年,提供4年社区支持。社区首个LTS版本openEuler 20.03 LTS于20年3月发布,基于5.10内核的openEuler 22.03 LTS于22年3月发布。
社区创新版本:openEuler每隔6个月会发布一个社区创新版本,提供6个月社区支持。下一个社区创新版本将于2022年9月发布。

在这里插入图片描述

目前LTS版本全版本生命周期4年( 2+2 ),到生命周期结束前半年~1年由相关团队组建联合维护团队,申请延长至6年

LTS版本SP版本生命周期原则上按照小SP(6月份Release,可选) 9个月,大SP (12月份Release)24个月执行;大规模使用建议选择大SP

SP0默认执行大SP策略,可基于社区使用情况和社区规则提前半年~1年审视是否提前结束;SP3作为LTS最后一个SP,随LTS全版本生命周期结束

Maintenance Support:CVE、Bugfix,新硬件支持和少量新特性(保证LTS内前向兼容的情况)

Extend Support:修复”主要”以上CVE和Bug

单个版本生命周结束前,以邮件和公告的方式提前3个月知会。

在这里插入图片描述

在2021云栖大会上,阿里云发布了全新操作系统“龙蜥”(Anolis OS),并宣布开源,同时在发布会上表示要投入20亿专项奖金,发展100家以上的合作伙伴。

2022年6月13日,龙蜥社区对外公布了下一代龙蜥操作系统Anolis OS 23 研发路线图,PoC 版已在社区官网上线,正式版本2023 年发布,它支持 X86、ARM-v9、RISC-V 等多种芯片架构,并集成更多核心自研组件。据公开报道,龙蜥社区是国内领先的操作系统开源社区,首个社区版本Anolis OS 8.2于2021年5月发布。迄今为止,龙蜥操作系统整体装机量已达130多万,生态伙伴超过200家,有效应对了CentOS 8停服以来的替代需求。龙蜥操作系统完全开源,通过开源社区和操作系统厂商等形式提供服务,技术支持至少10年。它特别针对云原生应用开发做了多重优化,云上典型场景的综合性能可提升40%,同时故障率可降低50%,还兼容CentOS生态,支持一键迁移,并提供全栈国密能力。官网声称与CentOS完全二进制兼容,比如包管理就与CentOS是一样的;

龙蜥操作系统(Anolis OS)在 CentOS 结束生命周期后为广大的 CentOS 用户提供平滑的过渡支撑;同时为广大开发者和运维人员提供稳定、高性能、安全、可靠、开源的创新操作系统发行版,同时提供两个版本的内核,分别为RHCK(RHEL Compatible Kernel,RHEL 兼容内核)和 ANCK(Anolis Cloud Kernel,Anolis 云内核),其中 ANCK 是由 OpenAnolis 龙蜥社区 Cloud Kernel SIG 基于上游 Linux Kernel 研发,提供在稳定性,性能,隔离能力等方面的增强,和对龙芯、飞腾、海光、兆芯、鲲鹏等芯片的完善支持。在Anolis OS的安装包里同时包含RHCK和ANCK内核,在ISO安装过程选择内核版本,缺省情况下默认安装RHCK版本。OpenAnolis 龙蜥社区推荐对 Linux 内核上游社区新功能有强烈的使用需求,或对于国产化芯片有使用需求的用户使用 ANCK 内核,以满足更多样化的业务需求。除随 ISO 镜像默认搭载之外,Anolis OS YUM 源中会持续提供新版本的 ANCK 供用户下载。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
为了避免 RHCK 用户误操作升级为 ANCK,Anolis OS 内置了 ANCK REPO 源但是默认不打开。用户在安装 ANCK 前需要手工打开对应仓库。执行下列命令,打开 Plus 仓库并同时安装稳定版 ANCK-4.19 内核:

sudo yum install kernel —enablerepo=Plus

Anolis OS生命周期:

对于 Anolis OS 7 来说,当前只提供维护支持,结束支持的日期为 2024 年 6 月 30 日;
对于 Anolis OS 8 来说,分别提供5年的开发支持周期和5年的维护支持周期。结束支持的日期为 2031 年 6 月 30 日。
在这里插入图片描述

在这里插入图片描述

大云企业操作系统(BC-Linux)是苏研基于开源社区,通过定制化手段并结合业务特点研发的企业级Linux操作系统。BC-Linux于2016年正式商用,进入中国移动操作系统集采名单,目前在中国移动集团、省/专业公司以及多个外部单位的项目中得到大量应用,累计部署规模超过4万套。这也是我们本次改造中商业版的首选。

在这里插入图片描述
BC-Linux8.x大云企业操作系统:BC-Linux操作系统是中国移动自主研发、基于openAnolis龙蜥社区,通过定制化手段研发的企业级 Linux 操作系统,在系统的性能、稳定性、关键工具和安全性方面都做了深度优化和增强,具有高可用、高安全、高稳定等商业发行版本特点。 BC-Linux V8.2是基于龙蜥社区Anolis OS 8.2版本深度定制的X86服务器通用版操作系统,与RHEL 8、CentOS 8软硬件生态100%兼容。BC-Linux V8.2版本搭载了双内核,分别为标准内核4.19和BEK(BigCloud Enterprise Kernel)内核5.10,其中,BEK内核基于内核社区长期支持版本5.10进行定制化开发及增强,满足客户对于高版本内核的使用需求,同时支持默认内核4.19版本,满足多场景需求;支持TCP层跟踪功能、离线调度算法、KATA安全容器、OS迁移工具、自动化部署工具等,在系统的性能、稳定性和安全性方面都做了深度优化和特性增强,具有高可用、高安全、高稳定等商业发行版本特点。目前最新版已更新到BC-Linux8.6。bclinux提供对ML内核(mainline)及LT内核(longterm)的支持,并定期维护更新。据了解,目前BC-Linux V-num系列已完成与 RHEL 8、CentOS 8 软硬件生态 100% 兼容,同时搭载双内核,支持 TCP 层跟踪功能、离线调度算法、KATA 安全容器、OS 迁移工具、自动化部署工具等,具有高可用、高安全、高稳定等商业发行版本特点。
在这里插入图片描述

:BC-linux 龙蜥版,可修改/etc/yum/pluginconf.d/license-manager.conf 文件,将enable调整为0,即可绕过yum更新的验证码激活。移动云镜像站;当然,移动云也发布了BC-Linux for Euler产品迁移方案参考

在这里插入图片描述
BC-Linux产品系统架构图如下:
在这里插入图片描述
BC-Linux 8与BC-Linux 7系列主要区别:

在这里插入图片描述
BC-Linux EOL(生命周期):

在这里插入图片描述

2.1、开源版OS

在这里插入图片描述
1)Open Anolis(龙蜥操作系统)社区版

    龙蜥操作系统(Anolis OS) 8 是 OpenAnolis 龙蜥社区发行的开源Linux发行版,支持x86_64 和aarch64多计算架构,搭载多内核RHCK(RHEL Compatible Kernel)和ANCK(OpenAnolis Cloud Kernel),提供稳定、高性能、安全、可靠的操作系统支持。Anolis OS 8.6 是 Anolis OS 8 发布的的第三个小版本。官方显示最新稳定版为Anolis OS8.6GA(general availability稳定版);另同时发布Anolis OS 8.6 QU1(优选更新(Quality Updates)版本),一般推荐所有用户下载并升级到该版本。QU版本是基于特定小版本发布的增量更新版本,发布不定期。在优选更新版本中,通常会更新下列内容:

● ANCK 的最新版本;
● 包含最新的安全漏洞修复(ANSA)的软件包;
● OpenAnolis 社区推荐的其他必要的缺陷修复和功能增强。

相关资源:社区地址Anolis OS 8用户手册Anolis OS 8.6 发行声明产品Bug跟踪邮件列表安装指导CentOS 7迁移Anolis OS 7手册CentOS 7迁移Anolis OS 8手册龙蜥 GiteeAnolis 运维工具集

<1> 龙蜥地位
在这里插入图片描述

龙蜥社区( OpenAnolis )成立于 2020 年 9 月,由阿里云、ARM、统信软件、龙芯、飞腾、中科方德、Intel 、三大运营商、主流芯片厂商等 21 家国内外头部企业共同成立龙蜥社区理事会,OpenAnolis 是由阿里云公司、统信软件联合发起成立理事会。到目前有超过 280 家合作伙伴参与共建,是国内领先的操作系统开源社区,具备较为领先的产业和技术影响力。目前,龙蜥操作系统下载量已超240万,整体装机量达500多万,100余款企业产品完成与龙蜥操作系统的适配。同时,统信软件、中科方德、中国移动云、麒麟软件、中标软件、凝思软件、浪潮信息、新支点、阿里云基于龙蜥开源操作系统推出各自商业版本及产品,在政务、金融、交通、通信等领域累计服务用户超过30万。Anolis 围绕芯片、内核、编译器、安全、虚拟化及云原生等操作系统核心领域进行技术创新,已发布龙蜥 Anolis OS 7、Anolis OS 8.x 系列、Anolis OS 23 预览版、Lifsea OS 等多个社区版本,为应对 CentOS 停服,官网已上线「CentOS 停服专区」为用户提供迁移方案及长期稳定支持,目标:致力于成为 CentOS 的最佳替代,并实现对 CentOS 8 系统的生态100% 兼容

龙蜥社区(OpenAnolis)持续在编程语言(编译器,Java 虚拟机)、容器、轻量级虚拟化、内核资源隔离、云原生Java,内核,运行环境,编程范式、安全可靠(国密软件栈、机密计算)、高性能计算、存储、网络、软硬一体系统优化等基础软件领域孵化技术创新;将持续坚持开放原则兼容广泛的硬件芯片支持,推动软硬一体的双螺旋演进。具备很好的延展性构建云、边、端的统一操作系统底座,拓展丰富的端侧应用场景,通过边缘部署来连接云和端,推动云、边、端的协同、一体发展,持续推动在多场景融合上的技术创新引领。

阿里云为也基于龙蜥社区(OpenAnolis)的龙蜥操作系统(Anolis OS)打造了操作系统发行版——Alibaba Cloud Linux 。在经过充分实践后, Alibaba Cloud Linux 已实现在全面兼容 RHEL/CentOS 生态的同时也为云上应用程序环境提供 Linux 社区的最新增强功能,并且针对阿里云基础设施做了深度的优化,为用户提供最佳的云上操作系统体验。

RHCK内核: 在版本上完全与 CentOS 7/8 保持一致,即 Anolis OS 7 系列保持 3.10.0 版本内核, Anolis OS 8 系列保持 4.18.0 版本内核。内核小版本间的 kABI 兼容性也遵循 CentOS 7/8 小版本的兼容性原则。OpenAnolis 龙蜥社区推荐对 CentOS 业务存续度和平滑过渡要求较为严苛、且对国产化芯片无使用需求的用户使用 RHCK 内核,以获得更好的使用延续体验;

ANCK 内核:当前有两个版本,4.19.91 系列,以及 5.10.y 系列。其中5.10.y 系列的代码迭代更为频繁,且在 Anolis OS 仓库中仅作为试验性用途提供。整体 ANCK 不提供小版本间的 kABI 兼容性承诺,基于此,ANCK 在特性迭代和功能增强上具备更高的自由度,且提供了更完善的国产化芯片支持。

<2> OS 替代迁移支持

关于CentOS 停服专区,社区提供了基于龙蜥开源社区能力开发出的 CentOS 停服迁移整体解决方案 AOMS(Anolis os Migration Solutions),也有多款与之配套的工具(包括适配客户场景的迁移工具、性能调优工具和软硬件兼容性验证平台等),龙蜥操作系统全面兼容CentOS生态,并且遵循操作系统的主要兼容性规范,方便 CentOS 用户平滑迁移到龙蜥操作系统(Anolis OS)。尤其centos8已停服,如果暂还未确认迁移计划,可临时将YUM源切换到龙蜥社区安全接管源,便可以继续获得安全更新服务。

行业案例:浙江移动完成了基于龙蜥打造的商业版操作系统(统信UOS)在多领域的部署,是通信行业内首次完成龙蜥社区(OpenAnolis)版本操作系统在核心系统应用及数据库的投产。另外,移动云为应对CentOS停服危机,已与龙蜥社区开展深入合作,发布基于Anolis OS的定制版本,依托龙蜥社区能力优势,为移动云用户打造了应对CentOS停服的平滑迁移方案。移动云也将持续致力于积极参与和贡献龙蜥社区,共建开源、创新、开放和可控的操作系统底座,推动软硬件应用生态繁荣发展。

AOMS 提供的迁移评估工具通过扫描获取待迁移系统信息,并与目标系统Anolis OS进行对比,输出兼容性评估报告,用户可根据兼容性评估报告来评估迁移风险和制定迁移方案。迁移评估主要包含业务评估和OS评估。
在这里插入图片描述
对于软硬件兼容性,目前社区已成立硬件兼容性和软件兼容性组织(SIG),负责兼容测试流程规范制定、测试工具研发、社区兼容性测试验证平台服务,降低兼容适配成本,引导软硬件兼容性生态建设与繁荣,推动社区技术在合作伙伴的场景应用和商业解决方案上落地。

目前,社区商业版和社区版已在政务、金融、交通、能源、电信等行业开展迁移验证工作,已经完成了典型的成功案例,总体迁移情况较顺利。应用经过长时间上线运行,系统稳定满足业务需求。

迁移工具:

1、CentOS 迁移 Anolis OS,该工具支持迁移CentOS Linux 7和8,不支持CentOS Stream。,另外迁移使用的底层工具还都是基于redhat的leapp,它包含了迁移评估,迁移实施,配置还原等步骤,用于实现 CentOS 7 到 Anolis OS 8 的就地迁移。另兆一迁移过程依赖于 yum/dnf,更多参看 centos2anolis
2、硬件兼容性测试工具:ancert
3、调优工具:KeenTune
4、操作系统差异分析工具:osdiff,对比两个OS里面rpm包的差异,可进行全量,列表,单包对比,结果以html格式进行展示
5、依赖分析检测工具:software-analysis-tools
6、质量保证平台:TestFarmT-Oneanolis-sys-tests是针对Anolis OS的系统功能测试集;
7、安全检测:Dependency-Check是非营利组织OWASP开源的的一款软件组成分析(SCA, Software Composition Analysis)工具,它通过扫描项目软件包结构、依赖配置文件提取依赖组件的厂商、名称、版本信息,然后通过与美国NVD开放漏洞库数据进行匹配,如果匹配成功则认为存在漏洞。目前工具已支持的扫描应用类型有Java&.NET、Python、PHP(comoser)、Ruby、Node.js、CocoaPods、Swift Package Manager。

<3> 运维保障

Linux 社区存在大量的运维管理工具、监控工具、诊断工具,但是工具碎片化严重,单个工具解决单个场景问题,需要用户花费大量时间研究该工具才能使用,没有统一的平台为用户提供好的操作系统运维体验。操作系统作为非常底层的基础设施,运维难度大,宕机问题、内存问题、网络问题等各类疑难问题的分析都需要非常专业的操作系统知识,对于一般运维人员入门门槛过高。统信软件作为Linux发行版提供商,也遇到了类似的问题,对大规模运维管理平台有很多需求。龙蜥社区系统运维SIG在融入了 SIG (Special Interest Group特别兴趣小组)成员的成功商用运维实践经验,和统信一起打造一站式操作系统运维平台 SysOM (System Operation&Maintenance) ,能够帮助用户在统一平台上实现主机管理、系统监控、异常诊断、日志审计、安全管控等复杂操作系统管理。其中,SysOM 的安全中心,也是统信软件贡献的主要成果,如今 SysOM 已经对外正式开源。其中SysOm提供了一个运维工具(System Analyse Kit)SysAK;详情更多参看官方运维工具说明

2)欧拉社区
在这里插入图片描述

openEuler 是由华为公司、统信软件、中科院软件所、三大运营商和百度公司等联合组建理事会。它的目标是构建统一和开放的操作系统,推动软硬件应用生态繁荣发展,并没有声称队centos及其生态完全兼容;详情参看欧拉社区开放原子开源基金会

:openEuler只支持深度(deepin)的DDE和优麒麟的UKUI的桌面环境,安装了桌面环境会导致升级失败。如果安装了图形界面,迁移之前先移除图形界面!相关经验及官方工具说明来看,直接迁移至openEuler-22.03-LTS-SP2会发现某些场景下有兼容性问题,强烈建议先迁移至openEuler-20.03-LTS-SP3之后再迁移至openEuler-22.03-LTS-SP2(2步走)。另外,升级还可能会导致ssh的root用户无法登陆、网卡名称发生改变、引导丢失无法开机等问题,提前做好相关备份。

3)统信OS:UOS

统信积极投入两个社区建设,也基于2哥社区构建了自己的系统兼容性,目前官网显示版本为统信服务器操作系统V20,它支持主流 CPU 架构(AMD64/ARM64/ MIPS64/SW64/LoongArch)并通过了操作系统安全技术要求四级评测(GB/T 20272-2019);UOS v20是面向服务器端运行环境的,是一款用于构建信息化基础设施环境的平台级软件,产品主要面向于我国党政军、企事业单位、教育机构,以及普通的企业型用户。为方便地使用中国操作系统应对CentOS停更的挑战,统信软件还为广大中国用户及合作伙伴提供统信UOS服务器操作系统的免费使用授权!用户可无限制体验统信服务器UOS的产品功能,当然服务器(免费使用授权,一般只推荐应用于非核心业务系统)可通过购买授权或订阅升级到商业版。更多详情参见统信服务器操作系统V20说明

在这里插入图片描述

UOS还支持针对Windows7停服国产化替换,对此官方给出5种解决方案,详情参看:统信彩虹平台迁移方案

在这里插入图片描述
与CentOS不一样的是, CentOS是下游社区衍生版,而使用免费授权UOS,切换商业版用户无需重新安装,只需要通过激活模块升级即可。

在这里插入图片描述
4)国外社区
在这里插入图片描述

CentOS 官网正式宣布停止维护 CentOS Linux后, CentOS 联合创始人 Gregory Kurtzer 创建的 CentOS 发行版: Rocky Linux,旨在继承 CentOS 的社区属性。另外,还有一个发行版 AlmaLinux,AlmaLinux 背后没有母公司,它是 100% 由社区拥有和管理的。AlmaLinux 操作系统基金会是一个非营利组织。它的创建是为了将操作系统的所有权、知识产权和项目的方向交到社区手中。从安全角度考虑,AlmaLinux 优先级要高于RockyLinux。

5)openharmony(鸿蒙社区):用于替代windows,开源遵循Apache License V2.0协议;
在这里插入图片描述
相关资源:社区学习penharmony

在这里插入图片描述
在这里插入图片描述

三、迁移中转主机OS准备

3.1、内网环境Ftp Yum源创建

1)上传商业版BCLinux 8.6或社区版Anolis 8.6 镜像到目标主机

2)部署配置FTP服务:(简单点可直接跳到第3步)

#环境准备
systemctl is-active firewalld.service
systemctl status firewalld.service
firewall-cmd --state
systemctl stop firewalld.service
systemctl disable firewalld
firewall-cmd --zone=public --add-port=21/tcp --permanent
firewall-cmd --reload
getenforce
sed -r -i '/^SELINUX=/c\SELINUX=disabled' /etc/selinux/config
firewall-cmd --get-zones ##列出支持的zone
firewall-cmd --get-services ##列出支持的服务,在列表中的服务是放行的
firewall-cmd --query-service ftp ##查看ftp服务是否支持,返回yes或者no
firewall-cmd --add-service=ftp ##临时开放ftp服务
firewall-cmd --add-service=ftp --permanent ##永久开放ftp服务
firewall-cmd --remove-service=ftp --permanent ##永久移除ftp服务
man firewall-cmd ##查看帮助
#CentOS 7.0默认使用的是firewall作为防火墙,使用iptables必须停止firewall服务,启用iptables
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
yum -y install iptables-services
vi /etc/sysconfig/iptables   #增加规则
-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
或:iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
systemctl restart iptables.service #重启防火墙使配置生效
systemctl enable iptables.service #设置防火墙开机启动

#服务部署
yum -y install vsftpd
……
Running transaction
  Installing : vsftpd-3.0.2-25.el7.x86_64                                                                                                        1/1 
  Verifying  : vsftpd-3.0.2-25.el7.x86_64                                                                                                        1/1 

Installed:
  vsftpd.x86_64 0:3.0.2-25.el7                                                                                                                       

Complete!

systemctl enable vsftpd

#配置Ftp,如果需要针对不同部门人员配置ftp的话,需创建虚拟用户映射的本地账号,比如:
useradd -s /sbin/nologin -d /var/tmp/vuser yum

#为不同部门配置ftp根目录
mkdir /var/tmp/vuser/dp1
mkdir /var/tmp/vuser/dp2
mkdir /var/tmp/vuser/dp2
mkdir /var/tmp/vuser/dp2
chmod 700 /var/tmp/vuser/*
chown -R yum.yum /var/tmp/vuser

#服务配置
vim /etc/vsftpd/vsftpd.conf  #参照如下
listen_port=21 #默认是21,可按需修改
anonymous_enable=YES  #启用匿名用户
no_anon_password=YES   #匿名用户login时不询问口令
local_enable=YES		#是否允许linux用户登录

write_enable=YES #全局设置,是否容许写入(无论是匿名用户还是本地用户,要启用上传权限,就要开启)
local_umask=022  #指定系统用户上传文件的默认权限,即755
#local_root=/ftp:非匿名用户登录的时候所在目录,默认是自己的家目录;此时是不禁锢用户的,用户可以随意切换目录,通过配合"guest_enable、guest_username"两个选项,可实现将所有非匿名用户禁锢在特定的明目下;设置的默认登录的目录,要保证该用户对该目录有"x"权限。如果有"w"权限,是禁止用户登录的;匿名用户上传数据,不仅需要文件系统上对该目录有"w"权限,还需要ftp服务开启允许匿名上传的功能。而系统用户,只要保证对该目录有"w"权限即可上传文件。

chroot_local_user=YES  #默认NO,不禁锢,YES禁锢系统用户,即系统用户不允许chroot,将所有用户限定在主目录内;禁锢用户的目录,要保证该用户没有"w"权限。而没有写权限,就没有办法上传文件,可以在禁锢的目录下,新建一个目录,给该用户"w"权限,这样他就就可以上传文件到自己目录了。匿名用户本身就是禁锢的;配合“例外列表”的chroot_list_file可实现那些“不会被限制在主目录下”的用户。 
chroot_list_enable=YES  #启用“例外”清单,作为上面的补充部分,这里表不禁锢list_file中特定的系统用户在家目录中,与上面设置功能相反:YES时,则chroot_list中用户不禁锢,NO时则chroot_list中用户禁锢;单独使用该选项,即chroot_local_user未启用,chroot_list_enable启用后在chroot_list_file之中的使用者不能chroot更改主目录;默认情况下,包含此列表的文件是/etc/vsftpd/chroot_list,但可以使用chroot_list_file设置覆盖它。
chroot_list_file=/etc/vsftpd/chroot_list #指定限制的用户文件
ls_recurse_enable=YES   #YES,允许执行“ls –R”这个命令,默认值为NO。
listen=YES  #默认就是"yes",以独立服务运行;
listen_ipv6=NO

#虚拟用户安全配置,虚拟用户使用PAM方式认证
pam_service_name=vsftpd #设置PAM使用的名称,默认值为/etc/pam.d/vsftpd
userlist_enable=YES #是否启用控制用户登录的列表文件,结合userlist_deny=YES:(默认值)黑名单,不提示口令,NO为白名单;userlist_file=/etc/vsftpd/users_list:此为默认值;使用
guest_enable=YES  ##启用虚拟用户。默认值为NO。
guest_username=yum  ##用来映射虚拟用户的本地账户。默认值为ftp。
virtual_use_local_privs=NO #当该参数激活(YES)时,虚拟用户使用与本地用户相同的权限。 #当此参数关闭(NO)时,虚拟用户使用与匿名用户相同的权限。默认情况下此参数是关闭的(NO)。
user_config_dir=/etc/vsftpd/vconf.d/ #虚拟用户的服务配置,用来实现不同用户不同权限。#在vsftpd.conf文件中加入这一句, #在相应的目录里面,为每个用户创建自己的配置文件,用来实现不同的权限

tcp_wrappers=YES #指示是否与tcp wrapper相结合来进行主机的访问控制。默认值为YES。如果启用,则vsftpd服务器会检查/etc/hosts.allow 和/etc/hosts.deny 中的设置,来决定请求连接的主机,是否允许访问该FTP服务器。格式参考:
#vsftpd:192.168.1.
#vsftpd:192.168.1.12
#vsftpd:192.168.1.0/255.255.255.0这里不能写成192.168.1.0/24

#控制这文件和文件夹的上传、下载、创建、删除和重命名。
anon_upload_enable=(yes/no)#控制匿名用户对文件(非目录)上传权限。
anon_world_readable_only=(yes/no); #控制匿名用户对文件的下载权限
anon_mkdir_write_enable=(yes/no); #控制匿名用户对文件夹的创建权限
anon_other_write_enable=(yes/no); #控制匿名用户对文件和文件夹的删除和重命名

#匿名用户下载是使用的是nobody这个用户,所以相应的O这个位置要有R权限才能被下载。若想让匿名用户能上传和删除权限,必需设置
anon_root=/var/ftp #匿名用户主目录,即登录后的目录
anon_max_rate=(0) #匿名用户速度限制
anon_umask=(077) #匿名用户上传文件时有掩码(若想让匿名用户上传的文件能直接被匿名下载,就这设置这里为073).077表允许新建文件或目录权限

chown_uploads=YES #所有匿名上传的文件的所属用户将会被更改成chown_username
chown_username=whoever #匿设置匿名用户上传的文档的属主名。只有chown_uploads=YES时才有效。建议不要设置为root用户。 系统默root
allow_writeable_chroot=YES #vsftpd从2.3.5版本之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了!如果检查发现还有写权限,会报错误:500 OOPS: vsftpd: refusing to run with writable root inside chroot()
text_userdb_names=NO  #设置在执行ls命令时,是显示UID、GID还是显示出具体的用户名或组名称。默认为NO,以UID和GID方式显示,若希望显示用户名和组名称,则设置为YES。
#控制用户访问:
#vsftpd.ftpusers  #用于保存不允许进行FTP登录的本地用户帐号。就是vsftp用户的黑名单
#vsftpd.user_list 
#(1)设置禁止vsftpd.user_list文件中的用户登录:要在主配置文件vsftpd.conf中修改如下两项,
userlist_enable=yes
userl
  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
在Java中,泛型是一种强类型机制,它可以让你在编译时检查类型错误,从而提高代码的安全性和可读性。在使用泛型时,我们经常会遇到父类和子类的泛型转换问题。 首先,我们需要明确一点:子类泛型不能转换成父类泛型。这是因为Java中的泛型是不协变的。例如,如果有一个类A和它的子类B,那么List<A>和List<B>之间是不存在继承关系的。 下面我们来看一个例子: ```java public class Animal { //... } public class Dog extends Animal { //... } public class Test { public static void main(String[] args) { List<Animal> list1 = new ArrayList<>(); List<Dog> list2 = new ArrayList<>(); list1 = list2; // 编译错误 } } ``` 在这个例子中,我们定义了Animal类和它的子类Dog。然后我们定义了两个List,分别是List<Animal>和List<Dog>。如果将List<Dog>赋值给List<Animal>,会出现编译错误。这是因为List<Animal>和List<Dog>之间不存在继承关系。 那么,如果我们想要让子类泛型转换成父类泛型,应该怎么办呢?这时我们可以使用通配符来解决问题。通配符可以表示任意类型,包括父类和子类。例如,我们可以将List<Dog>赋值给List<? extends Animal>,这样就可以实现子类泛型转换成父类泛型了。 下面我们来看一个使用通配符的例子: ```java public class Animal { //... } public class Dog extends Animal { //... } public class Test { public static void main(String[] args) { List<Animal> list1 = new ArrayList<>(); List<Dog> list2 = new ArrayList<>(); list1 = list2; // 编译错误 List<? extends Animal> list3 = new ArrayList<>(); list3 = list2; // 正确 } } ``` 在这个例子中,我们定义了List<? extends Animal>来表示任意继承自Animal的类型。然后我们将List<Dog>赋值给List<? extends Animal>,这样就可以实现子类泛型转换成父类泛型了。 总结一下,Java中的泛型是不协变的,子类泛型不能转换成父类泛型。如果需要实现子类泛型转换成父类泛型,可以使用通配符来解决问题。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

羌俊恩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值