Глубокое погружение в Linux namespaces, часть 2

В предыдущей части мы только окунули пальцы ног в воды namespace и при этом увидели, как это было просто — запустить процесс в изолированном UTS namespace. В этом посте мы осветим User namespace.

Основные log файлы Ubuntu

Традиционно логи в Linux хранятся в директории /var/log. Вот описание стандартных лог файлов Ubuntu, которые там присутствуют. Кстати, если вы только планируете устанавливать ubuntu, то можете воспользоваться моей подробной статьей на этот счет — установка ubuntu server. Так же вам может быть интересен мой обзор и сравнение сервера убунту с другими linux системами — Ubuntu Server — обзор для начинающих, сравнение, отзывы.

  1. syslog или messages. Последнего чаще всего нет и вместо него только syslog. Это традиционные глобальные системные журналы операционной системы linux. Сюда пишутся события загрузки, ядра системы, системы инициализации systemd и т.д.
  2. — лог авторизации и аутентификации в системе.
  3. dmesg — в этом логе хранится информация о загрузке ядра и драйверов оборудования.
  4. — лог файл программы update-alternatives. Не знаю, за какие такие заслуги ей выделили отдельный лог файл, а cron, к примеру, нет.
  5. — лог сообщений ядра ubuntu, да и любой другой linux системы.
  6. maillog — сообщения почтовой системы. Обычно postfix или exim. Если на сервере ubuntu они не установлены, то и почтового лога не будет.
  7. — логирование работы пакетных менеджеров ubuntu. Обычно это apt или apt-get.
  8. lastlog и wtmp — информация о прошлых авторизациях пользователей.

User Namespaces

Мы проиллюстрируем возможности user namespaces, используя только пользовательские ID. Точно такие же действия применимы к групповым ID, к которым мы обратимся далее в этому посте.

User namespace имеет собственную копию пользовательского и группового идентификаторов. Затем изолирование позволяет связать процесс с другим набором ID — в зависимости от user namespace, которому он принадлежит в данный момент. Например, процесс $pid может выполняться от root (UID 0) в user namespace P и внезапно продолжает выполняться от proxy (UID 13) после переключения в другой user namespace Q.

User spaces могут быть вложенными! Это означает, что экземпляр пользовательского namespace (родительский) может иметь ноль и больше дочерних пространств имён, и каждое дочернее пространство имён может, в свою очередь, иметь свои собственные дочерние пространства имён и так далее… (до достижения предела в 32 уровня вложенности). Когда создаётся новый namespace C, Linux устанавливает текущий User namespace процесса P, создающего C, как родительский для C и это не может быть изменено впоследствии. В результате все user namespaces имеют ровно одного родителя, образуя древовидную структуру пространств имён. И, как и в случае с деревьями, исключение из этого правила находится наверху, где у нас есть корневой (или начальный, дефолтный) namespace. Это, если вы еще не делаете какую-то контейнерную магию, скорее всего user namespace, к которому принадлежат все ваши процессы, поскольку это единственный user namespace с момента запуска системы.

В этом посте мы будем использовать приглашения командной строки P$ и C$ для обозначения шела, который в настоящее время работает в родительском P и дочернем C user namespace соответственно.

Введение

Linux[email protected]:~$имя пользователясимвол @ имя системыПРИМЕЧАНИЕ:

Ады Лавлейс/home/matthewEnter

