¿Cómo funcionan los permisos de Linux en Linux?

Es posible que recuerde cuando comenzó a trabajar con permisos de Linux, pensando en qué son todos estos símbolos crípticos junto a los archivos y carpetas en la terminal. Tal vez se sienta así ahora si recién está comenzando con Linux. Seamos realistas, cuando vemos algo como drwxr-xr-x 2 root root 4096 18 de febrero 18:23 Código en la línea de comandos, no es exactamente fácil de usar. Quizás sepas que algunos de estos símbolos tienen que ver con permisos, y si es así tienes razón. Entonces, ¿cómo funcionan los permisos en Linux de todos modos? Sigue leyendo amigo, ya que ahora vamos a echar un vistazo a este mismo tema.

Permisos de Linux

Ubuntu tiene una buena descripción general de los permisos de archivosEste es un buen recurso para tener.


Comprensión de la propiedad en Linux

En primer lugar, vamos a echar un vistazo a la propiedad. Ahora, cuando enumeramos el contenido de un directorio, podría verse así.

vagabundo @ homestead: ~ $ ls -l
total 8      
drwxr-xr-x2raízraíz409618 de febrero 18:23Código
-rw-rw-r–1vagabundovagabundo019 de febrero 15:53ninja
-rw-rw-r–1vagabundovagabundo019 de febrero 15:28secreto
lrwxrwxrwx1vagabundovagabundo519 de febrero 16:29veloz -> ninja
-rw-rw-r–1vagabundovagabundo62Febrero 19 16:13ubuntu.txt

¿Que qué? Cuando miramos la salida, al principio parece una colección aleatoria de caracteres sin significado. Sin embargo, cada carácter tiene un significado y cada columna tiene un significado. Colocamos esta salida en una tabla para llevar a casa la idea de las siete columnas diferentes en la salida. Echemos un vistazo a la columna tres y la columna cuatro, y observemos que tienen nombres. Estos nombres son los propietarios de esa entrada en particular. La columna tres es para el usuario y la columna cuatro es para el grupo .

chown y chgrp

Habrá ocasiones en las que necesitemos especificar qué usuario posee un recurso y también de qué grupo debería formar parte. Hacemos esto con los comandos chown y chgrp . Podemos probar esto en el archivo de texto ubuntu.txtmencionado anteriormente. A partir de ahora, el ubuntu.txttiene tanto un usuario propietario de vagabundo como perteneciente al grupo vagabundo ¡No te confundas! Tenemos un usuario vagabundo y un grupo vagabundo. Como ejercicio rápido, podemos cambiar el propietario a root y la membresía del grupo a admin . Probémoslo.

vagabundo @ finca: ~ $ sudo chown root ubuntu.txt
vagabundo @ finca: ~ $ls -l
total 8      
drwxr-xr-x2raízraíz409618 de febrero 18:23Código
-rw-rw-r–1vagabundovagabundo019 de febrero 15:53ninja
-rw-rw-r–1vagabundovagabundo019 de febrero 15:28secreto
lrwxrwxrwx1vagabundovagabundo519 de febrero 16:29veloz -> ninja
-rw-rw-r–1rootvagabundo62Febrero 19 16:13ubuntu.txt
vagabundo @ finca: ~ $ sudo chgrp admin ubuntu.txt
vagabundo @ finca: ~ $ls -l
total 8      
drwxr-xr-x2raízraíz409618 de febrero 18:23Código
-rw-rw-r–1vagabundovagabundo019 de febrero 15:53ninja
-rw-rw-r–1vagabundovagabundo019 de febrero 15:28secreto
lrwxrwxrwx1vagabundovagabundo519 de febrero 16:29veloz -> ninja
-rw-rw-r–1raízadmin62Febrero 19 16:13ubuntu.txt

Excelente. Podemos ver que el archivo ubuntu.txt ahora tiene un propietario de root y una membresía de grupo de admin . Buen trabajo.

Usando la -Rbandera conchown

