Кто ранее получал доступ к файлу с общим доступом?

Сборка собственного ядра может занять много времени - в основном в конфигурации, поскольку современные компьютеры могут выполнить сборку за считанные минуты - но это не особо опасно , если вы сохраняете текущее работающее ядро ​​и не забудьте оставить это как вариант через загрузчик (см. шаг №6 ниже). Таким образом, если ваш новый не работает, вы можете просто перезагрузить старую.

В следующих инструкциях пути внутри исходного дерева имеют вид [src] / something , где [src] - это каталог, в который вы установили исходный код, например /usr/src/linux-3.13.3 . Вы, вероятно, захотите сделать это su root , поскольку исходное дерево должно оставаться безопасным с точки зрения разрешений на запись (оно должно принадлежать пользователю root).

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

  1. Загрузите и распакуйте архив с исходными кодами.

    Они доступны на kernel.org . Самые последние из них перечислены на первой странице, но если вы заглянете в каталог / pub / , вы найдете архив , восходящий к версии 1.0. Если у вас нет особых причин поступить иначе, вам лучше просто выбрать «Последнюю конюшню». На момент написания это файл tar.xz размером 74 МБ .

    После того, как tarball загружен, вам нужно куда-нибудь его распаковать. Обычное место находится в / usr / src . Поместите туда файл и:

     tar -xJf linux-X.X.X.tar.xz 
     

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

    За более чем 15 лет создания собственных ядер (в основном на Fedora / Debian / Ubuntu) у меня никогда не было проблем с использованием исходного кода vanilla 1 . Однако это не имеет большого значения, кроме того факта, что если вам нужно абсолютно последнее ядро, ваш дистрибутив, вероятно, еще не упаковал его. Таким образом, самым безопасным способом по-прежнему является использование пакета дистрибутива, который следует установить в / usr / src . Я предпочитаю последнюю стабильную версию, чтобы я мог действовать как подопытный кролик, прежде чем она будет развернута в дистрибутивах :)

  2. Начните с базовой конфигурации [необязательно].

    Вам не нужно этого делать - вы можете просто погрузиться в процесс и создать конфигурацию с нуля. Однако, если вы никогда не делали этого раньше, ожидайте много проб и ошибок. Это также означает необходимость прочитать большинство опций (их сотни). Лучше использовать существующую конфигурацию, если она доступна. Если вы использовали пакет с исходным кодом дистрибутива, он, вероятно, уже содержит файл [src] /. Config , так что вы можете его использовать. В противном случае проверьте наличие /proc/config.gz . Это дополнительная функция, добавленная в ядро ​​2.6. Если он существует, скопируйте его в верхний уровень дерева исходных текстов и gunzip -c config.gz> .config .

Если он не существует, возможно, потому, что этот параметр был настроен как модуль. Попробуйте sudo modprobe configs , затем снова проверьте каталог / proc на наличие config.gz .

Конфигурация дистрибутива не очень идеальна в том смысле, что она включает почти все возможные драйверы оборудования. Это не имеет большого значения для функциональности ядра, поскольку они являются модулями, и большинство из них никогда не будут использоваться, но это очень значительно увеличивает время, необходимое для сборки. Это также неудобно, поскольку требует, чтобы initramfs содержал определенные основные модули (см. Шаг № 4 ниже). Однако, вероятно, это лучшая отправная точка, чем по умолчанию.

