User mode linux что это

Содержание
  1. User-mode Linux
  2. Содержание
  3. Применения UML
  4. Интеграция в ядро Linux
  5. Сравнение
  6. Платформы
  7. См. также
  8. Литература
  9. Ссылки
  10. Полезное
  11. Смотреть что такое «User-mode Linux» в других словарях:
  12. Команда Usermod в Linux
  13. Команда usermod
  14. Добавить пользователя в группу
  15. Изменить основную группу пользователя
  16. Изменение информации о пользователе
  17. Изменение домашнего каталога пользователя
  18. Изменение пользовательской оболочки по умолчанию
  19. Изменение UID пользователя
  20. Изменение имени пользователя
  21. Установка даты истечения срока действия пользователя
  22. Блокировка и разблокировка учетной записи пользователя
  23. Выводы
  24. Как начать использовать User Mode в Linux
  25. Настройка
  26. Установка зависимостей на хосте
  27. Скачивание ядра
  28. Настройка сборки ядра
  29. Сборка ядра
  30. Инсталляция бинарника
  31. Настройка гостевой файловой системы
  32. Создание командной строки ядра
  33. Настройка гостевой сети
  34. Путешествие в slirp
  35. Настройка сети
  36. Докер-файл

User-mode Linux

User-Mode Linux (UML, Линукс пользовательского режима) — вариант ядра Linux, который позволяет запустить несколько виртуализованных Линукс-систем (т. н. гостевых от англ. guests ) в качестве обычных приложений в основной Linux‐системе (т. н. хост от англ. host ). Каждый гость запущен как процесс в «пространстве пользователя» (англ. user space ), что позволяет запускать несколько виртуальных ОС без перенастройки основной линукс-системы.

Содержание

Применения UML

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

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

Иногда предоставляется веб-хостинг на базе UML.

Интеграция в ядро Linux

Доступно в виде патча для некоторых ядер начиная с версий 2.2.x.

К выходу ядра 2.6.0 было интегрировано в ядро линукс.

Сравнение

Считается, что User-mode Linux имеет более низкую производительность по сравнению с Xen и OpenVZ.

Платформы

Изначально создано для x86, но позже переносилось на IA-64 и PowerPC. В настоящее время работает на x86-64.

См. также

Литература

  • Jeff Dike, User Mode Linux, Prentice Hall, 2006, 352 pp, ISBN 0-13-186505-6.

Ссылки

Wikimedia Foundation . 2010 .

Полезное

Смотреть что такое «User-mode Linux» в других словарях:

User-mode Linux — (UML) allows multiple virtual Linux systems (known as guests) to run as an application within a normal Linux system (known as the host). As each guest is just a normal application running as a process in user space, this approach provides the… … Wikipedia

User Mode Linux — (im Folgenden UML genannt, nicht zu verwechseln mit der Unified Modeling Language, welche ebenfalls als UML abgekürzt wird) ist eine Variante des Linux Kernels, die es erlaubt, komplette Linux Kernel als Anwendungsprozesse innerhalb operierender… … Deutsch Wikipedia

User Mode Linux — (UML) es una modificación del núcleo Linux para que funcione sobre su propia interfaz de llamadas al sistema. De este modo, un núcleo compilado para la arquitectura um puede operar como un proceso de usuario más de otro núcleo Linux que hace las… … Wikipedia Español

User Mode Linux — Pour les articles homonymes, voir UML. User Mode Linux ou UML est un noyau Linux compilé qui peut être exécuté dans l espace utilisateur comme un simple programme. Il permet donc d avoir plusieurs systèmes d exploitation virtuels sur une seule… … Wikipédia en Français

User-Mode — Schema der Ringe beim x86 System mit Gates zur Kommunikation Der Ring, auch Domain genannt, bezeichnet im Umfeld der Betriebssystem Programmierung und des Multitaskings eine Privilegierungs bzw. Sicherheitsstufe eines Prozesses. Diese schränkt… … Deutsch Wikipedia

Linux (Kernel) — Bildschirmfoto … Deutsch Wikipedia

Linux-Kernel — Linux (Kernel) Entwickler Linus Torvalds u. v. m. Sprache(n) … Deutsch Wikipedia

Linux Kernel — Linux (Kernel) Entwickler Linus Torvalds u. v. m. Sprache(n) … Deutsch Wikipedia

Linux kernel — Linux Linux kernel 3.0.0 booting Company / developer Linus Torvalds and thousands … Wikipedia

