2016年2月

随着安全威胁的不断发生,入侵检测系统(IDS)在如今的数据中心环境中显得尤为必要。然而,随着越来越多的服务器将他们的网卡升级到10GB/40GB以太网,对如此线路上的硬件进行计算密集型的入侵检测越来越困难。其中一种提升入侵检测系统性能的途径是多线程入侵检测系统,它将 CPU 密集型的深度包检测工作并行的分配给多个并发任务来完成。这样的并行检测可以充分利用多核硬件的优势来轻松提升入侵检测系统的吞吐量。在这方面有两个知名的开源项目,分别是 SuricataBro

这个教程里,我会向大家演示如何在 Linux 服务器上安装和配置 Suricata 入侵检测系统。

在 Linux 上安装 Suricata IDS

让我们从源文件来构建 Suricata,但在此之前,需要按如下所示先安装几个依赖包。

在 Debian, Ubuntu 或者 Linux Mint 操作系统上安装依赖包

$ sudo apt-get install wget build-essential libpcre3-dev libpcre3-dbg automake autoconf libtool libpcap-dev libnet1-dev libyaml-dev zlib1g-dev libcap-ng-dev libjansson-dev

在 CentOS, Fedora 或者 RHEL 操作系统上安装依赖包

$ sudo yum install wget libpcap-devel libnet-devel pcre-devel gcc-c++ automake autoconf libtool make libyaml-devel zlib-devel file-devel jansson-devel nss-devel

一旦将所有依赖包安装完毕,我们就可以继续安装 Suricata 了。

首先从 http://suricata-ids.org/download/ 下载 Suricata 源代码,然后构建它。撰写这篇文章的时候,其最新版本号为 2.0.8 。

$ wget http://www.openinfosecfoundation.org/download/suricata-2.0.8.tar.gz
$ tar -xvf suricata-2.0.8.tar.gz
$ cd suricata-2.0.8
$ ./configure --sysconfdir=/etc --localstatedir=/var

以下是配置信息的样例。

Suricata Configuration:
  AF_PACKET support:                       yes
  PF_RING support:                         no
  NFQueue support:                         no
  NFLOG support:                           no
  IPFW support:                            no
  DAG enabled:                             no
  Napatech enabled:                        no
  Unix socket enabled:                     yes
  Detection enabled:                       yes

  libnss support:                          yes
  libnspr support:                         yes
  libjansson support:                      yes
  Prelude support:                         no
  PCRE jit:                                yes
  LUA support:                             no
  libluajit:                               no
  libgeoip:                                no
  Non-bundled htp:                         no
  Old barnyard2 support:                   no
  CUDA enabled:                            no

现在可以编译、安装了。

$ make
$ sudo make install

Suricata 源代码带有默认的配置文件。按照如下方法安装这些默认配置文件即可。

$ sudo make install-conf

正如你所料,如果没有IDS规则集的话,Suricata 什么用也没有。幸好 Makefile 为我们提供了 IDS 规则集的安装选项。安装方法如下。

$ sudo make install-rules

以上的规则安装命令会从 EmergingThreats.net 上下载可用的社区规则集快照,并且将其存储在 /etc/suricata/rules 目录下。

首次配置 Suricata IDS

现在到了配置 Suricata 的时候了。配置文件的位置是 /etc/suricata/suricata.yaml。参照以下命令,用文本编辑器打开这个文件。

$ sudo vi /etc/suricata/suricata.yaml

文件中有一些运行所需的基本配置。

default-log-dir关键字指定 Suricata 日志文件所在的位置。

default-log-dir: /var/log/suricata/

vars部分下方,你会发现几项对 Suricata 来说很重要变量。HOME_NET变量需要指定 Suricata 检查的网络。被分配给 EXTERNAL_NET 变量的 !$HOME_NET 代表除本地网络之外的其他网络。XXX_PORTS变量用来辨别不同服务所用到的端口号。需要注意的是无论使用什么端口,Suricata 都可以自动检测 HTTP 流量。所以是不是正确指定端口就显得没那么重要了。

vars:
    HOME_NET: "[192.168.122.0/24]"
    EXTERNAL_NET: "!$HOME_NET"
    HTTP_PORTS: "80"
    SHELLCODE_PORTS: "!80"
    SSH_PORTS: 22

host-os-policy 部分用于防御利用操作系统网络栈的自身行为来逃避检测的一些知名攻击手段(例如:TCP reassembly)。作为对策,通过针对目标操作系统而对检测引擎算法进行微调,现代 IDC 提供了“基于目标”的检测手段。因此,如果你知道某台主机运行了什么操作系统的话,将这个信息提供给 Suricata 就可以大幅提高检测的成功率。这就是 host-os-policy 存在的意义。本例中,默认的 IDC 策略是 Linux 系统。如果针对某个 IP 地址没有指定操作系统信息,Suricata 会默认应用基于 Linux 系统的检测策略。如下,当捕获到对 192.168.122.0/28 和 192.168.122.155通讯时,Suricata 就会应用基于 Windows 系统的检测策略。

host-os-policy:
  # These are Windows machines.
  windows: [192.168.122.0/28, 192.168.122.155]
  bsd: []
  bsd-right: []
  old-linux: []
  # Make the default policy Linux.
  linux: [0.0.0.0/0]
  old-solaris: []
  solaris: ["::1"]
  hpux10: []
  hpux11: []
  irix: []
  macos: []
  vista: []
  windows2k3: []

threading 部分下,你可以为不同的 Suricata 线程指定 CPU 关联。默认状态下,CPU 关联 是被禁止使用的 (set-cpu-affinity: no),这意味着 Suricata 会分配其线程到所有可用的 CPU 核心上。Suricata 会默认为每一个 CPU 核心创建一个检测线程。你可以通过指定 detect-thread-ratio: N 来调整此行为。此处会创建 N*M 个检测线程,M 代表 CPU 核心总数。

threading:
  set-cpu-affinity: no
  detect-thread-ratio: 1.5

通过以上对线程的设置,Suricata 会创建 1.5*M 个检测线程,M 是系统的 CPU 核心总数。

如果你想对 Suricata 配置有更多的了解,可以去翻阅默认配置文件。里边配有有大量的注释以供你清晰理解。

使用 Suricata 进行入侵监控

现在是时候让 Suricata 跑起来了,但在这之前还有一个步骤需要去完成。

