分类 系统运维 下的文章

这个例子让我们看到了在 Foreman 中管理和配置 CentOS Stream 内容的许多选项。

 title=

2021 年 12 月,CentOS 8 将达到生命终点,被 CentOS Stream 取代。CentOS Stream 和 CentOS 之前的迭代之间的主要变化之一是没有小版本。Centos Stream 采用了一个连续的发布周期。从今年年初开始,Foreman 社区的开发者开始看到 CentOS Stream 由于持续发布而提供的更早的错误检测和补丁的好处。我们不再需要等待下一个版本来利用最新的变化和错误修复。一位资深的 Linux 社区爱好者 指出,此举也使 RHEL 开发者比以往更接近 FOSS 社区。

然而,如果你是一个拥有数百或数千台服务器的管理员,你可能想控制新的软件包何时被添加到特定的服务器。如果你正在寻找一个免费的开源工具,帮助你确保生产服务器的稳定性,同时允许你安全地从 Centos Stream 中拉入最新的变化用于开发和测试,这就是 Foreman 可以帮助你的地方。有了 Foreman,你可以在生命周期环境的各个阶段管理你的 Centos Stream 内容。

Foreman 介绍

Foreman 是一个完整的物理和虚拟服务器的生命周期管理工具。有了 Foreman,系统管理员有能力轻松实现重复性任务的自动化,快速部署应用程序,并主动管理内部或云中的服务器。Foreman 为 配备 provisioning 管理、配置管理和监控提供了企业级解决方案。由于其插件架构,Foreman 可以以无数种方式进行扩展。使用 Katello 插件,你可以把 Foreman 作为一个完整的 内容管理 content management 工具来管理 CentOS Stream,以及其他许多内容类型。

通过 Foreman 和 Katello,你可以准确地定义你希望每个环境包含哪些软件包。例如,生产环境可能使用已被验证为稳定的软件包,而开发环境可能需要最新、最先进的软件包版本。你还可以跨生命周期环境推广 内容视图 content view 。让我们来看看 Foreman 是如何完成这个任务的。

我们在这篇文章中使用了网页用户界面,但 Foreman 也有一个强大的 CLI 和 API。Katello 插件为 Pulp 项目提供了一个工作流和网页用户界面,你可以在 这篇文章 中了解更多。我们在这里也提供了一个简单的工作流程,但是 Foreman 和 Katello 项目提供了许多不同的配置选项来满足你的具体需求。

本文假设 Foreman 和 Katello 已经安装完毕。关于如何安装的更多信息,请参阅 Katello 安装手册

创建一个产品

第一步是在 Foreman 中创建一个 产品 product 。该产品的功能是作为一个内部标签来存储 CentOS Stream 存储库。

  1. 在 Foreman 网页用户界面,导航到“ 内容 Content > 产品 Products ”,并点击“ 创建产品 Create Product ”。
  2. 在“ 名称 Name ”字段中,为产品输入一个名称。Foreman会根据你输入的“ 名称 Name ”自动完成“ 标签 Label ”字段,以后不能再更改。

将 CentOS Stream 存储库添加到产品中

现在你有了一个产品,你可以使用 AppStream 和 BaseOS 存储库的 URL,并将它们添加到你的新产品中。

  1. 在 Foreman 网页用户界面中,导航到 “ 内容 Content > 产品 Products ”,选择你要使用的产品,然后点击 “ 新存储库 New Repository ”。
  2. 在“ 名称 Name ”字段中,为存储库输入一个名称;例如,“Centos8StreamBaseOS”。Foreman 会根据你输入的“ 名称 Name ”,自动完成“ 标签 Label ”字段。
  3. 从“ 类型 Type ”列表中,选择存储库的类型,然后选择“Yum”。
  4. 在 “URL” 字段中,输入 CentOS Stream Baseos 存储库的 URL,作为源: http://mirror.centos.org/centos/8-stream/BaseOS/x86_64/os/
  5. 选择“ 下载规则 Download Policy ”列表。默认的是“ 按需 On Demand ”,这意味着 Katello 将只下载元数据。如果你想下载所有的软件包,请改成“ 即时 Immediate ”,它可以下载所有的软件包,可能会达到 20-30GB。
  6. 确保“ 与镜像同步 Mirror on Sync ”复选框被选中。这个选项确保在同步过程中,不再是上游存储库的一部分的内容被删除。
  7. 点击“ 保存 Save ”。

重复这些步骤,添加 AppStream 存储库及其 URL,例如,http://mirror.centos.org/centos/8-stream/AppStream/x86_64/os/。确保你使用最近的官方 CentOS 镜像来代替它。

要执行立即同步,在你的产品窗口,点击“ 立即同步 Sync Now ”。最初的同步可能需要一些时间。你可以从“ 内容 Content > 同步状态 Sync Status ”查看同步状态。

同步完成后,你可以在“ 主机 Hosts > 操作系统 Operating System ”中查看新的 CentOS Stream 操作系统。请随意编辑名称和描述以满足你的要求。

如果你打算使用 Ansible 或 Puppet 等配置管理软件,Foreman 会自动创建一个操作系统报告。你可以在“ 管理 Administe > 设置 Settings > 忽略操作系统状况 Ignore facts for operating system ”中关闭这个选项。重命名操作系统以匹配配置管理软件中的名称是一个好主意。例如,对于 Puppet,这将是“CentOS 8”。

定义你的基础设施的生命周期环境

应用程序生命周期是 Foreman 的内容管理功能的一个核心概念。应用程序的生命周期定义了一个特定的系统和它的软件在特定阶段的状况。例如,一个应用程序的生命周期可能很简单,你可能只有一个“开发”阶段和“生产”阶段。Foreman 提供了一些方法来以可控的方式定制每个应用生命周期阶段,以适应你的规范。