La -Rbandera especifica que se ejecute un comando de forma recursiva . Esto significa que iterará o recorrerá todos los archivos o carpetas disponibles para el comando. Por ejemplo, creamos un directorio llamado directoryEn ese directorio, agregamos cuatro archivos llamados onefile , anotherfile , filethree y filefour . Según nuestra sesión actual, tanto el directorio como todos los archivos son propiedad de vagrant y también forman parte del grupo vagrant Vamos a enumerarlo para ver cómo se ve.

vagabundo @ homestead: ~ $ ls -l directory
total 0
-rw-rw-r–1vagabundovagabundo0Febrero 19 16:52otro archivo
-rw-rw-r–1vagabundovagabundo0Febrero 19 16:52filefour
-rw-rw-r–1vagabundovagabundo0Febrero 19 16:52filethree
-rw-rw-r–1vagabundovagabundo0Febrero 19 16:52onefile

Ok, podemos ver nuestros archivos, así como el usuario y el grupo asociados Probemos la -Rbandera con el chowncomando para cambiar tanto el usuario como el grupo de forma recursiva .

vagabundo @ finca: ~ $ sudo chown -R root:admin directory
vagabundo @ finca: ~ $ls -l directory
total 0
-rw-rw-r–1raízadministración0Febrero 19 16:52otro archivo
-rw-rw-r–1raízadministración0Febrero 19 16:52filefour
-rw-rw-r–1raízadministración0Febrero 19 16:52filethree
-rw-rw-r–1raízadministración0Febrero 19 16:52onefile

Tal como esperábamos, tanto el usuario como el grupo se han actualizado para el directorio y todo su contenido de una sola vez. Por supuesto, este es un ejemplo un poco absurdo, pero si necesita cambiar un usuario o grupo en cientos de archivos en un directorio, le encantará la capacidad recursiva de la línea de comandos. Otra cosa que notará es que es fácil de usar chownno solo para cambiar usuarios, sino también grupos. Parece ser chgrpun poco reductor, pero ambos existen, así que siéntete libre de usar lo que quieras. Usemos chownpara modificar solo la pertenencia al grupo , pero no la propiedad.

vagabundo @ homestead: ~ $ sudo chown :vagrant ubuntu.txt
-rw-rw-r–1raízvagabundo62Febrero 19 16:13ubuntu.txt

Permisos en carpetas de archivos y enlaces

Pasando de usuarios y grupos, ahora veremos los permisos en archivos, carpetas y enlaces. Esto es lo que ve en la primera columna de salida cuando ejecuta un ls -lcomando, por ejemplo. De todos los fragmentos que hemos visto anteriormente, podemos ver que esta columna consta de una cadena de 10 caracteres todos en una fila. Al principio, esta información parece inútil y confusa. En realidad, sin embargo, cada carácter individual tiene un significado especial.

El primer personaje

El primer carácter de este grupo de 10 personajes se refiere al tipo de recurso con el que estamos tratando. ¿Es un archivo , un directorio o un enlace ? Por supuesto, diferentes personajes tienen diferentes significados. -significa que es simplemente un archivo. dsignifica que es un directorio y lsignifica que es un enlace.


El formato UGO

Los caracteres del segundo al décimo son los que indican los permisos sobre el recurso. Tenemos 9 personajes en total para trabajar, y esto se divide en tres grupos de tres. Los tres primeros son para el usuario . Los segundos tres son para el grupo y los últimos tres son para otros (a veces también denominados mundo). Se ve así para un directorio que tiene permisos de lectura, escritura y ejecución, para Usuario, Grupo y Otro.

rwx rwx rwx

Cuando un permiso en particular no está habilitado, se representa simplemente por el -carácter. Así que eliminemos los permisos de escritura del Grupo, así como de Otros. Como se veria eso?

rwx r-x r-x

Representar permisos como números octales

La cadena de 9 caracteres utilizada para mostrar permisos sobre un recurso también se puede representar como un número octal . Esto significa que en lugar de algo como rwxrwxrwx, simplemente podría referirse a esto como 777¿Como funciona esto? Veamos.