当你使用 pcap 捕获模式的时候,强烈建议关闭 Suricata 监听网卡上的任何的包卸载(例如 LRO/GRO)功能。这些功能会干扰包的实时捕获行为。

按照以下方法关闭 eth0 接口的 LRO/GRO 功能。

$ sudo ethtool -K eth0 gro off lro off

这里要注意,在使用某些网卡的情况下,你会看到如下警告信息。忽略它们就行了,这些信息只不过告诉你你的网卡不支持 LRO 功能而已。

Cannot change large-receive-offload

Suricata 支持许多运行模式。运行模式决定着 IDC 会使用何种线程。以下命令可以查看所有 可用的运行模式

$ sudo /usr/local/bin/suricata --list-runmodes

Suricata 使用的默认运行模式是 autofp( auto flow pinned load balancing 自动流绑定负载均衡 的缩写)。这个模式下,来自某一个流的包会被分配到一个单独的检测线程中。这些流会根据未被处理的包的最低数量来分配相应的线程。

最后,让我们将 Suricata 运行起来,看看它表现如何。

$ sudo /usr/local/bin/suricata -c /etc/suricata/suricata.yaml -i eth0 --init-errors-fatal

本例中,我们在一个8核心系统中监控 eth0 网络接口。如上所示,Suricata 创建了13个包处理线程和3个管理线程。包处理线程中包括一个 PCAP 包捕获线程,12个检测线程(由8*1.5得出)。这表示 IDS 内的1个包捕获线程均衡负载到12个检测线程中。管理线程包括1个流管理和2个计数/统计相关线程。

以下是一个关于Suricata处理的线程截图(由 htop 绘制)。

Suricata 检测日志存储在 /var/log/suricata 目录下。

$ tail -f /var/log/suricata/fast.log

04/01/2015-15:47:12.559075  [**] [1:2200074:1] SURICATA TCPv4 invalid checksum [**] [Classification: (null)] [Priority: 3] {TCP} 172.16.253.158:22 -> 172.16.253.1:46997
04/01/2015-15:49:06.565901  [**] [1:2200074:1] SURICATA TCPv4 invalid checksum [**] [Classification: (null)] [Priority: 3] {TCP} 172.16.253.158:22 -> 172.16.253.1:46317
04/01/2015-15:49:06.566759  [**] [1:2200074:1] SURICATA TCPv4 invalid checksum [**] [Classification: (null)] [Priority: 3] {TCP} 172.16.253.158:22 -> 172.16.253.1:46317

日志也可以提供 Json 格式以便导入:

$ tail -f /var/log/suricata/eve.json

{"timestamp":"2015-04-01T15:49:06.565901","event_type":"alert","src_ip":"172.16.253.158","src_port":22,"dest_ip":"172.16.253.1","dest_port":46317,"proto":"TCP","alert":{"action":"allowed","gid":1,"signature_id":2200074,"rev":1,"signature":"SURICATA TCPv4 invalid checksum","category":"","severity":3}}
{"timestamp":"2015-04-01T15:49:06.566759","event_type":"alert","src_ip":"172.16.253.158","src_port":22,"dest_ip":"172.16.253.1","dest_port":46317,"proto":"TCP","alert":{"action":"allowed","gid":1,"signature_id":2200074,"rev":1,"signature":"SURICATA TCPv4 invalid checksum","category":"","severity":3}}

总结

这篇教程中,我为大家演示了如何在一台多核 Linux 服务器上安装 Suricata 入侵检测系统。不同于单线程的 Snort IDS ,Suricata 可以很容易的从多核硬件的多进程特性所带来的好处中获益。定制 Suricata 来最大化其效能和检测范围是一个很好的主意。Suricata 的粉丝们维护着一个 在线 Wiki,如果你打算将 Suricata 部署到你的环境中,我强烈建议你去那儿取取经。

如果你现在已经开始使用 Suricata 了的话,把你的经验也分享出来吧。


via: http://xmodulo.com/install-suricata-intrusion-detection-system-linux.html

作者:Dan Nanni 译者:mr-ping 校对:wxy

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

简而言之, 协作编辑 Collaborative Edit 就是多个人进行编辑。协作有好处也有风险。好处之一是更加全面/协调的方式,更好的利用现有资源和一个更加有力一致的声音。对于我来说,最大的好处是极大的透明度。那是当我需要采纳同事的观点。同事之间来来回回地传文件效率非常低,导致不必要的延误还让人(比如,我)对整个协作这件事都感到不满意。有个好的协作软件,我就能实时地或异步地分享笔记,数据和文件,并用评论来分享自己的想法。这样在文档、图片、视频、演示文稿上协作就不会那么的琐碎而无聊。

有很多种方式能在线进行协作,简直不能更简便了。这篇文章展示了我最喜欢的开源的实时文档协作编辑工具。

Google Docs 是个非常好的高效应用,有着大部分我所需要的功能。它可以作为一个实时地协作编辑文档的工具提供服务。文档可以被分享、打开并被多位用户同时编辑,用户还能看见其他协作者一个字母一个字母的编辑过程。虽然 Google Docs 对个人是免费的,但并不开源。

下面是我带来的最棒的开源协作编辑器,它们能帮你不被打扰的集中精力进行写作,而且是和其他人协同完成。


Hackpad

Hackpad 是个开源的基于网页的实时 wiki,基于开源 EtherPad 协作文档编辑器。

Hackpad 允许用户实时分享你的文档,它还用彩色编码显示各个作者分别贡献了哪部分。它还允许插入图片、清单,由于提供了语法高亮功能,它还能用来写代码。

当2014年4月 Dropbox 收购了 Hackpad 后,就在这个月这款软件以开源的形式发布。让我们经历的等待非常值得。

特性:

  • 有类似 wiki 所提供的,一套非常完善的功能
  • 实时或者异步地记录协作笔记,共享数据和文件,或用评论分享你们的想法
  • 细致的隐私许可让你可以邀请单个朋友、一个十几人的团队或者上千的 Twitter 粉丝
  • 智能执行
  • 直接从流行的视频分享网站上插入视频
  • 表格
  • 可对使用广泛的包括 C, C#, CSS, CoffeeScript, Java, 以及 HTML 在内的编程语言进行语法高亮
  • 网站:hackpad.com
  • 源代码:github.com/dropbox/hackpad
  • 开发者:Contributors
  • 许可:Apache License, Version 2.0
  • 版本号: -