Linux-VServer — Dernière version 2.2 [+/−] … Wikipédia en Français

Источник

Команда Usermod в Linux

usermod — это утилита командной строки, которая позволяет изменять данные для входа пользователя.

В этой статье рассказывается, как использовать команду usermod для добавления пользователя в группу, изменения оболочки пользователя, имени входа, домашнего каталога и т. Д.

Команда usermod

Синтаксис команды usermod имеет следующий вид:

Только root или пользователи с доступом sudo могут вызывать usermod и изменять учетную запись пользователя. В случае успеха команда не выводит никаких результатов.

Добавить пользователя в группу

Наиболее типичный вариант использования usermod — добавление пользователя в группу.

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

Если вы хотите добавить пользователя к нескольким группам одновременно, указать группы после того , как -G опция разделяться , (запятыми) без промежуточных пробелов.

Например, чтобы добавить пользователя linuxize в группу games , вы должны выполнить следующую команду:

Всегда используйте параметр -a (добавить) при добавлении пользователя в новую группу. Если вы опустите опцию -a , пользователь будет удален из групп, не перечисленных после опции -G .

Если пользователя или группы не существует, команда предупредит вас.

Изменить основную группу пользователя

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

В следующем примере мы меняем основную группу пользователя linuxize на developers :

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

Изменение информации о пользователе

Чтобы изменить информацию GECOS (полное имя пользователя), запустите команду с параметром -c за которым следует новый комментарий и имя пользователя:

Читайте также:  Изменение настроек windows по умолчанию

Вот пример, показывающий, как добавить дополнительную информацию пользователю linuxize:

Эта информация хранится в /etc/passwd .

Изменение домашнего каталога пользователя

В большинстве систем Linux домашние каталоги пользователей названы по имени пользователя и создаются в каталоге /home .

Если по какой-то причине вы хотите изменить домашний каталог пользователя, вызовите команду usermod с параметром -d usermod абсолютный путь к новому домашнему каталогу и имя пользователя:

По умолчанию команда не перемещает содержимое домашнего каталога пользователя в новый. Чтобы переместить содержимое, используйте параметр -m . Если новый каталог еще не существует, он создается:

Вот пример, показывающий, как изменить домашний каталог пользовательских www-data на /var/www :

Изменение пользовательской оболочки по умолчанию

Оболочка по умолчанию — это оболочка, которая запускается после входа в систему. По умолчанию в большинстве систем Linux в качестве оболочки по умолчанию используется Bash Shell.

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

В приведенном ниже примере мы меняем оболочку пользователя на Zsh:

Вы можете узнать, какие оболочки доступны в вашей системе, просмотрев содержимое файла /etc/shells .

Изменение UID пользователя

UID (идентификатор пользователя) — это номер, присвоенный каждому пользователю. Он используется операционной системой для обозначения пользователя.

Чтобы изменить UID пользователя, вызовите команду с параметром -u следующим за новым UID и именем пользователя:

В приведенном ниже примере показано, как изменить номер «UID» на «1050»:

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

Изменение имени пользователя

Хотя не очень часто, иногда вам может потребоваться изменить имя существующего пользователя. Параметр -l используется для изменения имени пользователя:

В приведенном ниже примере мы переименовываем пользователя linuxize в lisa в «1050»:

При изменении имени пользователя вы также можете изменить домашний каталог пользователя, чтобы отразить новое имя пользователя.

Установка даты истечения срока действия пользователя

Дата истечения срока — это дата, когда учетная запись пользователя будет отключена. Чтобы установить дату истечения срока действия пользователя, используйте параметр -e :

Срок годности должен быть установлен в формате YYYY-MM-DD .

Например, чтобы отключить пользователя linuxize 21 2022-02-21 , вы должны выполнить следующую команду:

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

Используйте команду chage -l для просмотра даты истечения срока действия пользователя:

Дата истечения срока хранения хранится в /etc/shadow .

Блокировка и разблокировка учетной записи пользователя

Параметр -L позволяет заблокировать учетную запись пользователя:

Команды вставят восклицательный знак ( ! ) Перед зашифрованным паролем. Если поле пароля в /etc/shadow содержит восклицательный знак, пользователь не сможет войти в систему, используя аутентификацию по паролю. Другие методы входа в систему, такие как аутентификация на основе ключей или переключение на пользователя , по-прежнему разрешены. Если вы хотите заблокировать учетную запись и отключить все методы входа в систему, вам также необходимо установить дату истечения срока действия равной 1.

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

