Lección 00
Permisos Linux sin miedo
Interpreta lectura, escritura y ejecución en archivos y directorios.
Antes de practicar
Punto de partida. En Linux, un permiso no describe si un archivo es importante: describe qué operaciones autoriza el sistema a una identidad concreta. Para revisar una ruta con criterio defensivo hay que contestar cuatro preguntas en orden: qué tipo de objeto es, quién intenta usarlo, qué operación necesita y qué permiso efectivo le corresponde. Saltarse cualquiera de ellas lleva a arreglos demasiado amplios, como dar acceso a todo el mundo porque una aplicación no pudo leer su configuración. El objetivo no es lograr que el error desaparezca a cualquier precio, sino conceder la capacidad mínima a la identidad que realmente la necesita y conservar una razón auditable para ese cambio.
Cómo se lee el modo. Un listado largo suele comenzar con un carácter que identifica el tipo de objeto y continúa con tres bloques de tres posiciones. El primer bloque pertenece al propietario, el segundo al grupo asociado y el tercero a las demás identidades. En cada bloque, r representa lectura, w escritura y x ejecución; un guion representa una capacidad ausente. Por ejemplo, -rw------- describe un archivo ordinario cuyo propietario puede leer y modificar, mientras grupo y demás no reciben acceso mediante esos bits. La primera marca no forma parte de los tres bloques: confundirla con un permiso desplaza toda la lectura y produce diagnósticos erróneos. Conviene separar visualmente el modo como tipo | propietario | grupo | demás antes de interpretarlo.
La misma letra cambia de significado práctico según el objeto. En un archivo ordinario, leer permite obtener su contenido, escribir permite alterarlo o truncarlo y ejecutar permite pedir al sistema que lo trate como programa, siempre que el formato y otras políticas lo permitan. Un archivo de configuración casi nunca necesita ser ejecutable. Marcarlo así no lo protege ni facilita que la aplicación lo lea; sólo añade una capacidad que no estaba en la necesidad. Para un secreto o una configuración sensible, la escritura merece especial atención: quien puede modificar lo que consumirá un servicio puede cambiar su conducta, aun cuando no tenga control directo del proceso. Por eso lectura y escritura no son riesgos equivalentes y deben justificarse por separado.
En un directorio, r permite enumerar nombres, w permite crear, quitar o renombrar entradas cuando las demás condiciones lo permiten, y x permite atravesar el directorio para alcanzar una entrada conocida. Esta diferencia explica un caso desconcertante para principiantes: un archivo puede conceder lectura al grupo correcto y seguir siendo inaccesible porque falta travesía en algún directorio de la ruta. También puede ocurrir lo inverso: una identidad atraviesa una carpeta sin poder listar sus nombres. El diagnóstico debe revisar cada componente de la ruta, no sólo el archivo final. Añadir lectura a la carpeta cuando lo que falta es travesía amplía la visibilidad de nombres y quizá ni siquiera resuelva el acceso.
Qué bloque aplica. El sistema no combina libremente los tres bloques para elegir el más generoso. Primero determina si la identidad efectiva coincide con el propietario; si no, comprueba si alguno de sus grupos efectivos coincide con el grupo del objeto; si tampoco, usa el bloque de las demás identidades. Por eso una prueba hecha desde una terminal administrativa no demuestra lo que podrá hacer una cuenta de servicio. Antes de cambiar bits, identifica el usuario efectivo del proceso y sus grupos, además del propietario y el grupo de la ruta. Una discrepancia entre la sesión humana y el servicio suele explicar por qué el mismo archivo se abre en una prueba y falla durante la operación real.
Propiedad y función. Ser propietario no significa necesariamente ser quien usa el archivo a diario. En una configuración administrada, una separación útil es que una identidad de operaciones controle las modificaciones y que el servicio reciba sólo lectura mediante un grupo específico. Así, comprometer o confundir al proceso consumidor no le concede también la capacidad de reescribir sus propias reglas. La cuenta del servicio tampoco debe reutilizarse entre aplicaciones sin una razón: si dos procesos comparten identidad, los permisos diseñados para uno se vuelven capacidades del otro. Al evaluar una propuesta, pregunta quién administra, quién consume y quién no debería ver ni cambiar el recurso. Cada verbo puede pertenecer a una identidad distinta.
Mínimo privilegio como método. Empieza por una frase operacional, no por un modo: «el proceso necesita leer este archivo durante el arranque» o «el equipo de respaldo necesita obtener una copia, pero no alterarla». Después traduce cada sujeto y verbo a un bloque y una capacidad. Conserva las autorizaciones que siguen justificadas, añade sólo la nueva y niega las que no aparecen en la necesidad. Finalmente prueba con la identidad real. Este orden evita dos atajos frecuentes: convertir al proceso en propietario para que deje de fallar, o habilitar escritura para un grupo cuando la tarea sólo requiere lectura. Que una medida sea cómoda no la convierte en mínima.
Notación numérica sin memorización ciega. Dentro de cada bloque, lectura vale cuatro, escritura vale dos y ejecución vale uno. Se suman únicamente las capacidades presentes y se obtiene un dígito por propietario, grupo y demás, en ese orden. Así, siete significa las tres capacidades, seis combina lectura y escritura, cinco combina lectura y ejecución, cuatro es sólo lectura y cero no concede ninguna. Un modo como 600 expresa lectura y escritura para el propietario y nada para los otros bloques; 644 mantiene esas capacidades del propietario y añade lectura tanto al grupo como a las demás identidades. No memorices una tabla de modos «seguros»: reconstruye los tres dígitos desde la necesidad, porque el objeto y su función deciden si un bit sobra.
La notación simbólica muestra la intención del cambio. Las letras u, g y o señalan propietario, grupo y demás; los operadores + y - añaden o retiran capacidades, mientras = define el conjunto del bloque indicado. Por ejemplo, g+r expresa que el grupo recibe lectura, y o-rw retira lectura y escritura a las demás identidades. Antes de ejecutar una modificación, calcula también el modo final: una orden incremental puede ser correcta sobre un estado y demasiado permisiva sobre otro. En una revisión reproducible se registra el estado anterior, la necesidad, el cambio propuesto y el resultado, en vez de confiar en que el nombre del comando explique por sí solo la intención.
Ejercicio mental transferible. Imagina un archivo que hoy sólo puede leer y modificar su propietario. Se incorpora un grupo de respaldo que necesita leerlo, no escribirlo, y ninguna otra identidad debe obtener acceso. Resuelve sin saltar al número: el bloque del propietario permanece con lectura y escritura; el bloque del grupo gana únicamente lectura; el último bloque permanece vacío. Después convierte cada bloque con cuatro, dos y uno, o escríbelo con letras. Este razonamiento prepara mejor que copiar un modo conocido, porque sigue funcionando si mañana la necesidad cambia a travesía de una carpeta, ejecución de una herramienta o escritura en un directorio de datos.
Permisos iniciales y máscara. Muchos archivos nacen a partir de un modo solicitado por el programa y una máscara de creación que retira capacidades. La máscara no debe tratarse como la política completa: no corrige propiedad equivocada, listas de control adicionales ni archivos existentes. Sirve para que los nuevos objetos no nazcan más abiertos de lo previsto. Si una aplicación crea configuraciones privadas con acceso amplio, revisa tanto su identidad y directorio de trabajo como la política de creación. Cambiar manualmente un archivo actual sin arreglar la causa deja el mismo defecto listo para reaparecer en la siguiente generación o despliegue.
Capas que modifican el resultado. Los bits tradicionales no son siempre toda la historia. Una lista de control de acceso puede conceder capacidades a una identidad adicional, y su máscara puede limitar lo que parece concedido. Un sistema de archivos montado como sólo lectura puede impedir cambios aunque aparezca w. Políticas de aislamiento del servicio también pueden negar una ruta. El enfoque defensivo es observar antes de ampliar: examina el modo y la propiedad con una consulta larga, revisa metadatos detallados y, si el resultado no cuadra, busca controles adicionales. Un signo junto al modo suele advertir que existe más información. No borres esas capas sólo para hacer coincidir una expectativa.
Cambios seguros. Antes de modificar, confirma la ruta absoluta, captura propietario, grupo y modo, y entiende cómo consume el recurso el servicio. Haz un cambio pequeño, verifica con la cuenta real y observa tanto la función legítima como la ausencia de acceso para quien no lo necesita. Evita cambios recursivos sobre árboles grandes sin inventario: directorios y archivos interpretan x de manera distinta, y una orden uniforme puede volver ejecutables datos que nunca debieron serlo. Si hay automatización de despliegue, corrige allí la fuente del modo; de otro modo el siguiente despliegue puede revertir la mejora o reabrir el acceso.
Cómo decidir ante los retos. Para un archivo sensible, compara primero quién puede escribir: la capacidad universal de modificación suele ser la señal más grave. Para una configuración consumida por un servicio, separa propiedad administrativa de lectura operacional. Para un fallo dentro de una ruta, recuerda que conocer el nombre no sustituye la travesía de cada directorio. Y para obtener un modo final, conserva lo ya necesario, agrega sólo la capacidad solicitada al bloque correcto y deja intactos los demás. Esa secuencia convierte una cadena de letras o dígitos en una decisión de seguridad explicable.
Práctica de revisión. Toma tres objetos ficticios: una clave privada que sólo consume su propietario, una configuración administrada por operaciones y leída por un servicio, y un directorio donde un grupo deposita respaldos. Para cada uno escribe sujetos, operaciones y bloques antes de proponer bits. Luego intenta refutar tu propuesta: ¿alguien puede modificar lo que sólo debía leer?, ¿falta travesía en la ruta?, ¿un grupo compartido añade procesos no considerados?, ¿la creación de objetos nuevos conserva la política? Este ejercicio muestra que un mismo modo no es «seguro» para todos los recursos. La seguridad aparece al hacer coincidir capacidad, objeto e identidad, y al comprobar que la automatización mantenga esa coincidencia.
Lista de cierre. Puedes considerar bien razonado un permiso cuando sabes qué identidad se evalúa, qué bloque le corresponde, qué significa cada bit para ese tipo de objeto, qué necesidad justifica cada capacidad y cómo comprobarás el resultado sin usar una cuenta más privilegiada. Si la explicación es solamente «así funciona», falta el vínculo con la tarea. Si la solución concede acceso a identidades no nombradas, excede el alcance. Y si el cambio resuelve la lectura pero permite modificar una configuración sensible, cambió un fallo visible por un riesgo más difícil de detectar.