Etherpad

Etherpad 是个基于网页的开源实时协作编辑器,允许多个作者同时编辑一个文本文档,写评论,并与其他作者用群聊方式进行交流。

Etherpad 是用 JavaScript 编写的,运行在 AppJet 平台之上,通过 Comet 流实现实时的功能。

特性:

  • 尽心设计的斯巴达界面
  • 简单的格式化文本功能
  • “滑动时间轴”——浏览一个工程历史版本
  • 可以下载纯文本、 PDF、微软的 Word 文档、Open Document 和 HTML 格式的文档
  • 每隔一段很短的时间就会自动保存
  • 可个性化程度高
  • 有客户端插件可以扩展编辑的功能
  • 几百个支持 Etherpad 的扩展,包括支持 email 提醒,pad 管理,授权
  • 可访问性开启
  • 可从 Node 里或通过 CLI(命令行界面)和 EtherPad 的内容交互
  • 网站: etherpad.org
  • 源代码:github.com/ether/etherpad-lite
  • 开发者:David Greenspan, Aaron Iba, J.D. Zamfiresc, Daniel Clemens, David Cole
  • 许可:Apache License, Version 2.0
  • 版本号: 1.5.7

Firepad

Firepad 是个开源的协作文本编辑器。它的设计目的是被嵌入到更大的网页应用中对几天内新加入的代码进行批注。

Firepad 是个全功能的文本编辑器,有解决冲突,光标同步,用户属性,用户在线状态检测功能。它使用 Firebase 作为后台,而且不需要任何服务器端的代码。他可以被加入到任何网页应用中。Firepad 可以使用 CodeMirror 编辑器或者 Ace 编辑器提交文本,它的操作转换代码是从 ot.js 上借鉴的。

如果你想要通过添加简单的文档和代码编辑器来扩展你的网页应用能力,Firepad 最适合不过了。

Firepad 已被多个编辑器使用,包括Atlassian Stash Realtime Editor、Nitrous.IO、LiveMinutes 和 Koding。

特性:

  • 纯正的协作编辑
  • 基于 OT 的智能合并及解决冲突
  • 支持多种格式的文本和代码的编辑
  • 光标位置同步
  • 撤销/重做
  • 文本高亮
  • 用户属性
  • 在线检测
  • 版本检查点
  • 图片
  • 通过它的 API 拓展 Firepad
  • 支持所有现代浏览器:Chrome、Safari、Opera 11+、IE8+、Firefox 3.6+
  • 网站: www.firepad.io
  • 源代码:github.com/firebase/firepad
  • 开发者:Michael Lehenbauer and the team at Firebase
  • 许可:MIT
  • 版本号:1.1.1

OwnCloud Documents

ownCloud Documents 是个可以单独并/或协作进行办公室文档编辑 ownCloud 应用。它允许最多5个人同时在网页浏览器上协作进行编辑 .odt 和 .doc 文件。

ownCloud 是个自托管文件同步和分享服务器。他通过网页界面,同步客户端或 WebDAV 提供你数据的使用权,同时提供一个容易在设备间进行浏览、同步和分享的平台。

特性:

  • 协作编辑,多个用户同时进行文件编辑
  • 在 ownCloud 里创建文档
  • 上传文档
  • 在浏览器里分享和编辑文件,然后在 ownCloud 内部或通过公共链接进行分享这些文件
  • 有类似 ownCloud 的功能,如版本管理、本地同步、加密、恢复被删文件
  • 通过透明转换文件格式的方式无缝支持微软 Word 文档
  • 网站:owncloud.org
  • 源代码: github.com/owncloud/documents
  • 开发者:OwnCloud Inc.
  • 许可:AGPLv3
  • 版本号:8.1.1

Gobby

Gobby 是个支持在一个会话内进行多个用户聊天并打开多个文档的协作编辑器。所有的用户都能同时在文件上进行工作,无需锁定。不同用户编写的部分用不同颜色高亮显示,它还支持多个编程和标记语言的语法高亮。

Gobby 允许多个用户在互联网上实时共同编辑同一个文档。它很好的整合了 GNOME 环境。它拥有一个客户端-服务端结构,这让它能支持一个会话开多个文档,文档同步请求,密码保护和 IRC 式的聊天方式可以在多个频道进行交流。用户可以选择一个颜色对他们在文档中编写的文本进行高亮。

还供有一个叫做 infinoted 的专用服务器。

特性:

  • 成熟的文本编辑能力包括使用 GtkSourceView 的语法高亮功能
  • 实时、无需锁定、通过加密(包括PFS)连接的协作文本编辑
  • 整合了群聊
  • 本地组撤销:撤销不会影响远程用户的修改
  • 显示远程用户的光标和选择区域
  • 用不同颜色高亮不同用户编写的文本
  • 适用于大多数编程语言的语法高亮,自动缩进,可配置 tab 宽度
  • 零冲突
  • 加密数据传输包括完美的正向加密(PFS)
  • 会话可被密码保护
  • 通过 Access Control Lists (ACLs) 进行精密的权限保护
  • 高度个性化的专用服务器
  • 自动保存文档
  • 先进的查找和替换功能
  • 国际化
  • 完整的 Unicode 支持
  • 网站:gobby.github.io
  • 源代码: github.com/gobby
  • 开发者: Armin Burgmeier, Philipp Kern and contributors
  • 许可: GNU GPLv2+ and ISC
  • 版本号:0.5.0

OnlyOffice

ONLYOFFICE(从前叫 Teamlab Office)是个多功能云端在线办公套件,整合了 CRM(客户关系管理)系统、文档和项目管理工具箱、甘特图以及邮件整合器

它能让你整理商业任务和时间表,保存并分享你的协作或个人文档,使用网络社交工具如博客和论坛,还可以和你的队员通过团队的即时聊天工具进行交流。

能在同一个地方管理文档、项目、团队和顾客关系。OnlyOffice 结合了文本,电子表格和电子幻灯片编辑器,他们的功能跟微软桌面应用(Word、Excel 和 PowerPoint)的功能相同。但是他允许实时进行协作编辑、评论和聊天。

OnlyOffice 是用 ASP.NET 编写的,基于 HTML5 Canvas 元素,并且被翻译成21种语言。