在这一点上,你必须创建你的生命周期环境路径。

  1. 在 Foreman 网页用户界面中,导航到“ 内容 Content > 生命周期环境 Lifecycle Environments ”。
  2. 点击“ 新环境路径 New Environment Path ”,开始一个新的应用生命周期。
  3. 在“ 名称 Name ”字段中,为你的环境输入一个名称。
  4. 在“ 描述 Description ”字段中,为你的环境输入一个描述。
  5. 点击“ 保存 Save ”。
  6. 根据你的需要添加尽可能多的环境路径。例如,你可以创建“dev”、“test”、“stage” 和 “production” 环境。要添加这些环境,点击“添加新环境”,完成“ 名称 Name ”和“ 描述 Description ”字段,并从“ 优先环境 Prior Environment* ”列表中选择先前的环境,这样你就可以按照你预期使用的顺序将它们串联起来。

创建和发布一个内容视图

在 Foreman 中,“ 内容视图 Content View ”是你的存储库在某个特定时间点的快照。内容视图提供了隔离软件包版本到你想保留的状态的机制。内容视图有很多可配置的功能,你可以用它来进一步细化。为了本教程的目的,让我们保持简单。

  1. 在 Foreman 网页用户界面中,导航到“ 内容 Content > 内容视图 Content View ”,并点击“ 创建新视图 Create New View ”。
  2. 在“ 名称 Name ”字段中,为视图输入一个名称。Foreman 会根据你输入的名称自动完成“ 标签 Label ”字段。
  3. 在“ 描述 Description ”字段中,输入视图的描述。
  4. 单击“ 保存 Save ”以创建内容视图。
  5. 在新的内容视图中,点击“ Yum 内容 Yum Contents > 添加存储库 Add Repositories ”,在“ 存储库选择 Repository Selection ”区域,点击“ 添加 Add ”。对于 BaseOS 和 Appstream 存储库,选择你想包括的软件包,然后点击“ 添加存储库 Add Repositories ”。
  6. 点击“ 发布新版本 Publish New Version ”,在“ 描述 Description ”区域,输入关于版本的信息以记录变化。
  7. 单击“ 保存 Save ”。

当你点击“ 发布新版本 Publish New Version ”时,你创建了一个你已同步的所有内容的快照。这意味着你订阅此内容视图的每台服务器将只能访问与此生命周期环境相关的内容视图中的软件包版本。

每一个新的内容视图和后续版本都会首先发布到库环境,然后你可以在那里推广到其他环境。

跨生命周期环境推广内容

如果你已经测试了新的软件包,并且确信一切都很稳定,你可以把你的内容视图推广到另一个生命周期环境中。

  1. 导航到“ 内容 Content > 内容视图 Content Views ”,选择你想推广的内容视图。
  2. 点击内容视图的“ 版本 Versions ”标签。
  3. 选择你想推广的版本,并在“ 操作 Action ”栏中,点击“ 推广 Promote ”。
  4. 选择你要推广内容视图的环境,并点击“ 推广版本 Promote Version ”。
  5. 再次点击“ 推广 Promote ”按钮。这次选择生命周期环境,例如,“Test”,然后单击“ 推广版本 Promote Version ”。
  6. 最后,再次点击“ 推广 Promote ”按钮。例如,选择“Production”环境并点击“ 推广版本 Promote Version ”。

被分配到该特定环境的服务器现在可以从一套更新的软件包中提取。

创建一个激活密钥

为了将 CentOS Stream 服务器注册到你在特定生命周期中定义的内容,你必须创建一个激活密钥。激活密钥是一种与服务器共享凭证的安全方法。这使用了一个叫做“ 订阅管理器 subscription-manager 的工具来订阅 CentOS Stream 服务器的内容。

当你创建了激活密钥后,将 CentOS Stream 订阅添加到激活密钥中。

  1. 在 Foreman 网页用户界面中,导航到“ 内容 Content > 激活密钥 Activation keys ”,并点击“ 创建激活密钥 Create Activation Key ”。
  2. 在“ 名称 Name ”栏中,输入激活密钥的名称。
  3. 在“ 描述 Description ”栏中,输入激活密钥的描述。
  4. 从“ 环境 Environment ”列表中,选择要使用的环境。
  5. 从“ 内容视图 Content View ”列表中,选择你刚才创建的内容视图。
  6. 点击“ 保存 Save ”。

从 Foreman 管理的内容中创建一个 CentOS Stream 主机

现在一切都准备好了。随着你创建的内容包含在内容视图中,并在整个生命周期中推广,你现在可以准确地用你想使用的内容来配置主机,并订阅你想让它们接收的更新。

要在 Foreman 中创建一个主机,请导航到“主机 > 创建主机”。

  1. 在“ 名称 Name ”字段中,为主机输入一个名称。
  2. 单击“ 组织 Organization ”和“ 位置 Location ”选项卡,以确保配置环境自动设置为当前环境。
  3. 从“ 部署在 Deploy On ”列表中,选择“ 裸金属 Bare Metal ”。
  4. 单击“ 操作系统 Operating System ”选项卡。
  5. 从“ 架构 Architectures ”列表中,选择“x86\_64”。
  6. 从“ 操作系统 Operating System ”列表中,选择“CentOS\_Stream 8”。
  7. 勾选“ 构建模式 Build Mode ”框。
  8. 对于“ 媒体选择 Media Selection ”,选择“ 同步的内容 Synced Content ”来使用你之前同步的 CentOS Stream 内容。
  9. 从“ 同步的内容 Synced Content ”列表中,确保选择 “CentOS Stream”。
  10. 从“ 分区表 Partition Table ”列表中,对于这个演示,选择默认的 “Kickstart”,但有许多可用的选项。
  11. 在“ Root 密码 Root Password ”栏中,为你的新主机输入一个 root 密码。
  12. 点击“ 接口 Interface ”标签,并点击“ 编辑 Edit ”,并添加一个 “ Mac 地址 Mac address ”。
  13. 点击“ 参数 Parameters ”标签,并确保存在一个提供激活密钥的参数。如果没有,添加一个激活密钥。
  14. 点击“ 提交 Submit ”以保存主机条目。

