2017年3月

Linux 的 I/O 调度器是一个以块式 I/O 访问存储卷的进程,有时也叫磁盘调度器。Linux I/O 调度器的工作机制是控制块设备的请求队列:确定队列中哪些 I/O 的优先级更高以及何时下发 I/O 到块设备,以此来减少磁盘寻道时间,从而提高系统的吞吐量。

目前 Linux 上有如下几种 I/O 调度算法:

  1. noop - 通常用于内存存储的设备。
  2. cfq - 完全公平调度器。进程平均使用IO带宽。
  3. Deadline - 针对延迟的调度器,每一个 I/O,都有一个最晚执行时间。
  4. Anticipatory - 启发式调度,类似 Deadline 算法,但是引入预测机制提高性能。

查看设备当前的 I/O 调度器:

# cat /sys/block/<Disk_Name>/queue/scheduler

假设磁盘名称是 /dev/sdc

# cat /sys/block/sdc/queue/scheduler
noop anticipatory deadline [cfq]

如何改变硬盘设备 I/O 调度器

使用如下指令:

# echo {SCHEDULER-NAME} > /sys/block/<Disk_Name>/queue/scheduler

比如设置 noop 调度器:

# echo noop > /sys/block/sdc/queue/scheduler

以上设置重启后会失效,要想重启后配置仍生效,需要在内核启动参数中将 elevator=noop 写入 /boot/grub/menu.lst

1. 备份 menu.lst 文件

cp -p /boot/grub/menu.lst /boot/grub/menu.lst-backup

2. 更新 /boot/grub/menu.lst

elevator=noop 添加到文件末尾,比如:

kernel /vmlinuz-2.6.16.60-0.91.1-smp root=/dev/sysvg/root splash=silent splash=off showopts elevator=noop

via: http://linuxroutes.com/change-io-scheduler-linux/

作者:UX Techno 译者:honpey 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Linux 中的可选项似乎“无穷无尽”,因为每个人都可以通过修改一个已经发行的版本或者新的白手起家的版本 (LFS) 来构建 Linux。

关于 Linux 发行版的选择,我们关注的因素包括用户界面、文件系统、软件包分发、新的特性以及更新周期和可维护性等。

在这篇文章中,我们会讲到两个较为熟知的 Linux 发行版,实际上,更多的是介绍两者之间的不同,以及在哪些方面一方比另一方更好。

什么是 CentOS?

CentOS(Community Enterprise Operating System)是脱胎于 Red Hat Enterprise Linux (RHEL) 并与之兼容的由社区支持的克隆版 Linux 发行版,所以我们可以认为 CentOS 是 RHEL 的一个免费版。CentOS 的每一套发行版都有 10 年的维护期,每个新版本的释出周期为 2 年。在 2014 年 1 月 8 日,CentOS 声明正式加入红帽,为新的 CentOS 董事会所管理,但仍然保持与 RHEL 的独立性。

扩展阅读:如何安装 CentOS?

CentOS 的历史和第一次释出

CentOS 第一次释出是在 2004 年,当时名叫 cAOs Linux;它是由社区维护和管理的一套基于 RPM 的发行版。

CentOS 结合了包括 Debian、Red Hat Linux/Fedora 和 FreeBSD 等在内的许多方面,使其能够令服务器和集群稳定工作 3 到 5 年的时间。它有一群开源软件开发者作为拥趸,是一个大型组织(CAOS 基金会)的一部分。

在 2006 年 6 月,David Parsley 宣布由他开发的 TAO Linux(另一个 RHEL 克隆版本)退出历史舞台并全力转入 CentOS 的开发工作。不过,他的领域转移并不会影响之前的 TAO 用户, 因为他们可以通过使用 yum update 来更新系统以迁移到 CentOS。

2014 年 1 月,红帽开始赞助 CentOS 项目,并移交了所有权和商标。

CentOS 设计

确切地说,CentOS 是付费 RHEL (Red Had Enterprise Edition) 版本的克隆。RHEL 提供源码以供之后 CentOS 修改和变更(移除商标和 logo)并完善为最终的成品。

Ubuntu

Ubuntu 是一个基于 Debian 的 Linux 操作系统,应用于桌面、服务器、智能手机和平板电脑等多个领域。Ubuntu 是由一个英国的名为 Canonical Ltd. 的公司发行的,由南非的 Mark Shuttleworth 创立并赞助。