Asignación octal

  • r = 4

  • w = 2

  • x = 1

tipousuariogrupootro
rerwxrxrx
re755
-rw-rw-r- -
-664

La tabla anterior es fácil de entender, y así es como puede averiguar exactamente qué permisos tiene un recurso simplemente mirando el valor octal de tres dígitos. Sabemos que leer tiene un valor de 4escribir tiene un valor de 2ejecutar tiene un valor de 1Este ingenioso método permite asignar la gama completa de permisos utilizando solo espacios de 3 dígitos. Aquí está el gráfico completo de la representación octal a permiso.

octalpermiso
0- - -
1- - x
2- w -
3- w x
4r - -
5r - x
6r w -
7r w x

Entonces, ¿cómo se asignan los permisos?

De hecho, esa es una gran pregunta, y hay un par de formas de hacerlo a través del chmodcomando. Para usar chmod en un recurso, debe ser el propietario de ese recurso o el superusuario. La primera y más común forma probablemente sea usando notación octal. A continuación se muestra un ejemplo de cómo probar la teoría de propiedad junto con la configuración de permisos mediante notación octal.

vagrant @ homestead: ~ $ chmod 777 ubuntu.txt
chmod: cambio de permisos de 'ubuntu.txt': Operación no permitida
vagrant @ homestead: ~ $ sudo chmod 777 ubuntu.txt
vagrant @ homestead: ~ $ ls -l
-rwxrwxrwx 1 root vagrant 62 19 de febrero 15:38 ubuntu.txt

¡Excelente! Aquí vemos que cuando intentamos cambiar los permisos por primera vez, recibimos un mensaje de error de que no se nos permitió hacerlo. Esto se debe a que estamos operando como elusuario vagabundo , sin embargo, root es la cuenta que posee el archivo. Tenga en cuenta que cuando le ponemos un prefijo alsudocomando, funciona correctamente. Vale la pena mencionar lo quesudorealmente es, ya que lo hemos usado varias veces hasta ahora y no hemos proporcionado su significado. sudopermite a un usuario obtener derechos elevados para operaciones específicas, sin necesidad de ser root o superusuario. La mayoría de los administradores del sistema le aconsejarán que no opere como usuario root. Es demasiado peligroso. Si tiene un error o un error tipográfico, podría causar daños importantes al sistema e inutilizarlo. Al trabajar como una cuenta de usuario y solo invocar sudocuando sea necesario, se protege de posibles peligros.

La segunda forma de cambiar los permisos es con la representación simbólica . Esto equivale a partir de las letras ugo, en combinación con menos y más señales junto con los permisos en cuestión, tales como rw, y xEs un poco ambiguo, así que veamos uno o dos ejemplos.

vagrant @ homestead: ~ $ chmod ugo-x ubuntu.txt
vagrant @ homestead: ~ $ ls -l
-rw-rw-rw- 1 vagrant vagrant 62 19 de febrero 15:38 ubuntu.txt vagrant
@ homestead: ~ $

Observe cómo especificamos Usuario, Grupo y Otro, con ugo, luego estamos diciendo que elimine los permisos ejecutables para los tres a través de -xListar el contenido con ls -l confirma el resultado. A continuación, se muestran algunas formas de utilizar la notación simbólica.

notación simbólicaefecto resultante
u + wagregar permiso de escritura para el propietario
uxquitarle permiso de ejecución al propietario
+ ragregar permiso de lectura para usuarios, grupos y otros
o-rweliminar lectura y escritura de otros
uo-rwxeliminar lectura, escritura y ejecución, tanto del usuario como de otros
ugo + rwxpermitir acceso completo equivalente a 777 para grupos de usuarios y otros

Tenga en cuenta que otros también se refiere a veces mundo , o todos los demás .

Los permisos ejecutables funcionan de manera diferente para archivos, carpetas y enlaces

