Ошибка «write error abrt: отказано в доступе» — причины и пошаговое решение

Сообщение write error с пометкой abrt и текстом «отказано в доступе» (Permission denied) появляется, когда служба автоматической регистрации сбоев ABRT (Automatic Bug Reporting Tool) пытается записать дамп аварийно завершившегося процесса, но не получает права на запись в свой рабочий каталог. Чаще всего проблема связана с каталогами /var/spool/abrt или /var/tmp/abrt, владелец или права которых были изменены вручную, скриптом очистки или после переноса системы.

Ошибка не является критичной для самой системы — аварийно завершившееся приложение уже завершилось, а ABRT лишь не смог сохранить отчёт о сбое. Однако постоянные записи в журнале засоряют логи, а отсутствие crashdump-файлов мешает диагностике реальных падений программ. Ниже разберём, как проверить права, восстановить корректную конфигурацию и при необходимости полностью отключить сбор отчётов.

Что такое ABRT и почему возникает ошибка записи

ABRT — это служба в дистрибутивах семейства RHEL, CentOS, Fedora, AlmaLinux, Rocky Linux, которая перехватывает падения приложений (core dump) и сохраняет их вместе с диагностической информацией. Демон abrtd работает отдельно от обычных пользователей и пишет данные в выделенный каталог, доступ к которому строго ограничен из соображений безопасности.

Сообщение «отказано в доступе» означает, что на этапе записи файла ядро отклонило системный вызов. Возможные причины:

  • 🔧 Изменён владелец или права каталога /var/spool/abrt (например, после ручной очистки диска командой rm -rf и последующего пересоздания каталога).
  • 📁 Каталог удалён вовсе, и ABRT не может его создать заново из-за прав на родительский путь.
  • 🛡️ Политика SELinux блокирует запись — типично после восстановления файлов из резервной копии без сохранения контекстов безопасности.
  • 💾 Переполнен раздел или исчерпаны inode — в этом случае ошибка может сопровождаться сообщениями о нехватке места.

Как определить, куда именно ABRT не может записать

Первый шаг — посмотреть точный текст ошибки в журнале. Выполните в терминале:

journalctl -u abrtd -n 100 --no-pager

Также полезно проверить общий системный журнал на наличие строк с упоминанием abrt:

grep -i abrt /var/log/messages | tail -20

В выводе обычно виден путь, по которому произошёл отказ. Заодно проверьте, какой каталог задан в конфигурации службы — он указывается параметром DumpLocation в файле /etc/abrt/abrt.conf. Посмотреть значение можно командой:

grep DumpLocation /etc/abrt/abrt.conf

Если параметр закомментирован, используется значение по умолчанию, заданное при сборке пакета (в большинстве случаев это /var/spool/abrt или /var/tmp/abrt — зависит от версии дистрибутива).

📊 Где вы встретили ошибку write error abrt?
В журнале journalctl на сервере
В /var/log/messages
При запуске приложения в терминале
В уведомлениях на рабочем столе

Проверка и восстановление прав на каталог ABRT

Убедившись, какой каталог используется, проверьте его владельца и права:

ls -ld /var/spool/abrt

В стандартной установке каталог принадлежит пользователю и группе abrt, а права ограничены — обычно это 0751 или похожая маска (точное значение зависит от версии пакета, сверьтесь с документацией своего дистрибутива). Если вы видите владельца root:root или каталог отсутствует, восстановите структуру:

mkdir -p /var/spool/abrt

chown abrt:abrt /var/spool/abrt

chmod 0751 /var/spool/abrt

⚠️ Внимание: не назначайте каталогу ABRT права 0777 «для проверки». Дампы памяти могут содержать пароли, ключи и пользовательские данные — открытый доступ к ним создаёт реальную уязвимость.

После исправления прав перезапустите службу:

systemctl restart abrtd

☑️ Восстановление прав ABRT

Выполнено: 0 / 5

Ошибка из-за SELinux: диагностика и исправление

Если права и владелец корректны, а ошибка «отказано в доступе» сохраняется, вероятный виновник — SELinux. Это особенно актуально после восстановления файлов из бэкапа, переноса системы на другой диск или ручного пересоздания каталогов: стандартные права при этом сохраняются, а расширенные атрибуты безопасности теряются.

Проверить, блокирует ли SELinux запись, можно через журнал аудита:

ausearch -m avc -ts recent | grep abrt

Если в выводе есть записи denied для процессов abrt, восстановите штатные контексты безопасности на каталоге:

restorecon -Rv /var/spool/abrt
⚠️ Внимание: не переводите SELinux в режим permissive и не отключайте его целиком ради устранения одной ошибки записи. Это снимает защиту со всей системы. Корректный путь — восстановить контексты командой restorecon или разобрать конкретное правило через audit2allow.
Что делать, если restorecon не помог

Проверьте текущий режим командой getenforce. Если SELinux в enforcing и отказы продолжаются, соберите свежие записи аудита: ausearch -m avc -ts recent. Иногда причина в нестандартном DumpLocation — для каталога вне штатных путей нужно вручную назначить контекст через semanage fcontext и затем применить restorecon. Точные типы контекстов зависят от версии политики, поэтому сверяйтесь с документацией вашего дистрибутива.

Проверка свободного места и лимитов

Менее очевидная, но встречающаяся причина — невозможность записи из-за переполнения файловой системы. Сообщение об ошибке в этом случае может отличаться, но иногда сопровождается теми же отказами при создании файлов. Проверьте раздел, на котором находится каталог ABRT:

df -h /var/spool/abrt

df -i /var/spool/abrt

Вторая команда показывает заполненность по inode — каталог с тысячами мелких дампов может исчерпать их даже при наличии свободных гигабайт. Также в /etc/abrt/abrt.conf есть параметр MaxCrashReportsSize, ограничивающий суммарный размер хранимых дампов; при его превышении старые отчёты удаляются, но при сбоях в этом механизме возможны ошибки.

Очистить накопленные отчёты можно штатной командой:

abrt-cli list

abrt-cli rm /var/spool/abrt/имя_каталога_дампа

Сравнение типичных причин и способов устранения

ПричинаКак распознатьРешение
Неверный владелец каталогаls -ld показывает root вместо abrtchown abrt:abrt на каталог дампов
Каталог удалёнОшибка «No such file or directory» в журналеСоздать каталог, назначить права, перезапустить abrtd
Блокировка SELinuxЗаписи denied в ausearch -m avcrestorecon -Rv на каталог
Переполнение раздела или inodedf -h / df -i показывают 100%Очистить старые дампы через abrt-cli
Повреждённая установка пакетаОшибки сохраняются после всех проверокПереустановить пакеты abrt

Переустановка ABRT и полное отключение службы

Если ни одна из проверок не помогла, возможно, повреждены файлы самого пакета. Переустановка выполняется стандартным менеджером пакетов:

dnf reinstall abrt abrt-addon-ccpp abrt-daemon

Состав пакетов отличается между версиями дистрибутивов — список установленных компонентов можно посмотреть командой rpm -qa | grep abrt.

На серверах, где сбор отчётов о сбоях не нужен (например, дампы обрабатываются через systemd-coredump или мониторинг построен иначе), допустимо полностью отключить ABRT:

systemctl stop abrtd abrt-ccpp

systemctl disable abrtd abrt-ccpp

Учтите, что после отключения отчёты о падениях приложений формироваться не будут — диагностировать причины внезапных завершений станет сложнее. На рабочих станциях с графическим окружением это также уберёт уведомления о сбоях программ.

Частые вопросы

Опасна ли ошибка «write error abrt: отказано в доступе» для системы?

Сама по себе — нет. Она означает лишь, что отчёт о падении какого-то приложения не был сохранён. Однако стоит выяснить, какое приложение падает: частые сбои одной и той же программы могут указывать на реальную проблему.

Как узнать, какая программа вызвала сбой?

Используйте abrt-cli list — для каждого сохранённого дампа показывается имя исполняемого файла и время сбоя. Если дампы не сохраняются из-за ошибки прав, смотрите журнал: journalctl -e рядом с моментом ошибки abrt обычно есть запись о завершившемся процессе.

Можно ли просто удалить пакет abrt?

Да, пакет удаляется через dnf remove abrt, но вместе с ним могут быть удалены связанные компоненты уведомлений рабочего стола. На сервере это обычно безболезненно, на десктопе — проверьте список удаляемых зависимостей перед подтверждением.

Почему ошибка появилась после очистки диска?

Типичный сценарий: каталог /var/spool/abrt удалили вместе с содержимым, а затем создали заново от root. Владелец и контекст SELinux при этом не совпадают с ожидаемыми службой. Решение — назначить владельца abrt:abrt и выполнить restorecon.

Чем ABRT отличается от systemd-coredump?

Обе службы перехватывают падения приложений, но хранят дампы по-разному: ABRT пишет их в файлы в своём каталоге, а systemd-coredump — в журнал systemd с управлением через coredumpctl. В некоторых дистрибутивах используется только один из механизмов.