Разработчики: ядро linux слишком «дырявое», его нужно переписать с нуля

PID

Идентификатор процесса (process identifier, PID) — уникальный номер (идентификатор) процесса в многозадачной операционной системе (ОС).

Как правило, PID’ы выдаются последовательно от 0. По достижении лимита счёт снова начинается с 300 (в Mac OS X — со 100). Это сделано отчасти для ускорения, потому что малые PID часто заняты системными процессами.

Часто имеется два специальных значения PID: swapper или sched — процесс с номером 0 (часто не отображается в списке), отвечает за выгрузку страниц и является частью ядра операционной системы. Процесс 1 — обычно является процессом init, ответственным за запуск и остановку системы.

C

В C-коде: тип данных (на самом деле определён как ).

#include <unistd.h>
pid_t getpid(void);

Приятно, обрабатывать ошибочный код возврата не нужно. «These functions are always successful.»

#include <stdio.h>
#include <unistd.h>
 
int main() {
    pid_t p = getpid();
    printf("My PID is %d\n", p);
    return ;
}

Во-вторых, ограничения ресурсов Linux

1. Ограничения пользовательских ресурсов

В Bash есть команда ulimit, которая обеспечивает управление доступными ресурсами оболочки и процессами, запускаемыми оболочкой. В основном это количество открытых файловых дескрипторов, максимальное количество процессов пользователя, размер файла coredump и т. Д.

Конфигурацию ограничений ресурсов можно настроить в файле подконфигурации в /etc/security/limits.conf или /etc/security/limits.d/. Система сначала загружает limits.conf, а затем загружает каталог limits.d в алфавитном порядке. После загрузки файла конфигурации он перезапишет предыдущую конфигурацию. Формат конфигурации следующий:

soft — значение предупреждения, hard — максимальное значение, * означает соответствие всем пользователям

Просмотр ограничений пользовательских ресурсов для входа в текущую оболочку

2. ограничение ресурса обслуживания

Мы всегда упоминали оболочку выше, поэтому для тех пользователей, которые не вошли в систему через аутентификацию PAM, таких как mysql, nginx и т. Д., Вышеуказанная конфигурация не эффективна;

Поскольку в системе CentOS 7 / RHEL 7 вместо предыдущего SysV используется Systemd, область конфигурации файла /etc/security/limits.conf сокращается. Конфигурация в limits.conf применима только для аутентификации PAM. Ограничение ресурсов вошедшего в систему пользователя, оно не влияет на ограничение ресурсов службы systemd.

