Vanilla CentOS :Нужен ли нам репозиторий ElRepo?

Проведя дополнительные исследования, я пришел к выводу, что моя цель недостижима с использованием /sys/class/net/.... К счастью, это достижимо.

Монтирование правильно настроенного пространства имен/sys/class/net

Благодаря ответу Данилы Кивера на вопрос «Переключение в сетевое пространство имен не меняет /sys/class/net?» все, что мне нужно сделать, это смонтировать sysfsв каком-то месте, чтобы получить правильное (сетевое пространство имен )для sysfsи его class/net/ветви.

В следующем примере Python сканирует сетевые пространства имен, а затем перечисляет все сетевые интерфейсы в определенном сетевом пространстве имен, помечая каждый физический сетевой интерфейс с помощью [PHY]. Обратите внимание, что этот скрипт нуждается в руте/админке, особенно из-за монтирования.

import psutil
import nsenter
from ctypes import c_char_p, c_ulong
import ctypes.util
import os
import tempfile

# https://stackoverflow.com/a/29156997
libc = ctypes.CDLL(ctypes.util.find_library('c'), use_errno=True)
libc.mount.argtypes = (c_char_p, c_char_p, c_char_p, c_ulong, c_char_p)
libc.umount.argtypes = (c_char_p, )

netns_index = dict()
for process in psutil.process_iter():
    netns_ref = '/proc/%d/ns/net' % process.pid
    try:
        netns_id = os.stat(netns_ref).st_ino
        if netns_id not in netns_index:
            netns_index[netns_id] = netns_ref
    except PermissionError:
        pass

with tempfile.TemporaryDirectory() as temp_mnt:
    for netns_id, netns_ref in netns_index.items():
        with nsenter.Namespace(netns_ref, 'net'):
            print('net:[%d]' % netns_id)
            if libc.mount('sysfs'.encode('ascii'),
                          temp_mnt.encode('ascii'),
                          'sysfs'.encode('ascii'),
                          0,
                          ''.encode('ascii')) >= 0:
                for nif_name in sorted(os.listdir('%s/class/net' % temp_mnt)):
                    nif_path = os.readlink('%s/class/net/%s' % (temp_mnt, nif_name))
                    phys_nif = not nif_path.startswith('../../devices/virtual/')
                    print('  %s %s' % (nif_name, '[PHY]' if phys_nif else ''))
                libc.umount(temp_mnt.encode('ascii'))

Обходной путь без/sys/class/net

Однако интерфейс NETLINK для ядра Linux предоставляет необходимую информацию, иначе команда ip linkне смогла бы определить тип интерфейса.

Ключевым здесь является атрибут IFLA_LINKINFO, который возвращается при запросе у ядра списка сетевых ссылок (, то есть сетевых интерфейсов ). Внутри него находится еще один атрибут с именем IFLA_INFO_KIND, это vethв случае сетевого интерфейса vethили bridgeв случае моста ядра Linux.

Обратите внимание, что атрибут IFLA_LINKINFOявляется необязательным; например, сетевые интерфейсы loopback, ethernet и wifi не предлагают IFLA_LINKINFO.

Эту информацию можно легко получить в Python, используя известную pyroute2 библиотеку netlink. pyroute2имеет дело со всеми неприятными вещами NETLINK, его легко установить через pip3. Этот пример просто перебирает все сетевые интерфейсы, видимые в текущем сетевом пространстве имен, задавая их имена, индекс интерфейса и значение IFLA_LINKINFO, если оно присутствует.

from pyroute2 import IPRoute

netw = IPRoute()
for link in netw.get_links():
    ifindex = link['index']
    ifname = link.get_attr('IFLA_IFNAME')
    linkinfo = link.get_attr('IFLA_LINKINFO')
    if linkinfo is not None:
        linktype = linkinfo.get_attr('IFLA_INFO_KIND')
    else:
        linktype = 'None'

    print('{0}: #{1} {2}'.format(ifname, ifindex, linktype))

0
23.12.2020, 15:18
2 ответа

