Вопрос или проблема
После обновления до Ubuntu 24 возникла проблема с доступом к файлам procfs.
Программа требует доступ к файлу карт процессов systemd.
mv 2572 0.0 0.2 20472 11520 ? Ss 00:22 0:00 /usr/lib/systemd/systemd --user
mv@mvcp:/proc/2572$ cat maps
cat: maps: Доступ запрещен
mv@mvcp:/proc/2572$ ls -l | grep maps
-r--r--r-- 1 mv mv 0 Nov 16 00:23 maps
strace cat maps
openat(AT_FDCWD, "maps", O_RDONLY) = -1 EACCES (Доступ запрещен)
Попробуйте
sudo sysctl -w kernel.yama.ptrace_scope=0
sudo sysctl -w kernel.dmesg_restrict=0
Можно ли отключить защиту, несмотря на риски?
Ответ или решение
Контроль доступа к procfs в Ubuntu 24: Решение проблемы с правами доступа
После обновления до Ubuntu 24 у вас возникла проблема с доступом к файлам в procfs — файловой системе, которая предоставляется ядром Linux для предоставления информации о процессах и системе. Конкретно, ваша программа требует доступ к файлу maps
процесса systemd, что вызывает ошибку "Permission denied" при попытке прочитать этот файл.
Причины проблемы
В современных версиях Ubuntu, включая 24, для улучшения безопасности системы были внедрены строгие правила доступа к информации о процессах. Это связано с изменением в политике безопасности, которое ограничивает доступ к файловой системе procfs, чтобы предотвратить несанкционированный доступ к конфиденциальной информации процессов.
- Yama Process Scope: В частности, параметр
kernel.yama.ptrace_scope
, который регулирует использование системного вызова ptrace, влияет на возможность доступа к информации о процессах других пользователей. - Файловые права: Как видно из вывода команды
ls -l
, файлmaps
имеет разрешения-r--r--r--
, что означает, что доступ разрешен только для чтения. Однако, безопасность контейнеров systemd, вероятнее всего, ограничивает доступ по умолчанию.
Решение проблемы
Для доступа к файлам в procfs, вам могут помочь следующие шаги:
-
Проверка и исправление параметров Yama:
Вы правильно попробовали установить значениеkernel.yama.ptrace_scope
на 0. Это может разрешить доступ к действиям, связанным с однопользовательскими процессами. Однако, это может создать риски, такие как повышенный доступ к информации между процессами:sudo sysctl -w kernel.yama.ptrace_scope=0
-
Установка ограничений dmesg:
Изменение параметраkernel.dmesg_restrict
также может помочь в некоторых случаях, однако, для доступа к файлам процесса это менее актуально:sudo sysctl -w kernel.dmesg_restrict=0
-
Изменение прав доступа к файлам:
Если это не удастся, и если у вас есть контроль над процессом, вы могли бы запустить его от имени пользователя с более высокими правами (например, root), чтобы получить возможность читать этот файл:sudo cat /proc/<PID>/maps
-
Безопасность при отключении защиты:
Вы можете отключить эти уровни защиты, однако следует учитывать, что это подвергает систему рискам:- Увеличивается вероятность получения доступа к информации о других процессах.
- Может привести к потенциальным уязвимостям, если зловредный код получит доступ к системе.
Заключение
В данной ситуации вы можете отключить ограничения, но это повлечет за собой риски для безопасности вашей системы. Рекомендуется тщательно взвесить необходимость предоставления такого уровня доступа к процессам, прежде чем принимать решение. Альтернативно, рассмотрите возможность изменения архитектуры вашего приложения, чтобы оно могло выполнять необходимые действия с минимальным риском для безопасности.