Los permisos de Linux son un concepto con el que todos los usuarios se familiarizan íntimamente desde el principio de su desarrollo. Necesitamos ejecutar scripts, modificar archivos y ejecutar procesos para administrar los sistemas de manera efectiva, pero ¿qué sucede cuando vemos Permiso denegado? ? ¿Sabes por qué vemos este mensaje? Si conoce la causa del problema, ¿sabe cómo implementar la solución?
Daré una explicación rápida de las diversas formas de calcular los permisos y luego nos centraremos en los permisos especiales dentro de Linux. Si desea ver en profundidad el chmod
comando, consulte este artículo de Sudoer Shashank Hegde, Permisos de Linux:Una introducción a chmod.
La TL;DR es que hay dos formas principales de asignar permisos.
Método simbólico
El método simbólico utiliza la siguiente sintaxis:
[tcarrigan@server ~]$ chmod WhoWhatWhich file | directory
donde:
- Quién - representa identidades:u,g,o,a (usuario, grupo, otro, todos)
- Qué - representa acciones:+, -, =(agregar, eliminar, establecer exacto)
- Cuál - representa los niveles de acceso:r, w, x (leer, escribir, ejecutar)
Un ejemplo de esto es si quiero agregar el leer y escribir permisos a un archivo llamado test.txt para usuario y grupo , utilizo el siguiente comando:
[tcarrigan@server ~]$ chmod ug+rw test.txt
Divulgación completa, este no es mi método preferido para asignar permisos, y si desea obtener más información sobre este método, le recomiendo su motor de búsqueda más cercano.
Método numérico
El método numérico es, según mi experiencia, la mejor manera de aprender y practicar permisos. Se basa en la siguiente sintaxis:
[tcarrigan@server ~]$ chmod ### file | directory
Aquí, de izquierda a derecha, el carácter # representa un nivel de acceso. Hay tres niveles de acceso:usuario, grupo y otros. Para determinar cuál es cada dígito, usamos lo siguiente:
- Empezar en 0
- Si leer se debe establecer el permiso, agregue 4
- Si escribe se debe establecer el permiso, agregue 2
- Si el ejecutar se debe configurar el permiso, agregue 1
Esto se calcula por nivel de acceso. Interpretemos este ejemplo de permisos:
-rw-r-x---
Los permisos se representan como 650 . ¿Cómo llegué a esos números?
- Los permisos del usuario son:rw- o 4+2=6
- Los permisos del grupo son:r-x o 4+1=5
- Los permisos de los demás son:--- o 0
Para poner esto en la sintaxis del comando, se ve así:
[tcarrigan@server ~]$ chmod 650 test.txt
Ahora que comprende los conceptos básicos del cálculo de permisos en Linux, veamos los permisos especiales incluido en el sistema operativo.
[ También le puede interesar: Una introducción a las listas de control de acceso (ACL) de Linux]
Permiso especial explicado
Los permisos especiales constituyen un cuarto nivel de acceso además del usuario , grupo y otros . Los permisos especiales permiten privilegios adicionales sobre los conjuntos de permisos estándar (como sugiere el nombre). Hay una opción de permiso especial para cada nivel de acceso discutido anteriormente. Echemos un vistazo a cada uno individualmente, comenzando con Establecer UID:
usuario + s (especial)
Comúnmente conocido como SUID , el permiso especial para el nivel de acceso de usuario tiene una única función:Un archivo con SUID siempre se ejecuta como el usuario propietario del archivo, independientemente del usuario que pasa el comando. Si el propietario del archivo no tiene permisos de ejecución, utilice una S mayúscula. aquí.
Ahora, para ver esto desde una perspectiva práctica, veamos el /usr/bin/passwd
dominio. Este comando, por defecto, tiene el conjunto de permisos SUID:
[tcarrigan@server ~]$ ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 33544 Dec 13 2019 /usr/bin/passwd
Tenga en cuenta las s donde x normalmente indicaría permisos de ejecución para el usuario.
grupo + s (especial)
Comúnmente conocido como SGID , este permiso especial tiene un par de funciones:
- Si se establece en un archivo, permite que el archivo se ejecute como el grupo que posee el archivo (similar a SUID)
- Si se establece en un directorio, todos los archivos creados en el directorio tendrán su grupo propiedad establecida en la del propietario del directorio
[tcarrigan@server article_submissions]$ ls -l
total 0
drwxrws---. 2 tcarrigan tcarrigan 69 Apr 7 11:31 my_articles
Este conjunto de permisos se indica con una s minúscula donde la x normalmente indicaría ejecutar privilegios para el grupo . También es especialmente útil para directorios que a menudo se usan en esfuerzos de colaboración entre miembros de un grupo. Cualquier miembro del grupo puede acceder a cualquier archivo nuevo. Esto también se aplica a la ejecución de archivos. SGID es muy poderoso cuando se utiliza correctamente.
Como se señaló anteriormente para SUID , si el grupo propietario no tiene permisos de ejecución, entonces una S mayúscula se utiliza.
otro + t (pegajoso)
El último permiso especial se ha denominado "pedacito pegajoso". Este permiso no afecta a los archivos individuales. Sin embargo, a nivel de directorio, restringe la eliminación de archivos. Solo el propietario (y raíz ) de un archivo puede eliminar el archivo dentro de ese directorio. Un ejemplo común de esto es /tmp
directorio:
[tcarrigan@server article_submissions]$ ls -ld /tmp/
drwxrwxrwt. 15 root root 4096 Sep 22 15:28 /tmp/
El conjunto de permisos se indica con la t minúscula , donde la x normalmente indicaría el privilegio de ejecución.
Configuración de permisos especiales
Para establecer permisos especiales en un archivo o directorio, puede utilizar cualquiera de los dos métodos descritos anteriormente para los permisos estándar:simbólico o numérico.
Supongamos que queremos configurar SGID en el directorio community_content
.
Para hacer esto usando el método simbólico, hacemos lo siguiente:
[tcarrigan@server article_submissions]$ chmod g+s community_content/
Usando el método numérico, necesitamos pasar un cuarto dígito anterior en nuestro chmod
dominio. El dígito utilizado se calcula de manera similar a los dígitos de permiso estándar:
- Empezar en 0
- SUID =4
- SGID =2
- Pegajoso =1
La sintaxis es:
[tcarrigan@server ~]$ chmod X### file | directory
Donde X es el dígito de permisos especiales.
Aquí está el comando para establecer SGID en community_content
usando el método numérico:
[tcarrigan@server article_submissions]$ chmod 2770 community_content/
[tcarrigan@server article_submissions]$ ls -ld community_content/
drwxrws---. 2 tcarrigan tcarrigan 113 Apr 7 11:32 community_content/
[ Descarga gratuita:hoja de referencia de comandos avanzados de Linux. ]
Resumen
Para terminar, los permisos son fundamentalmente importantes para ser un administrador de Linux efectivo. Hay dos formas definidas de establecer permisos usando chmod
Comando:Simbólico y numérico. Examinamos la sintaxis y los cálculos necesarios para ambos métodos. También consideramos los permisos especiales y su rol en el sistema. Ahora que comprende los permisos y los conceptos subyacentes, puede resolver el siempre molesto Permiso denegado error cuando intenta impedir su trabajo.