Все ли аргументы ядра действительно используются ядром?

Примечание: Меня все еще интересует ответ на мою проблему, но я действительно хотел опубликовать используемый мной метод обхода, который дает только в качестве полезной информации, если audit2why работал так, как я ожидал.

В Howto for SELinux на CentOS.org есть раздел по устранению неполадок. В нем рассказывается о том, как использовать sealert для предоставления удобочитаемой информации, извлеченной из журнала "/var/log/audit/audit.log". Таким образом, простой запуск

sudo sealert -a /var/log/audit/audit.log > ~/logfile.txt 

позволил мне прочитать нужную мне информацию и получить предложения о правильном контексте безопасности для моих веб-каталогов.

SELinux is preventing /usr/sbin/php-fpm from write access on the directory /srv/dpca/www/images.

*****  Plugin httpd_write_content (92.2 confidence) suggests   ***************

If you want to allow php-fpm to have write access on the images directory
Then you need to change the label on '/srv/dpca/www/images'
Do
# semanage fcontext -a -t httpd_sys_rw_content_t '/srv/dpca/www/images'
# restorecon -v '/srv/dpca/www/images'

Опять же, если кто-то знает о моем первоначальном вопросе о audit2why , я все равно хотел бы знать.

11
04.10.2018, 17:20
2 ответа

Параметры, передаваемые в командной строке ядра, не обязательно должны иметь значение для ядра:в документации по параметрам ядра говорится

The kernel parses parameters from the kernel command line up to “--”; if it doesn’t recognize a parameter and it doesn’t contain a ‘.’, the parameter gets passed to init: parameters with ‘=’ go into init’s environment, others are passed as command line arguments to init. Everything after “--” is passed as an argument to init.

Это не относится к initи root, которые на самом деле являются параметрами ядра и обрабатываются ядром. На них также может воздействовать пространство пользователя -, так как они появляются в /proc/cmdline. (Таким образом, например, systemd принимает во внимание параметр ядра quietдля уменьшения своего вывода.)

Когда ядро ​​загружается с помощью initramfs, параметр rootне используется ядром напрямую, а параметр initиспользуется только в случае сбоя rdinit. initзапуск обрабатывается в kernel_init, который работает следующим образом:

  • если есть «команда выполнения ramdisk» (либо значение, заданное для rdinitв командной строке ядра, либо /init), которое доступно, ядро ​​​​пытается запустить это;
  • если это не удается, и есть «выполнить команду» (значение, присвоенное initв командной строке ядра ), ядро ​​пытается выполнить это и паникует, если не может;
  • в крайнем случае ядро ​​пытается запустить /sbin/init, /etc/init, /bin/initи /bin/sh; если ни один из них не может быть запущен, он паникует .

Когда есть initramfs, все это происходит там, и целевой том не монтируется ядром. Что происходит после ядро ​​запускает первую initпрограмму (как правило, /initсценарий в initramfs )зависит от программы, а не от ядра. Аргументы, не переданные в init, по-прежнему доступны в /proc/cmdline, если смонтирована файловая система /proc.

19
27.01.2020, 19:57

Передача пользовательских аргументов ядра — это один из способов настройки системы во время установки KickStart, например, PXE-сервер может установить:

linuxefi /c7/vmlinuz ks=http://.../ks/c7 lab ksdevice=eth0 net.ifnames=0 biosdevname=0

где labзатем используется в конфигурации KickStart, чтобы делать другие вещи, чем для других сборок системы:

%pre
...
case " $(cat /proc/cmdline)" in
  ...
   *\ lab*)
      filesystems_lab
      ;;
   *)
      filesystems_common
      ;;
...

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

3
27.01.2020, 19:57

Теги

Похожие вопросы