特性:

  • 当在大文档里工作、翻页和缩放时,它能与桌面应用一样强大
  • 文档可以在浏览/编辑模式下分享
  • 文档嵌入
  • 电子表格和电子幻灯片编辑器
  • 协作编辑
  • 评论
  • 群聊
  • 移动应用
  • 甘特图
  • 时间管理
  • 权限管理
  • Invoicing 系统
  • 日历
  • 整合了文件保存系统:Google Drive、Box、OneDrive、Dropbox、OwnCloud
  • 整合了 CRM、电子邮件整合器和工程管理模块
  • 邮件服务器
  • 邮件整合器
  • 可以编辑流行格式的文档、电子表格和电子幻灯片:DOC、DOCX、ODT、RTF、TXT、XLS、XLSX、ODS、CSV、PPTX、PPT、ODP
  • 网站:www.onlyoffice.com
  • 源代码:github.com/ONLYOFFICE/DocumentServer
  • 开发者:Ascensio System SIA
  • 许可:GNU GPL v3
  • 版本号:7.7

via: http://www.linuxlinks.com/article/20150823085112605/CollaborativeEditing.html

作者:Frazer Kline 译者:H-mudcup 校对:wxy

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

域名解析系统(DNS)是互联网安全的许多薄弱环节之一;可以将应用程序所访问的主机对应的 IP 地址误导到其它地方。也就是说,会连接到错误的位置,从而引发 中间人 man-in-the-middle 攻击等等。而 DNSSEC 扩展协议则通过为 DNS 信息建立一条加密的可信通道来解决这个漏洞。在正确地配置好 DNSSEC 后,应用程序将可以得到可靠的主机查询信息。通过关于尝试将 DNSSEC 更好地集成到 GNU C 库里的讨论,我们知道,确保 DNS 查询信息安全这件事并不是那么简单。

从某种意义上来说,这个问题多年以前就解决了,我们可以配置一个本地域名服务实现完整的 DNSSEC 校验 verification 并允许应用程序通过 glibc 函数来使用该服务。DNSSEC 甚至还可以用于提高其他领域的安全性,比如,它可以携带 SSH 或 TLS 密钥指纹,让应用程序可以确认其在与正确的服务器对话。不过,当我们希望确认这条自称带有 DNSSEC 校验的 DNS 结果是不是真的已通过认证的时候 - 也就是说,当我们想依赖 DNSSEC 所承诺的安全的时候,事情变得有点复杂。

/etc/resolv.conf 问题

从 glibc 的角度来看,这个问题一部分是因为 glibc 本身并没有做 DNSSEC 校验,而是引用 /etc/resolv.conf 文件,从该文件里读出的服务器来做解析以及校验,再将结果返回给应用程序。如果应用程序使用底层 res\_query() 接口,那结果中将会包含“ 已认证数据 authenticated data ”(AD)标识(如果域名服务器设定了的话)以表示 DNSSEC 校验已经成功。但是 glibc 却完全不知道提供这些结果的域名服务器的信用,所以它其实并不能告诉应用程序结果是否真的可靠。

由 glibc 的维护者 Carlos O'Donell 提出的建议是在 resolv.conf 文件里增加一个选项(dns-strip-dnssec-ad-bit)告诉 glibc 无条件移除 AD 标识。这个选项可以由各发行版设定,表示 DNSSEC 级别的 DNS 查询结果并不可靠。而一旦建立好合适的环境可以获得可靠的查询结果后,再移除这个选项。这样一来,虽然问题还没有完全解决,至少应用程序有依据来评价从 glibc 获取的 DNS 查询结果的可靠性。

一个可靠的环境配置应该是什么样?标准情况应该和这个差不太多:有一个本地域名服务器,通过 环路 loopback 接口访问,作为访问 /etc/resolv.conf 文件的唯一条目。这个域名服务器应该配置来做校验,而在校验失败后就只是简单地不返回任何结果。绝大多数情况下,应用程序就不再需要关心 AD 标识,如果结果不可靠,应用程序就根本看不到。一些发行版已经倾向于这种模型,不过情况仍然不像一些人所设想的那么简单。

其中一个问题是,这种方式将 /etc/resolv.conf 文件放到整个系统可信任度的中心。但是,在一个典型的 Linux 系统里,有无数的 DHCP 客户端、网络脚本以及其他更多的程序可以修改这个文件。就像 Paul Wouters 所指出的,在短时间内锁定这个文件是不可能的。有时候这种修改是必须的:在一个无盘系统启动的时候,在自身的域名服务器启动之前也是需要域名服务的;一个系统的整个 DNS 环境也会根据所连接的网络不同而有所改变;运行在容器里的系统也最好是配置成使用宿主机的域名服务器;等等。

所以,现在一般认为,现有系统里的 /etc/resolv.conf 文件并不可信。于是有人提出增加另一个配置文件(/etc/secure-resolv.conf 或其他什么),但这并没有从根本上解决问题。除此之外,有些参与者觉得就算有一个运行在环路接口上的域名服务器也不是真正可靠,比如 Zack Weinberg 甚至建议系统管理员可以有意禁用 DNSSEC 确认 validation

既然当前系统里的配置不足以信任,那可以这样推断,在情况有改善能够取得可信的结果后,glibc 需要有一种方式来通知应用程序。可以是上面讨论的屏蔽 AD 标识的方式(或者与之相反,增加一个显示的“此域名服务器可以信任”选项);当然,这都需要一定程度上锁定系统以免 /etc/resolv.conf 受到任何不可预计的修改。按 Petr Spacek 的建议,还有一种引申方式,就是提供一种途径允许应用程序查询 glibc 当前通讯的是不是本地域名服务器。

在 glibc 里来处理?

另一种方式是不管域名服务器,而是让 glibc 本身来做 DNSSEC 确认。不过,把这么大一坨加密相关代码放进 glibc 也是有很大阻力。这样将增加库本身的大小,从而感觉会增加使用它的应用程序的受攻击可能性。这个方向再引申一下,由 Zack 提出的建议,可以把确认相关代码放到域名服务缓冲守护进程(nscd)里。因为 nscd 也是 glibc 的一部分,由 glibc 开发人员维护,因此在一定程度上可以相信能正确执行 DNSSEC 确认。而且 nscd 的通讯 socket 所在位置也是公开的,所以可以不考虑 /etc/resolv.conf 问题。不过,Carlos 担心这种方式不能让那些不想使用 nscd 缓存功能的用户所接受;在他看来,基本可以排除 nscd 的方式。