En Linux, a menudo verá que el permiso ejecutable está configurado en carpetas. Esto se debe a que, sin el permiso ejecutable, no puede cdingresar a un directorio. Además, necesitará el permiso de lectura establecido para realizar unalspara listar el contenido del directorio. Por otro lado, los archivos no suelen tener permisos de ejecución de forma predeterminada. Esto es por motivos de seguridad, ya que no querrá que el sistema pueda ejecutar libremente un archivo con ningún código o software malicioso. Finalmente tenemos permisos sobre enlaces. Aún no hemos cubierto los enlaces en Linux, pero es posible que ya sepa cuáles son, y si no lo sabe, puede pensar en ellos como atajos. Los enlaces suelen tener todos los permisos en todos los grupos. Esto se debe a que el enlace simplemente usa los permisos del recurso al que apunta. Revisémoslo en nuestro sistema.

vagrant @ homestead: ~ $ file swift
swift: enlace simbólico a 'ninja'
vagrant @ homestead: ~ $ ls -l
-rw-rw-r– 1
vagrant vagrant 0 19 de febrero 15:36 ninja lrwxrwxrwx 1 vagabundo vagabundo 5 19 de febrero 15:38 swift -> ninja
vagabundo @ homestead: ~ $

Con este ejemplo podemos ver que Swift es un enlace simbólico que apunta a un ninja. Aunque Swift parece tener rwxrwxrwxpermisos, en realidad tiene -rw-rw-r--permisos porque eso es lo que tiene el ninja.


¿Cómo se asignan los permisos cuando los crea?

Con toda esta charla sobre qué son los permisos y cómo configurarlos, nos lleva a la pregunta de cómo los archivos y carpetas obtienen sus permisos en primer lugar. Hmm, buena pregunta, ¿verdad? Bueno, sigamos adelante y creemos un nuevo archivo, y veamos cuáles son los permisos que tiene.

vagabundo @ homestead: ~ / directorio $ touch newfile
vagabundo @ homestead: ~ / directorio $ ls -l
total 0
-rw-rw-r– 1 vagabundo vagabundo 0 20 de febrero 17:43 archivo nuevo
vagabundo @ homestead: ~ / directorio $

Entonces esto es interesante. Parece que cuando se crea un archivo, tiene -rw-rw-r--permisos predeterminados. Vale genial. Bueno, ¿de dónde viene eso?

He aquí el UMASK

La umask se usa en combinación con la asignación de permiso octal para determinar cómo asignar permisos a archivos y carpetas en la creación. Hay algunos lugares para jugar con umask en Linux según la distribución en uso y el usuario con el que ha iniciado sesión. Sin embargo, la conclusión es que la umask se configura con mayor frecuencia 022, lo que nos da carpetas 755y archivos 644al crearse. ¿Como funciona esto? Es fácil. Empiece con el permiso 777, luego reste la umask. Entonces 777-022 = 755 . Ahora bien, ¿cómo salen los archivos 644Esto se debe a que Linux simplemente elimina el bit ejecutable inmediatamente después de la creación para eliminar cualquier riesgo de seguridad de los archivos.

Justo cuando pensaba que no había nada más que aprender sobre permisos en Linux, aparece el bit setuid, el bit setgid y el bit pegajoso. ¿Que qué? Examinemos.


SUID

El bit setuid se usa en archivos ejecutables. También se conoce a veces como set user id. Si se establece este bit, el archivo se ejecutará como propietario del archivo. ¿Qué significa esto? Bueno, supongamos que hay un archivo en el sistema que es propiedad de root. A lo largo vienes como una cuenta de usuario y ejecutas ese archivo ejecutable. Si el SUID está configurado, ese archivo se ejecutará como root, aunque puede que haya iniciado sesión como Emmet. Por lo general, no se mete con el SUID, y es peligroso si se configura incorrectamente, pero lo incluimos para que esté completo.


GUID

GUID se usa tanto en ejecutables como en carpetas. La identificación de usuario de grupo funciona de manera similar a suid en que altera los permisos, ya sea que esté configurada o no. Si está configurado en un archivo ejecutable, entonces el archivo se ejecuta con los permisos de cualquier grupo que sea propietario del archivo. Cuando se aplica a carpetas, el resultado es que los archivos o carpetas creados dentro de la carpeta principal serán propiedad del grupo. En otras palabras, todos los archivos o carpetas nuevos heredarán la propiedad del grupo de cualquier propiedad del grupo que tenga la carpeta principal.