Чтобы разблокировать пользователя, запустите usermod с параметром -U :

Выводы

Мы показали вам, как использовать команду usermod для установки информации об учетной записи пользователя.

Не стесняйтесь оставлять комментарии, если у вас есть вопросы.

Источник

Как начать использовать User Mode в Linux

Вступление от переводчика: На фоне массового входа в нашу жизнь различного рода контейнеров может быть довольно интересно и полезно узнать, с каких технологий это всё начиналось когда-то. Некоторые из них можно с пользой применять и по сей день, но не все о таких способах помнят (или знают, если не застали во время их бурного развития). Одной из таких технологий является User Mode Linux. Автор оригинала изрядно покопалась, разбираясь, что из старых наработок ещё работает, а что уже не очень, и собрала нечто вроде пошаговой инструкции о том, как самому себе завести доморощенный UML в 2к19. И да, мы пригласили на Хабр автора оригинального поста Cadey, так что если есть вопросы — задавайте на английском в комментариях.

User Mode в Linux — это, фактически, порт ядра Linux на само себя. Этот режим позволяет запустить полноценное ядро Linux в качестве пользовательского процесса и обычно используется разработчиками для тестирования драйверов. Но также этот режим полезен и в качестве инструмента общей изоляции, принцип которой схож с работой виртуальных машин. Данный режим обеспечивают большую изоляцию, чем Docker, но меньшую, чем полноценная виртуальная машина вроде KVM или Virtual Box.

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

И сравните это с pstree ядра Linux в User Mode:

При работе с Docker-контейнерами я могу видеть с хоста имена процессов, которые запущены в гостевой системе. С Linux User Mode это невозможно. Что это значит? Это значит, что инструменты мониторинга, работающие через подсистему аудита Linux (Linux’s auditing subsystem) не видят процессы, исполняемые в гостевой системе. Но в некоторых ситуациях эта особенность может стать палкой о двух концах.

Читайте также:  Ошибка 0xc004e016 при активации windows

Вообще весь пост ниже — это набор исследований и грубых попыток добиться желаемого результата. Для этого мне приходилось использовать разные древние инструменты, читать исходники ядра, заниматься интенсивной отладкой кода, написанного во времена, когда я еще ходила в начальную школу, а также ковыряться в сборках Heroku с помощью специального бинаря в поисках нужных мне инструментов. Вся эта работа привела к тому, что ребята в моем IRC стали называть меня волшебницей (magic). Я надеюсь, что этот пост послужит кому-то надежной документацией для того, чтобы провернуть все тоже самое, но уже с более новыми ядрами и версиями ОС.

Настройка

Настройка Linux User Mode выполняется в несколько этапов:

  • установка зависимостей на хосте;
  • скачивание ядра Linux;
  • настройка сборки ядра;
  • сборка ядра;
  • инсталляция бинарника;
  • настройка гостевой файловой системы;
  • подбор параметров запуска ядра;
  • настройка гостевой сети;
  • запуск гостевого ядра.

Я предполагаю, что если вы решите самостоятельно это всё провернуть, скорее всего, будете делать все описанное в какой-нибудь Ubuntu или Debian-подобной системе. Я пыталась реализовать все вышеописанное в моем любимом дистрибутиве — Alpine, но ничего не вышло, по всей видимости, по причине того, что ядро Linux имеет жесткую привязку по glibc-isms для драйверов в User Mode. Планирую сообщить об этом в апстрим после того, как окончательно разберусь в проблеме.

Установка зависимостей на хосте

Ubuntu требует, как минимум, следующие пакеты для сборки ядра Linux (при условии чистой установки):

— ‘build-essential’
— ‘flex’
— ‘bison’
— ‘xz-utils’
— ‘wget’
— ‘ca-certificates’
— ‘bc’
— ‘linux-headers’

Вы можете установить их с помощью следующей команды (с правами root или с помощью sudo):

Обратите внимание, что запуск программы настройки меню для ядра Linux потребует установки libncurses-dev . Пожалуйста, убедитесь, что он установлен с помощью следующей команды (с правами root или с помощью sudo):

Скачивание ядра

Определите место для загрузки и последующей сборки ядра. Для этой операции вам потребуется выделить около 1,3 Гб пространства на жестком диске, поэтому убедитесь, что оно у вас есть.

