Al buscar un servicio resuelto por el sistema después de la reciente divulgación de vulnerabilidad, llegué a ver un comportamiento muy extraño del comando find.
root@localhost:/# find . -name "*systemd-resolved*"
./usr/share/man/man8/systemd-resolved.service.8.gz
./usr/share/man/man8/systemd-resolved.8.gz
El comando devuelve 0 o dos líneas como salida para la primera ejecución. Pero si ejecuto el comando la segunda vez que obtengo:
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
Esto significa que la primera vez, "buscar" en realidad no encuentra todo. Además, esto solo ocurre una vez. La ejecución del comando la próxima vez muestra la salida correcta. Lo comprobé en algunos otros sistemas con Debian 8 (jessie) instalado. En aquellos con Kernel 4.9+, este problema exacto siempre ocurre, pero en sistemas con kernel 3.16 no sucede.
Después de reiniciar el sistema, todo esto vuelve a suceder. Pero el comportamiento es el mismo para cada sistema individual. Eso significa que si la prueba en un sistema específico devuelve (incorrectamente) dos líneas de salida para la primera ejecución y la salida correcta para la segunda ejecución, la primera ejecución del comando después de reiniciar el sistema nuevamente imprime 2 líneas. Entonces, los sistemas muestran el mismo comportamiento después de cada reinicio (de acuerdo con mis pruebas). Los detalles de los archivos son los siguientes:
-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
EDITAR: Para todos aquellos que sugieren que el problema puede estar relacionado con este caso específico para estos archivos específicos: " resuelto por el sistema " es solo un ejemplo. Esto sucede al buscar otras palabras clave también. Este es otro ejemplo que da resultados incorrectos para la primera ejecución:
root@localhost:/# find . -name "*apache*"
¿Nadie aquí puede verificar este problema en un Debian 8 con el último núcleo del repositorio de backport?
strace
? ¿En qué sistema operativo observó el comportamiento defectuoso? ¿Qué quiere decir con "devuelve 0 o dos resultados como el anterior"? ¿Cero o dos líneas de salida, o código de salida 0 + dos líneas? ¿Sucede nuevamente después de iniciar un nuevo shell o reiniciar? Puede ser relevante que la primera llamada solo devuelva archivos, mientras que la segunda devuelve archivos y directorios./lib/systemd
monta? ¿Qué tipo de sistema de archivos es? Si es un punto de montaje separado, ¿a qué hora se montó?Respuestas:
La versión predeterminada de findutils que está instalada en Debian 8 es 4.4.2 y esta es la versión más reciente en los repositorios jessie. Descargué la última versión (4.6.0) del código fuente de findutils y construí los archivos binarios desde la fuente. Luego hice las mismas pruebas y el comando "buscar" mostró la salida correcta para la primera ejecución.
Luego descargué el código fuente de findutils versión 4.4.2 del archivo gnu y lo compilé. El mismo problema ocurrió para el comando compilado find. Entonces, este problema no está sucediendo con findutils 4.6.0.
Pero todavía no sé por qué algunos usuarios no obtienen los mismos resultados con findutils 4.4.2 (la versión predeterminada de la utilidad instalada en Debian), y no sé por qué Debian aún debería lanzarse con esta versión antigua de findutils y posiblemente otras utilidades de Linux y causan esta situación problemática. Y lo último es que aún se desconoce la razón técnica exacta de lo que sucedió extrañamente, lo que no es deseable. Porque no estoy seguro de si hay algo preocupante en mi entorno de sistema operativo.
fuente