所以,至少近期内,glibc 不太可能全部执行 DNSSEC 确认了的整个查询过程。这意味着,如果一个有安全考虑的应用要使用 glibc 库来查询域名,该库将需要提供一个标识来评价从独立域名服务器返回的结果有多大程度的可靠性。这几乎肯定需要发行版或系统管理员做出一些明确的改动。就像 Simo Sorce 说的那样:

如果 glibc 不使用明确的配置选项来通知应用程序它所用的域名解析是可信的,不会有什么用……不改一下还有很大弊端,因为应用程序开发者将马上认识到他们不能信任从 glibc 获取的任何信息,从而在处理 DNSSEC 相关信息时就简单地不用它。

要配置一个系统能正常使用 DNSSEC 需要改动该系统的很多组件 - 这是一个发行版范围的问题,需要时间来完全解决。在这个转变过程中 glibc 所扮演的角色很可能会比较小,但是很重要的一部分:如果应用程序不实现一套自己的域名解析代码,glibc 很可能是保证 DNS 结果可信的唯一方式。在一个系统中运行多个 DNSSEC 实现方式看起来不像是一种安全的方式,所以最好还是把事情做对了。

glibc 项目目前并没有确定用哪种方式来做这个事情,虽然从 /etc/resolv.conf 文件里的某些标记看上去快好了。这种改动应该需要发布新版本;考虑到 glibc 开发的保守天性,很可能来不及加入预计二月份发布的 2.23 版本了。所以 glibc 中暂时还不会有更高安全性的 DNSSEC ,不过在这个方向上也有一些进展了。


via: https://lwn.net/Articles/664776/

作者:Jonathan Corbet 译者:zpl1025 校对:wxy

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

新进入 Linux 世界的朋友们,也许你已经下载好了 Linux 的安装 ISO,并且安装好了你的 Linux ,那么接下来,你也许希望安装一些 Linux 上用的软件。开始你可能会使用图形界面的软件中心来安装,有时候也需要使用命令行来安装,或者甚至需要自己去编译一个二进制出来——这是多么神奇的一件事啊。

那么我们今天就讲一讲如何在 Linux 上安装软件包。

本文将从 GUI 软件中心包管理器在线仓库安装本地安装源码安装 一一为你讲解有关安装软件包需要注意的事项。

本文环境

  • Ubuntu 15.04 64-bit
  • Fedora 22 64-bit

安装目标

  • wget 它是一个用于从网络上下载文件的简单自由软件,在下文我们也会用到 wget 进行下载某些文件。

相关概念

  • :我们安装程序可以从 远程仓库本地仓库 获取,这个 仓库 就是我们程序的来源,因此可以称为
  • 包管理器 :顾名思义 包管理器 是用来管理软件包的,用这个工具我们可以轻松的从仓库中安装、卸载程序。不同的发行版有不同的包管理器,Ubuntu 使用 apt-get 而 Fedora 22使用 dnf
  • 源码 : 程序的原始代码,未经过编译,通过编译源码也可以生成程序。

图形界面的软件中心

Ubuntu 软件中心

当我们处于图形界面( GUI :Graphical User Interface) 时,Ubuntu 为我们提供了一个图形界面的安装工具,称为 Ubuntu 软件中心,通过这个软件中心,我们可以像 Windows 一样通过点击几个按钮,轻松实现软件包安装。下图为打开软件中心之后的图,左边是一些分类,下面则是一些推荐的软件包。

Ubunutu 软件中心

点击已安装可以查看安装在本机的软件包,并且可以在此管理它们,如图选中 Firefox 并点击卸载,此时会提示你输入密码,输入完成且正确就会卸载你所选的程序。

已安装

接下来在搜索框搜索 wget 你可以看到如图所示的东西,并且只需点击安装并正确输入密码即可。

安装新程序

Fedora 软件中心

点开如图所示的图标就可以打开 Fedora 的软件中心。

Fedora 软件中心

打开后界面如图,分类在最下面

软件中心

点开上图的扫雷,显示如下,点击 安装 ,静候即可

安装新程序

现在转到 已安装 ,我们可以看到刚刚安装的扫雷,点击 移除 ,就可以删除了。

移除程序

如果你遇到下图,只需要输入你的密码即可。

认证

使用包管理器安装

1.换源

发行版换源方法
Ubuntu阿里云镜像配置请参考这里
USTC镜像配置请参考这里
Fedora阿里云镜像配置请参考这里
USTC镜像配置请参考这里

换源是为了提升下载速度,上文的概念已经提到了,我们安装软件是从远程仓库下载安装的,自然这个远程仓库的网络连通必须要好,并且下载速度要可观。

2.更新源

更换了源的文件后,还需要更新本地数据库信息,以便与远程仓库信息一致。

发行版包管理工具参数示例解释
Ubuntuapt-getupdatesudo apt-get update取回更新的软件包列表信息
Fedoradnfcheck-updatesudo dnf check-update取回更新的软件包列表信息

3.安装软件包

发行版包管理工具类型参数示例解释
Ubuntuapt-get远程仓库installsudo apt-get install packagename安装软件包
Fedoradnf远程仓库installsudo dnf install packagename安装软件包
Ubuntudpkg本地deb包-isudo dpkg -i filename.deb安装本地二进制deb包
Fedorarpm本地rpm包-isudo rpm -i filename.rpm安装本地二进制rpm包

4.卸载软件包

发行版包管理工具参数示例解释
Ubuntuapt-getremovesudo apt-get remove packagename卸载软件包
Fedoradnfremovesudo dnf remove packagename卸载软件包
Ubuntudpkg-rsudo dpkg -r packagename卸载软件包

5.升级所有软件包

发行版包管理工具参数示例解释
Ubuntuapt-getupgradesudo apt-get upgrade升级所有软件包
Fedoradnfupgradesudo dnf upgrade升级所有软件包

6.其它参数

发行版包管理工具参数示例解释
Ubuntuapt-getpurgesudo apt-get purge packagename卸载并清除软件包的配置
sourceapt-get source packagename下载源码包文件
cleansudo apt-get clean删除所有已下载的包文件
downloadapt-get download packagename下载指定的二进制包到当前目录
--helpapt-get --help获取帮助
Fedoradnfcleansudo dnf clean清除旧缓存
makecachesudo dnf makecache生成新缓存
-hdnf -h获取帮助