Bit pegajoso

Finalmente, tenemos la parte pegajosa. En realidad, no se usa tanto en estos días en archivos, pero hay algunos casos de uso en carpetas. El lugar más común en el que lo vemos en uso es el /tmpdirectorio. Lo que hace es decir que solo el propietario de un archivo o carpeta puede eliminar ese archivo o carpeta. Esto tiene mucho sentido para el /tmpdirectorio porque habrá múltiples usuarios y grupos escribiendo y leyendo en el /tmpdirectorio. Bien adivina que. No desea que otros usuarios vengan y eliminen nada a lo que necesite acceder. Ahora, cuando decimos usuarios, estos a menudo se refieren a los procesos de usuario utilizados por las aplicaciones, no a los usuarios humanos reales.

Representando SUID GUID y Sticky Bit

Seguramente está familiarizado con el formato 777 o 664 para representar permisos en Linux. Bueno, ¿qué pasa con las veces que ves 4 dígitos como 4755 o 2775? La respuesta es que el primer dígito es una representación octal de SUID, GUID y Sticky Bit. Ya vimos cómo calcular los permisos usando octal para Usuario, Grupo y Otro. Bueno, funciona de la misma manera para SUID, GUID y Sticky Bit. Veamos cómo. Recuerde nuestra lista:

  • r = 4

  • w = 2

  • x = 1

Ahora simplemente actualícelo para ver cómo se establecen estos valores con respecto a SUID, GUID y Sticky Bit.

  • SUID = 4

  • GUID = 2

  • Bit pegajoso = 1

Ahora puede simplemente sumar los números para comprender lo que está configurado. Por ejemplo, 1777 tiene el bit adhesivo establecido, 2777 tiene el conjunto guid, 4777 tiene el conjunto suid y 5777 tiene el conjunto de bits suid y adhesivo.

Un ejemplo de caso de uso de SUID

El programa de ping integrado es un buen ejemplo de cómo se establece el bit SUID. Veámoslo en acción.

vagrant @ homestead: ~ / directorio $ ll /bin/ping
-rwsr-xr-x 1 root root 44168 7 de mayo de 2014 / bin / ping *
vagrant @ homestead: ~ / directorio $

¿Notas algo raro allí? Así es, eche un vistazo -rwsr-xr-xy observe la carta sallí. Lo que eso significa es que cuando ejecuto el programa de ping desde la cuenta de vagabundo, ping se ejecutará como root. ¿Ves cómo funciona eso?

Ejemplo de caso de uso de GUID

Supongamos que tenemos un script en la máquina y queremos que ese script se ejecute con permisos de grupo sin importar quién lo active. Veamos cómo hacer eso.

vagrant @ homestead: ~ / directorio $ sudo chmod g+s pretendscript
vagrant @ homestead: ~ / directorio $ ll
-rwxrwsr-x 1 vagrant admin 30 de febrero de 18:35 pretendscript *
vagrant @ homestead: ~ / directorio $

En este ejemplo, podemos ver que el GUID lo establece sen los permisos La letra s todavía se usa, sin embargo, se coloca en la ubicación del bit ejecutable para los permisos de grupo como se ve aquí. En este caso, este archivo siempre se ejecutará con los permisos del grupo de administración.-rwxrwsr-x

Resumen de permisos de Linux

Los permisos son un tema bastante extenso en Linux. Tuvimos una investigación bastante épica de permisos en este episodio donde aprendemos cómo funcionan los permisos en Linux. Cubrimos mucho terreno con respecto a usuarios, grupos, permisos, notación octal, notación simbólica, el formato UGO, umask, suid, guid, sticky bit y más. Tener una comprensión sólida de cómo funcionan estos conceptos en Linux es vital, ya que afectan todos los aspectos del trabajo con varios programas e información en Linux.