现在,新的主机处于构建模式,这意味着当你打开它时,它将开始安装操作系统。

如果你导航到“ 主机 Hosts > 内容主机 Content Hosts ”,你可以看到你的主机所订阅的订阅、生命周期环境和内容视图的全部细节。

这个例子只是对你在 Foreman 中管理和配置 CentOS Stream 内容的众多选项的一个小窥视。如果你想了解更多关于如何管理 CentOS Stream 版本,控制你的服务器可以访问的内容,以及控制和保护你的基础设施的稳定性的详细信息,请查看 Foreman 内容管理 文档。当所有 CentOS Stream 内容在你的控制之下时,你可以创建和注册 Centos Stream,只使用你指定的内容。有关配备的更多详细信息,请参见 Foreman 配备 文档。如果你有任何问题、反馈或建议,你可以在 https://community.theforeman.org/ 找到 Foreman 社区。


via: https://opensource.com/article/21/9/centos-stream-foreman

作者:Melanie Corr 选题:lujun9972 译者:wxy 校对:wxy

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

了解如何使用 Kubermatic Kubernetes 平台来部署、扩展与管理图像识别预测的深度学习模型。

 title=

随着企业增加了对人工智能(AI)、机器学习(ML)与深度学习(DL)的使用,出现了一个关键问题:如何将机器学习的开发进行规模化与产业化?这些讨论经常聚焦于机器学习模型本身;然而,模型仅仅只是完整解决方案的其中一环。为了达到生产环境的应用和规模,模型的开发过程必须还包括一个可以说明开发前后关键活动以及可公用部署的可重复过程。

本文演示了如何使用 Kubermatic Kubernetes 平台 对图像识别预测的深度学习模型进行部署、扩展与管理。

Kubermatic Kubernetes 平台是一个生产级的开源 Kubernetes 集群管理工具,提供灵活性和自动化,与机器学习/深度学习工作流程整合,具有完整的集群生命周期管理。

开始

这个例子部署了一个用于图像识别的深度学习模型。它使用了 CIFAR-10 数据集,包含了 60,000 张分属 10 个类别的 32x32 彩色图,同时使用了 Apache MXNetGluon 与 NVIDIA GPU 进行加速计算。如果你希望使用 CIFAR-10 数据集的预训练模型,可以查阅其 入门指南

使用训练集中的样本对模型训练 200 次,只要训练误差保持缓慢减少,就可以保证模型不会过拟合。下方图展示了训练的过程:

 title=

训练结束后,必须保存模型训练所得到的参数,以便稍后可以加载它们:

file_name = "net.params"
net.save_parameters(file_name)

一旦你的模型训练好了,就可以用 Flask 服务器来封装它。下方的程序演示了如何接收请求中的一张图片作为参数,并在响应中返回模型的预测结果:

from gluoncv.model_zoo import get_model
import matplotlib.pyplot as plt
from mxnet import gluon, nd, image
from mxnet.gluon.data.vision import transforms
from gluoncv import utils
from PIL import Image
import io
import flask
app = flask.Flask(__name__)

@app.route("/predict",methods=["POST"])
def predict():
    if flask.request.method == "POST":
        if flask.request.files.get("img"):
           img = Image.open(io.BytesIO(flask.request.files["img"].read()))
            transform_fn = transforms.Compose([
            transforms.Resize(32),
            transforms.CenterCrop(32),
            transforms.ToTensor(),
            transforms.Normalize([0.4914, 0.4822, 0.4465], [0.2023, 0.1994, 0.2010])])
            img = transform_fn(nd.array(img))
            net = get_model('cifar_resnet20_v1', classes=10)
            net.load_parameters('net.params')
            pred = net(img.expand_dims(axis=0))
            class_names = ['airplane', 'automobile', 'bird', 'cat', 'deer',
                       'dog', 'frog', 'horse', 'ship', 'truck']
            ind = nd.argmax(pred, axis=1).astype('int')
            prediction = 'The input picture is classified as [%s], with probability %.3f.'%
                         (class_names[ind.asscalar()], nd.softmax(pred)[0][ind].asscalar())
    return prediction

if __name__ == '__main__':
   app.run(host='0.0.0.0')

容器化模型

在将模型部署到 Kubernetes 前,你需要先安装 Docker 并使用你的模型创建一个镜像。

  1. 下载、安装并启动 Docker:
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo <https://download.docker.com/linux/centos/docker-ce.repo>
sudo yum install docker-ce
sudo systemctl start docker
  1. 创建一个你用来管理代码与依赖的文件夹:
mkdir kubermatic-dl
cd kubermatic-dl
  1. 创建 requirements.txt 文件管理代码运行时需要的所有依赖:
flask
gluoncv
matplotlib
mxnet
requests
Pillow
  1. 创建 Dockerfile,Docker 将根据这个文件创建镜像:
FROM python:3.6
WORKDIR /app
COPY requirements.txt /app
RUN pip install -r ./requirements.txt
COPY app.py /app
CMD ["python", "app.py"]

这个 Dockerfile 主要可以分为三个部分。首先,Docker 会下载 Python 的基础镜像。然后,Docker 会使用 Python 的包管理工具 pip 安装 requirements.txt 记录的包。最后,Docker 会通过执行 python app.py 来运行你的脚本。

  1. 构建 Docker 容器:
sudo docker build -t kubermatic-dl:latest .

这条命令使用 kubermatic-dl 镜像为你当前工作目录的代码创建了一个容器。

  1. 使用
sudo docker run -d -p 5000:5000 kubermatic-dl

命令检查你的容器可以在你的主机上正常运行。

  1. 使用
sudo docker ps -a

命令查看你本地容器的运行状态:

 title=

将你的模型上传到 Docker Hub

在向 Kubernetes 上部署模型前,你的镜像首先需要是公开可用的。你可以通过将你的模型上传到 Docker Hub 来将它公开。(如果你没有 Docker Hub 的账号,你需要先创建一个)

  1. 在终端中登录 Docker Hub 账号:
sudo docker login
  1. 给你的镜像打上标签,这样你的模型上传到 Docker Hub 后也能拥有版本信息:
sudo docker tag <your-image-id> <your-docker-hub-name>/<your-app-name>

sudo docker push <your-docker-hub-name>/<your-app-name>

 title=

  1. 使用
sudo docker images

命令检查你的镜像的 ID。

部署你的模型到 Kubernetes 集群

  1. 首先在 Kubermatic Kubernetes 平台创建一个项目, 然后根据 快速开始 创建一个 Kubernetes 集群。

 title=

  1. 下载用于访问你的集群的 kubeconfig,将它放置在下载目录中,并记得设置合适的环境变量,使得你的环境能找到它:

 title=

  1. 使用 kubectl 命令检查集群信息,例如,需要检查 kube-system 是否在你的集群正常启动了就可以使用命令 kubectl cluster-info

 title=

  1. 为了在集群中运行容器,你需要创建一个部署用的配置文件(deployment.yaml),再运行 apply 命令将其应用于集群中:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: kubermatic-dl-deployment
spec:
  selector:
    matchLabels:
      app: kubermatic-dl
  replicas: 3
  template:
    metadata:
      labels:
        app: kubermatic-dl
    spec:
     containers:
     - name: kubermatic-dl
       image: kubermatic00/kubermatic-dl:latest
       imagePullPolicy: Always
       ports:
       - containerPort: 8080

kubectl apply -f deployment.yaml`
  1. 为了将你的部署开放到公网环境,你需要一个能够给你的容器创建外部可达 IP 地址的服务:
kubectl expose deployment kubermatic-dl-deployment  --type=LoadBalancer --port 80 --target-port 5000`
  1. 就快大功告成了!首先检查你布署的服务的状态,然后通过 IP 请求的你图像识别 API:
kubectl get service

 title=

  1. 最后根据你的外部 IP 使用以下两张图片对你的图像识别服务进行测试:

 title=

 title=

 title=

总结

在这篇教程中,你可以创建一个深度学习模型,并且使用 Flask 提供 REST API 服务。它介绍了如何将应用放在 Docker 容器中,如何将这个镜像上传到 Docker Hub 中,以及如何使用 Kubernetes 部署你的服务。只需几个简单的命令,你就可以使用 Kubermatic Kubernetes 平台部署该应用程序,并且开放服务给别人使用。


via: https://opensource.com/article/20/9/deep-learning-model-kubernetes

作者:Chaimaa Zyani 选题:lujun9972 译者:chunibyo-wly 校对:wxy

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

本教程解释了如何实时监控 Linux 日志文件(桌面、服务器或应用),以进行诊断和故障排除。

当你在你的 Linux 桌面、服务器或任何应用中遇到问题时,你会首先查看各自的日志文件。日志文件通常是来自应用的文本和信息流,上面有一个时间戳。它可以帮助你缩小具体的实例,并帮助你找到任何问题的原因。它也可以帮助从网络上获得援助。

一般来说,所有的日志文件都位于 /var/log 中。这个目录包含以 .log 为扩展名的特定应用、服务的日志文件,它还包含单独的其他目录,这些目录包含其日志文件。

log files in var-log

所以说,如果你想监控一堆日志文件或特定的日志文件。这里有一些你可以做到方法。

实时监控 Linux 日志文件

使用 tail 命令

使用 tail 命令是实时跟踪日志文件的最基本方法。特别是,如果你所在的服务器只有一个终端,没有 GUI。这是很有帮助的。

比如:

tail /path/to/log/file

Monitoring multiple log files via tail

使用开关 -f 来跟踪日志文件,它是实时更新的。例如,如果你想跟踪 syslog,你可以使用以下命令:

tail -f /var/log/syslog

你可以用一个命令监控多个日志文件,使用:

tail -f /var/log/syslog /var/log/dmesg

如果你想监控 http 或 sftp 或任何服务器,你也可以在这个命令中监控它们各自的日志文件。

记住,上述命令需要管理员权限。

使用 lnav(日志文件浏览器)

lnav Running

lnav 是一个很好的工具,你可以用它来通过彩色编码的信息以更有条理的方式监控日志文件。在 Linux 系统中,它不是默认安装的。你可以用下面的命令来安装它:

sudo apt install lnav ### Ubuntu
sudo dnf install lnav ### Fedora

好的是,如果你不想安装它,你可以直接下载其预编译的可执行文件,然后在任何地方运行。甚至从 U 盘上也可以。它不需要设置,而且有很多功能。使用 lnav,你可以通过 SQL 查询日志文件,以及其他很酷的功能,你可以在它的 官方网站 上了解。

一旦安装,你可以简单地用管理员权限从终端运行 lnav,它将默认显示 /var/log 中的所有日志并开始实时监控。

关于 systemd 的 journalctl 说明