从源码编译安装

有些时候我们会发现有的软件包并没有包含在软件仓库中,也没有可用的二进制包,这时候我们可以尝试从源码编译安装,我在此处仍以wget 为例,示范如何编译,并解决编译遇到的问题

以下环境为 Ubuntu 15.04

$ mkdir buildwget #构建目录
$ cd buildwget
$ wget http://ftp.gnu.org/gnu/wget/wget-1.16.tar.xz         #下载源码包
$ sudo apt-get remove wget  #为了后面的测试,先把 wget 卸载了
$ xz -d wget-1.16.tar.xz  #解压 xz 文件
$ tar -xvf wget-1.16.tar #解档 tar 文件
$ cd wget-1.16
$ ls                     #列出文件
ABOUT-NLS   ChangeLog.README  GNUmakefile   maint.mk     po       util
aclocal.m4  configure         INSTALL       Makefile.am  README
AUTHORS     configure.ac      lib           Makefile.in  src
build-aux   COPYING           m4            msdos        testenv
ChangeLog   doc               MAILING-LIST  NEWS         tests

上面的文件就是我们将要编译的源文件,其中有个特别要注意的就是 INSTALL,我们要养成一个习惯,多看 INSTALL 文件,这个文件会告诉我们怎么编译,编译时需要注意什么?但由于此处的编译较简单,所以 INSTALL 也没有提到什么特别重要的事情。

按照 INSTALL 我们先执行 ./configure

$ ./configure

如果出现如下的错误

configure: error: --with-ssl=gnutls was given, but GNUTLS is not available.

错误提示说,给定的 SSLgnutls 但是却不可用(因为没有安装),因此我们安装并指定 opensslwgetSSL

$ sudo apt-get install openssl 
$ sudo apt-get install libssl-dev
$ ./configure --with-ssl=openssl

如果没有问题,执行完后应该显示如下

configure: Summary of build options:

  Version:           1.16
  Host OS:           linux-gnu
  Install prefix:    /usr/local
  Compiler:          gcc
  CFlags:            -g -O2 
  LDFlags:           
  Libs:              -lssl -lcrypto -ldl -lz 
  SSL:               openssl
  Zlib:              yes
  PSL:               no
  Digest:            yes
  NTLM:              yes
  OPIE:              yes
  Debugging:         yes

然后进行编译

$ make

会输出很多编译信息,不要担心,如果最后没有报错而停止,则编译成功,接下来进行安装

$ sudo make install

试试是不是 wget 命令又出来了?源码安装遇到问题,我们要善于搜索,提问和解决,根据报错内容进行相应的编译调整,缺少的依赖装上,一般就可以成功。

总结

本文主要为新手讲解了 UbuntuFedora 安装软件包的一些方法, 相较之前的版本,本次更改由繁化简,并且以表格的形式给出参数和命令,要熟练和体会这些命令到底是干嘛的,还必须亲自敲一敲,去理解这个命令的作用。从源码编译安装,则展示了一个遇到问题,解决问题的过程,由于编译 wget 较简单,此处也未遇到特别难处理的问题,但这清晰的展示了一个编译安装的过程,遇到错误,我们不要害怕,而要认真阅读给出的错误信息,借此搜索,提问,寻求解答。另外 Linux 下遇到问题首先要自己善于去搜索,提问,解决问题得到答案并归纳总结,不然是很难学到知识的。

Linux 容器是一个在单一 Linux 主机上提供多个隔离的 Linux 环境的操作系统级虚拟技术。不像虚拟机(VM),容器并不需要运行专用的 访客 guest 操作系统。容器们共享 宿主机的 host 操作系统内核,并使用访客操作系统的系统库来提供所需的功能。由于不需要专用的操作系统,因此容器要比虚拟器启动快得多。

(图片来自: Docker Inc.)

容器借助 Linux 内核的 Namespaces、Apparmor、SELinux 情景模式 profile 、chroot 和 CGroup 等功能来提供类似于虚拟机的隔离环境。Linux 的安全模块可以确保正确地控制容器对宿主机和内核的访问,从而避免各种入侵活动。此外,在宿主机上可以运行不同的 Linux 发行版,只要它们运行在同样的 CPU 架构下。

简单来说,容器提供的是一种基于各种 Linux 发行版创建容器镜像的方法、一套管理容器生命周期的 API、与该 API 交互的客户端工具、保存快照的功能、在宿主机之间迁移容器实例的能力,等等。

容器历史

以下是容器简史,内容来自维基百科及其它来源:

1979 — chroot

容器的概念始于 1979 年的 UNIX chroot,它是一个 UNIX 操作系统上的系统调用,用于将一个进程及其子进程的根目录改变到文件系统中的一个新位置,让这些进程只能访问到该目录。这个功能的想法是为每个进程提供独立的磁盘空间。其后在 1982年,它被加入到了 BSD 系统中。

2000 — FreeBSD Jails

FreeBSD Jails 是最早的容器技术之一,它由 R&D Associates 公司的 Derrick T. Woolworth 在 2000 年为 FreeBSD 引入。这是一个类似 chroot 的操作系统级的系统调用,但是为文件系统、用户、网络等的隔离增加了进程沙盒功能。因此,它可以为每个 jail 指定 IP 地址、可以对软件的安装和配置进行定制,等等。

2001 — Linux VServer

Linux VServer 是另外一种 jail 机制,它用于对计算机系统上的资源(如文件系统、CPU 处理时间、网络地址和内存等)进行安全地划分。每个所划分的分区叫做一个 安全上下文 security context ,在其中的虚拟系统叫做 虚拟私有服务器 virtual private server,VPS

2004 — Solaris Containers

Solaris Containers 支持在 x86 和 SPARC 系统,首次出现在 2004 年 2 月发布的 Solaris 10 的 build 51 beta 上,其后完整发布在 2005 年的 Solaris 10 上。 Solaris Container 是由系统资源控制和通过 zones 提供的 边界分离 boundary separation 所组合而成的。zones 是一个单一操作系统实例中的完全隔离的虚拟服务器。

2005 — OpenVZ

