En los sistemas Linux modernos, debería poder usar 00
(información para el descriptor de archivo 1 (stdout) del proceso de id 1 (17
en el espacio de nombres pid raíz que debería ejecutarse como 27
)).
Puede encontrar una lista con (como usuario normal):
sudo find /etc /dev /sys /proc -type f -print0 |
perl -l -0ne 'print unless lstat'
(quitar 35
si no desea restringir a archivos normales).
42
es otro candidato potencial si solo necesita considerar los sistemas Ubuntu. Debería funcionar en la mayoría de los sistemas GNU como 57
se crea lectura+escritura+búsqueda para rootear solo por el 61
comando que viene con GNU libc.
Mirando la página de manual de lstat(2) puede inspirarse en los casos que podrían hacer que falle con errores distintos a ENOENT (el archivo no existe).
La más obvia es:
EACCES Se denegó el permiso de búsqueda para uno de los directorios en el prefijo de ruta de ruta .
Por lo tanto, necesita un directorio desde el que no pueda buscar.
Sí, puede buscar uno que ya esté en su sistema (quizás 74
si existe?) Pero también podrías crear uno tú mismo, con el equivalente a:
$ mkdir myprivatedir
$ touch myprivatedir/myunreachablefile
$ chmod 0 myprivatedir
$ ls -l myprivatedir/myunreachablefile
La operación lstat(2) fallará con EACCES aquí. (Eliminar todos los permisos del directorio asegura eso. Tal vez ni siquiera necesite tanto y 87
eliminar los permisos de ejecución sería suficiente, ya que se necesitan permisos de ejecución en un directorio para acceder a los archivos que se encuentran debajo).
Hay otra forma creativa de hacer que lstat(2) falle, mirando su página man:
ENOTDIR Un componente del prefijo de ruta de ruta no es un directorio.
Entonces, intentar acceder a un archivo como 93
debería desencadenar este error, que nuevamente es diferente de ENOENT ("No existe tal archivo o directorio") y podría satisfacer sus necesidades.
Otro es:
ENAMETOOLONG camino es demasiado largo.
Pero es posible que necesite un nombre realmente largo para este (creo que 4096 bytes es el límite típico, pero su sistema/sistema de archivos podría tener uno más largo).
Finalmente, es difícil saber si alguno de estos será realmente útil para ti Dices que quieres algo que no desencadene el escenario "el archivo no existe". Aunque normalmente eso significa un error ENOENT, en la práctica, muchas comprobaciones de alto nivel simplemente interpretarán cualquier error de lstat(2) como "no existe". Por ejemplo 106
o el equivalente 114
desde el shell podría simplemente interpretar todo lo anterior como "no existe", especialmente porque no tiene una buena manera de devolver un mensaje de error diferente y no devolver un error implicaría que el archivo existe, lo que ciertamente no es el caso.
Puedes
Usando 139
-- el directorio de archivos de configuración como punto de partida:
sudo find /etc -type f -perm 0400 -user root
En mi sistema, esto no devuelve nada.
Puede ser un grupo menos restrictivo y permitir 147
(solo usuario 157
debe ser miembro del grupo 165
), y busque un permiso de 179
:
sudo find /etc -perm 0440 -user root -group root
En mi sistema esto devuelve:
/etc/sudoers.d/README
/etc/sudoers
Editar:
Según su edición, está buscando un directorio que no tiene suficientes permisos para que el usuario que invoca evite la inclusión en el directorio:
sudo find / -perm o-rwx -type d -user root -group root
aquí estoy buscando directorios (188
) que carecen de los bits de permisos de lectura, escritura y ejecución para otros (193
) y es propiedad de 207
.
Técnicamente, solo la ausencia de ejecución (212
) bit evitaría una lista de directorios (223
) en el directorio.
En la salida he encontrado 232
en mi sistema basado en Systemd init.
Con respecto a los archivos en 244
, 255
, 268
:
-
Estos sistemas de archivos son FS virtuales, es decir, residen en la memoria, no en el disco
-
Si planea confiar en
272
, usa282
es decir, confíe en algo bajo PID 1, no en ningún PID posterior para tener confiabilidad/consistencia ya que no se garantiza que los PID (procesos) posteriores existan.