GNU/Linux >> Tutoriales Linux >  >> Linux

¿Hay un archivo que siempre existe y un usuario 'normal' no puede acceder a él?

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 124 hágalo usted mismo.

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 , usa 282 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.


Linux
  1. ¿Cómo puedo comprobar que existe un archivo y ejecutar un comando si no es así?

  2. ¿Cómo vaciar (truncar) un archivo en Linux que ya existe y está protegido de alguna manera?

  3. ¿Cómo puedo comprobar si existe un directorio?

  4. No se puede eliminar un directorio en Unix

  5. ¿Cómo puedo encontrar un archivo/directorio que podría estar en cualquier lugar de la línea de comandos de Linux?

Cómo hacer que el archivo y el directorio no se puedan eliminar, incluso mediante la raíz en Linux

Encuentre y elimine el archivo más antiguo si hay más de X archivos en un directorio en Linux

¿Cómo puede el usuario montar un contenedor de archivos cifrados en Veracrypt?

Cómo montar y ver un archivo ISO como raíz y usuario normal en Linux

Linux / Carpeta y /carpeta raíz

¿Cómo puedo automatizar la limpieza y el restablecimiento del directorio de inicio de un usuario de Linux a un valor predeterminado?