После перейдите на kernel.org и получите URL на загрузку последней стабильной версии ядра. На момент написания поста это: https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.1.16.tar.xz

Загрузите этот файл, используя ‘wget’ :

И извлеките его с помощью ‘tar’ :

Теперь входим в директорию, созданную при распаковке tarball:

Настройка сборки ядра

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

Она частично проведет сборку и выведет вам диалоговое окно. Когда внизу окна высветится ‘ [Select] ‘, вы сможете заняться настройкой с помощью клавиш Пробел или Ввод. Навигация по окну, как обычно, стрелками клавиатуры «вверх» и «вниз», а выделение элементов — «влево» или «вправо».

Указатель вида —> означает, что вы находитесь в подменю, вход в которое осуществляется клавишей Ввод. Выход из него, очевидно, через ‘ [Exit] ‘.

Включите следующие параметры в ‘ [Select] ‘ и убедитесь, что рядом с ними есть символ ‘[*]’:

Все, из этого окна можно выходить, последовательно выбирая ‘ [Exit] ‘. Только убедитесь, что в конце вам предложит сохранить конфигурацию и выберете ‘ [Yes] ‘.

Я рекомендую вам поиграться с параметрами сборки ядра после прочтения этого поста. Благодаря этим экспериментами вы сможете многое почерпнуть в плане понимания работы низкоуровневых механик ядра и влияния различных флагов на его сборку.

Сборка ядра

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

Зачем? Эта команда скажет нашему сборщику использовать все доступные ядра и потоки процессора в процессе сборки. Команда $(nproc) в конце Build подставляет вывод команды nproc , которая является частью coreutils в стандартной сборке Ubuntu.

По прошествии некоторого времени наше ядро будет собрано в исполняемый файл ./linux .

Инсталляция бинарника

Так как User Mode в Linux создает обычный бинарник, вы можете установить его, как и любую другую утилиту. Вот как это делала я:

Также стоит убедиться, что

/bin находится в вашем $PATH :

Настройка гостевой файловой системы

Создайте директорию для гостевой файловой системы:

Откройте alpinelinux.org и в разделе загрузок найдите актуальную ссылку на скачивание MINI ROOT FILESYSTEM . На момент написания публикации это было:

Скачайте этот tarball, используя wget:

Теперь войдите в директорию гостевой файловой системы и распакуйте архив:

Описанные действия создадут маленький шаблон файловой системы. Из-за особенностей работы системы устанавливать пакеты через диспетчер apk Alpine будет крайне сложно. Но данной ФС будет достаточно для оценки общей идеи.

Также нам потребуется инструмент tini для пресечения потребления памяти зомби-процессами нашего гостевого ядра.

Создание командной строки ядра

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

Это полотнище освещает основные параметры запуска. Давайте запустим ядро с минимальным необходимым набором опций:

Строки выше говорят нашему ядру следующее:

  • Предположим, что корневая файловая система является псевдо-устройством /dev/root .
  • Выбери hostfs в качестве драйвера корневой файловой системы.
  • Смонтируй гостевую файловую систему, которую мы создали в root-устройстве.
  • И да, в режиме чтения-записи.
  • Используй только 64 мегабайта оперативной памяти (вы можете использовать гораздо меньше, в зависимости от того, что вы планируете делать, но 64 МБ кажутся оптимальным объемом).
  • Ядро автоматически запускает /bin/sh как init -процесс.
Читайте также:  Apache настройка https windows

Запустите эту команду, и вы должны получить что-то вроде следующего:

Манипуляции выше дадут нам гостевую систему на минималках, без таких вещей, как /proc или присвоенный хостнейм. Для примера, попробуйте выполнить следующие команды:

— uname -av
— cat /proc/self/pid
— hostname

Чтобы выйти из гостевой системы, введите exit или нажмите control-d. Это пристрелит оболочку с последующим kernel panic:

Мы получили этот kernel panic по причине того, что ядро Linux считает, что процесс инициализации всегда запущен. Без него система больше не может функционировать и завершает работу. Но так как это процесс пользовательского режима, полученный результат отправляет сам себя в SIGABRT , что приводит к выходу.

Настройка гостевой сети

А вот тут у нас всё начинает идти не по плану. Сеть в User Mode Linux — это то место, где вся концепция ограниченного «пользовательского режима» начинает разваливаться. Ведь обычно на системном уровне сеть ограничена привилегированными режимами исполнения по всем нам понятным причинам.

Прим. пер.: больше о разных вариантах работы с сетью в UML можно почитать здесь.

