Вопрос или проблема
Простой конфиг:
- Маленькая встроенная система загружается из собственного хранилища,
- монтирует NFS-ресурс,
- выполняет
pivot_root
в него.
Факты:
-
Новая rootfs монтируется через nfs на /rootfs.
-
Перед выполнением
pivot_root
я связываю все необходимые каталоги с новым корнем:mount --bind /dev /rootfs/dev
mount --bind /proc /rootfs/proc
mount --bind /run /rootfs/run
mount --bind /sys /rootfs/sys
-
После выполнения
pivot_root
(pivot_root /rootfs /rootfs/original
) я получаю “Permission denied” для каждой команды (даже дляls
,cat
). -
Перед выполнением
pivot_root
я могу запускатьrootfs/bin/busybox
(а также/bin/busybox
). -
Устройство использует busybox.
-
После pivot_root я не могу запустить
/original/bin/busybox
, выдаёт “Permission denied”. -
NFS-сервер использует эти параметры для предоставления “rootfs”:
rw,sync,no_subtree_check,no_root_squash
Что стоит проверить?
Примечание: это работало раньше на другом NFS-сервере:
Старый сервер (работающий):
Debian 10, ядро: 5.10.17+
Новый сервер (не работает):
Debian 12, ядро: 6.12.1-v8+
Обновление
Некоторые команды работают: cd
, pwd
.
Ответ или решение
В вашей ситуации возникла проблема с ошибкой "Permission denied" после выполнения команды pivot_root
, что указывает на возможные проблемы с правами доступа или конфигурацией NFS. Давайте разберём подробнее эту ситуацию и попробуем найти решение.
Теория
Основное предположение здесь заключается в том, что проблема связана с изменениями в новой конфигурации NFS-сервера или с несовместимостью настроек между старым и новым сервером. Когда система транспонирует корень файловой системы с использованием pivot_root
, все доступы к файлам и командам должны быть разрешены новым корнем. Ошибка "Permission denied" может указывать на следующие проблемы:
-
Проблемы с правами доступа: При использовании NFS необходимо убедиться, что клиент имеет достаточные привилегии для выполнения файловых операций. Проблемы могут возникнуть из-за изменений в конфигурации сервера, таких как root-сквашивание или умолчания UID и GID.
-
Проблемы с монтированием: При смене корня файловой системы важно, чтобы новые корневые файловые системы были корректно смонтированы с правильными правами и опциями.
-
Архитектурные изменения в новой версии NFS: Возможны изменения в политике безопасности или реализации самой NFS в новой версии ядра, которые могут влиять на поведение.
Пример
В вашей ситуации, до выполнения pivot_root
вы можете запускать бинарные файлы из нового корня, но после выполнения команды, доступ к ним пропадает. Это указывает на проблемы с правами доступа после монтирования новой файловой системы в качестве корневой. Особенно это заметно, если сервер NFS конфигурировался при помощи параметров, которые могли быть интерпретированы иначе в новой версии ОС.
Применение
Что стоит проверить:
-
Права доступа и UID/GID: Проверьте, как настроен контроль доступа на сервере NFS. В Debian 12 могли произойти изменения, которые влияют на разрешение root-доступа через NFS. Проверьте, применяются ли пользовательские и групповые идентификаторы (UID/GID) правильно между клиентом и сервером.
-
Конфигурация root squash: Опция
no_root_squash
выключает преобразование root-пользователя в nobody пользователя, что особенно важно для систем, меняющих корневую файловую систему. -
Логи сервера и клиента: Проверьте журналы как на стороне сервера, так и на стороне клиента. Они могут предоставить дополнительную информацию о том, какие операции терпят неудачу и почему.
-
Сравнение конфигураций старого и нового серверов: Внимательно изучите различия в конфигурации между работающей и неработающей средой. Наиболее вероятно, что проблема кроется в какой-то измененной опции, которая может показаться незначительной.
-
Параметры монтирования NFS: Убедитесь, что параметры монтирования на клиенте соответствуют требованиям сервера. Например, дополнительные флаги безопасности могли быть интегрированы в фабрику ядра.
Резюмируя, рекомендуется тщательно проверить конфигурацию и права доступа, уделяя особое внимание изменениям между версиями Debian и соответствующим их ядрам. Велик шанс, что изменение в политике безопасности или настройках NFS привело к нарушению прежней функциональности. Если обновления конфигурации не решат эту проблему, стоит рассмотреть возможность ограничения версии NFS-протокола на стороне клиента или внесение изменений на серверной стороне, чтобы адаптироваться к новой конфигурации.