选择 FreeBSD 而不是 Linux 的技术性原因3
选择 FreeBSD 而不是 Linux 的技术性原因3
jail
FreeBSD Jails 系统是另一个惊人的工程壮举。
在 2000 年 3 月 14 日的 4.0 版本中,FreeBSD 引入了 jails 系统。
FreeBSD jail 是一种操作系统级的虚拟化,它允许您将一个 FreeBSD 衍生的系统安装到多个独立的迷你系统中,称为 jails 。运行在 jail 中的系统共享相同的内核和系统资源,因此开销非常小。
对 FreeBSD jails 的需求来自于一个小型共享环境主机提供商 (R&D Associates, Inc.的所有者,Derrick T. Woolworth)的愿望,即在他们自己的服务和客户的服务之间建立一个干净、清晰的分离,主要是为了安全和便于管理。解决方案(由 Poul-Henning Kamp 开发)不是增加一层新的细粒度配置选项,而是对系统进行分门别类,包括其文件和资源,只有合适的人才能访问合适的分门别类。
通过 jail,可以创建各种虚拟机,每个虚拟机都有自己的一套实用程序和自己的配置。这使得它成为一种安全的试用软件的方式。例如,可以在不同的 jail 中运行不同版本或尝试不同配置的 web 服务器包。而且由于 jail 限定在一个狭小的范围内,所以一个错误的配置或错误的影响(即使是 jail 内的超级用户所做的)也不会危害到系统其他部分的完整性。由于在 jail 外实际上没有任何东西被修改,"变化 "可以通过删除 jail 的目录树副本而被丢弃。
然而 FreeBSD jail 并没有实现真正的虚拟化; 它不允许虚拟机运行不同于基本系统的内核版本。
FreeBSD jail 是提高服务器安全性的有效方法,因为 jail 环境与系统的其他部分(其他 jail 和基本系统)是分离的。
如果您想更好地了解 FreeBSD jail 和 Linux 容器之间的区别,请阅读博客文章 Setting the Record Straight: containers vs. Zones vs. Jails vs. VMs 。
FreeBSD 有 iocage 工具,它被设计用来简化 jail 管理任务。它将运行 VNET 或共享 IP 网络的 ZFS 支持的 jail 的管理抽象化。
Bastille
Bastille 是一个开源系统,用于在 FreeBSD 上自动部署和管理容器化应用程序。
Bastille 使用 FreeBSD jails 作为容器平台,并加入了模板自动化,以创建一个类似于 Docker 的容器化软件集合。
模板负责安装、配置、启用和启动软件,为构建容器化堆栈提供了一种自动化的方式。
Capsicum
Capsicum 是剑桥大学计算机实验室开发的一个沙盒框架,得到了 Google 、FreeBSD 基金会和 DARPA 的支持。Capsicum 扩展了 POSIX API,提供了一些新的操作系统基元,以支持类似 UNIX 操作系统上的对象能力安全。
Capabilities - 具有细粒度权限的精炼文件描述符
能力模式--拒绝访问全局命名空间的进程沙盒。
流程描述符--以能力为中心的流程 ID 替换
匿名共享内存对象--POSIX 共享内存 API 的扩展,支持与文件描述符相关的匿名交换对象(能力)。
rtld-elf-cap - 修改 ELF 运行时链接器,以构建沙盒应用。
libcapsicum - 用于创建和使用功能和沙盒组件的库。
libuserangel - 允许沙盒应用程序或组件与用户天使(如 Power Boxes )交互的库。
chromium-capsicum - Google 的 Chromium 网页浏览器的一个版本,它使用能力模式和能力来为高风险的网页渲染提供有效的沙盒。
Capsicum 的 FreeBSD 实现,由 Robert Watson 和 Jonathan Anderson 开发,在 FreeBSD 10.0 中开箱即用。Capsicum for FreeBSD 是一个参考实现,它不仅可以作为 Capsicum API 和语义的参考,而且还为移植到其他平台提供了起点源代码 (例如,Capsicum for Linux 和 Capsicum for DragonFlyBSD)。
DTrace
DTrace 是一个从 Solaris 移植过来的综合性动态跟踪框架。DTrace 提供了一个强大的基础架构,允许管理员、开发人员和服务人员简明扼要地回答有关操作系统和用户程序行为的任意问题。
DTrace 可以提供正在运行的系统的全局概览,例如活动进程所使用的内存量、CPU 时间、文件系统和网络资源。DTrace 还可以提供细粒度的信息,如调用特定函数的参数日志,或访问特定文件的进程列表。
有关 DTrace 使用的更多信息,请参阅 DTrace 单行本教程和 DTrace 示例。
在 Hacker News 上也有一个有趣的讨论,其中有许多关于 DTrace for Linux 的相关评论。
bhyve
bhyve 是一个原生的 FreeBSD 虚拟机管理程序,它可以在虚拟机中运行客体操作系统。可以通过命令行参数来指定虚拟 CPU 的数量、客体内存的数量和 I/O 连接等参数。
bhyve 支持多种客体操作系统的虚拟化,包括 FreeBSD 9+、OpenBSD 、NetBSD 、Linux 、illumos 、DragonFly 、Windows Vista 及更高版本和 Windows Server 2008 及更高版本。目前的开发工作旨在扩大对 x86-64 架构的其他操作系统的支持。
bhyve 管理程序在 FreeBSD 10.0-RELEASE 中成为基础系统的一部分。
bhyve 要求处理器支持 Intel Extended Page Tables (EPT) 或 AMD Rapid Virtualization Indexing (RVI) 或 Nested Page Tables (NPT)。使用多于一个 vCPU 的 Linux 客座或 FreeBSD 客座,需要 VMX 无限制模式支持( UG )。较新的处理器,特别是英特尔酷睿 i3/i5/i7 和英特尔至强 E3/E5/E7,支持这些功能。UG 支持是随着英特尔的 Westmere 微架构引入的。
防火墙
FreeBSD 的基本系统中内置了三种不同的防火墙。PF, IPFW, 和 IPFILTER, 也就是 IPF.
从 FreeBSD 5.3 开始,OpenBSD 的 PF 防火墙被移植到了基本系统中。PF 是一个完整的、全功能的防火墙,它可以选择支持 ALTQ (Alternate Queuing),提供服务质量 (QoS)。PF 的过滤语法与 IPF 类似,但做了一些修改,使其更加清晰。网络地址转换( NAT )和服务质量( QoS )已经集成到 PF 中,QoS 通过导入 ALTQ 排队软件,并与 PF 的配置联系起来。此外,还扩展了 PF 的功能,如用于故障转移和冗余的 pfsync 和 CARP,用于会话认证的 authpf,以及用于缓解防火墙困难的 FTP 协议的 ftp-proxy 等。同时,PF 还支持 SMP (对称多处理)&STO (状态跟踪选项)。
PF 的日志记录是众多创新功能之一。PF 的日志记录是可以在 pf.conf 中按规则配置的,日志由 PF 通过一个名为 pflog 的伪网络接口提供,这是用户级程序从内核级模式中提取数据的唯一方式。日志可以使用标准的实用程序(如 tcpdump )来监控。
IPFW 是为 FreeBSD 编写的状态防火墙,它同时支持 IPv4 和 IPv6 。它由以下几个组件组成: 内核防火墙过滤规则处理器及其集成的数据包统计工具、日志记录工具、NAT 、dummynet 流量转换工具、转发工具、桥接工具和 ipstealth 工具。
FreeBSD 在 /etc/rc.firewall 中提供了一个示例规则集,它定义了几种常见场景下的防火墙类型,以帮助新手用户生成合适的规则集。IPFW 提供了强大的语法,高级用户可以使用它来制作满足特定环境安全要求的自定义规则集。
IPF 是一个跨平台的开源防火墙,已经被移植到多个操作系统上,包括 FreeBSD 、NetBSD 、OpenBSD 和 Solaris 。IPF 是一个内核侧的防火墙和 NAT 机制,可以被用户国程序控制和监控。防火墙规则可以用 ipf 设置或删除,NAT 规则可以用 ipnat 设置或删除,IPF 内核部分的运行时统计可以用 ipfstat 打印,ipmon 可以用来将 IPF 的操作记录到系统日志文件中。
IPF 最初是采用 "最后匹配的规则获胜 "的规则处理逻辑编写的,只使用无状态规则。此后,IPF 得到了增强,加入了快速和保持状态选项。
调整
FreeBSD 有超过五百个系统变量可以通过 sysctl 工具来读取和设置。这些系统变量可以用来对运行中的 FreeBSD 系统进行修改,其中包括 TCP/IP 协议栈和虚拟内存系统的许多高级选项。这其中包括许多 TCP/IP 协议栈和虚拟内存系统的高级选项,对于有经验的系统管理员来说,这些选项可以显著地提高系统的性能。
GEOM
FreeBSD GEOM 是 FreeBSD 操作系统的主要存储框架。它提供了一种标准化的方式来访问存储层。GEOM 是模块化的,允许 GEOM 模块连接到框架中。例如,geom_mirror 模块为系统提供了 RAID1 或镜像功能。目前已经有很多模块可以使用,而且 FreeBSD 的各个开发者也一直在积极开发新的模块。
由于 GEOM 的模块化设计,模块可以堆叠在一起,形成一个 GEOM 层链。例如,在 geom_mirror 模块的基础上,可以添加一个加密模块,如 geom_eli 来提供一个镜像和加密的卷。每个模块都有消费者和提供者。提供者是 geom 模块的源头,通常是一个物理硬盘,但有时也是一个虚拟化的磁盘,如内存盘。geom 模块又提供一个输出设备。其他 GEOM 模块,也就是所谓的消费者,可以使用这个提供者来创建一个相互连接的模块链。
选择 FreeBSD 而不是 Linux 的技术性原因3的更多相关文章
- 选择 FreeBSD 而不是 Linux 的技术性原因4
Linux 二进制兼容性 FreeBSD 提供了与 Linux 的二进制兼容.这使得用户可以在 FreeBSD 系统上安装和运行许多 Linux 二进制文件, 而无需首先修改二进制文件.在某些特定情况 ...
- 选择 FreeBSD 而不是 Linux 的技术性原因2
ZFSZFS 文件系统是 FreeBSD 上的一等公民.这不仅意味着可以在 ZFS 上安装根目录,安装程序也支持这一点,而且还意味着很多基础系统工具都已经紧密地集成或构建了对 ZFS 的支持.在 Fr ...
- 选择 FreeBSD 而不是 Linux 的技术性原因1
Ports FreeBSD Ports 是一个惊人的工程壮举.NetBSD 的 pkgsrc (package source) 和 OpenBSD 的 ports collection 都源于 Fre ...
- 【热文】 为什么很多硅谷工程师偏爱 OS X,而不是 Linux 或 Windows?
校对:伯乐在线 - 黄利民 链接: 1. Why do most of the developers in Silicon Valley prefer OS X over Linux or Windo ...
- 让 FreeBSD 和 Gentoo Linux 在 ZFS 存储卷上共存
自我回归到 Librem 15 已经有段时间了.我一般会选择 FreeBSD 来处理所有的事情,但有时会要访问一个运行在 Librem 平台上的 Linux OS,以便用它来帮助我对一些遗留的设备驱动 ...
- 企业开发中选择logback而不是log4j的理由
不知道看到这篇文章的Java工程师有没有考虑过这个问题:为什么在企业开发中会选择logback来记录日志,而不是log4j呢? 如果你以前没有考虑过这个问题,那么现在如果让你考虑一下,你可能觉的会是因 ...
- Effective C# 学习笔记(原则二:为你的常量选择readonly而不是const)
原则二.为你的常量选择readonly而不是const Prefer readonly to const 对于常量,C#里面有两个不同的版本:运行时常量(readonly)和编译时常量(co ...
- 优先选择nullptr而不是0和NULL
我们知道:0是一个int,而不是一个指针.如果C++在一个只有指针才能够使用的上下文中发现它只有一个0,那么它会勉强将0解释成空指针,但那时一种倒退行为.C++的主要方针是0就是一个int,而不是指针 ...
- 如何选择适合自己的Linux版本
如何选择适合自己的Linux版本: 1.Linux桌面系统,首选Ubuntu; 2.服务器端的Linux系统,首选RHEL或CentOS,这两种中首选CentOS,如果公司有钱,不在乎成本也可以选择R ...
随机推荐
- Jenkins管理员密码忘记修改操作
一.Jenkins管理员密码忘记 当jenkins忘记了管理用户的密码时,只能通过修改配置文件并重启的方式初始化设置用户名及密码,操作如下: [root@localhost jenkins]# vim ...
- HDU - 4725 The Shortest Path in Nya Graph 【拆点 + dijkstra】
This is a very easy problem, your task is just calculate el camino mas corto en un grafico, and just ...
- Leetcode(27)-移除元素
给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成 ...
- zsh & for loop bug
zsh & for loop bug for: command not found syntax error near unexpected token do' do' Unicode 编码 ...
- SVG in Action
SVG in Action HTML5 semantic HTML5 Semantic Elements / HTML5 Semantic Tags figure object <figure& ...
- Code Book All In One
Code Book All In One Jupyter Notebook Jupyter Lab https://jupyter.org/ Storybook https://storybook.j ...
- js with All In One
js with All In One 不推荐,要废弃 function f(x, o) { with (o) { console.log(x); } } function f(foo, values) ...
- C++算法代码——众数
好久没更新了-- 题目来自:http://218.5.5.242:9018/JudgeOnline/problem.php?id=1615 题目描述 N 个 1 到 30000 间无序数正整数,其中 ...
- AttributeError: 'function' object has no attribute 'as_view'
我的描述:当我启用jwt_required来进行token验证的时候,我提示错误; 解决方案: 修改前代码: 修改后代码: 多看书.多多了解.多看看世界...
- Jmeter beanshell编程实例
1.引言 BeanShell是一种小型的,免费的,可嵌入的符合Java语法规范的源代码解释器,具有对象脚本语言特性. 在Jmeter实践中,由于BeanShell组件较高的自由度,通常被用来处理较为复 ...