Обратите внимание, что параметры конфигурации переходят и меняются от одной версии ядра к другой, и когда вы запустите одну из программ make config, ниже вашего .config сначала будет проанализирован и обновлен в соответствии с новой версией. Если конфигурация взята из значительно более старой версии,это может привести к странным результатам, поэтому будьте внимательны при настройке. AFAIK это не будет работать наоборот (с использованием конфигурации из более новой версии).

  1. Создайте конфигурацию .config .

    [src] /. Config - это текстовый файл, используемый для настройки ядра. Не редактируйте этот файл напрямую . Изменение параметров часто не сводится к простой замене Y на N и т. Д .; обычно существует набор взаимозависимостей и возможностей ветвления. Вместо этого вы хотите использовать одну из целей конфигурации из make-файла ядра (то есть введите make _____ в командной строке из исходного каталога верхнего уровня):

    • make config является наиболее простой, но, вероятно, не по вкусу большинству людей. Это последовательность вопросов - много вопросов - и если вы передумаете, вам придется начинать заново.

    • make oldconfig аналогичен make config , за исключением того, что если у вас уже есть .config из предыдущей версии, вопросы будут пропущены, кроме тех, которые относятся к новым параметрам. Их все еще может быть много, и большинство из них не будут иметь отношения к вам, поэтому я снова не рекомендую это.

    • make menuconfig - мой (и я думаю, что большинство других) предпочтительный метод. Он создает и выполняет интерфейс TUI (цветные меню, которые будут работать на терминале). Для этого у вас должен быть установлен пакет -dev для ncurses.Это довольно понятно, за исключением поиска, доступного через / ; «Справка» F1 дает объяснение текущей опции. Существует альтернативная версия, make nconfig , с несколькими дополнительными функциями, в которой F2 «syminfo» является эквивалентом F1 в menuconfig.

    • make xconfig - это полноценный графический интерфейс. Для этого требуется qmake и пакет -dev для Qt, так как это опять же скомпилированная и собранная программа. Если вы не использовали их ранее, это может быть значительная загрузка. Причина, по которой я предпочитаю menuconfig версии с графическим интерфейсом пользователя, заключается в том, что иерархии опций представлены с использованием последовательных экранов в первом случае, но открытыми, как во втором.

    Первое, что вам следует (но не обязательно) сделать, - это добавить строку «Локальная версия» (в разделе Общие настройки ). Причина этого указана в пункте 5 ниже.

    «Лабиринт» - хороший способ описать иерархию опций, и подробное рассмотрение этого вопроса выходит далеко за рамки таких вопросов и ответов, как этот. Если вы хотите сесть и пройти через все, выделите часов . Грег Кроа-Хартман (долгое время ведущий разработчик ядра Linux) имеет бесплатную онлайн-книгу о ядре (см. Ссылки ниже), которая содержит главу о конфигурации , хотя она была написана в 2006 году. Мой совет: чтобы начать с разумной базы из вашего текущего ядра дистрибутива (согласно пункту 2), а затем пройтись по нему и снять все флажки, которые, как вы знаете, вам не нужны.Вы также, вероятно, захотите изменить некоторые параметры «модуля» на «встроенный», что подводит нас к следующему пункту ...

  2. О initramfs [необязательно]

    «initramfs» - это сжатая файловая система, встроенная в ядро ​​и / или загружаемая во время загрузки. Его основная цель - включить модули, которые потребуются ядру, прежде чем оно сможет получить доступ к модулям в / lib / modules корневой файловой системы - например, драйверы для устройства, содержащего эту файловую систему. Дистрибутивы всегда используют их частично, потому что драйверы несовместимы друг с другом и поэтому не могут быть полностью встроены в ядро. Вместо этого те, которые подходят для текущей системы, выбираются внутри initramfs .

    Это работает хорошо и не представляет какого-либо недостатка, но, вероятно, представляет собой ненужное осложнение при сборке собственного ядра. 2 Загвоздка в том, что если вы не используете initramfs, вам нужно убедиться, что драйверы для вашей корневой файловой системы (и устройства, на котором она работает) встроены в ядро. В menuconfig это разница между параметром M (= модуль) и параметром * (= встроенный). Если вы не сделаете это правильно, система выйдет из строя на ранней стадии процесса загрузки. Так, например, если у вас есть жесткий диск SATA и корневая файловая система ext4, вам потребуются встроенные драйверы. [Если кто-то может придумать что-то еще, что необходимо, оставьте комментарий, и я включу его здесь].

    Если вы действительно хотите использовать initramfs , вам нужно будет выбрать соответствующие параметры в Общие настройки [src] /Documentation/filesystems/ramfs-rootfs-initramfs.txt есть краткое руководство по созданию , встроенное в ядро ​​, но обратите внимание, что дистрибутивы этого не делают ; они используют внешний файл cpio, сжатый gzip. Тем не мение,этот документ действительно содержит обсуждение того, что должно быть в initramfs (см. «Содержание initramfs»).

  3. Скомпилируйте и установите ядро.

    Следующий шаг прост. Чтобы создать ядро, просто запустите make в каталоге [src] . Если вы используете многоядерную систему, вы можете добавить -j N , чтобы ускорить процесс, где N - это количество ядер, которое вы хотите выделить + 1. Нет тест или проверка . Как только это будет сделано, вы можете создавать модули . В быстром ящике все это должно занять

    Если все пойдет хорошо, сделайте INSTALL_MOD_STRIP = 1 modules_install . Это создаст каталог в / lib / modules , соответствующий номеру версии ядра и строке «Локальная версия», упомянутой в шаге 3, если таковая имеется. Если вы не использовали строку «Локальная версия», будьте осторожны, если у вас уже есть ядро ​​той же версии, от которой вы зависите , потому что эти модули заменят их. 3 INSTALL_MOD_STRIP = 1 не является обязательным, значение см. Здесь .

    Затем вы можете выполнить установку , чтобы установить ядро ​​в расположение по умолчанию. Однако я рекомендую сделать это самостоятельно, чтобы существующие файлы не были перезаписаны. Найдите в [src] / arch / [ARCH] / boot файл с именем bzImage 4 , где [ARCH] - это x86. , если вы используете машину x86 или x86-64 (и что-то еще, если вы используете что-то еще).Скопируйте его в / boot и переименуйте в более конкретное и информативное (неважно, какое). Сделайте то же самое с [src] /System.map , но переименуйте его по следующей схеме:

     System.map- [VERSION] 
     

    Здесь ] [ВЕРСИЯ] в точности то же самое, что имя каталога в / lib / modules , созданного командой make modules_install , которая будет включить строку «Локальная версия», например System.map-3.13.3-mykernel .

  4. Настройте загрузчик GRUB 2.

    Если вы не используете grub (большинство пользователей настольных компьютеров Linux), это, очевидно, к вам не относится. У вас должен быть файл /etc/grub.d/40_custom , в котором немного. Если нет, создайте его владельцем root и chmod 755 (он должен быть исполняемым). К этому добавьте:

     menuentry 'Мое новое ядро ​​или что-то еще' {
    set root = 'hd0,1' 
    linux / boot / [name-of-kernel] root = / dev / sda1 [другие параметры ядра] 
    } 
     

    Если вы используете initramfs, у вас также должна быть последняя строка initrd / path / to / initramfs . Остерегайтесь строки set root = . В примере предполагается, что grub был установлен на первый раздел первого жесткого диска (hd0,1).Если у вас несколько дисков, вы можете вместо этого использовать UUID раздела и заменить эту строку на:

      search --no-floppy --fs-uuid --set = root [UUID раздела] {{1 }} 

    Если grub не находится в вашей корневой файловой системе, это также должно соответствовать директиве root = в строке linux , которая указывает вашу корневую файловую систему (с / sbin / init и / lib / modules ). Версия UUID для этого - root = UUID = [UUID] .

    Чтобы узнать имя устройства, посмотрите свой существующий /boot/grub2/grub.cfg . Вот краткое руководство для таких под grub 2. Когда вы будете довольны, запустите grub2-mkconfig -o /boot/grub2/grub.cfg (но сделайте резервную копию своего текущего сначала grub.cfg ). Затем вы можете отредактировать этот файл и переместить запись наверх. Он по-прежнему должен содержать список вашего старого (работающего) ядра, и в вашем дистрибутиве может быть механизм, который автоматически дублирует запись для нового ядра (поскольку он был найден в / boot ; Fedora делает это, поэтому , использование отдельного заголовка с меню - хорошая идея). Вы можете удалить это позже, если все пойдет хорошо.

    Вы также можете просто вставить пункт меню в grub.cfg напрямую, но некоторые дистрибутивы перезапишут его при обновлении ядра (тогда как при использовании / etc / grub. d / сохранит его включенным).

    Вот и все. Все, что вам нужно сделать, это перезагрузить компьютер.Если это не сработает, попробуйте определить проблему из вывода на экран, перезагрузитесь, выбрав старое ядро, и вернитесь к шагу 3 (за исключением того, что используйте .config , который у вас уже есть, и настройте его). Может быть хорошей идеей очистить (или make mrproper ) между попытками , но убедитесь, что вы скопировали [src] /. Config в некоторые сначала сделайте резервную копию, потому что она будет стерта. Это помогает гарантировать, что объекты, используемые в процессе сборки, не устарели.

  5. Относительно заголовков ядра и др. al.

    Вероятно, вам следует сделать символическую ссылку ( ln -s -i ) /lib/modules/X.X.X / source и /lib/modules/X.X.X/build в каталог / usr / src , где находится дерево исходных текстов (оставьте это). Это необходимо для того, чтобы некоторые инструменты пользовательского пространства (и сторонние установщики драйверов) могли получить доступ к исходному тексту работающего ядра.

    Проблема, связанная с этим, - это файлы .h в / usr / include и т. Д. Они меняются очень постепенно и обратно совместимы . У вас есть два варианта:

    • Оставить те, которые используются в вашем дистрибутиве. Если вы регулярно обновляете всю систему, дистрибутив все равно будет периодически устанавливать новые, так что это вариант «с наименьшими хлопотами».

    • Используйте make headers_install .

    Поскольку они обратно совместимы (это означает, что «программа, созданная на основе библиотеки C с использованием старых заголовков ядра, должна работать на более новом ядре»), вам не нужно слишком суетиться с этим. Единственная потенциальная проблема может возникнуть, если вы создадите собственное ядро ​​и оставите его некоторое время, в течение которого дистрибутив обновит пакет "kernel-headers" до более новой версии, чем использовалась для сборки вашего ядра, и оказывается некоторая несовместимость (которая применима только к программному обеспечению, впоследствии скомпилированному из исходных текстов).

