В поисках службы, разрешаемой системой после недавнего раскрытия уязвимости, я обнаружил очень странное поведение команды find.
root@localhost:/# find . -name "*systemd-resolved*"
./usr/share/man/man8/systemd-resolved.service.8.gz
./usr/share/man/man8/systemd-resolved.8.gz
Команда возвращает 0 или две строки в качестве выходных данных для первого запуска. Но если я запускаю команду во второй раз, я получаю:
root@localhost:/# find . -name "*systemd-resolved*"
./usr/share/man/man8/systemd-resolved.service.8.gz
./usr/share/man/man8/systemd-resolved.8.gz
./lib/systemd/systemd-resolved
./lib/systemd/system/systemd-resolved.service.d
./lib/systemd/system/systemd-resolved.service
Это означает, что в первый раз «найти» на самом деле не удается найти все. Также это происходит только один раз. Выполнение команды в следующий раз показывает правильный результат. Я проверял это на некоторых других системах с установленным Debian 8 (jessie). В системах с ядром 4.9+ эта проблема возникает всегда, но в системах с ядром 3.16 этого не происходит.
После перезагрузки системы все это повторяется снова. Но поведение каждой отдельной системы одинаково. Это означает, что если тестирование в конкретной системе возвращает (ошибочно) две строки вывода для первого запуска и правильный вывод для второго запуска, то при первом запуске команды после перезагрузки системы снова выводятся две строки. Таким образом, системы показывают одно и то же поведение после каждой перезагрузки (согласно моим тестам). Подробная информация о файлах:
-rw-r--r-- 1 root root ./usr/share/man/man8/systemd-resolved.service.8.gz
lrwxrwxrwx 1 root root ./usr/share/man/man8/systemd-resolved.8.gz -> systemd-resolved.service.8.gz
-rwxr-xr-x 1 root root ./lib/systemd/systemd-resolved
drwxr-xr-x 2 root root ./lib/systemd/system/systemd-resolved.service.d
-rw-r--r-- 1 root root ./lib/systemd/system/systemd-resolved.service
РЕДАКТИРОВАТЬ: Всем, кто предлагает проблему, возможно, связанную с этим конкретным случаем для этих конкретных файлов: "с системным разрешением"является просто примером. Это происходит и при поиске по другим ключевым словам. Это еще один пример, который дает неверные результаты при первом запуске:
root@localhost:/# find . -name "*apache*"
Здесь никто не может проверить эту проблему на Debian 8 с последним ядром из репозитория backport?
Версия findutils по умолчанию, установленная в Debian 8, - 4.4.2, и это новейшая версия в репозиториях jessie. Я скачал последнюю версию (4.6.0) исходного кода findutils и собрал двоичные файлы из исходного кода. Затем я провел те же тесты, и команда "найти" показала верный вывод для первого запуска.
Затем я скачал версию findutils 4.4.2 исходный код из архива GNU и скомпилировал его. Та же проблема произошла и с откомпилированной командой find. Таким образом, с findutils 4.6.0 эта проблема не возникает.
Но я до сих пор не знаю, почему некоторые пользователи не получают таких же результатов, используя findutils 4.4.2 (версия утилиты по умолчанию, установленная в Debian), и не знаю, почему Debian все еще следует выпускать с этой старой версией findutils. и, возможно, другие утилиты Linux и вызывают эту проблемную ситуацию. И последнее: точная техническая причина странного случившегося до сих пор неизвестна, что нежелательно. Потому что я не уверен, есть ли что-то тревожное в среде моей ОС.