Очевидно, что специалистам по сопровождению CentOS потребуется некоторое время, чтобы взять исходники RedHat и собрать их для CentOS.

Сегодня я получил уведомление о том, что доступно обновление ядра 3.10.0 -1160.11.1.el7. Так что, я думаю, вы можете установить его. Возможно, потребуется некоторое время, чтобы обновление достигло ближайших к вам серверов, и вам придется подождать еще несколько дней.

Здесь представлена ​​диаграмма, показывающая, сколько времени требуется CentOS для публикации исправлений.С измененной поддержкой CentOS Я бы порекомендовал вам начать искать альтернативу. В CentOS 7 вы будете получать обновления безопасности до 2024 года, а в CentOS 8 — только до конца 2021 года.

3
18.03.2021, 22:41

The Community Enterprise Linux Repository (ELRepo) focuses on kmod driver packages to enhance hardware support in EL6, EL7, and EL8 (including display, filesystem, hwmon, network, and storage drivers). Newer kernels are also available. Follow the ELRepo Home Page to install the elrepo-release package and import the GPG key.

Если вы специально не используете мод/обновление ядра (, полученное, например, от ELREPO ), то быстро становится трудно обосновать в коммерческом/юридическом смысле, почему он будет использоваться, не говоря уже о том, что это, вероятно, не устраняя фактическую уязвимость. Для https://access.redhat.com/errata/RHSA-2020:4060, если это не рассматривается в обновлении от ELREPO (, где они сосредоточены на расширенной поддержке оборудования)или кем-либо еще, то их обновление не приносит вам пользы; не берите обновление от третьей стороны просто потому, что это «обновление», если только оно не решает проблему. Вы должны изучить это.

So to be objective on my question: How can I update my CentOS kernel in a 100% official way to get rid of this vulnerability? Vanilla CentOS: Do we need the ElRepo repository? I have a CentOS SFTP server which is critical for my company's operations.

  • Имейте только официальный репозиторий CentOS [репозитории], активный в вашей системе.
  • Включите GPG в /etc/yum.conf, чтобы использовать этот механизм защиты.
  • только получают обновление ядра из официального репозитория Centos, который создается при установке [и автоматической активации бесплатного дистрибутива] CentOS linux.

Это, конечно, зависит от того, что вы на самом деле подразумеваете под vanilla , но нет, вам не потребуется/требуется ELREPO или даже EPEL только для SFTP, если это единственная функция сервера. Имея критическое значение для операций моей компании , то, по моему мнению, вам следует использовать только официальное репозиторий Centos, и даже не epel или elrepo, если только они не касаются какой-либо конкретной проблемы бизнеса/безопасности. То, что уже было сказано :, сопровождающим CentOS требуется некоторое время, чтобы взять исходники RedHat и собрать их для CentOS , это правда. Обновления ядра, особенно переход с RHEL/CentOS 7.8 на 7.9, например, требуют времени на стороне CentOS. CentOS исходит от RHEL, RHEL всегда выпускает что-то первым, затем люди из CentOS берут его в свои руки и делают это, но есть задержка. Это цена использования бесплатного дистрибутива. Либо отключите свой сервер CentOS, либо подождите, пока выйдет обновление, если оно настолько серьезное, это официальный способ.Если эта задержка неприемлема, ваша компания должна использовать платную подписку на RHEL, а не бесплатную CentOS.

Upon research a lot of articles out there point to the idea of adding the ElRepo repository for Kernel updates. I wonder however why is this necessary?

Нижняя часть ссылки на репозиторий Centos ниже:Пример того, что НЕЛЬЗЯ делать, пожалуйста, НЕ следуйте таким примерам. Используйте критический взгляд и некоторые мысли, чтобы увидеть, что предлагается, прежде чем добавлять в (и, возможно, ломать )вашу систему. Я немного вырвал это из контекста, так как ELREPO является хорошим сторонним репозиторием, у него есть свое место, но таков его принцип.

https://wiki.centos.org/AdditionalResources/Repositories

1
18.03.2021, 22:41

Теги

Похожие вопросы