Ссылки

Вот некоторые ресурсы:

  • [src] / README включает краткое руководство по сборке и установке.

  • Каталог [src] / Documentation содержит много информации, которая может быть полезна при настройке.

  • Большая часть книги Грега К. Х. Ядро Linux в двух словах (доступная там бесплатно в виде серии PDF-файлов) вращается вокруг построения ядра.

  • У Grub 2 есть онлайн-руководство .


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

2. Обратите внимание, что есть обстоятельства, при которых требуется initramfs, потому что для монтирования корневой файловой системы требуется некоторое пространство пользователя - например, если оно зашифровано или распределено по сложному массиву RAID.

3. Однако он не удалит модули, которые уже есть, если вы их не собрали, что означает, что вы можете добавить модуль позже, просто изменив конфигурацию и снова запустив make modules_install . Обратите внимание, что сборка некоторых модулей может потребовать изменений в самом ядре, и в этом случае вам также придется заменить ядро. Вы сможете узнать, когда попытаетесь использовать modprobe для вставки модуля.

4. Этот файл может называться иначе, если вы использовали нестандартный вариант сжатия. Я не уверен, каковы все возможности.

0
06.12.2018, 11:21
1 ответ

Если у вас не было какого-либо механизма аудита на месте в то время, когда права доступа к файлу были неправильными, это почти невозможно. Хотя ваша идея поиска файлов истории пользователей не так уж и ужасна (, если вас не беспокоят вопросы этики и конфиденциальности ), простой grepне найдет такие вещи, как

cd (directory_where_file_is)
ls -l
less *
или случаи, когда пользователь сказал vi (some_random_file), а потом сделал :e (the_sensitive_file)изнутри vi.
4
28.01.2020, 02:18

Теги

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