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 archivos. Este 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í.
ls -l
total 8 | ||||||
drwxr-xr-x | 2 | raíz | raíz | 4096 | 18 de febrero 18:23 | Código |
-rw-rw-r– | 1 | vagabundo | vagabundo | 0 | 19 de febrero 15:53 | ninja |
-rw-rw-r– | 1 | vagabundo | vagabundo | 0 | 19 de febrero 15:28 | secreto |
lrwxrwxrwx | 1 | vagabundo | vagabundo | 5 | 19 de febrero 16:29 | veloz -> ninja |
-rw-rw-r– | 1 | vagabundo | vagabundo | 62 | Febrero 19 16:13 | ubuntu.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.txt
mencionado anteriormente. A partir de ahora, el ubuntu.txt
tiene 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.
sudo chown root ubuntu.txt
vagabundo @ finca: ~ $
ls -l
total 8 | ||||||
drwxr-xr-x | 2 | raíz | raíz | 4096 | 18 de febrero 18:23 | Código |
-rw-rw-r– | 1 | vagabundo | vagabundo | 0 | 19 de febrero 15:53 | ninja |
-rw-rw-r– | 1 | vagabundo | vagabundo | 0 | 19 de febrero 15:28 | secreto |
lrwxrwxrwx | 1 | vagabundo | vagabundo | 5 | 19 de febrero 16:29 | veloz -> ninja |
-rw-rw-r– | 1 | root | vagabundo | 62 | Febrero 19 16:13 | ubuntu.txt |
sudo chgrp admin ubuntu.txt
vagabundo @ finca: ~ $
ls -l
total 8 | ||||||
drwxr-xr-x | 2 | raíz | raíz | 4096 | 18 de febrero 18:23 | Código |
-rw-rw-r– | 1 | vagabundo | vagabundo | 0 | 19 de febrero 15:53 | ninja |
-rw-rw-r– | 1 | vagabundo | vagabundo | 0 | 19 de febrero 15:28 | secreto |
lrwxrwxrwx | 1 | vagabundo | vagabundo | 5 | 19 de febrero 16:29 | veloz -> ninja |
-rw-rw-r– | 1 | raíz | admin | 62 | Febrero 19 16:13 | ubuntu.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 -R
bandera conchown
La -R
bandera 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 directory
. En 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.
ls -l directory
total 0 | ||||||
-rw-rw-r– | 1 | vagabundo | vagabundo | 0 | Febrero 19 16:52 | otro archivo |
-rw-rw-r– | 1 | vagabundo | vagabundo | 0 | Febrero 19 16:52 | filefour |
-rw-rw-r– | 1 | vagabundo | vagabundo | 0 | Febrero 19 16:52 | filethree |
-rw-rw-r– | 1 | vagabundo | vagabundo | 0 | Febrero 19 16:52 | onefile |
Ok, podemos ver nuestros archivos, así como el usuario y el grupo asociados . Probemos la -R
bandera con el chown
comando para cambiar tanto el usuario como el grupo de forma recursiva .
sudo chown -R root:admin directory
vagabundo @ finca: ~ $
ls -l directory
total 0 | ||||||
-rw-rw-r– | 1 | raíz | administración | 0 | Febrero 19 16:52 | otro archivo |
-rw-rw-r– | 1 | raíz | administración | 0 | Febrero 19 16:52 | filefour |
-rw-rw-r– | 1 | raíz | administración | 0 | Febrero 19 16:52 | filethree |
-rw-rw-r– | 1 | raíz | administración | 0 | Febrero 19 16:52 | onefile |
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 chown
no solo para cambiar usuarios, sino también grupos. Parece ser chgrp
un poco reductor, pero ambos existen, así que siéntete libre de usar lo que quieras. Usemos chown
para modificar solo la pertenencia al grupo , pero no la propiedad.
sudo chown :vagrant ubuntu.txt
-rw-rw-r– | 1 | raíz | vagabundo | 62 | Febrero 19 16:13 | ubuntu.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 -l
comando, 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. d
significa que es un directorio y l
significa 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.
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?
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
tipo | usuario | grupo | otro |
re | rwx | rx | rx |
re | 7 | 5 | 5 |
- | rw- | rw- | r- - |
- | 6 | 6 | 4 |
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 4
, escribir tiene un valor de 2
y ejecutar tiene un valor de 1
. Este 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.
octal | permiso |
0 | - - - |
1 | - - x |
2 | - w - |
3 | - w x |
4 | r - - |
5 | r - x |
6 | r w - |
7 | r 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 chmod
comando. 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.
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 alsudo
comando, funciona correctamente. Vale la pena mencionar lo quesudo
realmente es, ya que lo hemos usado varias veces hasta ahora y no hemos proporcionado su significado. sudo
permite 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 sudo
cuando 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 u
, g
y o
, en combinación con menos y más señales junto con los permisos en cuestión, tales como r
, w
, y x
. Es un poco ambiguo, así que veamos uno o dos ejemplos.
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 -x
. Listar 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ólica | efecto resultante |
u + w | agregar permiso de escritura para el propietario |
ux | quitarle permiso de ejecución al propietario |
+ r | agregar permiso de lectura para usuarios, grupos y otros |
o-rw | eliminar lectura y escritura de otros |
uo-rwx | eliminar lectura, escritura y ejecución, tanto del usuario como de otros |
ugo + rwx | permitir 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 cd
ingresar a un directorio. Además, necesitará el permiso de lectura establecido para realizar unals
para 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.
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 rwxrwxrwx
permisos, 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.
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 755
y archivos 644
al 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 644
? Esto 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 /tmp
directorio. 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 /tmp
directorio porque habrá múltiples usuarios y grupos escribiendo y leyendo en el /tmp
directorio. 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.
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-x
y observe la carta s
allí. 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.
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 s
en 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.
0 Comentarios