Ускорение загрузки Linux
Начнем мы с оптимизации ядра 5 секунд, это не так много, но можно же еще улучшить. Мы не будем пересобирать ядро, хотя и это дало бы больший эффект, мы просто настроим его работу с помощью параметров загрузки.
Настраивать Grub будем правильно. Параметры загрузки ядра находятся в файле /etc/default/grub, а именно в строчке GRUB_CMDLINE_LINUX_DEFAULT. Откройте этот файл:
Теперь приводим интересующую нас строчку к такому состоянию:
Разберем подробнее за что отвечает каждый параметр:
- quiet — вывод, это долго, поэтому говорим ядру что на экран нужно выводить минимум информации
- rootfstype=ext4 — указываем в какую файловую систему отформатирован корень. У меня ext4.
- libahci.ignore_sss=1 — Ignore staggered spinup flag, ускоряет загрузку жестких дисков
- raid=noautodetect — raid я не использую, думаю вы тоже поэтому отключаем.
- selinux=0 — система полномочий selinux на домашней машине тоже ни к чему, без нее будет быстрее.
- plymouth.enable=0 — заставка plymouth тоже занимает много времени, поэтому убираем заставку
- lpj=12053560 — позволяет задать константу loops_per_jiffy, что позволит ядру не вычислять ее каждый раз и сэкономит до 250 миллисекунд. Это значение индивидуально для каждого компьютера.
Чтобы узнать значение последнего параметра выполните:
Нас будет интересовать значение lpj=, укажите его в своем конфигурационном файле.
Также для указания корневого раздела желательно не использовать всякие там UUID, быстрее будет если написать прямо. Для того чтобы конфигуратор grub не использовал grub добавьте в тот же файл строчку:
Сохраните файл и обновим конфигурацию grub:
Проверяем, действительно ли установлены нужные опции:
Да, все правильно, перезагружаем компьютер, и смотрим что вышло:
Почти на одну секунду быстрее, и то хорошо. Возможно, у вас эффект будет намного лучше. Теперь идем разбираться с сервисами.
Основы SELinux
SELinux представляет собой систему маркировки, каждый процесс имеет метку. Каждый файл, каталог или даже пользователь в системе имеет метку. Даже портам и устройствам и именам хостов в системе присвоены метки. SELinux определяет правила доступа процесса к объектам с определенными метками. Это и называется политикой. За соблюдением правил следит ядро. Иногда это еще называется обязательный контроль доступа (Mandatory Access Control, MAC)
Владелец файла не имеет полной свободы действий над атрибутами безопасности. Стандартные атрибуты контроля доступа, такие как группа и владелец ничего не значат для SELinux. Полностью все управляется метками. Значения атрибутов могут быть установлены и без прав root, но на это нужно иметь специальные полномочия SELinux.
Теперь поговорим немного о политиках. Мы определяем метку для процессов определенного типа, а также на объекты файловой системы тоже определенного типа. Вот представьте, себе систему, в которой объекты (процессы) это кошки и собаки. Это типы процессов. И у нас есть объекты, к которым они хотят иметь доступ — еда. Но еда у них разная еда_котов и еда_собак. Нужно чтобы объекты имели доступ только к своей еде.
У собаки есть разрешение есть свою пищу, а у кошки — свою. В политиках SELinux это будет выглядеть вот так:
Теперь ядро будет следить, чтобы соблюдались эти правила. В системе SELinux все по умолчанию запрещено, таким образом, если собака попытается съесть кошачий корм, ядро не позволит это сделать.
Допустим, процесс Apache имеет метку httpd_t, а файлы, к которым у Apache должен быть доступ мы назвали httpd_sys_content. Также у нас есть данные кредитных карт, которые хранятся в базе данных mysql. Если хакер взломает процесс Apache и у него будет root доступ, то он все равно не сможет получить доступ к файлам от mysql.
SELinux может вызвать у системных администраторов большое количество проблем, многие её просто отключают, таким образом, решив проблему и уменьшив безопасность. Как уже говорилось выше, по умолчанию SELinux блокирует все и вся. Это подходит под описание строгой политики. Но чтобы облегчить системным администраторам работу, были разработаны другие стандартные политики. Во многих дистрибутивах используется целевая политика (targeted), она охватывает около 200 сетевых служб и процессов, все же остальные программы запускаются и работают свободно, к ним никакие модели SELinux не применяются.
SELinux может работать в трех режимах — отключен, система полностью отключена и не работает, режим ограничений Enforcing — программа активирована и блокирует все не соответствующие политикам действия и третий режим Permissive — только фиксировать нарушения.
Политики SELinux бывают тоже нескольких типов. Политика targeted, которую мы рассматривали выше относится к типу Type Enforcment (TE) политик, в которых управление доступом к файлам осуществляется на основе ролей. Сюда же относится политика strict. Есть ещё политики Multi-Level Security (MLS), в которых добавлены дополнительные категории, они сложные и ненужны рядовому пользователю, поэтому начинающим можно пока забыть об их существовании. Надо понять, что подсистема SELinux разработана военными для военных, поэтому обычным пользователям все её возможности вряд-ли понадобятся. В этой статье мы будем обсуждать именно политику targeted.
Теория в общих чертах рассмотрена. А теперь перейдем к практической части.
Как восстановить (изменить) в Linux пароль Root
Вы не можете вспомнить Root пароль в Linux или Вам досталась система Linux от кого-то, кто не сообщил пароль суперпользователя? Не все ещё потеряно! В Linux можно восстановить пароль Root путем загрузки системы в определенном — однопользовательском режиме.
В этой статье описана процедура загрузки Linux в однопользовательском режиме, при изменении параметров GRUB и для дальнейшего изменения пароля Root в операционных системах Linux.
Во время обычного использования системы, Linux работает на уровнях выполнения от 2 до 5, что соответствует различным режимам многопользовательской системы.
Загрузка Linux в уровне 1 позволит Вам войти в определенный режим, который называется однопользовательским режимом, и изменить пароль Root.
- Некоторые дистрибутивы, такие как Ubuntu предлагают загрузочную запись в меню загрузки Grub, где она называется «режим восстановления» «recovery mode».
Если ваш дистрибутив поддерживает эту возможность, то такой пункт содержится в меню загрузки Grub. Значит, вы можете переходить к следующей части статьи.
Для тех, у кого нет в меню Grub выше описанной загрузочной записи, вы можете вручную отредактировать предложенный стандартный пункт меню Grub.
Для этого нужно во время того как GRUB представляет список меню, если список не возникает то принудительно вызвать его нажатием на ESC и следовать следующим инструкциям:
- используйте стрелки для того чтобы выбрать загрузочную запись, которую требуется изменить
- нажмите «е» чтобы отредактировать команды для загрузочной записи
- используйте стрелки, чтобы выбрать строку «kernel»
- снова нажмите «e», чтобы отредактировать
- в конце линии добавьте «s»
- нажмите клавишу «Enter», чтобы вернуться в обычный режим меню Grub
- нажмите «b» для того, чтобы запустить ядро с этим дополнительным параметром
Ядро загрузиться быстро, графического интерфейса вы не увидите, но вы получите командную строку от Root.
После того как Вы получите доступ от суперпользователя к файловой системе, вы можете изменить пароль Root для Linux.
Изменение пароля Root в Linux
Так как вы уже являетесь суперпользователем, для изменения пароля Root система Linux старый пароль у Вас не спросить, поэтому смело выполняйте команду:
passwd
Система Linux попросит ввести новый пароль Root, подтвердите ввод, чтобы убедиться, что вы не допустили отпечатков.
Вот и все! Теперь вы можете перезагрузиться и запустить дистрибутив в обычном режиме. Для получения прав суперпользователя нужен ваш новый пароль.
Иноды и метаданные
Файловая система должна хранить файлы, которые могут находиться в каталогах, которые, в свою очередь, могут иметь подкаталоги. При этом что-то где-то должно записывать информацию о расположении всех файлов файловой системы, имена файлов, их размер, к каким учетным записям они принадлежат, какие у них разрешения и т.д. Данная информация называется метаданными — данные, которые описывают другие данные. Метаданные хранятся в иноде файла.
Инод (или «индексный дескриптор», «inode», от англ. «index node») — это структура данных, в которой хранятся метаданные о стандартных файлах, каталогах или других объектах файловой системы. Каждый используемый инод ссылается на 1 файл. Каждый файл имеет 1 инод. Каталоги, символьные и блочные устройства — всё это является файлами, а значит у каждого из них есть по 1 иноду.
Информация об инодах хранится в специальной таблице, расположенной, обычно, в начале каждого раздела диска. Каждый раздел имеет свою, отдельную таблицу инодов.
Для каждого файла в каталоге есть запись, содержащая имя файла и связанный с ним номер инода. Вся остальная информация о файле извлекается из таблицы инодов с помощью номера инода файла.
Иноды уникальны только в границах разделов своих файловых систем. Если у вас есть два файла, которые находятся на разных разделах диска, то у них могут быть одинаковые номера инодов.
Если у вас закончатся иноды, то вы больше не сможете создавать новые файлы, даже если у вас осталось место в разделе диска.
Типы командных оболочек
В *nix-системах существует два основных типа оболочек: оболочки на основе Bourne shell и оболочки на основе C shell.
Типичными представителями оболочек типа Bourne shell являются:
sh (Bourne shell)
bash (Bourne Again shell)
ksh (Korn shell)
zsh (Z Shell)
К оболочкам типа C Shell относятся:
csh (C shell)
tcsh (TENEX/TOPS C shell)
Ниже представлены некоторые из самых распространенных шеллов, используемых в *nix-системах:
Примечание: Термин «*nix-системы» обозначает -подобные операционные системы.
sh (Bourne shell)
sh (сокр. от Bourne shell») — это самая старая (среди рассматриваемых) оболочка, написанная Стивеном Борном из AT&T Bell Labs для ОС UNIX v7. Оболочка доступна практически в любом *nix-дистрибутиве. Многие другие шеллы уходят своими корнями именно к sh. Благодаря своей скорости работы и компактности, данная оболочка является предпочтительным средством для написания shell-скриптов. К её недостаткам можно отнести отсутствие функций для использования оболочки в интерактивном режиме, а также отсутствие встроенной обработки арифметических и логических выражений.
Примечание: Стоит отметить, что из-за общего морального устаревания оболочки, в современных системах ссылка на шелл sh (/bin/sh), обычно, является псевдонимом для запуска текущей, более новой оболочки.
Характерные черты sh:
Полные пути к интерпретатору: /bin/sh и /sbin/sh.
Приглашение для обычного пользователя: .
Приглашение для суперпользователя (root): .
bash (Bourne-Again shell)
bash (сокр. от Bourne–Again shell») — это усовершенствованный и дополненный вариант шелла sh, является одной из самых популярных современных командных оболочек *nix-систем.
Совместим с sh.
Объединяет в себе полезные фишки оболочек ksh и csh.
Поддерживает навигацию при помощи стрелок, благодаря чему можно просматривать историю команд и выполнять редактирование прямо в командной строке.
Характерные черты bash:
Полный путь к интерпретатору: /bin/bash.
Приглашение для обычного пользователя: (где — это домашний каталог текущего пользователя, например, ).
Приглашение для суперпользователя (root): .
ksh (Korn shell)
ksh (сокр. от Korn shell) — это командная оболочка, разработанная Дэвидом Корном из AT&T Bell Labs в 1980-x годах.
Является расширением sh.
Имеет обратную совместимость с sh.
Имеет интерактивный функционал, сравнимый с csh.
Включает в себя удобные для программирования функции, такие как: встроенную поддержку арифметических выражений/функций, Си-подобный синтаксис скриптов и средства для работы со строками.
Работает быстрее, чем csh.
Может запускать скрипты, написанные для sh.
Характерные черты ksh:
Полный путь к интерпретатору: /bin/ksh.
Приглашение для обычного пользователя: .
Приглашение для суперпользователя (root): .
csh (C shell)
csh (сокр. от C shell) — это командная оболочка, созданная Биллом Джоем (автором редактора vi) с целью усовершенствования стандартного шелла Unix (sh).
Имеет встроенные функции для интерактивного использования, например, псевдонимы (aliases) и историю команд.
Включает в себя удобные для программирования функции, такие как: встроенную поддержку арифметических выражений и Cи-подобный синтаксис скриптов.
Характерные черты csh:
Полный путь к интерпретатору: /bin/csh.
Приглашение для обычного пользователя: .
Приглашение для суперпользователя (root): .
tcsh (TENEX C Shell)
tcsh (сокр. от TENEX C shell) — это командная оболочка, созданная Кэном Гриром, которая позиционируется как улучшенная версия шелла csh.
Имеет полную совместимость csh.
Именно в данном шелле впервые появилась функция автодополнения команд и путей.
Удобна для интерактивной работы.
Поддерживает редактор командной строки в стиле vi или emacs.
Является стандартным шеллом во FreeBSD.
Характерные черты tcsh:
Полный путь к интерпретатору: /bin/tcsh.
Приглашение для обычного пользователя: .
Приглашение для суперпользователя (root): .
zsh (Z Shell)
zsh (сокр. от Z shell) — это командная оболочка, созданная Паулем Фалстадом во время его учебы в Принстонском университете, позиционируется как свободная современная sh-совместимая командная оболочка.
Среди стандартных шеллов больше всего похожа на ksh, но включает в себя множество улучшений.
Встроенная поддержка программируемого автодополнения команд, имен файлов и пр.
Поддержка проверки орфографии и опечаток.
Раздельная история команд для одновременной работы с несколькими запущенными шеллами.
Характерные черты zsh:
Полный путь к интерпретатору: /bin/zsh.
Приглашение для обычного пользователя: .
Приглашение для суперпользователя (root): .
Работа с текстом
Команда head
Команда head используется для просмотра первых строк любого текстового файла. По умолчанию она будет показывать первые десять строк, но с помощью опции вы можете изменить это число. Например, для отображения только первых пяти строк, введите:
Команда diff
Команда diff (от англ. «difference») производит построчное сравнение содержимого двух файлов. После анализа файлов, выводится список несовпадающих строк. Программисты часто используют данную команду, когда им нужно внести некоторые изменения в исходный код программы:
Команда grep
Команда grep (от англ. «search globally for lines matching the regular expression, and print them») позволяет искать указанный текст в указанном файле, например:
Вышеприведенная команда будет искать слово blue в файле notepad.txt и выведет все строки, в которых содержится искомое слово.
Команда echo
Команда echo используется для вывода в терминал строки, указанной ей в качестве параметра. Часто команда применяется для перемещения некоторых данных в файл. Например, если вы хотите добавить строку «Hello, world!» в файл с именем name.txt, выполните:
Команда cat
Команда cat (от англ. «concatenate») отображает содержимое одного или нескольких файлов. Чтобы отобразить содержимое файла, необходимо указать его имя в качестве параметра команды :
Команды в bash
Команда в bash — это наименьшая единица кода, которую bash может выполнить. С помощью команд мы сообщаем шеллу, что нам нужно, чтобы он сделал. bash обычно принимает от пользователя одну команду и возвращается к нему после того, как команда будет выполнена. Чтобы немного освоиться в bash, давайте попробуем выполнить несколько простых команд.
Команда echo — возвращает всё, что вы вводите в командной строке:
Пример использования команды echo
Команда date — отображает текущее время и дату:
Пример использования команды date
Команда pwd (сокр. от print working directory») — указывает на текущий рабочий каталог, в котором команды шелла будут искать файлы.
Файловая иерархия в Linux имеет древовидную структуру, поэтому, чтобы добраться до указанного каталога или файла, нам нужно пройти определенный путь, каждый узел которого отделен от других узлов символом .
Пример использования команды pwd
Команда ls (сокр. от list») — отображает содержимое каталога. Обычно, команда начинает с просмотра нашего домашнего каталога. Это означает, что если мы просто напечатаем , то данная команда выведет содержимое текущего каталога, которым в нашем примере является домашний каталог /home/diego:
Пример использования команды ls
Команда cd (сокр. от change directory») — изменяет текущую директорию на заданную пользователем. Рассмотрим некоторые примеры использования данной команды:
— меняет текущую директорию на заданную. Давайте попробуем с помощью команды перейти к корневому каталогу и ознакомимся с его содержимым
Обратите внимание, что мы также можем использовать точку с запятой для записи двух команд в одной строке
Пример объединения двух команд в одной строке
— вернуться в родительский каталог.
— вернуться в домашний каталог.
Команда mkdir (сокр. от make directory») — создает новый каталог.
Команда mv (сокр. от move») — перемещает один или несколько файлов/каталогов из одного места в другое (заданное пользователем). Для этого нужно указать, что мы хотим переместить (т.е. источник), и куда мы хотим переместить (т.е. пункт назначения).
В качестве примера я создам новый каталог Ravesli в своей домашней директории и перемещу в него все .txt-файлы (ну как «все», у меня там только один файл — Адреса.txt) из home/diego/Документы/ с помощью двух вышеприведенных команд:
Перемещение файлов с помощью команды mv
Команда touch — создает новые пустые файлы (а также изменяет временные метки в существующих файлах и каталогах). Вот как мы можем создать пустой файл под названием foo.txt в папке Ravesli из домашнего каталога:
Создание файла с помощью команды touch
Команда rm (сокр. от remove») — удаляет файлы/каталоги. По умолчанию, команда НЕ удаляет каталоги, но если используется как внутри заданного каталога, то каждый подкаталог и файл внутри заданного каталога — удаляются.
Давайте удалим ранее созданный файл foo.txt:
Удаление файла с помощью команды rm
Команда rmdir (сокр. от remove directory») — удаляет каталоги.
Давайте удалим созданный ранее каталог home/diego/Ravesli:
Удаление каталогов с помощью команды rmdir
Команда cat (сокр. от «concatenate») — считывает файл и выводит его содержимое. Она может работать с несколькими файлами, объединяя их вывод в единый поток (отсюда и происходит её название). У меня в домашнем каталоге есть папка untitled с файлами С++/Qt-проекта, и ниже я использую команду для просмотра содержимого файла main.cpp из untitled:
Пример использования команды cat
Чтобы просмотреть несколько файлов, укажите друг за другом (через пробел) имена требуемых файлов после команды , например:
Просмотр нескольких файлов с помощью команды cat
Команда man (сокр. от «manual») — отображает справочные страницы, которые являются руководством пользователя, встроенным по умолчанию во многие дистрибутивы Linux и большинство систем Unix. Например, команда отобразит руководство пользователя, а команда отобразит справку по команде .
Отображение справочной информации с помощью команды man
Внутренняя архитектура SELinux
В самом начале своего появления SELinux была реализована в виде патча. В данном случае было непросто настраивать политику безопасности. С появлением механизмов LSM, настройка и управление безопасностью значительно упростились (политика и механизмы усиления безопасности были разделены), SELinux была реализована в виде подгружаемых модулей ядра.
Перед доступом к внутренним объектам операционной системы производится изменение кода ядра. Это реализуется при помощи специальных функций (перехватчиков системных вызовов), так называемых функций «хуков» (англ. hook functions). Функции-перехватчики хранятся в некоторой структуре данных, их целью является выполнение определенных действий по обеспечению безопасности, основанных на заранее установленной политике. Сам модуль включает в себя шесть главных компонентов: сервер безопасности; кэш вектора доступа (англ. Access Vector Cache, AVC); таблицы сетевых интерфейсов; код сигнала сетевого уведомления; свою виртуальную файловую систему (selinuxfs) и реализацию функций-перехватчиков.
-
Кэш вектора доступа используется для кэширования вычисленных результатов (хранения готовых решений управления доступом), полученных из сервера безопасности.
Нужно это для того, чтобы минимизировать накладные расходы на производительность со стороны механизмов безопасности SELinux.
Интерфейс кэша вектора доступа для сервера безопасности определен в заголовочном файле
include/avc_ss.h
. -
Таблица сетевых интерфейсов отображает сетевые устройства в контексты безопасности.
Поддержка отдельных таблиц необходима ввиду того, что поле безопасности сетевых устройств было исключено из проекта.
Сетевые устройства добавляются в таблицу, когда впервые оказываются в поле видимости функций-перехватчиков (засекаются ими) и удаляются из неё, когда устройство настраивается или перезагружается политика безопасности в связи с перенастройкой.
Это возможно благодаря callback-функциям, которые регистрируют изменения конфигурации устройства и перезагрузку политик безопасности.
Код таблицы сетевых интерфейсов можно найти в файле
netif.c
. -
Код события сетевого уведомления позволяет модулю SELinux уведомлять процессы операционной системы в случае, когда политика безопасности была перезагружена.
Эти уведомления используются пространством пользователя для поддержки совместимости с ядром.
Этот механизм возможен благодаря библиотеке SELinux. Код события сетевого уведомления можно найти в файле
netlink.c
. -
Псевдофайловая система SELinux экспортирует API-функции политики сервера безопасности в процессы операционной системы.
Изначально API-функции ядра SELinux были разделены на три компонента (атрибуты процесса, файловые атрибуты, политика API) как часть изменений для внесения в версию ядра Linux 2.6.
Также SELinux предоставляет поддержку политики API вызовов. Все три компонента API нового ядра инкапсулированы в библиотеку API SELinux (libselinux).
Код псевдофайловой системы можно найти в файле
selinuxfs.c
. -
Реализация функций перехватчиков управляет информационной безопасностью связанной с внутренними объектами ядра и реализацией контроля доступа SELinux для каждой операции внутри ядра.
Функции перехватчики вызывают сервер безопасности и кэш вектора доступа для получения решений политики безопасности и применения этих решений для маркировки по каким-либо признакам и контроля объектов ядра.
Код этих функций перехватчиков расположен в файле
hooks.c
, а структуры данных, связанные с внутренними объектами, определены в файле
include/objsec.h
.
Управление пользователями и группами
Команда uname
Команда uname с опцией выведет подробную информацию о вашей системе: имя машины, версия операционной системы, ядра и т.д.
Результат:
Команды useradd и passwd
Команда useradd позволяет создавать новых пользователей. Чтобы создать новую учетную запись пользователя, вызовите команду вместе с именем нового пользователя:
После создания пользователя установите ему пароль, выполнив команду passwd:
Команда userdel
Команда userdel используется для удаления учетной записи пользователя:
Опция удаляет домашний каталог пользователя и связанные с ним данные:
Команды groupadd и groupdel
Команда groupadd используется для создания новой группы. Просто укажите название группы в качестве параметра:
Чтобы удалить группу, используйте команду groupdel с именем группы в качестве параметра:
Командная строка Linux
В зависимости от вашего Linux, ярлык для открытия консоли может быть вынесен на рабочий стол,
добавлен в избранные команды,
доступен в контекстном меню при клике правой кнопкой мыши в области рабочего стола.
Либо вы для вызова эмулятора терминала вы можете воспользоваться сочетанием клавиш CTRL + ALT + t.
В приглашении командной строки отображается имя пользователя и имя хоста. Перед областью ввода команд может быть символ решётки (#) или символ доллара ($). Символ доллара означает, что вы работаете под обычным пользователем, а символ решётки – что под суперпользователем (root).
На скриншоте видно, что я открыл консоль как обычный пользователь (символ $), а затем вошёл как root (символ сменился на #).
В некоторых инструкциях перед командами пишут $ или # и новички, пытаясь выполнить команды копированием-вставкой, получают разнообразные ошибки. Если перед командной вы видите $ или #, то их не нужно печатать – они написаны только для информирования вас о том, нужны ли дополнительные привилегии для выполнения данной команды.
TAB для автодополнения
При вводе команды или имени файла, обязательно используйте клавишу TAB – она автоматически допишет для вас команду или имя файла. Если при нажатии на TAB ничего не происходит, то быстро нажмите TAB два раза, чтобы увидеть все доступные варианты. Если варианты не выводятся, то это верный признак того, что: 1) вы неправильно начали вводить имя команды, 2) программа, которую вы намереваетесь запустить, ещё не установлена.
CTRL + c для прерывания выполнения программы
Если вы хотите оборвать выполнение команды, то используйте для этого сочетание клавиш CTRL + c. Если вы ввели команду, но передумали её запускать, то вместо удаления строки, можете также нажать CTRL + c.
2. TestDisk
TestDisk — это очень мощный инструмент для восстановления данных. Он не пытается скопировать данные из поврежденного устройства, а позволяет исправить ошибки и проблемы на уровне разделов, которые могут мешать работе с вашими данными.
Утилита может восстанавливать потерянные разделы, исправлять таблицу разделов GPT и MBR, делать резервные копии дисков, восстанавливать загрузочные записи, а главное восстанавливать удаленные файлы с файловых систем NTFS, FAT, exFAT и файловых систем семейства Ext. Также вы можете копировать файлы даже с удаленных разделов для тех же файловых систем.
Способ работы утилиты очень сильно отличается в зависимости от нужного действия. Здесь вас ждет псевдографический мастер, который проведет вас через все шаги. Установить testdisk можно так же само из официальных репозиториев. В Ubuntu используйте для этого команду:
Поскольку тема нашей статьи — восстановление файлов linux, рассмотрим как это делается с помощью этой утилиты. Запустите программу:
На первом шаге мастера выберите Create New Log:
Дальше выберите диск, с которым будем работать:
Выберите таблицу разделов на диске:
Для работы с файловой системой выберите пункт Advanced:
Далее выберите раздел, затем команду list:
Тут вы увидите все файлы, которые есть на этом разделе. Удаленные, но подлежащие восстановлению файлы будут помечены красным.
Работать с этой утилитой удобнее, чем с Photorec, потому что здесь вы можете выбрать только один нужный файл, а не восстанавливать сразу кучу мусора. Чтобы скопировать файл просто выберите его, нажмите c и выберите папку для сохранения. Правда, вы же понимаете, что для восстановления нужно, чтобы файлы были не перезаписаны, где-то чуть перезапишется и все.
Зачем нужна система SELinux?
Для начала давайте разберемся с несколькими базовыми понятиями.
SELinux реализует так называемый MAC (Mandatory Access Control). Это разграничение контроля внедряется поверх того, что уже есть в каждом дистрибутиве Linux, DAC (Discretionary Access Control).
Чтобы понять, что такое DAC, давайте сначала рассмотрим, как работает традиционная защита файлов Linux.
В традиционной модели безопасности есть три объекта: пользователь, группа и другие – User, Group и Other (сокращаются как u, g, o), которые могут иметь комбинацию прав на чтение, запись и выполнение (r, w, x). Если, например, пользователь jo создает файл в своем домашнем каталоге, он будет иметь к нему доступ на чтение/запись, как и группа jo. Другие пользователи, возможно, не будут иметь к нему доступа. В следующем блоке кода мы рассмотрим гипотетическое содержимое домашнего каталога пользователя jo.
Примечание: Не создавайте такого пользователя, это просто условный пример. Позже мы выполним несколько практических задач.
Такая команда:
Выведет:
Пользователь jo может изменить эти права доступа. Например, jo может предоставить (и ограничить) доступ к этому файлу другим пользователям и группам или изменить владельца файла. Подобные действия могут открыть доступ к важным файлам тем пользователям, которым этот доступ не нужен. Кроме того, jo может ограничить доступ и обезопасить данные, но это делается по усмотрению пользователя: системный администратор не может применить его для каждого файла в системе.
Рассмотрим другой случай: когда процесс Linux запускается, он может запускаться от имени пользователя root или другой учетной записи с привилегиями суперпользователя. Это означает, что если хакер получит контроль над приложением, он сможет использовать его для доступа к любому ресурсу, к которому имеет доступ взломанная учетная запись пользователя. В случае пользователя root это, как правило, все процессы на сервере Linux.
Предположим, вы хотите запретить пользователям запускать сценарии оболочки из их домашних каталогов. Это может произойти, если у вас есть разработчики, работающие в производственной системе. Вы хотите, чтобы они просматривали файлы логов, но не хотите, чтобы они использовали команды su или sudo и запускали какие-либо сценарии из своих домашних каталогов. Как это сделать?
Система SELinux – это средство для точной настройки таких требований контроля доступа. С помощью SELinux вы можете определить, что может делать пользователь или процесс. Она ограничивает каждый процесс своим собственным доменом, поэтому процесс может взаимодействовать только с определенными типами файлов и другими процессами из разрешенных доменов. Это предотвращает взлом любого процесса и получение хакерами общесистемного доступа.
Управление процессами
Команда top
Команда top отображает в режиме реального времени список запущенных процессов, их числовые идентификаторы (сокр. «PID» от англ. Process IDentificator») и насколько сильно каждый из них нагружает CPU:
Команда kill
Если у вас есть зависшая программа, то вы можете вручную завершить её работу, послав с помощью команды kill соответствующий сигнал.
Всего существует 64 различных сигнала, но самыми популярными являются два:
SIGTERM (15) — сигнал завершения работы программы, при котором ей дается некоторое время, чтобы сохранить свой прогресс и данные.
SIGKILL (9) — сигнал, требующий от программы немедленного завершения. Все несохраненные данные при этом будут потеряны.
Например, зная PID нужного вам процесса, послать ему сигнал можно следующим образом:
В этом примере параметр отвечает за сигнал SIGKILL (9), а — это идентификатор (PID) нужного вам процесса.
Юниты systemd
Юнит — это описание сервиса в текстовом виде. В нем указаны операции, которые выполняются до и после запуска службы. По сути, это описание параметров инициализации.
Все юниты разложены по трем каталогам:
- ///// — юниты из установленных пакетов RPM. Например, Nginx, MySQL, Apache.
- //// — юниты, созданные в рантайме.
- //// — юниты, созданные системными администраторами.
Посмотреть список всех запущенных юнитов можно командой:
В терминале отобразится также статус каждой службы. Основные параметры:
- — название юнита.
- — информация об успешной загрузке конфигурации.
- — сообщение о статусе. Может быть также , и другие.
- — детальная системная информация об юните.
- — краткое описание юнита.
Юниты бывают разных типов. Например, юнит службы имеет тип . Все виды:
Тип | Что делает |
Описывает, как управлять службой или приложением на сервере. | |
Описывает сетевой, IPC-сокет или FIFO-буфер, который используется для активации сокета. | |
Описывает устройство, указанное как необходимое для управления с помощью или файловой системы . | |
Определяет точку монтирования в системе, которой управляет . | |
Настраивает точку монтирования, которая будет автоматически установлена. | |
Описывает пространство подкачки в системе (swap-файл). | |
Обеспечивает точки синхронизации для других устройств при загрузке или изменении состояний. | |
Определяет путь, который может использоваться для активации на основе пути. | |
Определяет таймер, который управляется для задержки или активации по плану. | |
Позволяет восстановить текущее состояние системы после изменений. | |
Связан с узлами группы управления Linux, что позволяет ограничить ресурсы или назначить их для любых процессов, связанных с . | |
Создается автоматически из информации, которую получил от интерфейса шины. |
В этой статье мы будем работать с юнитами . Чтобы отфильтровать их, выполните команду:
Также можно выбрать только неактивные юниты служб:
Можно использовать другие статусы: , , , , , , , , , , .