Linux Labs

Безопасность сервера / Ступень 2 из 10

Обновление есть — уязвимость ещё жива

Не запущена Запускается обычно ~20 с
Выйти из урока

Шаг 2 из 7 · теория · 5 мин

Имя ушло, файл остался

Процесс работает с файлом, которого нет в каталоге. Так устроены имена файлов и так dpkg ставит обновление.

Имя в каталоге — только ссылка на сам файл, его inode. При обновлении dpkg пишет новый файл рядом со старым и переименовывает его поверх. Имя теперь ведёт к новому inode, а у старого не осталось ни одного имени — у lsof это 0 в столбце NLINK.

Файл без имени живёт, пока его держит хоть один процесс. httpd службы запустился до обновления: ядро отобразило программу в его память и выполняет её оттуда. Такие файлы ядро помечает (deleted) — в /proc процесса это видно так:

bash
sudo ls -l /proc/<PID>/exe          # программа процесса
sudo grep deleted /proc/<PID>/maps  # программа и библиотеки в памяти
ls -li /usr/lib/lab-feed/httpd      # файл в каталоге: другой inode

Исправленная программа лежит на диске, а работает прежняя — вместе с уязвимостью. Новый файл загрузит только новый процесс: службу перезапускают, sudo systemctl restart lab-feed. reload здесь не поможет: он посылает сигнал тому же процессу, и тот лишь перечитывает настройки.

Проверь себя 1 вопрос

Программу ночного отчёта обновили в 03:00. В 04:00 cron запустил отчёт заново. Что покажет sudo ls -l /proc/<PID>/exe у этого процесса?

  • Программа запускается из файла в каталоге, а архив .deb нужен только для установки. Ссылка exe ведёт на файл программы.

  • Пометку получает процесс, запущенный до обновления. Процесс 04:00 открыл программу по имени, а имя уже ведёт к новому файлу.

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

Главное в шаге

  • После обновления процесс, запущенный раньше, работает с удалённым файлом: (deleted) в /proc/<PID>/exe и maps, 0 в NLINK у lsof +L1.
  • Новую программу загружает только новый процесс — systemctl restart; reload оставляет тот же процесс.
Ubuntu 24.04
Загрузка…