Как использовать правила udev для управления / dev / xxx при работе в контейнере

Во-первых, я хочу сказать, что я действительно не хочу изменять / dev / random 's доступ к продукту. Это всего лишь тест для проверки, когда systemd работает в moby, правила udev в /etc/udev/rules.d/xxxx поведение

Вопрос 1: почему только при использовании –priviledged контейнера допустимы правила управления udev контейнера в файле /etc/udev/rules.d/xxx?

  • Может ли systemd и upstart совместно сосуществовать в системе Unix?
  • «Systemctl list-timers» показывает последние выполненные даты, которые далеки в будущем
  • если я перейду с Debian Wheezy (7.x) в Jessie (8.x), будет ли система работать по умолчанию?
  • Как настроить привязки привязок при запуске правильно в мире systemd?
  • Я не могу успешно сгенерировать SSH-туннель внутри контейнера докеров
  • как systemd определяет, что служба остановлена?
  • какая система власти нужна, если systemd необходимо использовать udev для управления / dev / xxx с помощью /etc/udev/rules.d/xxx?

    Question2: когда я запускаю использование контейнера –priviledged, почему перезагрузка контейнера изменит доступ к phycalhost'у / dev / xxx и использует правила /host //ru/ru/rux физического хоста? Я думаю, что это не разумно

    Распространение

    redhat 7.2

    В случае отчета об ошибке: шаги по воспроизведению проблемы

    запустите контейнерA без каких-либо привилегий

    [root@physicalhost /home/ahao.mah] #docker run -d --net host reg.docker.xxxxx.com/mybase/centos7u2:latest 36cc8f6759294b2b2900b313c4f978737b11671b7ab2cc185e69fba3f6a9d10c [root@containerA /home/ahao.mah] #docker exec -it 36cc8f6759294b2b2900b313c4f978737b11671b7ab2cc185e69fba3f6a9d10c bash 

    изменить правила udev в containerA:

     [root@containerA /] #cat /etc/udev/rules.d/70-test_random.rules KERNEL=="random", GROUP="root", MODE="0665", OPTIONS="last_rule" 

    перезапустите этот контейнерA:

     [root@physicalhost /home/ahao.mah] #docker restart 36cc8f675929 36cc8f675929 

    containerA / dev / random все еще 0666, но не 0665

     [root@containerA /] #ll /dev/random crw-rw-rw- 1 root root 1, 8 Aug 8 11:34 /dev/random 

    В данный момент я не знаю, почему правила /etc/udev/rules.d/xxx недействительны в контейнере no -priviledges?

    запустить контейнерB с –priviledge

     [root@physicalhost /home/ahao.mah] #docker run -d --net host --privileged reg.docker.xxxxx.com/mybase/centos7u2:latest [root@containerB /home/ahao.mah] #docker exec -it 1853437e8d2ea7018475b2328a10f1625da8b0c667941d69d912598325dc830d bash 

    Теперь доступ к контейнеру / dev / random по умолчанию также является 0666, но я хочу изменить / dev / random / random доступ к контейнеру в 0660, тогда мне нужно использовать правила udev в /etc/udev/rules.d/xxx

     [root@containerB /] #ll /dev/random crw-rw-rw- 1 root root 1, 8 Aug 8 11:40 /dev/random [root@containerB /] #vim /etc/udev/rules.d/70-test_random.rules KERNEL=="random", GROUP="root", MODE="0660", OPTIONS="last_rule" 

    Теперь доступ к физическому хосту / dev / random по умолчанию – 0666, но я изменяю физический / dev / произвольный доступ к 0777

     [root@physicalhost /] #cat /etc/udev/rules.d/70-test_random.rules #KERNEL=="random", GROUP="root", MODE="0777", OPTIONS="last_rule" [root@physicalhost /] #ll /dev/random #crw-rw-rw- 1 root root 1, 8 Aug 8 11:40 /dev/random 

    перезапустить контейнерB:

     [root@physicalhost /home/ahao.mah] #docker restart 1853437e8d2e 1853437e8d2e 

    оба варианта containerB / dev / random и physicalhost / dev / access изменены!

     [root@containerB /] #ll /dev/random crw-rw---- 1 root root 1, 8 Aug 8 11:41 /dev/random [root@physicalhost /home/ahao.mah] #ll /dev/random crwxrwxrwx 1 root root 1, 8 Aug 8 11:43 /dev/random 

    Мои взгляды:

    1. Я думаю, что это связано с тем, что система работает в докере
    2. при работе с –priviledges, systemd, запущенный в докере, не должен изменять доступ к физическому хосту / dev / xxx с помощью /etc/udev/rules.d/xxx
    3. при запуске без полномочий – systemd, работающий в docker, должен изменить доступ к контейнеру / dev / xxx с помощью /etc/udev/rules.d/xxx

  • / dev / hidraw: права на чтение
  • Система безответственная - экстремальная нагрузка
  • Правило Удева не используется?
  • Как зашифровать живой корень fs удаленно и разблокировать его через ssh
  • Ядро init без параметра «root =»
  • Идентификатор диска в chroot / jail
  • One Solution collect form web for “Как использовать правила udev для управления / dev / xxx при работе в контейнере”

    Я получил свое решение, когда в контейнере, созданном –privileged, этот контейнер имеет / sys rw-доступ, а service systemd-udev-trigger.serivce может быть исключен. это означает, что udevadm может запускать uevent to / sys / devices / / / uevent и физический хост также может получить этот uevent, а затем физическое использование /etc/udev/rules.d/xxx

    точкой запуска udevadm является указание ядру отправлять события для всех присутствующих устройств. Это делается путем записи в / sys / devices / / / uevent. Для этого требуется, чтобы sysfs был установлен read-write on / sys.

    Linux и Unix - лучшая ОС в мире.