When a process has an effective or real uid being root and tries to access a file...
Для доступа к файловой системе важен только эффективный UID, а не настоящий UID. Процесс, имеющий привилегированный UID, может перетасовать реальный и эффективный UID, чтобы временно отказаться от привилегий.
# perl -MEnglish -e '$EUID = 65534; system "id"; system "cat /etc/shadow"' uid=0(root) gid=0(root) euid=65534(nobody) groups=0(root) cat: /etc/shadow: Permission denied
Но кроме этого, вы правы, наличие привилегий позволяет получать доступ к файлам независимо от битов разрешения. (Помимо того факта, что выполнение файла не работает, если в нем не установлен хотя бы один
x
бит, но на самом деле это не более чем удобство. Если у вас есть привилегии, вы обычно можете просто скопировать файл и запустить его или сначала изменить разрешения.)См., например,. заключительная часть справочной страницы Linux
path_resolution(7)
(«Обход проверок разрешений :суперпользователь и возможности» )или текст в POSIX(«4.5 Разрешения на доступ к файлам» ).Как и в последних подсказках, и в первых утверждениях, фактическая проверка на привилегированность может быть не только UID. В Linux это на самом деле возможность
CAP_DAC_OVERRIDE
(илиCAP_DAC_READ_SEARCH
в меньшей степени ). Я не знаю деталей других систем.
Вот то, что я считаю наиболее эффективным:
my-yocto
на диске со свободным пространством не менее 50 ГБ. my-yocto
. git submodule add git://git.yoctoproject.org/poky.git
my-yocto
root запустите:source poky/oe-init-build-env.
Обратите внимание на "." в этой команде; инициализация среды сборки в my-yocto
вместо poky
предотвращает накопление GB временных файлов Yocto в poky
.
conf
в my-yocto
с некоторыми файлами в нем; git -добавьте conf/local.conf
и conf/bblayers.conf
в свой репозиторий. bblayers.conf
с использованием абсолютных путей, что означает, что репозиторий, настроенный Алисой, не будет работать на машине Боба. Исправьте это, изменив bblayers.conf
с помощью переменной Yocto ${TOPDIR}
:(...)
BBLAYERS ?= " \
${TOPDIR}/poky/meta \
${TOPDIR}/poky/meta-poky \
${TOPDIR}/poky/meta-yocto-bsp \
(...)
Измените local.conf
на поддерживаемую платформу, напримерMACHINE=beaglebone-yocto
Из my-yocto
запустите bitbake core-image-minimal
. Убедитесь, что ваш компьютер хорошо -проветривается, и отправляйтесь на прогулку.
Если это работает, вы можете создать остальную часть своей конфигурации, добавив мета -openembedded и т. д. в качестве подмодулей. Я рекомендую, чтобы любые пользовательские слои отличались от репозиториев git из my-yocto
, чтобы my-yocto
содержал только детали подмодуля git и конфигурацию bitbake.
Чтобы выполнить обновление перед сборкой, запустите:
git pull
git submodule update --remote --recursive
Другим пользователям потребуется запустить git submodule init
один раз после клонирования my-yocto
.
Две другие рекомендации:
Во-первых, если вы выполняете сборку для более чем одной машины, создайте файл local.conf для каждой машины и создайте символическую ссылку из local.conf на файл конфигурации -конкретной машины. Это позволяет отслеживать несколько машин в my-yocto
.
Во-вторых, создайте временный каталог для каждой ветки yocto (, например. tmp-zeus
, tmp-dunfell
, tmp-gatesgarth
), а затем создайте символическую ссылку из tmp
на любую ветку, которую вы создаете. (Не добавляйте их в git.)Yocto накапливает огромное количество данных в каталоге tmp
и требует очистки tmp
при переключении веток. Это нормально, если вы переходите на более новую версию, но если вы переключаетесь между ветками туда и обратно, потеря всех этих кэшированных данных будет обломом.