Список

  1. pwd

    pwd расшифровывается как «Print Working Directory» («вывести текущий каталог»). Эта команда возвращает ваше местоположение в файловой системе, например, /usr/share или /home/matthew. Это может оказаться полезно при склерозе, если вы забудете, где находитесь.

  2. ls

    При использовании в отдельности, команда ls выводит список всех файлов и подкаталогов в текущем каталоге. Можно также использовать ls для вывода списка всего содержимого любого каталога, не переходя к нему, за счет добавления к команде адреса этого каталога, например: ls etc/python.

  3. cd

    Эта команда приводит к смене текущего каталога на заданный. Например, команда cd /var/log перенесет вас в подкаталог log, находящийся в каталоге var.

  4. touch

    Команда touch создает пустой файл с заданным именем. Создайте файл прямо сейчас и воспользуйтесь командой cd, чтобы убедиться, что он был создан в текущем каталоге: touch examplefile.

  5. rm

    Команда rm удаляет файл. Для удаления созданного вами выше файла, введите: rm examplefile.

  6. mkdir

    Команда mkdir создает каталог. Создайте каталог прямо сейчас и воспользуйтесь командой cd, чтобы убедиться, что он был создан в текущем каталоге: mkdir exampledirectory.

  7. rmdir

    Команда rmdir удаляет каталог. Для удаления созданного вами выше каталога, введите: rm exampledirectory.

  8. mv

    Команда mv перемещает заданный файл или каталог в указанное место. Её можно также использовать для переименования файлов и каталогов. При желании, можно сделать и то, и другое одной командой. Например, давайте переместим файл с именем sample из текущего каталога в существующий подкаталог stuff с одновременным изменением имени этого файла на example: mv sample stuff/example.

  9. cp

    Команда cp копирует заданный файл или каталог в указанное вами место, возможно, с заданным вами новым именем файла/каталога. Воспользуемся тем же примером: cp sample stuff/example. Различие между mv и cp в том, что во втором случае исходный файл остается на своём месте.

  10. man

    Команда man отображает страницу справочника для заданной команды. Каждая из описанных выше команд способна на гораздо большее, чем мы уже узнали. На деле, это была лишь верхушка айсберга. У большинства команд есть опции, называемые параметрами, предназначенные для изменения их поведения по умолчанию. Например, если вы введете man ls и прочитаете страницу справочника для этой команды, то узнаете о существовании чрезвычайно удобных опций, таких как ls -al, которая позволяет вывести список не только с именами файлов и каталогов, но и очень полезными метаданными каждого файла и каталога.

Настройка

Первым делом необходимо отредактировать файл /etc/fstab, чтобы система знала, к каким разделам применять квоты. Далее в примерах предположим, что каталог /home в вашей системе смонтирован из отдельного раздела. Допустим, изначально фрагмент нашего /etc/fstab, в котором монтируется /home выглядел так:

/dev/VolGroup00/LogVol02    /home     ext3     defaults     1 2

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

/dev/VolGroup00/LogVol02     /home     ext3     defaults,usrquota     1 2

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

mount -o remount /home

Просмотр файлов с помощью cat в Linux

Для просмотра файла просто наберите:#cat

[[email protected] ~]# cat new_file это новый файл

1234 [hc@host~]# cat new_fileэтоновыйфайл

Можно вывести с номерами строк:

[[email protected] ~]# cat -n new_file 1 это 2 новый 3 файл

1234 [hc@host~]# cat -n new_file 1 это 2 новый 3 файл

Можно просмотреть содержимое нескольких файлов.

[[email protected] ~]# cat -n new_file old_file 1 это 2 новый 3 файл 4 Это старый файл

12345 [hc@host~]# cat -n new_file old_file 1 это 2 новый 3 файл 4 Этостарыйфайл

Обратите внимание, что содержимое выводится единым массивом данных, что хорошо видно по тому, что содержание второго файла вывелось строкой под номером 4 – нумерация не началась заново при выводе этого файла. Т.е. cat, как это и заложено в ее названии, склеила файлы.

Как изменить владельца файла

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

chown USER FILE

Например, следующая команда изменит владельца файла с именем file1 на нового владельца с именем linuxize :

chown linuxize file1

Чтобы изменить владельца нескольких файлов или каталогов, укажите их в виде списка, разделенного пробелами. Приведенная ниже команда меняет владельца файла с именем file1 и каталога dir1 на нового владельца с именем linuxize :

chown linuxize file1 dir1

Вместо имени пользователя можно использовать числовой идентификатор пользователя (UID). В следующем примере будет изменено право собственности на файл с именем file2 новому владельцу с UID 1000 :

chown 1000 file2

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

chown 1000 file2

Создание пользователя в терминале

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

Создание пользователя в терминале
  • Команда — это зарезервированное слово, «приказ» системе выполнить то или иное действие.
  • Ключ — под ключом мы имеем ввиду некий переключатель, используемый в команде и расширяющий ее возможности. Ключ может принимать значение, а может и не принимать.
  • Аргумент или значение ключа — это некий логический набор данных, который обрабатывается командой.

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

Создание пользователя в терминале

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