Путешествие в slirp

Однако же существует древний и практически неподдерживаемый инструмент под названием Slirp, при помощи которого User Mode Linux может взаимодействовать с сетью. Он работает примерно как стек TCP/IP на уровне пользователя и не требует каких-либо системных разрешений для запуска. Этот инструмент был выпущен в 1995 году, а последнее обновление датируется 2006 годом. Slirp очень стар. За время без поддержки и обновлений компиляторы ушли настолько далеко, что теперь этот инструмент можно охарактеризовать только как «code rot».

Итак, давайте накатим Slirp из репозиториев Ubuntu и попробуем его запустить:

Ох, божечки. Давайте установим отладчик для Slirp и посмотрим, сможем ли разобраться, что тут происходит:

Ошибка бьется у нас в этой строке. Давайте посмотрим на stacktrace, может там нам что-нибудь поможет:

Тут мы видим, что сбой происходит во время запуска основного цикла, когда slirp пытается проверить тайм-ауты. Вот в этот момент я должна была отказаться от попыток отладки. Но давайте посмотрим, работает ли Slirp, собраный из сорцов. Я повторно загрузила архив напрямую с сайта Sourceforge, потому что тащить что-то оттуда через командную строку — боль:

Тут мы видим алерты о неопределенных встроенных функциях, то есть о невозможности слинковать получающийся в итоге бинарный файл. Похоже, в период между 2006 годом и этим моментом gcc прекратил создавать символы, используемые в строенных функциях промежуточно скомпилированных файлов. Давайте попробуем заменить ключевое слово inline на пустой комментарий и посмотрим на результат:

Не-а. Это тоже не работает. По-прежнему не удается найти символы этих функций.

На этом этапе я сдалась и начала искать на Github пакеты сборки Heroku. Моя теория базировалась на том, что в каком-нибудь сборочном пакете Heroku будут содержаться необходимые мне двоичные файлы. В итоге поиски привели меня вот сюда. Я скачала и распаковала uml.tar.gz и нашла следующее:

Это бинарный файл slirp! А он работает?

Не падает — так что должно сработать! Давайте подсадим этот бинарник в

На случай, если создатель пакета удалит его, я сделала зеркало.

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

Теперь давайте настроим сеть на нашем гостевом ядре. Обновим параметры запуска:

Теперь давайте включим сеть:

Первые две команды настройки /proc и /sys необходимы для работы ifconfig , которая устанавливает сетевой интерфейс для связи с Slirp. Команда route устанавливает таблицу маршрутизации ядра для принудительной отправки всего трафика через туннель Slirp. Давайте проверим это с помощью DNS-запроса:

Прим.пер.: Судя по всему, изначальный пост писался на десктопе с проводной сетевой картой, либо какой-то иной конфигурацией, не требующей дополнительных драйверов. На ноутбуке с WiFi 8265 от Intel же при поднятии сети возникает ошибка

Видимо, ядро не может связаться с драйвером сетевухи. Попытка вкомпилить firmware в ядро ситуацию, к сожалению, не исправила. На момент публикации именно в такой конфигурации решения пока найти не удалось. На более простых конфигах (например, в Virtualbox) интерфейс поднимается корректно.

Давайте автоматизируем перенаправление с помощью следующего shell-скрипта:

И отметим его исполняемым:

А затем внесем изменения в командную строку ядра:

Сеть работает стабильно!

Докер-файл

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

Я надеюсь, что этот пост помог вам понять, как поднять гостевое ядро. Получился какой-то монстр, но задумывалась публикация в качестве всеобъемлющего руководства на тему сборки, установки и настройки User Mode в Linux под современными версиями операционных систем этого семейства. Последующие действия должны включать в себя установку сервисов и прочего программного обеспечения уже внутри гостевой системы. Так как образы контейнеров Docker — это просто распиаренные tar-архивы, вы должны быть в состоянии извлечь образ через docker export , а затем определить путь его установки в корне файловой системы гостевого ядра. Ну, а затем выполните shell-скрипт.

Отдельное спасибо Rkeene с #lobsters на Freenode. Без его помощи в отладке Slirp я бы не зашла так далеко. Я понятия не имею, как его система Slackware корректно работает со slirp, но мои системы Ubuntu и Alpine не приняли slirp и предложенный мне Rkeene бинарник. Но мне достаточно и того, что у меня работает хоть что-то.

Источник

Оцените статью