今天所有的现代 Linux 发行版大多使用 systemd。systemd 提供了运行 Linux 操作系统的基本框架和组件。systemd 通过 journalctl 提供日志服务,帮助管理所有 systemd 服务的日志。你还可以通过以下命令实时监控各个 systemd 服务和日志。

journalctl -f

下面是一些具体的 journalctl 命令,可以在一些情况下使用。你可以将这些命令与上面的 -f 开关结合起来,开始实时监控。

  • 对紧急系统信息,使用:
journalctl -p 0
  • 显示带有解释的错误:
journalctl -xb -p 3
  • 使用时间控制来过滤输出:
journalctl --since "2020-12-04 06:00:00"
journalctl --since "2020-12-03" --until "2020-12-05 03:00:00"
journalctl --since yesterday
journalctl --since 09:00 --until "1 hour ago"

如果你想了解更多关于 journalctl 的细节,我已经写了一个 指南

结束语

我希望这些命令和技巧能帮助你找出桌面或服务器问题/错误的根本原因。对于更多的细节,你可以随时参考手册,摆弄各种开关。如果你对这篇文章有什么意见或看法,请在下面的评论栏告诉我。

加油。


via: https://www.debugpoint.com/2021/08/monitor-log-files-real-time/

作者:Arindam 选题:lujun9972 译者:geekpi 校对:wxy

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

有将近 1400 万基于 Linux 的系统直接暴露在互联网上,这使得它们成为有利可图的现实世界攻击目标,这些攻击可能会导致它们被部署恶意的 Webshell、加密货币矿工、勒索软件和其他木马。

网络安全公司 趋势科技 发布了一份对 Linux 威胁形势的深入研究,其根据从蜜罐、传感器和匿名遥测中收集的数据,详细介绍了 2021 年上半年影响 Linux 操作系统的首要威胁和漏洞。

该公司检测到近 1500 万个针对基于 Linux 的云环境的恶意软件事件,发现加密货币矿工和勒索软件占所有恶意软件的 54%,Webshell 占 29%。

此外,通过剖析同一时期 10 万台 Linux 主机报告的 5000 多万例事件,研究人员发现了 15 个顶级安全缺陷,这些缺陷已经在野外被广泛利用或有了概念证明(PoC):

  • CVE-2017-5638(CVSS 评分:10.0) - Apache Struts 2 远程代码执行(RCE)漏洞
  • CVE-2017-9805(CVSS 评分:8.1) - Apache Struts 2 REST 插件 XStream RCE 漏洞
  • CVE-2018-7600(CVSS 评分:9.8) - Drupal Core RCE 漏洞
  • CVE-2020-14750(CVSS 评分:9.8) - Oracle WebLogic Server RCE 漏洞
  • CVE-2020-25213(CVSS 评分:10.0) - WordPress 文件管理器(wp-file-manager)插件 RCE 漏洞
  • CVE-2020-17496(CVSS score: 9.8) - vBulletin subwidgetConfig 未认证 RCE 漏洞
  • CVE-2020-11651(CVSS 评分: 9.8) - SaltStack Salt 授权弱点漏洞
  • CVE-2017-12611(CVSS 评分: 9.8) - Apache Struts OGNL 表达式 RCE 漏洞
  • CVE-2017-7657(CVSS score: 9.8) - Eclipse Jetty 块长度解析的整数溢出漏洞
  • CVE-2021-29441(CVSS 评分:9.8) - 阿里巴巴 Nacos AuthFilter 认证绕过漏洞
  • CVE-2020-14179(CVSS 评分:5.3) - Atlassian Jira 信息泄露漏洞
  • CVE-2013-4547(CVSS 评分:8.0) - Nginx 制作的 URI 字符串处理访问限制绕过漏洞
  • CVE-2019-0230(CVSS 评分:9.8) - Apache Struts 2 RCE 漏洞
  • CVE-2018-11776(CVSS 评分:8.1) - Apache Struts OGNL 表达式RCE 漏洞
  • CVE-2020-7961(CVSS 评分:9.8) - Liferay Portal 不受信任的反序列化漏洞

更令人不安的是,官方 Docker Hub 资源库中最常用的 15 个 Docker 镜像被发现存在数百个漏洞,这涉及 python、node、wordpress、golang、nginx、postgres、influxdb、httpd、mysql、debian、memcached、redis、mongo、centos 和 rabbitmq。这表明需要在开发管道的每个阶段保护容器免受广泛的潜在威胁。

研究人员总结说:“用户和组织应始终应用安全最佳实践,其中包括利用安全设计方法,部署多层虚拟补丁或漏洞屏蔽,采用最小特权原则,并坚持共同责任模式。”


via: https://thehackernews.com/2021/08/top-15-vulnerabilities-attackers.html

作者:Ravie Lakshmanan 选题:wxy 译者:wxy 校对:wxy

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

在 Linux 系统中有一些其他开源项目可以结合或者替代 cron 系统使用。

 title=

Linux cron 系统 是一项经过时间检验的成熟技术,然而在任何情况下它都是最合适的系统自动化工具吗?答案是否定的。有一些开源项目就可以用来与 cron 结合或者直接代替 cron 使用。

at 命令

cron 适用于长期重复任务。如果你设置了一个工作任务,它会从现在开始定期运行,直到计算机报废为止。但有些情况下你可能只想设置一个一次性命令,以备不在计算机旁时该命令可以自动运行。这时你可以选择使用 at 命令。

at 的语法比 cron 语法简单和灵活得多,并且兼具交互式和非交互式调度方法。(只要你想,你甚至可以使用 at 作业创建一个 at 作业。)

$ echo "rsync -av /home/tux/ me@myserver:/home/tux/" | at 1:30 AM

该命令语法自然且易用,并且不需要用户清理旧作业,因为它们一旦运行后就完全被计算机遗忘了。

