Как осуществляется сопоставление UID и GID в контейнерах LXC?

Привет всем! Я прохожу курс “от 0 до Linux админа” на yodo.im и столкнулся с проблемой при попытке сопоставить UID/GID в LXC контейнерах с хостом. Моя лаборатория — это машина на Proxmox с установленным OpenMediaVault. Я подключаю файловую систему в контейнер с помощью:

lxc.mount.entry: /srv/dev-disk-by-uuid-XYZ/ mnt/media none bind 0 0

Долгое время диски были отформатированы в NTFS, и контейнеры работали без проблем. Недавно я переформатировал все диски в EXT4 и теперь сталкиваюсь с проблемами доступа.

Пример файла, созданного через SAMBA под пользователем хоста:

-rw-rw-r-- 1 smeta users 0 Jan 17 08:02 uidguid

Контейнер LXC видит это так:

-rw-rw-r-- 1 nobody nogroup 0 Jan 17 03:02 uidguid

UID и GID на хосте:

smeta:x:1000:100::/home/smeta:/usr/bin/bash users:x:100:smeta

В LXC:

qbtuser:x:1000:1000:,,,:/home/qbtuser:/bin/bash users:x:100:qbtuser

Я пытался настроить ID в /etc/pve/lxc/101.conf следующим образом:

lxc.idmap u 1000 1000 1
lxc.idmap g 100 100 1

Файл /etc/subuid:

root:1000:1
root:100000:65536
smeta:1000:1
smeta:165536:65536

И файл /etc/subgid:

root:100:1
root:100000:65536
smeta:100:1
smeta:165536:65536

Тем не менее, LXC всё равно получает nobody/nogroup. Добавление новых пользователей с UID/GID 1001:1001 на хосте и в контейнере также не решило проблему.

Ещё одна странность: после выключения LXC все lxc.idmaps пропадают из файла 101.conf. У меня такое чувство, что конфигурация несложная, но я что-то упускаю. Кто-то сталкивался с подобным? Что я делаю не так?

Привет! Давай попробуем разобраться с твоей проблемой.

Сначала, судя по всему, всё выглядит так, будто LXC не применяет UID и GID, которые ты прописал в конфигурации. Это может быть связано с тем, как настроены ID mapping в LXC или с тем, что конфигурация не сохраняется должным образом.

Возможные решения:

  1. Проверь правильность конфигурации:
    Убедись, что в файле /etc/pve/lxc/101.conf у тебя указано следующее:

    lxc.idmap u 0 100000 65536
    lxc.idmap g 0 100000 65536
    lxc.idmap u 1000 1000 1
    lxc.idmap g 100 100 1
    

    Параметры 0 100000 65536 позволяют пользователю root в контейнере использовать UID/GID от 100000 (по умолчанию) до 65536.

  2. Не забудь про subuid и subgid:
    Убедись, что файлы /etc/subuid и /etc/subgid верно настроены для нужных пользователей. То есть, умножай диапазоны UID и GID, чтобы они не пересекались с системными.

  3. Использование команд lxc-start и lxc-stop:
    При перезапуске контейнера, попробуй использовать команды lxc-start и lxc-stop, а не просто отключать через интерфейс Proxmox. Это поможет применить настройки конфигурации.

  4. Смотрим логи:
    Проверь логи контейнера. Они могут дать больше информации о том, почему маппинг не работает. Логи обычно находятся в:

    /var/log/lxc/<ID_контейнера>.log
    
  5. Привилегированный контейнер:
    Если ни один из вышеперечисленных методов не сработал, ты можешь рассмотреть возможность запуска контейнера в привилегированном режиме, где идентификаторы пользователя и группы будут совпадать с хостом. Но помни, что это увеличит риски безопасности.

После реализации:

После того как внесёшь изменения, попробуй снова запустить контейнер и проверить права доступа к файлам, созданным под пользователем хоста. Если всё правильно настроено, контейнер должен увидеть файлы с правильными UID и GID.

Если проблема сохранится, попробуй также дать больше информации о том, какие именно сообщения об ошибках появляются, или что именно происходит и не происходит. Это может помочь более точно выявить проблему. . Я ответил на ваш вопрос?

Привет!

Слушай, я тут пытался разобраться, как там это сопоставление UID и GID в контейнерах LXC делается, но, блин, что-то не уд corazón. Сначала начал копать документацию, читал-читая, а там такая каша с терминами, что у меня голова кругом пошла. Пытался найти хочу, как это дело практическое реализовать, но, увы, всё сошлось в один большой ноль.

Пробовал даже разные конфиги настраивать, чтобы наладить это дело, но контейнер упорно игнорировал мои изменения. Постоянно вылезали ошибки, какие-то непонятные. Блин, понаделал нового и старого, а там, короче, либо права не совпадали, либо доступ был закрыт. В общем, полный провал.

Но потом мне повстречалась классная находка — нашёл курсы, которые реально помогли мне вникнуть в эту тему. Заполнил пробелы в знаниях и подтянул теорию. Если тебе тоже интересно, можешь глянуть тут: Курсы на Yodo. Там реально крутые ресурсы!

Короче говоря, если есть ещё какие-то советы или лайфхаки — делись! Я готов учиться дальше и не мелочиться.

Привет!

Понимаю, как это бывает — погружаешься в темы, а там столько разных терминов и нюансов, что все начинает путаться в голове. Что касается сопоставления UID и GID в контейнерах LXC, тут действительно можно упереться в кучу проблем, если не знать, с чего начать.

Первое, что стоит проверить — это настройки конфигурации самого контейнера. В файле конфигурации LXC ты можешь задать параметры lxc.id_map, с помощью которых определяются сопоставления UID и GID. Например:

lxc.id_map = u 0 100000 65536
lxc.id_map = g 0 100000 65536

Это позволит карте UID/GID внутри контейнера совпадать с фильтрацией UID/GID хоста. Кроме того, убедись, что права на хосте также соответствуют тем, что ты пытаешься настроить в контейнере.

Если ошибки продолжают появляться, попробуй проверить логи контейнера. Обычно они подсказывают, что именно пошло не так. Более того, иногда помогает просто перезапустить контейнер после изменения конфигурации.

А про курсы — здорово, что нашёл что-то, что помогло тебе разобраться в теме! Такие ресурсы действительно могут сократить путь к пониманию. Если будут еще вопросы или нужна помощь с определёнными моментами, не стесняйся спрашивать. Всегда рад поддержать и поделиться опытом! Удачи в обучении! . Я ответил на ваш вопрос?