Его нужно настроить с помощью файлов /etc/systemd/system.conf и /etc/systemd/user.conf. Точно так же все файлы .conf в двух соответствующих каталогах /etc/systemd/system.conf.d/* .conf и /etc/systemd/user.conf.d/*.conf.

Среди них system.conf используется экземплярами системы, а user.conf — экземплярами пользователей. Для общих служб используйте конфигурацию в system.conf. Конфигурация в system.conf.d / *. Conf переопределит system.conf.

Формат конфигурации следующий:

= Тип ресурса слева, размер справа

Просмотр лимита ресурсов службы

cat /proc/YOUR-PID/limits

Например, проверьте влияние конфигурации службы nginx:

3. Лимит системных ресурсов

Для пользователя и службы ранее были выделены ресурсы, но каково общее количество ресурсов в системе? Сюда входят параметры ядра. Существует много параметров ядра. Нам нужно только знать, как изменить наиболее часто используемые, такие как количество процессов и количество дескрипторов.

Большой опыт в поиске многолетних уязвимостей

Компания Qualys была основана в 1999 г. За 22 года своего существования она многократно находила в Linux и других системах уязвимости, существовавшие годами.

Например, в начале 2013 г. ее эксперты выловили брешь, позволявшую исполнять любой нужный хакерам код на веб-серверах, почтовых серверах и других серверных системах. Они обнаружили ее в библиотеке GNU C (glibc), в которой содержатся стандартные функции, используемые программами, написанными на языках C и C++.

Рассказать миру об уязвимости, промаркированной как CVE-2015-0235, Qualys решила лишь в конце января 2015 г., то есть спустя два года с момента ее обнаружения. Разработчикам Qualys поведала о ней без промедления, однако далее через два года большинство версий Linux, используемых в сервером оборудовании, так и не были обновлены.

По утверждению специалистов Qualys, CVE-2015-0235 появилась в Linux еще в 2000 г., когда вышла библиотека glibc версии 2.2. В список «дырявых» дистрибутивов Linux вошли Debian 7, CentOS 6 и 7? RHEL 6 и 7, а также Ubuntu 12.04.

В-четвертых, ограничение количества ручек

1. Ограничьте количество пользовательских дескрипторов

Лимит пользователя для входа, как упоминалось выше, можно настроить с помощью файла подконфигурации в /etc/security/limits.conf или /etc/security/limits.d/ следующим образом:

Примечание: изменение файла конфигурации не повлияет на ограничение дескриптора текущего пользователя, вошедшего в систему.

2. Предел обработки обслуживания

Примечание. Изменение файла конфигурации не приведет к изменению ограничения дескриптора запущенной в данный момент службы.

3. Общее количество системных дескрипторов.

Количество процессов, которые могут быть открыты каждым пользователем, и количество дескрипторов, которые могут быть открыты каждым процессом, указаны выше; есть также файл, который устанавливает общее количество дескрипторов, которые могут быть открыты всеми процессами в системе, то есть этот параметр является системным.

Измените максимальное количество системных дескрипторов, метод следующий (действителен после настройки):

Просмотрите общее количество дескрипторов, используемых в настоящее время в системе:

Изменение кодировки в Linux

Использование команды iconv

В Linux для конвертации текста из одной кодировки в другую используется команда iconv.

Синтаксис использования iconv имеет следующий вид:

Где -f или —from-code означает кодировку исходного файла -t или —to-encoding указывают кодировку нового файла. Флаг -o является необязательным, если его нет, то содержимое документа в новой кодировке будет показано в стандартном выводе.

Чтобы вывести список всех кодировок, запустите команду:

Конвертирование файлов из windows-1251 в UTF-8 кодировку

Далее мы научимся, как конвертировать файлы из одной схемы кодирования (кодировки) в другую. В качестве примера наша команда будет конвертировать из windows-1251 (которая также называется CP1251) в UTF-8 кодировку.

Допустим, у нас есть файл mypoem_draft.txt его содержимое выводится как

Мы начнём с проверки кодировки символов в файле, просмотрим содержимое файла, выполним конвертирование и просмотрим содержимое файла ещё раз.

Примечание: если к кодировке, в который мы конвертируем файл добавить строку //IGNORE, то символы, которые невозможно конвертировать, будут отбрасываться и после конвертации показана ошибка.

Если к конечной кодировке добавляется строка //TRANSLIT, конвертируемые символы при необходимости и возможности будут транслитерированы. Это означает, когда символ не может быть представлен в целевом наборе символов, он может быть заменён одним или несколькими выглядящими похоже символами. Символы, которые вне целевого набора символов и не могут быть транслитерированы, в выводе заменяются знаком вопроса (?).

Изменение кодировки программой enca

Программа enca не только умеет определять кодировку, но и может конвертировать текстовые файлы в другую кодировку. Особенностью программы является то, что она не создаёт новый файл, а изменяет кодировку в исходном. Желаемую кодировку нужно указать после ключа -x:

Конвертация строки в правильную кодировку

Команда iconv может конвертировать строки в нужную кодировку. Для этого строка передаётся по стандартному вводу. Достаточно использовать только опцию -f для указания кодировки, в которую должна быть преобразована строка. Т.е. используется команда следующего вида:

Также для изменения кодировки применяются программы:

  • piconv
  • recode
  • enconv (другое название enca)

runlevels

Пример файла /etc/inittab:

id:5:initdefault:
si::sysinit:/etc/rc.d/rc.sysinit
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
x:5:respawn:/etc/X11/prefdm -nodaemon

По умолчанию в системе использовано 7 уровней инициализации:

  • 0 — остановка системы
  • 1 — загрузка в однопользовательском режиме
  • 2 — загрузка в многопользовательском режиме без поддержки сети
  • 3 — загрузка в многопользовательском режиме с поддержкой сети
  • 4 — не используется
  • 5 — загрузка в многопользовательском режиме с поддержкой сети и графического входа в систему
  • 6 — перезагрузка

Вы можете подумать, речь идёт о каких-то уровнях, через которые система проходит в процессе загрузки. Это не так. Представляйте себе уровень запуска как некую точку, в которую переходит система, загружаясь.

В большинстве Unix/Linux систем, узнать текущий уровень инициализации можно командами:

Набрав init n в терминале (с правами суперпользователя), где n — номер уровня инициализации, можно переключиться в любой из вышеперечисленных уровней.

Стартовые скрипты для каждого уровня находятся в каталогах с /etc/rc0.d до /etc/rc6.d, где цифра после rc соответствует номеру уровня инициализации.

$ ls /etc/rc5.d/
README             S02acpid    S02irqbalance         S02thermald      S04cups-browsed
S01apport          S02anacron  S02kerneloops         S02whoopsie      S04saned
S01binfmt-support  S02atd      S02nginx              S03avahi-daemon  S05grub-common
S01php7.0-fpm      S02atop     S02rsync              S03bluetooth     S05ondemand
S01rsyslog         S02cron     S02speech-dispatcher  S03lightdm       S05plymouth
S01uuidd           S02dbus     S02sysstat            S04cups          S05rc.local

Обычно скрипты не дублируются для каждого уровня. В каталогах rcX просто ставятся симлинки на скрипты в /etc/init.d.

$ ls -l /etc/rc5.d/S02nginx 
lrwxrwxrwx 1 root root 15 Nov 28 19:56 /etc/rc5.d/S02nginx -> ../init.d/nginx

Сами скрипты в /etc/init.d обычно пишутся по шаблону и должны уметь принимать параметр start|stop|restart.

В именовании используется такая логика.

  • S — скрипты для запуска (start)
  • K — скрипты для остановки (stop)
  • Номер задаёт порядок выполнения: чем меньше номер, тем раньше запускается скрипт.

Для автоматизации создания этих линков с правильными именами есть специальные утилиты. Например, в RedHat и Fedora используется программа chkconfig, в Debian — update-rc.d.

Есть также специальный скрипт /etc/rc.local, который выполняется во всех многопользовательских уровнях.

Настройка UTF-8 в Gentoo Linux

Поиск или создание локалей UTF-8

Теперь, когда принципы лежащие в основе Unicode были изложены, начнем использовать UTF-8 на локальной системе!

Пользователям, которым нужна более детальная информация, могут найти ее в статье Руководство по локализации Gentoo.

Далее, нужно определить, доступна ли локаль UTF-8 для нашего языка или придется создать её.

en_GB
en_GB.utf8

На выходе этой команды мы должны получить хотя бы одну строку, содержащую суффикс . Если таковых нет, то нам придётся создать локаль, совместимую с UTF-8.

ЗаметкаЗапускайте следующую команду, если в система не имеет UTF-8 локали для выбранного языка.

Замените «en_GB», если нужна какая-то другая локаль:

Другим способом включить локаль UTF-8 является добавление её в файл /etc/locale.gen и генерация нужных локалей, используя команду locale-gen. Локали будут записаны в архив локалей /usr/lib/locale/locale-archive.

Код Строка в /etc/locale.gen

en_GB.UTF-8 UTF-8
 * Generating 1 locales (this might take a while) with 1 jobs
 *  (1/1) Generating en_GB.UTF-8 ...                            
 * Generation complete

Настройка локали

Есть одна переменная среда, которую необходимо настроить, чтобы использовать UTF-8 локали: LC_CTYPE (также, можно изменить переменную LANG, чтобы изменить системный язык). Есть множество способов сделать это. Некоторые системные администраторы предпочитают использовать UTF-8 только для определенного пользователя, поэтому они устанавливают эту переменную в своём ~/.profile (/bin/sh> для пользователей Bourne shell), ~/.bash_profile или ~/.bashrc (/bin/bash для пользователей Bourne again shell). Больше информации, а также наилучшие способы локализации можно найти в Руководстве по локализации.

Другие же предпочитают установить локаль глобально. Есть по крайней один весомый аргумент в пользу этого подхода — при использовании /etc/init.d/xdm, так как init-скрипт запускают диспетчер окон до того, как будут загружены конфигурационные файлы командной оболочки. Другими словами, это выполняется до того момента, как какие-либо переменные попадут в окружение пользователя.

Настройка локали глобально делается с помощью файла /etc/env.d/02locale. Он должен выглядеть следующим образом:

Файл Демонстрация для en_GB.utf8

## (Как обычно, замените "en_GB.utf8" соответствующее значение локали; каждый язык имеет своё значение!)
LANG="en_GB.utf8"

Далее, следует обновить среду переменных, запустив следующую команду:

>>> Regenerating /etc/ld.so.cache...

Теперь запустите locale без аргументов, чтобы увидеть, что верные переменные были загружены в окружающую среду переменных:

LANG=en_GB.utf8
LC_CTYPE="en_GB.utf8"
LC_NUMERIC="en_GB.utf8"
LC_TIME="en_GB.utf8"
LC_COLLATE="en_GB.utf8"
LC_MONETARY="en_GB.utf8"
LC_MESSAGES="en_GB.utf8"
LC_PAPER="en_GB.utf8"
LC_NAME="en_GB.utf8"
LC_ADDRESS="en_GB.utf8"
LC_TELEPHONE="en_GB.utf8"
LC_MEASUREMENT="en_GB.utf8"
LC_IDENTIFICATION="en_GB.utf8"
LC_ALL=

Альтернативный метод: использование eselect для настройки локали

То, что было написано выше, достаточно, чтобы хорошо настроить систему, можно также проверить правильность настройки локали с помощью утилиты eselect.

Используйте команду eselect, чтобы получить список доступных локалей в системе:

   C
   POSIX *
   en_GB.utf8
   (free form)

Утилита eselect выводит список локалей. После того, как нужная локаль была определена, активируйте ее:

Setting LANG to en_GB.utf8 ...

Проверим результат:

   C
   POSIX
   en_GB.utf8 *
   (free form)

В случае предпочтения использовать заместо в /etc/env.d/02locale, запустите соответствующую команду eselect:

Setting LANG to en_GB.UTF-8 ...
   C
   POSIX
   en_GB.utf8
   en_GB.UTF-8 *
   (free form)

Запуск следующей команды обновит переменное окружение для shell:

>>> Regenerating /etc/ld.so.cache...

Вот и всё. Теперь система использует локаль UTF-8. Следующим этапом будет настройка повседневно используемых приложений.

Первоначальные преимущества Unix

Деннис Ритчи и Кен Томпсон выпустили первый релиз операционной системы Unix 3 ноября 1971 года. Когда историки обсуждают, что особенного было в Unix в то время, они обычно подчеркивают, что Unix поддерживала возможность одновременной работы нескольких пользователей, в то время как в других операционных системах того времени одно задание выполнялось от начала и до конца без возможности прерывания. Я думаю, что более важным отличием Unix была портируемость системы. В те года большинство операционных систем были привязаны к конкретной архитектуре процессора. С помощью Unix вы могли обновлять свой компьютер годами и десятилетиями и по-прежнему использовать одну и ту же операционную систему, и приложения. Это дало большой толчок в развитии вычислительной техники.

Если бы Unix была привязана к компьютеру PDP-11, на котором велась её первоначальная разработка, то данная ОС вряд ли бы оставила сколь-нибудь заметный след в истории. Свойство переносимости системы позволило Unix пережить эволюцию компьютерного оборудования и, в конечном счете, занять лидирующие позиции среди других ОС. Как гласит официальная временная шкала Unix: «В 1973 году система была переписана на язык программирования Си. Это сделало её переносимой и сильно повлияло на историю развития ОС в целом».

Сегодня переносимость Unix и её утилит в полной мере присутствует и в Linux: изначально разрабатываемая под процессоры Intel, система работает на нескольких различных архитектурах. Когда ядро Linux совершило скачок от процессоров Intel к архитектуре ARM, тем самым сделав доступным использование Linux на небольших (появившихся в 1990-х годах) мобильных устройствах, то это событие вызвало всеобщее волнение в Linux-сообществе и открыло новые перспективы развития вычислительной техники.

Установка ядра

# make modules_install

Разместит *.ko-файлы в /lib/modules.

# make install

Разместит файлы в /boot/.

188K config-4.4.0-57-generic
196K config-4.9.0BSU
 35M initrd.img-4.4.0-57-generic
309M initrd.img-4.9.0BSU
3,7M System.map-4.4.0-57-generic
3,9M System.map-4.9.0BSU
6,8M vmlinuz-4.4.0-57-generic
7,0M vmlinuz-4.9.0BSU

Ужас, рамдиск получился огромный! Оказывается, надо было при установке передавать опцию INSTALL_MOD_STRIP=1.

 35M initrd.img-4.4.0-57-generic
 34M initrd.img-4.9.0BSU
$ uname -a
Linux sobols-VirtualBox 4.9.0BSU #1 SMP Thu Dec 22 03:09:25 +03 2016 x86_64 x86_64 x86_64 GNU/Linux

Информация о дисковом носителе

1. df

Команда выдает информацию о подмонтированных разделах и объемах, занимаемых ими:

df -h

Пример ответа:

Файловая система              Размер Использовано  Дост Использовано% Cмонтировано в
/dev/mapper/sys-root             25G          11G   15G           41% /
devtmpfs                        1,9G            0  1,9G            0% /dev
tmpfs                           1,9G         4,0K  1,9G            1% /dev/shm
tmpfs                           1,9G         193M  1,7G           11% /run
tmpfs                           1,9G            0  1,9G            0% /sys/fs/cgroup
/dev/sda1                      1014M         186M  829M           19% /boot

2. fdisk

Подробная информация о диске и его разделах:

fdisk /dev/sda -l

Ответ:

Disk /dev/sda: 32.2 GB, 32212254720 bytes, 62914560 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000d5e55

Устр-во Загр     Начало       Конец       Блоки   Id  Система
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200    62914559    30407680   8e  Linux LVM

3. iotop

Команда позволяем увидеть загруженность дисковой системы. Утилиты может не быть в системе — сначала ее нужно установить.

а) на Ubuntu / Debian:

apt-get install iotop

б) на CentOS / Red Hat:

yum install iotop

После установки утилита запускается командой:

iotop

Вывод похож на top:

Total DISK READ :       0.00 B/s | Total DISK WRITE :       0.00 B/s
Actual DISK READ:       0.00 B/s | Actual DISK WRITE:       0.00 B/s
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND
    1 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % systemd —swi…
    2 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 %
    3 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ksoftirqd/0]
    5 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kworker/0:0H]
 1542 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 %
 …

4. smartmontools

Утилита позволяет получить SMART дисковых накопителей. По умолчанию, она не установлена — установка выполняется из репозитория.

а) на Ubuntu / Debian:

apt-get install smartmontools

б) на CentOS / Red Hat:

yum install smartmontools

После установки можно использовать:

smartctl -a /dev/sda

* в данном примере мы увидим полный тест для диска sda.

Если нам нужно посмотреть только общее состояние здоровья, то используем опцию H:

smartctl -H /dev/sda

Если мы хотим получить информацию по всем дискам, вводим команды по очереди для каждого или:

find /dev -name ‘sd’ -exec smartctl -a {} \;

Процессы-демоны


Схематическое изображение демона Максвелла

Демон (daemon, dæmon, божество) — программа в ОС семейства Unix, запускаемая самой системой и работающая в фоновом режиме без прямого взаимодействия с пользователем.

Демоны обычно запускаются во время загрузки системы. Типичные задачи демонов: серверы сетевых протоколов (HTTP, FTP, электронная почта и др.), управление оборудованием, поддержка очередей печати, управление выполнением заданий по расписанию и т.д. В техническом смысле демоном считается процесс, который не имеет управляющего терминала. Чаще всего (но не обязательно) предком демона является init — корневой процесс UNIX.

В системах Windows аналогичный класс программ называется службой (Services).

Название «демон» появилось ещё до Unix, в 1960-x годах в системе Project MAC. Названо в честь демона Максвелла из физики, занимающегося сортировкой молекул в фоновом режиме. Демон также является персонажем греческой мифологии, выполняющим задачи, за которые не хотят браться боги.

Типичным демоном является cron, использующийся для периодического выполнения заданий в определённое время. Регулярные действия описываются инструкциями, помещенными в файлы crontab и в специальные каталоги.

Конвертирование файлов из UTF-8 в ASCII

Далее мы научимся конвертировать текст из одной кодировки в другую. Приведенная ниже команда преобразует текст из ISO-8859-1 в кодировку UTF-8.

Рассмотрим файл input.file, который содержит следующие символы:

� � � � 

(Прим: вы увидите эти символы на снимке ниже)

Начнем с проверки кодировки файла, затем просмотрим его содержимое. Мы можем преобразовать все символы в кодировку ASCII.
После запуска команды iconv мы затем проверяем содержимое выходного файла и новую кодировку, как показано ниже.

$ file -i input.file
$ cat input.file 
$ iconv -f ISO-8859-1 -t UTF-8//TRANSLIT input.file -o out.file
$ cat out.file 
$ file -i out.file 

Примечание. Если в команду добавлена строка //IGNORE, то символы, которые не могут быть преобразованы, и ошибка выводятся после преобразования.

Далее, если добавлена строка //TRANSLIT, как в приведенном выше примере (ASCII//TRANSLIT), преобразуемые символы при необходимости и по возможности транслитерируются. Это означает, что если символ не может быть представлен в целевой кодировке, его можно аппроксимировать одним или несколькими похожими символами.

Далее, любой символ, который не может быть транслитерирован и которого нет в целевой кодировке, заменяется в выводе вопросительным знаком (?).

Архитектура ядра Linux

На сегодняшний день Linux — монолитное ядро с поддержкой загружаемых модулей. Драйверы устройств и расширения ядра обычно запускаются в 0-м кольце защиты, с полным доступом к оборудованию. Все драйверы и подсистемы работают в своем адресном пространстве, отделенном от пользовательского.

Сам термин «монолит» говорит о том, что в ядре сконцентрировано всё, и, по логике, ничего не может в него добавляться или удаляться. В отличие от обычных монолитных ядер, драйверы устройств легко собираются в виде модулей и загружаются или выгружаются во время работы системы.

То, что архитектура Linux не является микроядерной, вызвало обширнейшие прения между Торвальдсом и Эндрю Таненбаумом в конференции по Minix в 1992 году.

Характеристика дистрибутивов Linux в WSL

Debian

Debian — популярен как дистрибутив, например, для серверов, так и как основа для других дистрибутивов. Например, на Debian основываются Ubuntu, Kali Linux, Linux Mint (есть версия LMDE, которая основывается непосредственно на Debian, а также «классическая» версия, которая основывается на Ubuntu, которая, в свою очередь, также основывается на Debian).

То есть Debian и производные очень популярна.

Вы сможете использовать полную среду командной строки Debian, содержащую среду полной текущей стабильной версии.

Kali Linux

Kali Linux — это популярнейший дистрибутив для специалистов в информационной безопасности, цифровой криминалистике, хакеров и продвинутых пользователей. Вы можете установить и использовать в родной среде Linux множество специализированных инструментов. Для Kali Linux разработано ПО для упрощённого запуска графического интерфейса (смотрите статью «Как установить Kali Linux с Win-KeX (графический интерфейс) в WSL2 (подсистему Windows для Linux)», а также для инструкций на HackWare.ru взят именно этот дистрибутив, поэтому для него вы найдёте много детаьлных инструкций. По этой причине рекомендуется Kali Linux.

SUSE Linux Enterprise Server

SUSE Linux Enterprise Server — это мультимодальная операционная система, которая открывает путь к трансформации ИТ в эпоху программного обеспечения. Современная модульная ОС помогает упростить мультимодальные ИТ, делает традиционную ИТ-инфраструктуру эффективной и обеспечивает привлекательную платформу для разработчиков. В результате вы можете легко развертывать и переносить критически важные для бизнеса рабочие нагрузки в локальную и общедоступную облачные среды. SUSE Linux Enterprise Server 15 SP1 с его мультимодальным дизайном помогает организациям трансформировать свой ИТ-ландшафт за счет объединения традиционной и программно определяемой инфраструктуры.

Ubuntu

В WSL у дистрибутива Ubuntu также отсутствует графический интерфейс (как по умолчанию у всех других дистрибутивов), поэтому её нельзя назвать более «дружественной» к пользователю. Основана на Debian.

Fedora

Обещают добавить, но пока отсутствует.

Практика

Будем экспериментировать на ОС Ubuntu.

sobols@sobols-VirtualBox:~$ uname -a
Linux sobols-VirtualBox 4.4.0-119-generic #143-Ubuntu SMP Mon Apr 2 16:08:24 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
sobols@sobols-VirtualBox:~$ lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 16.04.1 LTS
Release:	16.04
Codename:	xenial

Скачиваем свежий ванильный архив с официального сайта:

Скорее всего, нужно будет доустановить некоторые пакеты.

Чтобы воспользоваться консольным конфигуратором, понадобится библиотека для псевдографики:

$ sudo apt-get install libncurses5-dev bison flex

make oldconfig

Берёт существующий конфиг (либо из файла .config в корне исходников ядра, либо из /boot/ для той версии ядра, которая используется в данный момент) и выставляет новые опции (на выбор пользователя или по умолчанию).

#
# configuration written to .config
#

Если вопросов много и мы не хотим отвечать, можно везде брать значение по умолчанию:

yes "" | make oldconfig

make menuconfig

Имеет псевдографический интерфейс в виде меню. Программа основана на библиотеке ncurses.

Для интереса выставим в General Setup -> Local version значение -bsu.

Поехали!

make -j2

Недолго музыка играла…

  HOSTCC  scripts/recordmcount
  HOSTCC  scripts/sortextable
  HOSTCC  scripts/asn1_compiler
  HOSTCC  scripts/sign-file
scripts/sign-file.c:25:30: fatal error: openssl/opensslv.h: No such file or directory
compilation terminated.
scripts/Makefile.host:107: recipe for target 'scripts/sign-file' failed
make: *** [scripts/sign-file] Error 1

Ищем, какой пакет доустановить.

$ dpkg -S opensslv.h
dpkg-query: no path found matching pattern *opensslv.h*
$ apt-cache search openssl
$ sudo apt-get install libssl-dev

Возможно, придётся ещё что-то доустановить.

Наконец, всё должно собраться:

$ make
  CHK     include/config/kernel.release
  CHK     include/generated/uapi/linux/version.h
  CHK     include/generated/utsrelease.h
  CHK     include/generated/timeconst.h
  CHK     include/generated/bounds.h
  CHK     include/generated/asm-offsets.h
  CALL    scripts/checksyscalls.sh
  CHK     include/generated/compile.h
  DATAREL arch/x86/boot/compressed/vmlinux
Kernel: arch/x86/boot/bzImage is ready  (#1)
  Building modules, stage 2.
  MODPOST 4548 modules

Мотивация Кука

Кис Кук объяснил свой призыв к найму большего числа инженеров тем, что из-за сложившейся вокруг ядра Linux ситуации многие уязвимости могут находиться в нем годами. Пока разработчики латают одну брешь, другая теряется в строчках кода.

В словах Кука есть внушительная доля правды. В ядре Linux постоянно обнаруживаются «дыры» в возрасте нескольких лет, многие из которых несут чрезвычайную опасность как для частных пользователей, так и для корпораций.

Кис Кук уверен, что подход к разработке Linux нужно менять полностью

Например, в ноябре 2017 г. CNews рассказывал о том, как россиянин Антон Коновалов всего за несколько месяцев выловил в коде ядра Linux, по меньшей мере, 15 багов в драйверах USB. Он подчеркнул, что такие уязвимости можно использовать для запуска произвольного кода и захвата контроля над пользовательскими системами.

В июле 2021 г. эксперты по информационной безопасности компании Qualys нашли в ядре уязвимости с зашкаливающим уровнем опасности. Они позволяют вызвать крах системы и выполнить произвольный код. И если в случае «дыр», выявленных Антоном Коноваловым их возраст не был установлен, то находкам Qualys совсем недавно исполнилось шесть и семь лет.

Более того, одну из этих уязвимостей они нашли, успешно проэксплуатировав вторую. Из-за них под угрозой оказались пользователи Debian, Ubuntu, Red Hat и целого ряда других популярных дистрибутивов Linux.

Совместимость кодирования

Не существует общего стандарта кодировки для имен файлов.

Имена файлов должны обмениваться между программными средами для сетевой передачи файлов, хранения файловой системы, программного обеспечения для резервного копирования и синхронизации файлов, управления конфигурацией, сжатия и архивирования данных и т. Д

Таким образом, очень важно не потерять информацию об именах файлов между приложениями. Это привело к широкому распространению Unicode в качестве стандарта для кодирования имен файлов, хотя устаревшее программное обеспечение могло не поддерживать Unicode.

Совместимость индикации кодирования

Традиционно имена файлов допускали использование любых символов в именах файлов, если они были безопасными для файловой системы. Хотя это позволяло использовать любую кодировку и, таким образом, позволяло представлять любой локальный текст в любой локальной системе, это вызывало множество проблем с совместимостью.

Имя файла может быть сохранено с использованием разных байтовых строк в разных системах в пределах одной страны, например, если в одной из них используется японская кодировка Shift JIS и другая японская кодировка EUC . Преобразование было невозможно, поскольку большинство систем не отображало описание кодировки, используемой для имени файла, как часть расширенной информации о файле. Это заставляло дорогостоящее угадывать кодировку имени файла при каждом доступе к файлу.

Решением было принять Unicode в качестве кодировки имен файлов.

Однако в классической Mac OS кодировка имени файла сохранялась с атрибутами имени файла.

Совместимость Unicode

Стандарт Unicode решает проблему определения кодировки.

Тем не менее, остаются некоторые ограниченные проблемы совместимости, такие как нормализация (эквивалентность) или используемая версия Unicode. Например, UDF ограничен Unicode 2.0; В файловой системе MacOS HFS + применяется нормализация NFD Unicode и, при необходимости, учитывается регистр (по умолчанию регистр не учитывается). Максимальная длина имени файла нестандартна и может зависеть от размера единицы кода. Хотя это серьезная проблема, в большинстве случаев она носит ограниченный характер.

В Linux это означает, что имени файла недостаточно для открытия файла: кроме того, требуется точное байтовое представление имени файла на устройстве хранения. Это можно решить на уровне приложения с помощью некоторых сложных вызовов нормализации.

Проблема эквивалентности Unicode известна как «коллизия нормализованных имен». Решением является ненормализующая осведомленность о композиции Unicode, используемая в технических сообществах Subversion и Apache. Это решение не нормализует пути в репозитории. Пути нормализованы только для сравнения. Тем не менее, некоторые сообщества запатентовали эту стратегию, запрещая ее использование другими сообществами.

Перспективы

Чтобы ограничить проблемы взаимодействия, некоторые идеи, описанные Sun, заключаются в следующем:

  • используйте одну кодировку Unicode (например, UTF-8)
  • делать прозрачные преобразования кода для имен файлов
  • не хранить нормализованные имена файлов
  • проверьте каноническую эквивалентность между именами файлов, чтобы избежать двух канонически эквивалентных имен файлов в одном каталоге.

Эти соображения создают ограничение, не позволяющее переключиться на будущую кодировку, отличную от UTF-8.

Миграция Unicode

Одна из проблем заключалась в переходе на Unicode. С этой целью несколько компаний-разработчиков программного обеспечения предоставили программное обеспечение для перевода имен файлов в новую кодировку Unicode.

  • Microsoft предоставила прозрачную для пользователя миграцию в рамках технологии VFAT.
  • Apple предоставила «Утилиту восстановления кодировки имен файлов v1.0».
  • Сообщество Linux предоставило « convmv ».

Mac OS X 10.3 ознаменовала принятие Apple декомпозиции символов Unicode 3.2, которая заменила использовавшуюся ранее декомпозицию Unicode 2.1. Это изменение вызвало проблемы у разработчиков, пишущих программное обеспечение для Mac OS X.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Все про сервера
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: