Невозможно использовать динамики при подключенных наушниках

Ввод пространства имен монтирования перед настройкой chrootпозволяет избежать загромождения пространства имен хоста дополнительными монтированиями, например. для /proc. Вы можете использовать chrootвнутри пространства имен монтирования в качестве приятного и простого хака.

Я думаю, что понимание pivot_rootдает определенные преимущества, но для этого нужно немного научиться. Документация не совсем все объясняет... хотя вman 8 pivot_root(есть пример использования для команды оболочки ).man 2 pivot_root(для системного вызова )могло бы быть понятнее, если бы он делал то же самое и включал пример программы на C.

Как использовать основной _корень

Сразу после входа в пространство имен монтирования вам также потребуется mount --make-rslave /или аналогичный. В противном случае все ваши изменения монтирования распространяются на монтирования в исходном пространстве имен, включая pivot_root. Вы этого не хотите :).

Если вы использовали команду unshare --mount, обратите внимание, что в документации указано, что mount --make-rprivateприменяется по умолчанию. AFAICS это плохой вариант по умолчанию, и вы не хотите этого в производственном коде. Например. в этот момент он остановит ejectработу с смонтированным DVD или USB в пространстве имен хоста.DVD или USB останутся смонтированными внутри частного дерева монтирования, и ядро ​​не позволит вам извлечь DVD.

Как только вы это сделаете, вы можете смонтировать, например,. каталог /proc, который вы будете использовать. Так же, как и для chroot.

В отличие от случая, когда вы используете chroot, pivot_rootтребует, чтобы ваша новая корневая файловая система была точкой монтирования. Если это еще не так, вы можете удовлетворить это, просто применив привязку:mount --rbind new_root new_root.

Используйте pivot_root-, а затем umountстарую корневую файловую систему с параметром -l/ MNT_DETACH.(Вам не нужно umount -R, что может занять больше времени.).

Технически, использование pivot_rootобычно также требует использования chroot; это не "или -или".

Согласно man 2 pivot_root, это определяется только как замена корня пространства имен монтирования. Не определено изменение физического каталога, на который указывает корень процесса. Или текущий рабочий каталог (/proc/self/cwd). Бывает, что действительно так и делают, но это хак для обработки потоков ядра. На странице руководства говорится, что это может измениться в будущем.

Обычно вам нужна эта последовательность:

chdir(new_root);            // cd new_root
pivot_root(".", put_old);   // pivot_root. put_old
chroot(".");                // chroot.

Положение chrootв этой последовательности — еще одна тонкая деталь . Хотя смысл pivot_rootсостоит в том, чтобы изменить пространство имен монтирования, код ядра, кажется, находит корневую файловую систему для перемещения, просматривая корень процесса -, что и устанавливает chroot.

Зачем использовать основной _корень

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

chrootустанавливает только корень процесса,но процесс по-прежнему ссылается на полное пространство имен монтирования. Если процесс сохраняет привилегию на выполнение chroot, он может выполнить резервное копирование пространства имен файловой системы. Как подробно описано в man 2 chroot, «суперпользователь может выйти из «тюрьмы chroot» с помощью...».

Еще одна мысль, -провоцирующая способ отмены chroot— это nsenter --mount=/proc/self/ns/mnt. Возможно, это более сильный аргумент в пользу принципа.nsenter/ setns()обязательно повторно -загружает корень процесса из корня пространства имен монтирования ... хотя тот факт, что это работает, когда два ссылаются на разные физические каталоги, может считаться ядром ошибка. (Техническое примечание :может быть несколько файловых систем, смонтированных друг над другом в корневом каталоге; setns()использует верхний, установленный последним ).

Это иллюстрирует одно преимущество объединения пространства имен монтирования с «пространством имен PID». Нахождение внутри пространства имен PID не позволит вам войти в пространство имен монтирования неограниченного процесса. Это также предотвращает вход в корень неограниченного процесса(/proc/$PID/root). И, конечно же, пространство имен PID также предотвращает уничтожение любого процесса, находящегося вне его :-).

0
04.08.2020, 11:45
1 ответ

В современных ноутбуках динамики часто отключаются (аппаратным контроллером )при подключении наушников. Это не особенность Linux, а особенность самой машины.
Это, например, случай с моим ThinkPad T490s.

1
18.03.2021, 23:15

Теги

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