OpenVZ 类似于 Solaris Containers,它通过对 Linux 内核进行补丁来提供虚拟化、隔离、资源管理和 状态检查 checkpointing 。每个 OpenVZ 容器都有一套隔离的文件系统、用户及用户组、进程树、网络、设备和 IPC 对象。

2006 — Process Containers

Process Containers 是由 Google 在 2006 年实现的,用于对一组进程进行限制、记账、隔离资源使用(CPU、内存、磁盘 I/O、网络等)。后来为了避免和 Linux 内核上下文中的“容器”一词混淆而改名为 Control Groups。它被合并到了 2.6.24 内核中。这表明 Google 很早就参与了容器技术的开发,以及它们是如何回馈到社区的。

2007 — Control Groups

如上面所述,Control Groups (即 cgroups)是由 Google 实现的,并于 2007 年加到了 Linux 内核中。

2008 — LXC

LXC 的意思是 LinuX Containers,它是第一个最完善的 Linux 容器管理器的实现方案,是通过 cgroups 和 Linux 名字空间 namespace 实现的。LXC 存在于 liblxc 库中,提供了各种编程语言的 API 实现,包括 Python3、Python2、Lua、Go、Ruby 和 Haskell。与其它容器技术不同的是, LXC 可以工作在普通的 Linux 内核上,而不需要增加补丁。现在 LXC project 是由 Canonical 公司赞助并托管的。

2011 — Warden

Warden 是由 CloudFoundry 在 2011 年开发的,开始阶段是使用的 LXC,之后替换为他们自己的实现方案。不像 LXC,Warden 并不紧密耦合到 Linux 上,而是可以工作在任何可以提供隔离环境的操作系统上。它以后台守护进程的方式运行,为容器管理提供了 API。请参考 Warden 文档这个博客文章了解更多。

2013 — LMCTFY

lmctfy 的意思是“ 让我为你包含 Let Me Contain That For You ”。这是一个 Google 容器技术的开源版本,提供 Linux 应用容器。Google 启动这个项目旨在提供性能可保证的、高资源利用率的、资源共享的、可超售的、接近零消耗的容器(参考自:lmctfy 演讲稿.pdf))。现在为 Kubernetes 所用的 cAdvisor 工具就是从 lmctfy 项目的成果开始的。lmctfy 首次发布于 2013 年10月,在 2015 年 Google 决定贡献核心的 lmctfy 概念,并抽象成 libcontainer,因此,lmctfy 现在已经没有活跃的开发了。

lincontainer 项目最初由 Docker 发起,现在已经被移交给了 开放容器基金会 Open Container Foundation

2013 — Docker

Docker) 是到现在为止最流行和使用广泛的容器管理系统。它最初是一个叫做 dotCloud 的 PaaS 服务公司的内部项目,后来该公司改名为 Docker。类似 Warden,Docker 开始阶段使用的也是 LXC ,之后采用自己开发的 libcontainer 替代了它。不像其它的容器平台,Docker 引入了一整个管理容器的生态系统,这包括高效、分层的容器镜像模型、全局和本地的容器注册库、清晰的 REST API、命令行等等。稍后的阶段, Docker 推动实现了一个叫做 Docker Swarm 的容器集群管理方案。

2014 — Rocket

Rocket 是由 CoreOS 所启动的项目,非常类似于 Docker,但是修复了一些 Docker 中发现的问题。CoreOS 说他们的目的是提供一个比 Docker 更严格的安全性和产品需求。更重要的是,它是在一个更加开放的标准 App Container 规范上实现的。在 Rocket 之外,CoreOS 也开发了其它几个可以用于 Docker 和 Kubernetes的容器相关的产品,如:CoreOS 操作系统etcdflannel

2016 — Windows Containers

微软 2015 年也在 Windows Server 上为基于 Windows 的应用添加了容器支持,它称之为 Windows Containers。它与 Windows Server 2016 一同发布。通过该实现, Docker 可以原生地在 Windows 上运行 Docker 容器,而不需要启动一个虚拟机来运行 Docker( Windows 上早期运行 Docker 需要使用 Linux 虚拟机)。

容器的未来

截止到今天(2016年1月),在行业内有一个显著趋势,部署软件应用从虚拟机逐渐移到了容器。其主要的原因是容器相比于虚拟机而言更加灵活和低消耗。Google 已经使用容器技术好多年了,它在 Borg 和 Omega 容器集群管理平台上可以成规模地运行 Google 应用。更重要的是,Google 为容器领域贡献了 cgroups 的实现和参与了 libcontainer 项目。Google 也在过去这些年借助容器在性能、资源利用和整体效率方面取得了巨大收益。最近,一直没有操作系统级的虚拟化技术的微软,也在 Window Server 上迅速采取动作实现了对容器的原生支持。

Docker 、Rocket 以及其它的容器平台并不能以一个单一主机运行在产品环境中,原因是这样面临着单点故障。当一组容器运行在一个单一宿主机时,如果宿主机失效,所有运行在该宿主机上的容器也会失效。要避免这个问题,应该使用容器宿主机集群。Google 借助其在 Borg 中取得的经验,开发了一个叫做 Kubernetes 的开源容器集群管理系统。Docker 也启动了一个叫做 Docker Swarm 的解决方案。目前这些解决方案还都处于相当早期的阶段,也许需要几个月或来年才实现完整的功能集合,才能变得稳定,从而广泛应用于行业内的产品环境中。

微服务 Microservices 是另一个突破性技术,在软件架构上可以将容器用于部署。微服务并不是一个新东西,只是一个相比标准的 Web 服务超快的轻量级 Web 服务。这是通过将功能单元(也许是一个单一服务或 API 方法)打包到一个服务中,并内嵌其到一个轻量级 Web 服务器软件中实现的。

通过对上面的介绍,我们可以预测接下来几年,容器也许会替代虚拟机,某些情况下也许会全部取代。去年我为一些企业在 POC 层面上实现了基于容器的解决方案。也有人想要在产品环境中尝试它们,这一天也许在容器集群管理系统进一步成熟后很快到来。

今天让我们来介绍十个黑客专用的操作系统,它们被白帽黑客用作渗透测试的工具。这里我把 Kali Linux 列为首位,是因为它在渗透测试中非常流行,它的开发团队 Offensive security 同时也是开发 BackTrack 的团队。我们没有列出 BackTrack ,是因为在它的官方站点上已经无法下载了,它已经被 Kali Linux 所取代了。这里列出的操作系统都是基于 Linux 内核的,它们全都是自由的操作系统。