扩展阅读:安装完 Ubuntu 16.10 必须做的 10 件事

Ubuntu 的设计

Ubuntu 是一个在全世界的开发者共同努力下生成的开源发行版。在这些年的悉心经营下,Ubuntu 的界面变得越来越现代化和人性化,整个系统运行也更加流畅、安全,并且有成千上万的应用可供下载。

由于它是基于 Debian 的,因此它也支持 .deb 包、较新的包系统和更为安全的 snap 包格式 (snappy))。

这种新的打包系统允许分发的应用自带满足所需的依赖性。

扩展阅读:点评 Ubuntu 16.10 中的 Unity 8

CentOS 与 Ubuntu 的区别

  • Ubuntu 基于 Debian,CentOS 基于 RHEL;
  • Ubuntu 使用 .deb 和 .snap 的软件包,CentOS 使用 .rpm 和 flatpak 软件包;
  • Ubuntu 使用 apt 来更新,CentOS 使用 yum;
  • CentOS 看起来会更稳定,因为它不会像 Ubuntu 那样对包做常规性更新,但这并不意味着 Ubuntu 就不比 CentOS 安全;
  • Ubuntu 有更多的文档和免费的问题、信息支持;
  • Ubuntu 服务器版本在云服务和容器部署上的支持更多。

结论

不论你的选择如何,是 Ubuntu 还是 CentOS,两者都是非常优秀稳定的发行版。如果你想要一个发布周期更短的版本,那么就选 Ubuntu;如果你想要一个不经常变更包的版本,那么就选 CentOS。在下方留下的评论,说出你更钟爱哪一个吧!


via: http://www.linuxandubuntu.com/home/centos-vs-ubuntu

作者:linuxandubuntu.com 译者:Meditator-hkx 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

如果你正在使用 Enterprise Linux 发行版(Red Hat Enterprise Linux 或其衍生产品,如 CentOS 或 Scientific Linux),并且需要对特定硬件或新硬件支持,那么你找对地方了。

