¿Cómo no permitir el acceso a un archivo para un usuario?

Estoy tratando de impedir que un usuario abra un archivo. El propósito es que cuando un usuario intente abrir un archivo específico, no podrá hacerlo.

Además, quiero poder devolver los permisos y permitir que el usuario abra el archivo.

Solo encontré formas de habilitar las premisiones: os.chmod(path, 0444) , pero no puedo entender cómo deshabilitar los permisos.

Un primer permiso de Unix:

Cada archivo tiene un user . Este es un usuario en el sistema. Cada archivo también tiene un group . Este es un grupo en el sistema. Un user puede estar en uno o más group . Un archivo tiene exactamente un user y un group que “posee” el archivo. 1

Entonces, ¿qué significa un número como 0444 ?

El primer número se usa para algunas banderas especiales como sticky , setuid , setgid . No tenemos que preocuparnos por eso ahora. Solo recuerda ponerlo en 0

Los siguientes tres números indican los tres permisos: uno para el user , group y other (todo el mundo que no sea user o group ), en ese orden.

Para establecer los permisos usamos un número de cero a siete (un número octal ). Esto es en realidad una máscara de bits . 1 es para execute , 2 es para write , 4 es para read .

En una mesa se parece a: 2

 N Description ls output 0 No read, no write, no execute --- 1 No read, no write, execute --x 2 No read, write, no execute -w- 3 No read, write, execute -wx 4 Read, no write, no execute r-- 5 Read, no write, execute rx 6 Read, write, no execute rw- 7 Read, write, execute rwx 

read y write debe ser auto-explicativo execute significa que puede ejecutar un archivo con ./ls (esto no es una medida de seguridad, y puede ser evitado por cierto). Tenga en cuenta que los directorios también son archivos en sistemas Unix como Linux. Un directorio debe tener el bit de execute establecido si desea poder cd en él.

Los números que usarás más a menudo son:

  • 7, para acceso completo
  • 6, para acceso completo excepto ejecutar
  • 4, para solo lectura.

Por lo tanto, si observa su comando os.chmod(path, 0444) , veremos que ha configurado el acceso de solo lectura para todos los usuarios. Esto no es lo que quieres.

Los permisos correctos dependen de qué user y group propietarios del archivo. Si el archivo no pertenece al usuario al que desea denegar el acceso y no está en el grupo al que pertenece el archivo, puede usar:

 os.chmod(path, 0440) 

Si miramos la tabla de arriba, vemos que significa:

  • Leer, escribir, no ejecutar para el user .
  • Leer, escribir, no ejecutar para group .
  • NO hay permisos para other .

Si el archivo no pertenece al usuario al que desea negar el acceso y pertenece al grupo al que pertenece el archivo, puede usar:

 os.chmod(path, 0400) 

Esto lo hará legible solo para el user . Tenga en cuenta que esto puede tener efectos secundarios, ya que todos los demás miembros del grupo tampoco pueden leerlo ahora.

Sin embargo, si el archivo pertenece al usuario, deberá cambiarlo. Esto se puede hacer con la función os.chown() . p.ej:

 os.chown(path, 'martin') os.chmod(path, 0400) 

1 : puede usar las ACL si desea asignar más usuarios o grupos a un archivo, pero en> 95% no es necesario, y solo agrega complejidad que puede ser difícil de administrar. A menudo está deshabilitado por defecto.

2 : Mesa levantada del manual de FreeBSD