推荐你阅读一下我之前的一篇文章,可以深入了解下与黑客、安全相关的 Linux 发行版:给黑客或安全人员使用的 Linux 发行版: Kali、Tails 和 Qubes

1. Kali Linux

Kali Linux 是一个 Debian 衍生发行版,设计用于数字取证和渗透测试。它是由 Offensive Security 公司开发和维护的,该公司的 Mati Aharoni 和 Devon Kearns 对 BackTrack 进行了重写,从而开发了全新的 Kali Linux 。它是最灵活、最先进的渗透测试发行版。Kali 会不断更新其上的工具。它支持许多不同的平台,包括 VMware 和 ARM 等。如果你想了解更多关于 Kali Linux 的信息,推荐你阅读我之前的文章:黑客级操作系统 Kali Linux 的介绍与安装指引

点此直达下载地址。

2. BackBox

它包括了一些经常使用的安全和分析工具,可以用于从 web 应用分析到网络分析,从压力测试到嗅探,以及脆弱性分析、计算机取证分析和破解等等的各种用途。

这个发行版的一大特点是,它的 Launchpad 软件库会持续更新各种工具的最新稳定版,它们都是白帽黑客所熟知常用的。该发行版中的新工具集成和开发遵循了开源社区的标准,特别是 Debian 自由软件指导 Debian Free Software Guidelines 的标准。

点此直达下载地址。

3. Parrot Security os

Parrot Security 是一个基于 Debian GNU/Linux 的发行版,并混以 Frozenbox OS 和 Kali linux 的部分特性,以提供最好的渗透和安全测试体验。它是由 Frozenbox Dev Team 开发的。

Parrot 采用 Kali 的软件库来更新大部分工具,不过也有提供其自己的定制软件的软件库。这也是为何它不只是一个简单的 Kali 修改版,而是一个建立在 Kali 工具库之上的新系统,因此,它引入了许多新功能和不同的开发选择。Parrot 使用 MATE 作为桌面环境,这是一个轻量级的、高效的 Gnome 2 家族的衍生品。还有来自 FrozenBox 的高度定制的迷人的图标、特制的主题和墙纸。系统外观是由该社区的成员以及关注该项目进展的 Frozenbox Network 的成员建议并设计的。

点此直达下载地址。

4. deft

deft 是一个 Ubuntu 定制版,带有一整套由数以千计的个人、团队和公司所创建的计算机取证程序和文档。它们每一个都可能采用了不同的许可证,它的许可证策略决定了哪些软件会被放到 deft 中和默认放到它的安装光盘中。

点此直达下载地址。

5. Samurai Web 测试框架

Samurai Web 测试框架是一个 即用 live Linux 环境,它已经预配置好了 Web 渗透测试环境。这个即用 CD 中包含了最好的针对网站渗透测试和攻击的开源工具。在开发这个环境时,基于我们在安全方面的经验而选择的工具,可以用于 web 渗透测试的四个阶段。

点此直达下载地址。

6. 网络安全工具包 (NST)

网络安全工具包(NST)是一个可引导的 即用 live CD ,基于 Fedora Core。这个工具包设计用来便于访问最棒的开源网络安全应用,主要运行在 x86 平台上。开发这个网络安全工具包的主要目的是为网络安全管理人员提供一套完备的开源网络安全工具。

NST 最神奇的地方是可以将大多数 x86 机器(奔腾2及以上)转换成一台可以用于网络流量分析、入侵检测、网络数据包生成、无线网络监控的虚拟服务器,当然它也可以当做一套复杂的网络/主机扫描器来使用。

点此直达下载地址。

7. Bugtraq

Bugtraq 系统是一个很全面的发行版,包括了优化后的、稳定的实时自动服务管理器。该发行版基于 Linux 内核 3.2 和 3.4,支持 32 位和 64 位。Bugtraq 的一大亮点是其放在不同分类中的大量工具,你可以找到移动取证工具、恶意软件测试实验室、Bugtraq 资讯工具、GSM 审计工具,支持无线、蓝牙和 RFID 等,集成了 Windows 工具,以及各种典型的渗透测试和取证工具。

点此直达下载地址。

8. NodeZero

老话说需求是发明之母,NodeZero Linux 就是这句话的最好例证。这个开发团队是由渗透测试人员和开发人员构成的,他们发现“ 即用 live ”系统并不能真正满足他们在安全审计方面的所需。渗透测试发行版一般都是以 Linux “即用”系统方式提供的,这意味着他们并不能对系统做一些永久性的改变。从光盘或 USB 棒中启动运行后,在重启后所有的改变就都丢失了。这对于偶尔的测试也许很有用,但是对于经常性的测试就没什么用了,并不适合需要大量测试的环境。

虽然 NodeZero Linux 可以当做“ 即用系统 Live System ”偶尔使用,但是它真正的力量来自于那些需要强有力测试系统的测试人员的需求。它通过持久安装、精选的强大工具、集成于稳定的 Linux 环境来满足了上述需求。

点此直达下载地址。

9. Pentoo

Pentoo 是一个用于渗透测试和安全评估的即用 CD 和 USB。它基于 Gentoo Linux ,提供了 32 位和 64 位的即用 CD 。Pentoo 也可以覆盖安装到现有的 Gentoo 环境中。它提供了特色的带有包注入补丁的 WIFI 驱动,GPGPU 破解软件,以及许多渗透测试和安全评估的软件。Pentoo 内核带有 grsecurity 和 PAX 加固补丁,其提供的二进制是由加固工具链编译而成的,其中一些工具还有最新的每日构建版本。

点此直达下载地址。

10. Cyborg Hawk

迄今以来,最先进的、强大而美观的渗透测试发行版。收集了最完备的工具,可供专业的白帽黑客和网络安全专家使用。它带有700 个以上的工具,而 Kali 仅带了300 多个。这其中包括了移动安全工具和恶意软件分析工具。之所以放到最后是因为笔者并没有测试过它。

Cyborg Hawk 是 Team Cybord 开发的,该组织由来自 Ztrela Knowledge Solutions 的 Vaibhav Singh 和 Shahnawaz Alam 所领导。

点此直达下载地址。