在本文中,我们将讨论如何启用 ELRepo 仓库,该软件源包含文件系统驱动以及网络摄像头驱动程序等等(支持显卡、网卡、声音设备甚至新内核

在 Enterprise Linux 中启用 ELRepo

虽然 ELRepo 是第三方仓库,但它有 Freenode(#elrepo)上的一个活跃社区以及用户邮件列表的良好支持。

如果你仍然对在软件源中添加一个独立的仓库表示担心,请注意 CentOS 已在它的 wiki(参见此处)将它列为是可靠的。如果你仍然有疑虑,请随时在评论中提问!

需要注意的是 ELRepo 不仅提供对 Enterprise Linux 7 提供支持,还支持以前的版本。考虑到 CentOS 5 在本月底(2017 年 3 月)结束支持(EOL),这可能看起来并不是一件很大的事,但请记住,CentOS 6 的 EOL 不会早于 2020 年 3 月之前。

不管你用的 EL 是何版本,在实际启用时需要先导入 GPG 密钥:

# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

在 EL5 中启用 ELRepo:

# rpm -Uvh http://www.elrepo.org/elrepo-release-5-5.el5.elrepo.noarch.rpm

在 EL6 中启用 ELRepo:

# rpm -Uvh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm

在 EL7 中启用 ELRepo:

# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

这篇文章只会覆盖 EL7,在接下来的小节中分享几个例子。

理解 ELRepo 频道

为了更好地组织仓库中的软件,ELRepo 共分为 4 个独立频道:

  • elrepo 是主频道,默认情况下启用。它不包含正式发行版中的包。
  • elrepo-extras 包含可以替代发行版提供的软件包。默认情况下不启用。为了避免混淆,当需要从该仓库中安装或更新软件包时,可以通过以下方式临时启用该频道(将软件包替换为实际软件包名称):# yum --enablerepo=elrepo-extras install package
  • elrepo-testing 提供将放入主频道中,但是仍在测试中的软件包。
  • elrepo-kernel 提供长期及稳定的主线内核,它们已经特别为 EL 配置过。

默认情况下,elrepo-testing 和 elrepo-kernel 都被禁用,如果我们需要从中安装或更新软件包,可以像 elrepo-extras 那样启用它们。

要列出每个频道中的可用软件包,请运行以下命令之一:

# yum --disablerepo="*" --enablerepo="elrepo" list available
# yum --disablerepo="*" --enablerepo="elrepo-extras" list available
# yum --disablerepo="*" --enablerepo="elrepo-testing" list available
# yum --disablerepo="*" --enablerepo="elrepo-kernel" list available

下面的图片说明了第一个例子:

List ELRepo Available Packages

列出 ELRepo 可用的软件包

总结

本篇文章中,我们已经解释 ELRepo 是什么,以及你从如何将它们添加到你的软件源。

如果你对本文有任何问题或意见,请随时在评论栏中联系我们。我们期待你的回音!


作者简介:

Gabriel Cánepa - 一位来自阿根廷圣路易斯梅塞德斯镇 (Villa Mercedes, San Luis, Argentina) 的 GNU/Linux 系统管理员,Web 开发者。就职于一家世界领先级的消费品公司,乐于在每天的工作中能使用 FOSS 工具来提高生产力。


via: http://www.tecmint.com/enable-elrepo-in-rhel-centos-scientific-linux/

作者:Gabriel Cánepa 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Kgif 是一个简单的 shell 脚本,它可以从活动窗口创建一个 GIF 文件。我觉得这个程序专门是为捕获终端活动设计的,我经常用于这个。

它将窗口的活动捕获为一系列的 PNG 图片,然后组合在一起创建一个GIF 动画。脚本以 0.5 秒的间隔截取活动窗口。如果你觉得这不符合你的要求,你可以根据你的需要修改脚本。

最初它是为了捕获 tty 输出以及创建 github 项目的预览图创建的。

确保你在运行 Kgif 之前已经安装了 scrot 和 ImageMagick 软件包。

推荐阅读:Peek - 在 Linux 中创建一个 GIF 动画录像机

什么是 ImageMagick?ImageMagick 是一个命令行工具,用于图像转换和编辑。它支持所有类型的图片格式(超过 200 种),如 PNG、JPEG、JPEG-2000、GIF、TIFF、DPX、EXR、WebP、Postscript、PDF 和 SVG。

什么是 Scrot?Scrot 代表 SCReenshOT,它是一个开源的命令行工具,用于捕获桌面、终端或特定窗口的屏幕截图。

安装依赖

Kgif 需要 scrot 以及 ImageMagick。

对于基于 Debian 的系统:

$ sudo apt-get install scrot imagemagick

对于基于 RHEL/CentOS 的系统:

$ sudo yum install scrot ImageMagick

对于 Fedora 系统:

$ sudo dnf install scrot ImageMagick

对于 openSUSE 系统:

$ sudo zypper install scrot ImageMagick

对于基于 Arch Linux 的系统:

$ sudo pacman -S scrot ImageMagick

安装 Kgif 及使用

安装 Kgif 并不困难,因为不需要安装。只需从开发者的 github 页面克隆源文件,你就可以运行 kgif.sh 文件来捕获活动窗口了。默认情况下它的延迟为 1 秒,你可以用 --delay 选项来修改延迟。最后,按下 Ctrl + c 来停止捕获。

$ git clone https://github.com/luminousmen/Kgif
$ cd Kgif
$ ./kgif.sh
Setting delay to 1 sec

Capturing...
^C
Stop capturing
Converting to gif...
Cleaning...
Done!

检查系统中是否已存在依赖。

$ ./kgif.sh --check
OK: found scrot
OK: found imagemagick

设置在 N 秒延迟后开始捕获。

$ ./kgif.sh --delay=5

Setting delay to 5 sec

Capturing...
^C
Stop capturing
Converting to gif...
Cleaning...
Done!

它会将文件保存为 terminal.gif,并且每次在生成新文件时都会覆盖。因此,我建议你添加 --filename 选项将文件保存为不同的文件名。

$ ./kgif.sh --delay=5 --filename=2g-test.gif

Setting delay to 5 sec

Capturing...
^C
Stop capturing
Converting to gif...
Cleaning...
Done!

使用 --noclean 选项保留 png 截图。

$ ./kgif.sh --delay=5 --noclean

要了解更多的选项:

$ ./kgif.sh --help

usage: ./kgif.sh [--delay] [--filename ] [--gifdelay] [--noclean] [--check] [-h]
  -h, --help                   Show this help, exit
      --check                  Check if all dependencies are installed, exit
      --delay=            Set delay in seconds to specify how long script will wait until start capturing.
      --gifdelay=         Set delay in seconds to specify how fast images appears in gif.
      --filename=   Set file name for output gif.
      --noclean                Set if you don't want to delete source *.png screenshots.

via: http://www.2daygeek.com/kgif-create-animated-gif-file-active-window-screen-recorder-capture-arch-linux-mint-fedora-ubuntu-debian-opensuse-centos/

作者:MAGESH MARUTHAMUTHU 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

如果你是第一次安装 MySQL 或 MariaDB,你可以执行 mysql_secure_installation 脚本来实现基本的安全设置。

其中的一个设置是数据库的 root 密码 —— 该密码必须保密,并且只在必要的时候使用。如果你需要修改它(例如,当数据库管理员换了人 —— 或者被解雇了!)。

建议阅读:在 Linux 中恢复 MySQL 或 MariaDB 的 Root 密码

这篇文章迟早会派上用场的。我们讲说明怎样来在 Linux 中修改 MySQL 或 MariaDB 数据库服务器的 root 密码。

尽管我们会在本文中使用 MariaDB 服务器,但本文中的用法说明对 MySQL 也有效。

修改 MySQL 或 MariaDB 的 root 密码

你知道 root 密码,但是想要重置它,对于这样的情况,让我们首先确定 MariaDB 正在运行:

------------- CentOS/RHEL 7 and Fedora 22+ ------------- 
# systemctl is-active mariadb
------------- CentOS/RHEL 6 and Fedora -------------
# /etc/init.d/mysqld status

Check MySQL Status

检查 MysQL 状态

如果上面的命令返回中没有 active 这个关键词,那么该服务就是停止状态,你需要在进行下一步之前先启动数据库服务:

------------- CentOS/RHEL 7 and Fedora 22+ ------------- 
# systemctl start mariadb
------------- CentOS/RHEL 6 and Fedora -------------
# /etc/init.d/mysqld start

接下来,我们将以 root 登录进数据库服务器:

# mysql -u root -p

为了兼容不同版本,我们将使用下面的声明来更新 mysql 数据库的用户表。注意,你需要将 YourPasswordHere 替换为你为 root 选择的新密码。

MariaDB [(none)]> USE mysql;
MariaDB [(none)]> UPDATE user SET password=PASSWORD('YourPasswordHere') WHERE User='root' AND Host = 'localhost';
MariaDB [(none)]> FLUSH PRIVILEGES;

要验证是否操作成功,请输入以下命令退出当前 MariaDB 会话。

MariaDB [(none)]> exit;

然后,敲回车。你现在应该可以使用新密码连接到服务器了。

Change MySQL/MariaDB Root Password

修改 MysQL/MariaDB Root 密码

小结

在本文中,我们说明了如何修改 MariaDB / MySQL 的 root 密码 —— 或许你知道当前所讲的这个方法,也可能不知道。

像往常一样,如果你有任何问题或者反馈,请尽管使用下面的评论框来留下你宝贵的意见或建议,我们期待着您的留言。


作者简介:

Gabriel Cánepa是一位来自阿根廷圣路易斯的 Villa Mercedes 的 GNU/Linux 系统管理员和 web 开发者。他为世界范围内的主要的消费产品公司工作,也很钟情于在他日常工作的方方面面中使用 FOSS 工具来提高生产效率。


via: http://www.tecmint.com/change-mysql-mariadb-root-password/

作者:Gabriel Cánepa 译者:GOLinux 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

 title=

今年是我们一起庆祝 SELinux 纪念日的第十个年头了(LCTT 译者注:本文发表于 2013 年)。真是太难以置信了!SELinux 最初在 Fedora Core 3 中被引入,随后加入了红帽企业版 Linux 4。从来没有使用过 SELinux 的家伙,你可要好好儿找个理由了……

SElinux 是一个标签型系统。每一个进程都有一个标签。操作系统中的每一个文件/目录 客体 object 也都有一个标签。甚至连网络端口、设备,乃至潜在的主机名都被分配了标签。我们把控制访问进程的标签的规则写入一个类似文件的客体标签中,这些规则我们称之为 策略 policy 。内核强制实施了这些规则。有时候这种“强制”被称为 强制访问控制体系 Mandatory Access Control (MAC)。

一个客体的拥有者对客体的安全属性并没有自主权。标准 Linux 访问控制体系,拥有者/分组 + 权限标志如 rwx,常常被称作 自主访问控制 Discretionary Access Control (DAC)。SELinux 没有文件 UID 或拥有权的概念。一切都被标签控制,这意味着在没有至高无上的 root 权限进程时,也可以设置 SELinux 系统。

注意: SELinux 不允许你摒弃 DAC 控制。SELinux 是一个并行的强制模型。一个应用必须同时支持 SELinux 和 DAC 来完成特定的行为。这可能会导致管理员迷惑为什么进程被拒绝访问。管理员被拒绝访问是因为在 DAC 中有些问题,而不是在 SELinux 标签。

类型强制

让我们更深入的研究下标签。SELinux 最主要的“模型”或“强制”叫做 类型强制 type enforcement 。基本上这意味着我们根据进程的类型来定义其标签,以及根据文件系统客体的类型来定义其标签。

打个比方

想象一下在一个系统里定义客体的类型为猫和狗。猫(CAT)和狗(DOG)都是 进程类型 process type

Image showing a cartoon of a cat and dog.

我们有一类希望能与之交互的客体,我们称之为食物。而我希望能够为食物增加类型:cat_food (猫的食物)和 dog_food(狗的食物)。

Cartoon Cat eating Cat Food and Dog eating Dog Food

作为一个策略制定者,我可以说一只狗有权限去吃狗粮(dog_chow),而一只猫有权限去吃猫粮(cat_chow)。在 SELinux 中我可以将这条规则写入策略中。

 title=

allow cat cat_chow:food eat;

允许 猫 猫粮:食物 吃;

allow dog dog_chow:food eat;

允许 狗 狗粮:食物 吃;

有了这些规则,内核会允许猫进程去吃打上猫粮标签 cat_chow 的食物,允许狗去吃打上狗粮标签 dog_chow 的食物。

Cartoon Cat eating Cat Food and Dog eating Dog Food

此外,在 SELinux 系统中,由于禁止是默认规则,这意味着,如果狗进程想要去吃猫粮 cat_chow,内核会阻止它。

同理,猫也不允许去接触狗粮。

 title=

现实例子

我们将 Apache 进程标为 httpd_t,将 Apache 上下文标为 httpd_sys_content_thttpdsys_content_rw_t。假设我们把信用卡数据存储在 MySQL 数据库中,其标签为 msyqld_data_t。如果一个 Apache 进程被劫持,黑客可以获得 httpd_t 进程的控制权,从而能够去读取 httpd_sys_content_t 文件并向 httpd_sys_content_rw_t 文件执行写操作。但是黑客却不允许去读信用卡数据(mysqld_data_t),即使 Apache 进程是在 root 下运行。在这种情况下 SELinux 减轻了这次闯入的后果。

多类别安全强制

打个比方

上面我们定义了狗进程和猫进程,但是如果你有多个狗进程:Fido 和 Spot,而你想要阻止 Fido 去吃 Spot 的狗粮 dog_chow 怎么办呢?

 title=

一个解决方式是创建大量的新类型,如 Fido_dogFido_dog_chow。但是这很快会变得难以驾驭因为所有的狗都有差不多相同的权限。

为了解决这个问题我们发明了一种新的强制形式,叫做 多类别安全 Multi Category Security (MCS)。在 MCS 中,我们在狗进程和狗粮的标签上增加了另外一部分标签。现在我们将狗进程标记为 dog:random1(Fido)dog:random2(Spot)

Cartoon of two dogs fido and spot

我们将狗粮标记为 dog_chow:random1(Fido)dog_chow:random2(Spot)

 title=

MCS 规则声明如果类型强制规则被遵守而且该 MCS 随机标签正确匹配,则访问是允许的,否则就会被拒绝。

Fido (dog:random1) 尝试去吃 cat_chow:food 被类型强制拒绝了。

Cartoon of Kernel (Penquin) holding leash to prevent Fido from eating cat food.

Fido (dog:random1) 允许去吃 dog_chow:random1

Cartoon Fido happily eating his dog food

Fido (dog:random1) 去吃 spot(dog_chow:random2)的食物被拒绝。

Cartoon of Kernel (Penquin) holding leash to prevent Fido from eating spots dog food.

现实例子

在计算机系统中我们经常有很多具有同样访问权限的进程,但是我们又希望它们各自独立。有时我们称之为 多租户环境 multi-tenant environment 。最好的例子就是虚拟机。如果我有一个运行很多虚拟机的服务器,而其中一个被劫持,我希望能够阻止它去攻击其它虚拟机和虚拟机镜像。但是在一个类型强制系统中 KVM 虚拟机被标记为 svirt_t 而镜像被标记为 svirt_image_t。 我们允许 svirt_t 可以读/写/删除标记为 svirt_image_t 的上下文。通过使用 libvirt 我们不仅实现了类型强制隔离,而且实现了 MCS 隔离。当 libvirt 将要启动一个虚拟机时,它会挑选出一个 MCS 随机标签如 s0:c1,c2,接着它会将 svirt_image_t:s0:c1,c2 标签分发给虚拟机需要去操作的所有上下文。最终,虚拟机以 svirt_t:s0:c1,c2 为标签启动。因此,SELinux 内核控制 svirt_t:s0:c1,c2 不允许写向 svirt_image_t:s0:c3,c4,即使虚拟机被一个黑客劫持并接管,即使它是运行在 root 下。

我们在 OpenShift 中使用类似的隔离策略。每一个 gear(user/app process)都有相同的 SELinux 类型(openshift_t)(LCTT 译注:gear 为 OpenShift 的计量单位)。策略定义的规则控制着 gear 类型的访问权限,而一个独一无二的 MCS 标签确保了一个 gear 不能影响其他 gear。

请观看下面的视频来看 OpenShift gear 切换到 root 会发生什么。

多级别安全强制

另外一种不经常使用的 SELinux 强制形式叫做 多级别安全 Multi Level Security (MLS);它开发于上世纪 60 年代,并且主要使用在受信操作系统上如 Trusted Solaris。

其核心观点就是通过进程使用的数据等级来控制进程。一个 secret 进程不能读取 top secret 数据。

MLS 很像 MCS,除了它在强制策略中增加了支配的概念。MCS 标签必须完全匹配,但一个 MLS 标签可以支配另一个 MLS 标签并且获得访问。

打个比方

不讨论不同名字的狗,我们现在来看不同种类。我们现在有一只格雷伊猎犬和一只吉娃娃。

Cartoon of a Greyhound and a Chihuahua

我们可能想要允许格雷伊猎犬去吃任何狗粮,但是吉娃娃如果尝试去吃格雷伊猎犬的狗粮可能会被呛到。

我们把格雷伊猎犬标记为 dog:Greyhound,把它的狗粮标记为 dog_chow:Greyhound,把吉娃娃标记为 dog:Chihuahua,把它的狗粮标记为 dog_chow:Chihuahua

Cartoon of a Greyhound dog food and a Chihuahua dog food.

使用 MLS 策略,我们可以使 MLS 格雷伊猎犬标签支配吉娃娃标签。这意味着 dog:Greyhound 允许去吃 dog_chow:Greyhounddog_chow:Chihuahua

 title=

但是 dog:Chihuahua 不允许去吃 dog_chow:Greyhound

Cartoon of Kernel (Penquin) stopping the Chihahua from eating the greyhound food.  Telling him it would be a big too beefy for him.

当然,由于类型强制, dog:Greyhounddog:Chihuahua 仍然不允许去吃 cat_chow:Siamese,即使 MLS 类型 GreyHound 支配 Siamese。

Cartoon of Kernel (Penquin) holding leash to prevent both dogs from eating cat food.

现实例子

有两个 Apache 服务器:一个以 httpd_t:TopSecret 运行,一个以 httpd_t:Secret 运行。如果 Apache 进程 httpd_t:Secret 被劫持,黑客可以读取 httpd_sys_content_t:Secret 但会被禁止读取 httpd_sys_content_t:TopSecret

但是如果运行 httpd_t:TopSecret 的 Apache 进程被劫持,它可以读取 httpd_sys_content_t:Secret 数据和 httpd_sys_content_t:TopSecret 数据。

我们在军事系统上使用 MLS,一个用户可能被允许读取 secret 数据,但是另一个用户在同一个系统上可以读取 top secret 数据。

结论

SELinux 是一个功能强大的标签系统,控制着内核授予每个进程的访问权限。最主要的特性是类型强制,策略规则定义的进程访问权限基于进程被标记的类型和客体被标记的类型。也引入了另外两个控制手段,分离有着同样类型进程的叫做 MCS,而 MLS,则允许进程间存在支配等级。

*所有的漫画都来自 Máirín Duffy


作者简介:

Daniel J Walsh - Daniel Walsh 已经在计算机安全领域工作了将近 30 年。Daniel 于 2001 年 8 月加入红帽。


via: https://opensource.com/business/13/11/selinux-policy-guide

作者:Daniel J Walsh 译者:xiaow6 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出