阅读有关 at 命令 的更多信息并开始使用吧。

systemd

除了管理计算机上的进程外,systemd 还可以帮你调度这些进程。与传统的 cron 作业一样,systemd 计时器可以在指定的时间间隔触发事件,例如 shell 脚本和命令。时间间隔可以是每月特定日期的一天一次(例如在星期一的时候触发),或者在 09:00 到 17:00 的工作时间内每 15 分钟一次。

此外 systemd 里的计时器还可以做一些 cron 作业不能做的事情。

例如,计时器可以在一个事件 之后 触发脚本或程序来运行特定时长,这个事件可以是开机,可以是前置任务的完成,甚至可以是计时器本身调用的服务单元的完成!

如果你的系统运行着 systemd 服务,那么你的机器就已经在技术层面上使用 systemd 计时器了。默认计时器会执行一些琐碎的任务,例如滚动日志文件、更新 mlocate 数据库、管理 DNF 数据库等。创建自己的计时器很容易,具体可以参阅 David Both 的文章 使用 systemd 计时器来代替 cron

anacron 命令

cron 专门用于在特定时间运行命令,这适用于从不休眠或断电的服务器。然而对笔记本电脑和台式工作站而言,时常有意或无意地关机是很常见的。当计算机处于关机状态时,cron 不会运行,因此设定在这段时间内的一些重要工作(例如备份数据)也就会跳过执行。

anacron 系统旨在确保作业定期运行,而不是按计划时间点运行。这就意味着你可以将计算机关机几天,再次启动时仍然靠 anacron 来运行基本任务。anacron 与 cron 协同工作,因此严格来说前者不是后者的替代品,而是一种调度任务的有效可选方案。许多系统管理员配置了一个 cron 作业来在深夜备份远程工作者计算机上的数据,结果却发现该作业在过去六个月中只运行过一次。anacron 确保重要的工作在 可执行的时候 发生,而不是必须在安排好的 特定时间点 发生。

点击参阅关于 使用 anacron 获得更好的 crontab 效果 的更多内容。

自动化

计算机和技术旨在让人们的生活更美好,工作更轻松。Linux 为用户提供了许多有用的功能,以确保完成重要的操作系统任务。查看这些可用的功能,然后试着将这些功能用于你自己的工作任务吧。(LCTT 译注:作者本段有些语焉不详,读者可参阅譬如 Ansible 自动化工具安装、配置和快速入门指南 等关于 Linux 自动化的文章)


via: https://opensource.com/article/21/7/alternatives-cron-linux

作者:Seth Kenlon 选题:lujun9972 译者:unigeorge 校对:wxy

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

使用 Kali Linux 和其他开源工具来发现系统中的安全漏洞和弱点。

 title=

众多被广泛报道的大型消费企业入侵事件凸显了系统安全管理的重要性。幸运的是,有许多不同的应用程序可以帮助保护计算机系统。其中一个是 Kali,一个为安全和渗透测试而开发的 Linux 发行版。本文演示了如何使用 Kali Linux 来审视你的系统以发现弱点。

Kali 安装了很多工具,它们都是开源的,默认情况下安装了它们会让事情变得更容易。

(LCTT 译注:Kali 及其携带工具只应该用于对自己拥有合法审查权利的系统和设备,任何未经授权的扫描、渗透和攻击均是违法的。本文作者、译者均不承担任何非授权使用的结果。)

 title=

本文使用的系统是:

  1. kali.usersts.redhat.com:这是我将用来启动扫描和攻击的系统。它拥有 30GB 内存和 6 个虚拟 CPU(vCPU)。
  2. vulnerable.usersys.redhat.com: 这是一个 Red Hat 企业版 Linux 8 系统,它会成为目标。它拥有 16GB 内存和 6 个 vCPU。它是一个相对较新的系统,但有些软件包可能已经过时。
  3. 这个系统包括 httpd-2.4.37-30.module+el8.3.0+7001+0766b9e7.x86_64mariadb-server-10.3.27-3.module+el8.3.0+8972+5e3224e9.x86_64tigervnc-server-1.9.0-15.el8_1.x86_64vsftpd-3.0.3-32.el8.x86_64 和一个 5.6.1 版本的 WordPress。

我在上面列出了硬件规格,因为一些任务要求很高,尤其是在运行 WordPress 安全扫描程序(WPScan)时对目标系统 CPU 的要求。

探测你的系统

首先,我会在目标系统上进行基本的 Nmap 扫描(你可以阅读 使用 Nmap 结果帮助加固 Linux 系统 一文来更深入地了解 Nmap)。Nmap 扫描是一种快速的方法,可以大致了解被测系统中哪些端口和服务是暴露的。

 title=

默认扫描显示有几个你可能感兴趣的开放端口。实际上,任何开放端口都可能成为攻击者破坏你网络的一种方式。在本例中,端口 21、22、80 和 443 是不错的扫描对象,因为它们是常用服务的端口。在这个早期阶段,我只是在做侦察工作,尽可能多地获取有关目标系统的信息。

我想用 Nmap 侦察 80 端口,所以我使用 -p 80 参数来查看端口 80,-A 参数来获取操作系统和应用程序版本等信息。

 title=

关键信息有:

PORT   STATE SERVICE VERSION
80/tcp open  http       Apache httpd 2.4.37 ((Red Hat Enterprise Linux))
|_http-generator: WordPress 5.6.1

现在我知道了这是一个 WordPress 服务器,我可以使用 WPScan 来获取有关潜在威胁的信息。一个很好的侦察方法是尝试找到一些用户名,使用 --enumerate u 告诉 WPScan 在 WordPress 实例中查找用户名。例如:

