LINUX.ORG.RU
ФорумAdmin

selinux && (initramfs || initrd) && dracut

 , ,


0

1

Краткая суть, потихоньку хочу внедрять систему selinux на тестовой машинке.
Поскольку используется программный raid5, то вынужден использовать initramfs.
В процессе выяснил, что есть глюки(запреты). И решить сложно, поскольку в initramfs используется cpio(а он пока что не поддерживает атрибуты xattr, т.е. права selinux не проставишь).
Текущая мысль воспользоваться классическим initrd+ext4.
Но вот беда, обычно использую dracut для создания образа, а он похоже только cpio может.
Может кто встречал патчи для адаптации под initrd ?

P.S. Тем кто предложит отключить подсистему selinux - просто проходите мимо.

★★★★★

Последнее исправление: Atlant (всего исправлений: 1)

Ты что-то делаешь не так или изобретаешь велосипед.
Это должно быть решено производителем дистрибутива.
Вот взять, например, CentOS. Там SELinux из коробки. На этапе initramfs SELinux по факту не работает (в initramfs не то что нет xattr, там и самих политик-то SELinux нет, и /sys/fs/selinux не смонтирована).
По логам видно, что загрузка политик SELinux происходит только после switchroot. Так что никаких запретов на этапе initramfs быть не должно.

bigbit ★★★★★
()
Ответ на: комментарий от bigbit

Совершенно верно, это тестовый велосипед - дистр gentoo.

Так что никаких запретов на этапе initramfs быть не должно.

Увы, есть проблемы даже на стадии загрузки политик после переключения корня.

Исходя из того что есть даже запрет на запись в /dev/null ( ага, тоже смешно ), а по логам у «null» даже контекст совсем другой нежели на корне. Вывод - контексты в initramfs совсем другие, что и подтверждается изучением матчасти.

cpio - не умеет хранить xattr. Да, есть варианты на гитхабе с модификацией формата cpio, под это дело.
Но не думаю что эта модификация лучше нежели обычного initrd(with ext2|3|4 and xattr).
Ладно если никто не видел патчи под dracut для initrd, попробую или в нем разобраться или простой скрипт-конвертор в initrd.

Atlant ★★★★★
() автор топика

Что я сейчас прочитал?! Как это забыть?

ТС ты пытаешься изобрести велосипед. Необычный, а с фаллосом вместо седла и вместо колёс гребные венты.

anonymous
()
Ответ на: комментарий от Atlant

initrd - это файл фиксированного размера с файловой системой.

cpio - это просто объединение файлов.

Поэтому размер cpio высчитывать не надо, а вот размер файла initrd придётся.

anonymous
()
Ответ на: комментарий от Atlant

Не совсем понимаю, как связан неправильный контекст /dev/null после переключения корня с отсутствием xattr.
К тому же, /dev/ - это пустая директория на диске, все файлы в ней создаются динамически.
Тут скорее с udev проблема - неправильно выставляется контекст на /dev/null.

bigbit ★★★★★
()
Ответ на: комментарий от bigbit

Вырезки из логов для информации.

# cat /etc/selinux/config | grep -v ^#
SELINUX=permissive
SELINUXTYPE=targeted

# dmesg | grep avc
[    7.492739] audit: type=1400 audit(1583328035.300:4): avc:  denied  { write } for  pid=834 comm="lvm" path="/dev/null" dev="devtmpfs" ino=1029 scontext=system_u:system_r:lvm_t tcontext=system_u:object_r:device_t tclass=chr_file permissive=1
[    7.613310] audit: type=1400 audit(1583328035.420:5): avc:  denied  { read } for  pid=834 comm="lvm" name="urandom" dev="devtmpfs" ino=1033 scontext=system_u:system_r:lvm_t tcontext=system_u:object_r:device_t tclass=chr_file permissive=1
[    7.614328] audit: type=1400 audit(1583328035.420:6): avc:  denied  { open } for  pid=834 comm="lvm" path="/dev/urandom" dev="devtmpfs" ino=1033 scontext=system_u:system_r:lvm_t tcontext=system_u:object_r:device_t tclass=chr_file permissive=1
[    8.625495] audit: type=1400 audit(1583328036.432:7): avc:  denied  { read } for  pid=1211 comm="dmesg" name="linux" dev="md1" ino=393606 scontext=system_u:system_r:dmesg_t tcontext=system_u:object_r:etc_t tclass=file permissive=1
[    8.626669] audit: type=1400 audit(1583328036.432:8): avc:  denied  { open } for  pid=1211 comm="dmesg" path="/etc/terminfo/l/linux" dev="md1" ino=393606 scontext=system_u:system_r:dmesg_t tcontext=system_u:object_r:etc_t tclass=file permissive=1
[    8.626669] audit: type=1400 audit(1583328036.432:9): avc:  denied  { getattr } for  pid=1211 comm="dmesg" path="/etc/terminfo/l/linux" dev="md1" ino=393606 scontext=system_u:system_r:dmesg_t tcontext=system_u:object_r:etc_t tclass=file permissive=1
[    8.837421] audit: type=1400 audit(1583328036.644:10): avc:  denied  { setattr } for  pid=1277 comm="mknod" name="ppp" dev="devtmpfs" ino=5409 scontext=system_u:system_r:tmpfiles_t tcontext=system_u:object_r:device_t tclass=chr_file permissive=1
[    9.026961] audit: type=1400 audit(1583328036.832:11): avc:  denied  { read } for  pid=1346 comm="udevd" name="run" dev="md1" ino=789074 scontext=system_u:system_r:udev_t tcontext=system_u:object_r:unlabeled_t tclass=lnk_file permissive=1
[   11.045839] audit: type=1400 audit(1583328039.232:18): avc:  denied  { read } for  pid=1805 comm="mount" name="run" dev="md1" ino=789074 scontext=system_u:system_r:mount_t tcontext=system_u:object_r:unlabeled_t tclass=lnk_file permissive=1
[   11.442022] audit: type=1400 audit(1583328039.628:19): avc:  denied  { mounton } for  pid=1875 comm="mount" path="/tmp/tmp.sBcvbTl2v0" dev="tmpfs" ino=807 scontext=system_u:system_r:mount_t tcontext=system_u:object_r:initrc_tmp_t tclass=dir permissive=1

# id -Z
id -Z
unconfined_u:unconfined_r:unconfined_t
# ls -Z /dev/null
system_u:object_r:null_device_t /dev/null
# ls -Z /dev/urandom
system_u:object_r:urandom_device_t /dev/urandom


Дальше уже не стал выписывать права.

P.S. для политики «strict» - тоже есть блокировки, только другие.

Я не отрицаю, что Gentoo не предназначена для selinux, но тестировать на ней для меня проще.

Atlant ★★★★★
() автор топика
Последнее исправление: Atlant (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.