¿Cómo funcionan los permisos de archivo?

37

¿Puede explicar brevemente los conceptos principales y las herramientas de línea de comandos utilizados para administrar los permisos de archivos?

guillermooo
fuente

Respuestas:

23

Cada archivo tiene derechos para tres categorías diferentes:

  • el dueño del archivo,
  • el grupo asociado con el archivo, y
  • todos los demás.

Los derechos significan el derecho a leer el archivo, el derecho a escribir en el archivo o el derecho a ejecutar el archivo en el caso de un script o programa.

En la CLI, puedes

  • cambiar el propietario con chown, p. ej.chown guillermooo
  • cambiar el grupo con chgrp, p. ej.chgrp root
  • cambiar los derechos con chmod, p. ej. chmod u+w filename.ext(Agrega permiso de escritura para el propietario del archivo filename.ext)

Si desea obtener más información sobre cada una de estas herramientas, abra un terminal y escriba man [tool], por ejemplo man chmod.

ParanoiaCachorro
fuente
8
Es un poco más complicado con los directorios: se requiere permiso de ejecución para acceder al contenido del directorio. Esto significa (por ejemplo) para leer o escribir un archivo que necesita ejecutar acceso al directorio que lo contiene, así como los permisos apropiados en el archivo en sí. Esto casi nunca aparece, ¡pero es por eso que está mal documentado / entendido!
adamnfish
Huh Tienes razón. Lo editaré mañana, cuando tenga menos sueño.
ParanoiaPuppy
1
chown guillermooono debería ser esto chown guillermooo filename?
Zeynel
32

Advertencia: Cambiar los permisos de archivos y directorios es potencialmente dañino y puede hacer que su sistema sea inestimable. Cuando se ejecuta de forma recursiva como root en la ruta incorrecta, podemos llegar a un punto desde el que tendremos que reinstalar Ubuntu. Por lo tanto, es una buena idea no cambiar los permisos fuera de los directorios HOME, y ejecutar los comandos de forma recursiva como root debe evitarse siempre que sea posible.

Permisos de archivo

Ubuntu ha heredado el concepto de permisos de Unix cuando para archivos o directorios hay tres tareas que podemos permitir o denegar:

  • r (leer) archivo / directorio puede abrirse para acceso de lectura.
  • El archivo / directorio w (escritura) puede abrirse para acceso de escritura / edición.
  • El archivo x (ejecutar) puede ejecutarse como un programa / directorio puede atravesarse.

( Recorrer un directorio significa esencialmente usarlo como parte del nombre de una ruta. Consulte https://unix.stackexchange.com/a/13891 o https://unix.stackexchange.com/questions/21251 para obtener más explicaciones).

Además, tenemos tres casos sobre a quién otorgamos un permiso:

  • u (usuario) el propietario de un archivo tiene cualquiera de los permisos.
  • Se le otorga un permiso al grupo g (grupo) al que pertenece el archivo.
  • o (otro) a todos los demás se les otorga un permiso.

Ahora para obtener la combinación de estos ordenados, usamos un sistema binario donde cada bit define un permiso. Esto se puede mostrar mejor en la siguiente tabla

    Permission | Binary | Octal  | User  | Group | Other |
    ======================================================
      r        |  100   |   4    |       |       |       |
      w        |  010   |   2    |       |       |       |
      x        |  001   |   1    |       |       |       |
    =======================================================
    Number

Ahora si queremos por ejemplo

a) el propietario de un archivo (= usuario) tiene r ead, w rito, y e x ecute permiso,
b) Grupo concedió el archivo r ead y e x permisos ecute, y
c) todos los demás sólo deben tener r acceso EAD.

Entonces el permiso de archivo resultante será:

 u   g   o
rwx r-x r--

Para obtener esto en los números octales, por ejemplo. para el chmodcomando o cuando tenemos que entender un mensaje de error, necesitamos completar la tabla anterior de la siguiente manera:

    Permission | Binary | Octal  | User  | Group | Other |
    ======================================================
      r        |  100   |   4    |   4   |   4   |   4   |
      w        |  010   |   2    |   2   |   0   |   0   |
      x        |  001   |   1    |   1   |   1   |   0   |
    ======================================================
    Numbers add to                   7       5       4     

Cada número de permiso debe agregarse para resumir para un usuario (4 + 2 + 1 = 7), grupo (4 + 0 + 1 = 5) y otros (4 + 0 + 0 = 4). El número resultante es:

 u   g   o
 7   5   4

Ahora tenemos dos opciones para cambiar los bits de permiso con chmod:

chmod u+rwx g+rx o+r filename

o mucho más simple con

chmod 751 filename

Ambos comandos harán lo mismo.

El permiso predeterminado de un archivo recién creado en nuestro hogar será 664 (-rw-rw-r--).

Si queremos que los archivos sean ejecutables como programas, tendremos que cambiar este permiso.

  • Tenga en cuenta que también tendremos que cambiar el permiso del directorio en el que puede estar este ejecutable. Solo si ambos, el archivo y el bit ejecutable del directorio están configurados, se nos permitirá ejecutar este archivo como un programa.

  • Al copiar un archivo en nuestro hogar, perderá sus permisos, que serán reemplazados por nuestros propios permisos predeterminados (a menos que copiemos usando opciones avanzadas, por ejemplo, una opción de archivo).

  • También tenga en cuenta que el archivo puede heredar su permiso de su punto de montaje, resp. Opciones de montaje. Esto es importante cuando se montan unidades formateadas de Windows que no admiten permisos de Unix.

Usuarios y grupos

Pronto nos damos cuenta de que esto era solo la mitad de la historia. También tenemos que ordenar las pertenencias. Para hacer esto, cada archivo o carpeta tiene un propietario definido y una membresía de grupo definida.

Cada vez que creamos un archivo, seremos el propietario de un archivo, y el grupo del archivo también seremos nosotros. Con ls -lpodemos ver los permisos, la propiedad y el grupo como se ve en el siguiente resultado de ejemplo:

-rw-rw-r--  1 takkat takkat    4096 Sep 12 20:25 test
  • Solo se nos permite cambiar los permisos, los grupos o la propiedad de un archivo que es nuestro.

Si no somos el propietario del archivo, recibiremos un Permission deniederror. Solo root puede cambiar esto para todos los archivos. Es por eso que tenemos que usarlo sudoal editar permisos de archivos que no son nuestros. Hay dos comandos integrados para hacerlo chownpara usuarios y chgrpgrupos.

Para cambiar la propiedad de un archivo de cualquiera a otro, takkatpodemos emitir este comando:

sudo chown takkat testfile

Para cambiar el grupo de un archivo a takkatemitimos

sudo chgrp takkat testfile

Lea las páginas de manual de los comandos para obtener más detalles y opciones. También hay esta guía más elaborada y recomendada para leer más:

También encuentre algunas preguntas relacionadas aquí:

Takkat
fuente