┌──(root?kali)-[~]
└─# wpscan --url vulnerable.usersys.redhat.com --enumerate u
_______________________________________________________________
        __              _______   _____
        \ \     / /  __ \ / ____|
        \ \  /\  / /| |__) | (___   ___  __ _ _ __ ®
        \ \/  \/ / |  ___/ \___ \ / __|/ _` | '_ \
                \  /\  /  | |   ____) | (__| (_| | | | |
                \/  \/   |_|    |_____/ \___|\__,_|_| |_|

        WordPress Security Scanner by the WPScan Team
                        Version 3.8.10
        Sponsored by Automattic - https://automattic.com/
        @_WPScan_, @ethicalhack3r, @erwan_lr, @firefart
_______________________________________________________________

[+] URL: http://vulnerable.usersys.redhat.com/ [10.19.47.242]
[+] Started: Tue Feb 16 21:38:49 2021

Interesting Finding(s):
...
[i] User(s) Identified:

[+] admin
 | Found By: Author Posts - Display Name (Passive Detection)
 | Confirmed By:
 |  Author Id Brute Forcing - Author Pattern (Aggressive Detection)
 |  Login Error Messages (Aggressive Detection)

[+] pgervase
 | Found By: Author Posts - Display Name (Passive Detection)
 | Confirmed By:
 |  Author Id Brute Forcing - Author Pattern (Aggressive Detection)
 |  Login Error Messages (Aggressive Detection)

这显示有两个用户:adminpgervase。我将尝试使用密码字典来猜测 admin 的密码。密码字典是一个包含很多密码的文本文件。我使用的字典大小有 37G,有 3,543,076,137 行。

就像你可以选择不同的文本编辑器、Web 浏览器和其他应用程序 一样,也有很多工具可以启动密码攻击。下面是两个使用 Nmap 和 WPScan 的示例命令:

# nmap -sV --script http-wordpress-brute --script-args userdb=users.txt,passdb=/path/to/passworddb,threads=6 vulnerable.usersys.redhat.com
# wpscan --url vulnerable.usersys.redhat.com --passwords /path/to/passworddb --usernames admin --max-threads 50 | tee nmap.txt

这个 Nmap 脚本是我使用的许多脚本之一,使用 WPScan 扫描 URL 只是这个工具可以完成的许多任务之一。你可以用你喜欢的那一个。

WPScan 示例在文件末尾显示了密码:

┌──(root?kali)-[~]
└─# wpscan --url vulnerable.usersys.redhat.com --passwords passwords.txt --usernames admin
_______________________________________________________________
        __              _______   _____
        \ \     / /  __ \ / ____|
        \ \  /\  / /| |__) | (___   ___  __ _ _ __ ®
        \ \/  \/ / |  ___/ \___ \ / __|/ _` | '_ \
                \  /\  /  | |   ____) | (__| (_| | | | |
                \/  \/   |_|    |_____/ \___|\__,_|_| |_|

        WordPress Security Scanner by the WPScan Team
                        Version 3.8.10
        Sponsored by Automattic - https://automattic.com/
        @_WPScan_, @ethicalhack3r, @erwan_lr, @firefart
_______________________________________________________________

[+] URL: http://vulnerable.usersys.redhat.com/ [10.19.47.242]
[+] Started: Thu Feb 18 20:32:13 2021

Interesting Finding(s):

......

[+] Performing password attack on Wp Login against 1 user/s
Trying admin / redhat Time: 00:01:57 <==================================================================================================================> (3231 / 3231) 100.00% Time: 00:01:57
Trying admin / redhat Time: 00:01:57 <=========================================================                                                         > (3231 / 6462) 50.00%  ETA: ??:??:??
[SUCCESS] - admin / redhat                                                                                                                                                                      

[!] Valid Combinations Found:
 | Username: admin, Password: redhat

[!] No WPVulnDB API Token given, as a result vulnerability data has not been output.
[!] You can get a free API token with 50 daily requests by registering at https://wpscan.com/register

[+] Finished: Thu Feb 18 20:34:15 2021
[+] Requests Done: 3255
[+] Cached Requests: 34
[+] Data Sent: 1.066 MB
[+] Data Received: 24.513 MB
[+] Memory used: 264.023 MB
[+] Elapsed time: 00:02:02

在末尾的“找到有效组合”部分包含了管理员用户名和密码,3231 行只用了两分钟。

我还有另一个字典文件,其中包含 3,238,659,984 行,使用它花费的时间更长并且会留下更多的证据。

使用 Nmap 可以更快地产生结果:

┌──(root?kali)-[~]
└─# nmap -sV --script http-wordpress-brute --script-args userdb=users.txt,passdb=password.txt,threads=6 vulnerable.usersys.redhat.com
Starting Nmap 7.91 ( https://nmap.org ) at 2021-02-18 20:48 EST
Nmap scan report for vulnerable.usersys.redhat.com (10.19.47.242)
Host is up (0.00015s latency).
Not shown: 995 closed ports
PORT    STATE SERVICE VERSION
21/tcp   open  ftp      vsftpd 3.0.3
22/tcp   open  ssh      OpenSSH 8.0 (protocol 2.0)
80/tcp   open  http     Apache httpd 2.4.37 ((Red Hat Enterprise Linux))
|_http-server-header: Apache/2.4.37 (Red Hat Enterprise Linux)
| http-wordpress-brute:
|   Accounts:
|       admin:redhat - Valid credentials              <<<<<<<
|       pgervase:redhat - Valid credentials         <<<<<<<
|_  Statistics: Performed 6 guesses in 1 seconds, average tps: 6.0
111/tcp  open  rpcbind 2-4 (RPC #100000)
| rpcinfo:
|   program version     port/proto  service
|   100000  2,3,4       111/tcp   rpcbind
|   100000  2,3,4       111/udp   rpcbind
|   100000  3,4         111/tcp6  rpcbind
|_  100000  3,4         111/udp6  rpcbind
3306/tcp open  mysql   MySQL 5.5.5-10.3.27-MariaDB
MAC Address: 52:54:00:8C:A1:C0 (QEMU virtual NIC)
Service Info: OS: Unix

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 7.68 seconds

然而,运行这样的扫描可能会在目标系统上留下大量的 HTTPD 日志消息:

10.19.47.170 - - [18/Feb/2021:20:14:01 -0500] "POST /wp-login.php HTTP/1.1" 200 7575 "http://vulnerable.usersys.redhat.com/" "WPScan v3.8.10 (https://wpscan.org/)"
10.19.47.170 - - [18/Feb/2021:20:14:00 -0500] "POST /wp-login.php HTTP/1.1" 200 7575 "http://vulnerable.usersys.redhat.com/" "WPScan v3.8.10 (https://wpscan.org/)"
10.19.47.170 - - [18/Feb/2021:20:14:00 -0500] "POST /wp-login.php HTTP/1.1" 200 7575 "http://vulnerable.usersys.redhat.com/" "WPScan v3.8.10 (https://wpscan.org/)"
10.19.47.170 - - [18/Feb/2021:20:14:00 -0500] "POST /wp-login.php HTTP/1.1" 200 7575 "http://vulnerable.usersys.redhat.com/" "WPScan v3.8.10 (https://wpscan.org/)"
10.19.47.170 - - [18/Feb/2021:20:14:00 -0500] "POST /wp-login.php HTTP/1.1" 200 7575 "http://vulnerable.usersys.redhat.com/" "WPScan v3.8.10 (https://wpscan.org/)"
10.19.47.170 - - [18/Feb/2021:20:14:00 -0500] "POST /wp-login.php HTTP/1.1" 200 7575 "http://vulnerable.usersys.redhat.com/" "WPScan v3.8.10 (https://wpscan.org/)"
10.19.47.170 - - [18/Feb/2021:20:14:02 -0500] "POST /wp-login.php HTTP/1.1" 200 7575 "http://vulnerable.usersys.redhat.com/" "WPScan v3.8.10 (https://wpscan.org/)"
10.19.47.170 - - [18/Feb/2021:20:14:02 -0500] "POST /wp-login.php HTTP/1.1" 200 7575 "http://vulnerable.usersys.redhat.com/" "WPScan v3.8.10 (https://wpscan.org/)"
10.19.47.170 - - [18/Feb/2021:20:14:02 -0500] "POST /wp-login.php HTTP/1.1" 200 7575 "http://vulnerable.usersys.redhat.com/" "WPScan v3.8.10 (https://wpscan.org/)"

为了获得关于在最初的 Nmap 扫描中发现的 HTTPS 服务器的信息,我使用了 sslscan 命令:

┌──(root?kali)-[~]
└─# sslscan vulnerable.usersys.redhat.com
Version: 2.0.6-static
OpenSSL 1.1.1i-dev  xx XXX xxxx

Connected to 10.19.47.242

Testing SSL server vulnerable.usersys.redhat.com on port 443 using SNI name vulnerable.usersys.redhat.com

  SSL/TLS Protocols:
SSLv2   disabled
SSLv3   disabled
TLSv1.0   disabled
TLSv1.1   disabled
TLSv1.2   enabled
TLSv1.3   enabled
<snip>

它显示了有关启用的 SSL 协议的信息,在最下方,是关于 Heartbleed 漏洞的信息:

  Heartbleed:
TLSv1.3 not vulnerable to heartbleed
TLSv1.2 not vulnerable to heartbleed

防御或减轻攻击的技巧

有很多方法可以保护你的系统免受大量攻击。几个关键点是:

  • **了解你的系统:**包括了解哪些端口是开放的,哪些端口应该开放,谁应该能够看到这些开放的端口,以及使用这些端口服务的预期流量是多少。Nmap 是了解网络系统的一个绝佳工具。
  • 使用当前的最佳实践: 现在的最佳实践可能不是未来的最佳实践。作为管理员,了解信息安全领域的最新趋势非常重要。
  • 知道如何使用你的产品: 例如,与其让攻击者不断攻击你的 WordPress 系统,不如阻止他们的 IP 地址并限制尝试登录的次数。在现实世界中,阻止 IP 地址可能没有那么有用,因为攻击者可能会使用受感染的系统来发起攻击。但是,这是一个很容易启用的设置,可以阻止一些攻击。
  • 维护和验证良好的备份: 如果攻击者攻击了一个或多个系统,能从已知的良好和干净的备份中重新构建可以节省大量时间和金钱。
  • 检查日志: 如上所示,扫描和渗透命令可能会留下大量日志,这表明攻击者正在攻击系统。如果你注意到它们,可以采取先发制人的行动来降低风险。
  • 更新系统、应用程序和任何额外的模块: 正如 NIST Special Publication 800-40r3 所解释的那样,“补丁通常是减轻软件缺陷漏洞最有效的方法,而且通常是唯一完全有效的解决方案。”
  • 使用供应商提供的工具: 供应商有不同的工具来帮助你维护他们的系统,因此一定要充分利用它们。例如,红帽企业 Linux 订阅中包含的 Red Hat Insights 可以帮助你优化系统并提醒你注意潜在的安全威胁。

了解更多

本文对安全工具及其使用方法的介绍只是冰山一角。深入了解的话,你可能需要查看以下资源:


via: https://opensource.com/article/21/5/linux-security-tools

作者:Peter Gervase 选题:lujun9972 译者:MjSeven 校对:wxy

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