index.html (10875B)
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 5 <meta name="viewport" content="width=device-width, initial-scale=1" /> 6 <title>De la heredad de permisos y propietarios de Unix</title> 7 <link rel="icon" type="image/png" href="/favicon.png" /> 8 <link rel="stylesheet" type="text/css" href="../article.css" /> 9 </head> 10 <body> 11 <header> 12 <p class="title">De la heredad de permisos y propietarios de Unix</p> 13 <p class="date">2 de abril de 2016 • fjbalon</p> 14 </header> 15 <p>La comprensión del fichero o archivo, file para los anglosajones, es fundamental para comprender la estructura y funcionamiento lógico de Unix. Un fichero es una colección de bytes agrupados bajo un mismo nombre, simple. En Unix, todo es un fichero; todo. Incluso un directorio es un fichero especial que agrupa otros ficheros, y estos a su vez se agrupan en otros directorios. Es la estructura lógica de catalogación.</p> 16 <p>Los directorios se ordenan en una jerarquía muy clara y concisa en Unix, y al tronco de estos directorios se les denomina árbol; por eso el inicio de todo es la raíz.</p> 17 <p>Las extensiones de los ficheros son una simple convención que determina un subnombre o cadena de caracteres anexa separada mediante un punto, que ayudan a diversos softwares y al humano a diferenciar entre distintos tipos de datos o contenido.</p> 18 <p>Recuerda, iniciado, que para mantener esta jerarquía, el sistema se maneja mediante rutas (paths), que indican el árbol de directorios y el fichero objetivo separados por /. En función de si la ruta comienza en la raíz del sistema o desde un punto variable, hablamos de rutas absolutas (/home/fjbalon/fichero) o rutas relativas (../../fjbalon/fichero), respectivamente. Algunos comodines referidos en las rutas son . (directorio actual), .. (directorio padre), $\sim$ (directorio home del usuario actual).</p> 19 <p>Introducida la estructura lógica de ficheros y directorios, ahondamos en la simple pero poderosa estructura de permisos de Unix, que es uno de los pilares sobre el que descansa la seguridad en estos sistemas operativos; aplicándose a todo el sistema y a todo archivo, y construyendo un sistema robusto, fiable y estable en cuanto accesos y niveles de permisos, así como propietarios de cada archivo.</p> 20 <p>Así, los permisos asociados a un archivo:</p> 21 <ul> 22 <li>Lectura (read - r): un usuario con permiso de lectura sobre un fichero podrá ver su contenido. Si fuera un directorio, el usuario con permiso de lectura podrá listar el contenido del mismo. Esto no quiere decir poder ver el contenido de cada fichero, para ello necesitará el permiso sobre dicho fichero. </li> 23 <li>Escritura (write - w): un usuario con permiso de escritura podrá editar, añadir o eliminar el contenido de un fichero. Un usuario con permiso de escritura sobre un directorio podrá crear, eliminar o mover archivos del mismo.</li> 24 <li>Ejecución (execute - x): un usuario que intente ejecutar un programa deberá tener el permiso de ejecución.</li> 25 </ul> 26 <p>Según los métodos de visualización, dividimos los permisos de un fichero o directorio en 3 grupos de rwx (lectura, escritura y ejecución). En caso de haber un guión en lugar de la letra representativa del permiso, no existirá tal permiso.</p> 27 <ul> 28 <li>El primer grupo rwx indica los permisos que tiene el usuario propietario.</li> 29 <li>El segundo grupo rwx indica los permisos que tienen los usuarios que pertenecen al grupo propietario.</li> 30 <li>El tercer grupo rwx indica los permisos que tienen el resto de usuarios.</li> 31 </ul> 32 <p>El primer caracter indicará el tipo de archivo, como indicación al usuario, que se catalogan en:</p> 33 <ul> 34 <li>Regular files: -</li> 35 <li>Directory files: d</li> 36 <li>Block file: b</li> 37 <li>Character device file: c</li> 38 <li>Named pipe file or just a pipe file: p</li> 39 <li>Symbolic link file: l</li> 40 <li>Socket file: s</li> 41 </ul> 42 <h2>Método de manipulación de permisos: modo octal</h2> 43 <p>Los permisos rwx son representaciones de un valor binario, que determina con 1 que existe dicho permiso y con 0 que no existe. Entonces, cada trío de permisos tendría un valor binario como: rwx = 111, r-x = 101, r-- = 100. El trío binario traducido a octal nos devuelve un valor entre 0 y 7.</p> 44 <pre><code>rwx => 111 binary => digit 7 because r is 4, w is 2 and x is 1, so 4+2+1=7 45 r-x => 101 binary => digit 5 because r is 4 and x is 1 so 4+0+1=5 46 -wx => 011 binary => digit 3 because w is 2 and x is 1 so 0+2+1=3 47 --- => 000 binary => digit 0 because no permissions are set so 0+0+0=0 48 49 7 = binary 111 = rwx 50 6 = binary 110 = rw- 51 5 = binary 101 = r-x 52 4 = binary 100 = r-- 53 3 = binary 011 = -wx 54 2 = binary 010 = -w- 55 1 = binary 001 = --x 56 0 = binary 000 = ---</code></pre> 57 <p>De tal forma que es posible indicar con sólo 3 dígitos octales los permisos de un fichero o directorio.</p> 58 <pre><code>rwxr-x-wx is rwx|r-x|-wx is 111|101|011 ==> 753 59 ---r----x is ---|r--|--x is 000|100|001 ==> 041 60 --------- is ---|---|--- is 000|000|000 ==> 000 61 rwxrwxrwx is rwx|rwx|rwx is 111|111|111 ==> 777</code></pre> 62 <p>Usamos la herramienta chmod:</p> 63 <pre><code># Asigna únicamente permisos de ejecución al fichero 64 $ chmod 111 nombre_del_fichero 65 66 # Asigna todos los permisos para el usuario, únicamente ejecución para el grupo y ninguno para el resto 67 $ chmod 710 nombre_del_fichero 68 69 # Asigna todos los permisos para el usuario, únicamente lectura para el grupo y ejecución y escritura para el resto 70 $ chmod 743 nombre_del_fichero </code></pre> 71 <h2>Método de manipulación de permisos: modo simbólico</h2> 72 <p>Utiliza operadores para modificar (asignar o desasignar) los diferentes modos de los permisos. Existen 3 operadores: + (añade un modo), - (elimina un modo) y = (especifica un modo). Los usuarios son representados mediante: u (user, primer grupo rwx), g (group, segundo grupo rwx), o (others, tercer grupo rwx), a (all, todos los grupos rwx).</p> 73 <p>Usamos la herramienta chmod:</p> 74 <pre><code># Añade todos los permisos de ejecución al fichero 75 $ chmod +x nombre_del_fichero 76 77 # Elimina todos los permisos de escritura al fichero 78 $ chmod -w nombre_del_fichero 79 80 # Elimina permisos de lectura a otros 81 $ chmod o-r nombre_del_fichero 82 83 # Únicamente deja permisos de ejecución 84 $ chmod =x nombre_del_fichero 85 86 # Añade todos los permisos al usuario pero vacía el resto, dejando únicamente permiso de ejecución para otros 87 $ chmod u+rwx,g-rwx,o=x nombre_del_fichero</code></pre> 88 <p>Esto son sólo 5 ejemplos del uso de chmod en este modo, podemos realizar todas las combinaciones que necesitemos.</p> 89 <h2>Método de cambio de propietario</h2> 90 <p>Lo más esencial antes de iniciar la manipulación de permisos es gestionar el cambio de propietarios. Como ya se ha adelantado, un fichero tiene un usuario propietario y un grupo propietario. Generalmente por defecto es el creador de dicho fichero o directorio.</p> 91 <p>Usamos la herramienta chown:</p> 92 <pre><code>chown root nombre_del_fichero # Cambiamos el propietario del fichero a root 93 chown juan:administradores nombre_del_fichero # Cambiamos el propietario a juan y el grupo a administradores 94 chown :controladores nombre_del_fichero # Cambiamos sólo el grupo propietario a controladores</code></pre> 95 <h2>Permisos de bits especiales</h2> 96 <p>Fuera del predominio de rwx, pueden existir otros permisos especiales asignables a archivos y directorios en el sistema de archivos. Se referencia a estos permisos especiales como un dígito adicional agregado al comienzo del modo.</p> 97 <p>Los siguientes bits especiales están disponibles para el uso del sistema de archivos de Linux:</p> 98 <ul> 99 <li>SUID: el permiso "Set User Id" permite a los usuarios ejecutar un programa como si fueran el usuario propietario del programa, siendo en la mayoría de los casos root. El valor numérico de este conjunto de permisos es 4XXX, donde XXX corresponde a los valores rwx.</li> 100 <li>SGID: "Set Group Id", similar al anterior pero otorga automáticamente la propiedad de grupo. El valor numérico de este conjunto de permisos es 2XXX, donde XXX corresponde a los valores rwx.</li> 101 <li>Pedazo pegajoso: este conjunto de permisos se usa para evitar que los «no propietarios» eliminen archivos en un directorio común (numérico = 1XXX). En un directorio de bits adhesivos, solo el propietario del archivo o el propietario del directorio puede eliminar el archivo (la raíz siempre puede eliminar archivos también).</li> 102 </ul> 103 <pre><code>chmod 4755 ejemplo 104 ls -l ejemplo 105 106 -rwsr-xr-x 1 root root 5747 Apr 25 01:45 ejemplo</code></pre> 107 <h2>Enmascaramiento de permisos</h2> 108 <p>umask (abreviatura de user mask, máscara de usuario) es una orden y una función en entornos POSIX que establece los permisos por defecto para los nuevos archivos y directorios creados por el proceso actual. por defecto, los directorios tienen una base octal de 777 (111 111 111)(rwx rwx rwx) mientras que los ficheros de 666 (110 110 110)(rw- rw- rw-). La razón por la que los ficheros carecen de permisos de ejecución es sencilla, por seguridad, no conviene que le demos este permiso a todo archivo nuevo. Partiendo de esta base, la operación para determinar los permisos de creación de nuevos archivos y directorios es la resta del valor dado por umask al permiso base:</p> 109 <pre><code># Directory 110 base 777 111 111 111 rwxrwxrwx 111 umask 022 000 010 010 ----w--w- 112 result 755 111 101 101 rwxr-xr-x 113 114 # File 115 base 666 110 110 110 rw-rw-rw- 116 umask 022 000 010 010 ----w--w- 117 result 644 110 100 100 rw-r--r--</code></pre> 118 <p>Para corroborar la umask que estamos utilizando en este preciso momento, simplemente deberemos lanzar el comando umask, que te devolverá el valor.</p> 119 <pre><code>umask 120 0022</code></pre> 121 <p>Para personalizar la máscara tenemos 3 opciones. La primera de ellas consiste en cambiar la máscara en la sesión que tenemos, siendo un cambio temporal.</p> 122 <pre><code>umask 066</code></pre> 123 <p>Si queremos hacer permanente el cambio, la segunda de ellas consiste en modificar la umask en .bashrc, por lo que afectaría al usuario en cuestión.</p> 124 <pre><code>echo "umask 022" >> ~/.bashrc</code></pre> 125 <p>Y la tercera opción consiste en editar el fichero de configuración /etc/profile, afectando a todos los usuarios.</p> 126 <pre><code>echo "umask 022" >> /etc/profile</code></pre> 127 <p>Cabe destacar que si que, el sistema (/etc/profile) tiene una máscara de -por ejemplo- 026 y el usuario (.bashrc) de 002 la prioridad del usuario siempre será la de su configuración propia. De hecho su funcionamiento es el siguiente: el usuario busca en su fichero de configuración la línea umask, en caso de no haber busca en el sistema. Por lo que en el caso de no configurar umask en el usuario, la configuración del mismo será la del sistema.</p> 128 </body> 129 </html>