Добавляется новый пользователь в Ubuntu командой useradd имя-юзера. Перед выполнением команды мы запрашиваем разрешение у root, поэтому вначале ставим sudo. Если вы хотите в рамках сессии постоянно работать с правами суперпользователя, выполните sudo su —. Если увидите на скриншотах такую конструкцию, это значит мы переключились в режим root.

Создание пользователя в терминале

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

  1. uid — это идентификатор пользователя.
  2. gid — идентификатор его группы (по умолчанию равен ID юзера).
  3. группы — перечень групп, в которые входит пользователь.
Создание пользователя в терминале

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

Да очень просто: используя ключи -o, -u, -g и -s Первый ключ разрешает создание пользователя с неуникальным ID, второй назначает ему идентификатор пользователя, а третий — идентификатор группы, которые совпадают с идентификаторами рута (0). Четвёртый ключ назначает командную оболочку. Сама же команда будет выглядеть следующим образом, где newroot — новый рутовый пользователь.

Создание пользователя в терминале

useradd -o -u 0 -g 0 -s /bin/bash newroot

Только вот делать так не рекомендуем.

Во-первых, этот дубль-root не отображается на экране входа в систему (нужно нажать «нет в списке» и ввести его имя и пароль), не отображается он и в графической утилите управления пользователями. Во-вторых, у вас могут возникнуть проблемы с его удалением. Ubuntu советует использовать для удаления рутового пользователя ключ —force, но когда мы выполняем команду удаления deluser —force newroot, система сообщает об ошибке из-за использования newroot процесса с ID 1, принадлежащего пользователю root! То есть newroot стал как-бы зеркалом рута.

Как попробовать понравившуюся сборку Linux

1. Скачиваем и устанавливаем бесплатную утилиту Etcher. Она кроссплатформенная, можно установить на Windows, Linux и macOS.

2. Загружаем подходящий образ Linux, например, Ubuntu.

3. Запускаем приложение Etcher и подключаем к компьютеру флешку объемом 4 Гб или более.

Как попробовать понравившуюся сборку Linux

4. Выбираем флешку в качестве целевого диска и скачанный образ Linux в качестве источника.

Внимание! Все данные с флешки будут удалены при форматировании.

5. Ждем несколько минут, пока утилита не запишет образ на накопитель.

6. Подключаем флешку к компьютеру и перезагружаем его в режиме запуска с USB-диска. Это можно настроить в BIOS или зажать определенную клавишу при включении ПК.

7. После загрузки оболочки следует выбрать нужный язык и активировать ознакомительный режим Live-запуска Linux.

Как попробовать понравившуюся сборку Linux

Буквально через минуту-две увидите рабочий стол операционной системы с полным набором утилит и возможностей. Запускайте любые приложения, тестируйте систему, выходите в сеть и подбирайте подходящую сборку Linux.

Sudo и su

Зная чей-либо пароль, можно непосредственно зарегистрироваться в системе под его именем, введя команду su имя_пользователя.

Программа su служит для выполнения от имени указанного пользователя (по умолчанию — root) указанной команды/программы (по умолчанию — той программы, что определена в качестве оболочки (shell) для указанного пользователя) и запрашивает она пароль указанного пользователя.

О программе sudo можно сказать почти то же самое, за двумя исключениями:

  • Нет «программы по умолчанию». для запуска оболочки, определённой для указанного пользователя, надо передать программе опцию -i.
  • По умолчанию запрашивается не пароль указанного пользователя, а пароль пользователя, выполняющего программу sudo. какому пользователю, какие программы и от чьего имени можно запускать, определяется содержимым конфигурационного файла /etc/sudoers (редактируется с помощью программы visudo).

Заключение

Полный список команд для дистрибутивов Linux — материал скорее для объемной книги, чем для одной статьи. Однако, в данном обзоре мы постарались собрать самые важные из них. Эти команды будут гарантированно полезны как в повседневных задачах, так и для раскрытия продвинутых возможностей этой операционной системы.

У каждого пользователя Linux есть свой список must have команд. Наверняка и вам есть чем дополнить данный обзор? Делитесь своими любимыми командами Linux в комментариях!

Хотите, чтобы операционка работала как швейцарские часы? Надёжная и мощная платформа для развёртывания любых дистрибутивов Linux — VDS от Eternalhost!

Оцените материал: [Всего голосов: 8 Средний: 4.5/5]