Sistema de Permisos

Este es el segundo de una serie de documentos desarrollados por mí, PinkX, como parte de un curso introductorio básico sobre la administración de un sistema Linux común y algunos de los servicios más utilizados. Ante cualquier duda, consulta, reclamo, corrección sobre este documento no duden en contactarme.

Introducción

En un ambiente seguro multiusuario como Linux, los permisos y derechos de acceso a los archivos están definidos. Sin embargo, estos derechos de acceso pueden generar problemas para nuevos usuarios quienes están acostumbrados al estilo de acceder cualquier cosa de DOS y Windows.

El sistema de permisos de Linux (y UNIX en general) se basa en un esquema de usuarios/grupos, a partir de quienes se les asignan distintos derechos de accesos individualmente a los archivos y directorios, quienes a su vez tienen un propietario.

Linux es un ambiente multiusuario propiamente tal; por lo tanto la seguridad de los datos de usuarios y del sistema es MUY importante. El permiso debiera darse solo a los usuarios que necesitan acceso a los datos. Linux, como un Sistema Operativo orientado esencialmente a servidor, integra una buena y eficiente seguridad en sus archivos.

Usuarios y Grupos

Los usuarios existentes en el sistema son definidos en un archivo especial, llamado archivo de password, ubicado en el directorio /etc y cuyo nombre es passwd. Por otro lado, los grupos son una manera de jerarquizar y generalizar conjuntos de usuarios con tareas comunes. Un usuario existente en el sistema no refleja necesariamente a un usuario real del mismo, es decir, muchos de los usuarios existentes son cuentas administrativas usadas por procesos internos y diversos servicios.

El archivo de usuario, /etc/passwd, es un archivo de texto plano, donde cada línea es una entrada distinta cuyos campos se separan con el caracter :.

El primero de estos campos representa el nombre de usuario, el segundo el password de forma encriptada, es decir, codificado de una manera distinta a su forma original, a través de un proceso irreversible; de esta manera los passwords de los usuarios no son nunca expuestos directamente. Si en el campo de password aparece simplemente un caracter x o * propiamente tal, entonces el sistema utiliza passwords shadow, una medida que extrema la seguridad al almacenar los passwords en otro archivo, accesible solamente por el superusuario (root) y los programas de autenticación propios del sistema.

Este archivo por lo general recibe el nombre de shadow y se encuentra en el mismo directorio. A continuacion examinaremos con mayor exactitud la estructura de estos dos archivos:

/etc/passwd (línea de ejemplo):

root:x:0:0:Administrador del Sistema:/root:/bin/bash
 ^   ^ ^ ^               ^             ^       ^
 |   | | |               |             |       |
 |   | | |               |             |       |-  Shell por defecto del
 |   | | |               |             |           usuario
 |   | | |               |             |
 |   | | |               |             |- Directorio home del usuario
 |   | | |               |
 |   | | |               |- Campo GECOS, es opcional y utilizado solamente
 |   | | |                  con fines informativos. GECOS significa 'General
 |   | | |                  Electric Comprehensive Operating System'
 |   | | |
 |   | | |- GID, identificador numerico  unico del grupo primario del usuario
 |   | | 
 |   | |- UID, identificador numerico unico del usuario
 |   |
 |   |- Password encriptado del usuario
 |
 |- Nombre de usuario

/etc/shadow (línea de ejemplo):

root:$1$zjxtZLtl$UHNQhadJEfRdsSL386N1HO.:11181:0:::::
 ^                 ^                      ^    ^
 |                 |                      |    |- Dias antes de que el
 |                 |                      |       password pueda ser cambiado
 |                 |                      |
 |                 |                      |- Dias desde el 1o de Enero de 1970
 |                 |                         en que el password fue cambiado
 |                 |
 |                 |- Password encriptado
 |
 |- Nombre de usuario

Los campos adicionales son opcionales, generalmente dejados en blanco y representan los días antes de que el password expire en que el usuario es advertido; días después de que el password ha expirado en que la cuenta es deshabilitada; días desde el 1 de Enero de 1970 en que la cuenta fue deshabilitada y un campo reservado, respectivamente.

Los grupos, por otra parte, se definen en un archivo llamado group, también ubicado en el directorio /etc. Su composición se detalla a continuación:

/etc/group (línea de ejemplo):

daemon::2:root,bin,daemon
  ^   ^ ^       ^
  |   | |       |- Lista de usuarios pertenecientes al grupo, separados por
  |   | |          comas
  |   | |
  |   | |- ID numerico unico del grupo
  |   |
  |   |- Password encriptado del grupo (generalmente no se utiliza)
  |
  |- Nombre del grupo

A pesar de que todos estos archivos se manipulan a traves de comandos especiales (passwd, chfn, chgrp, adduser, addgroup, etc.), al ser de texto plano pueden ser manejados con un simple editor de texto.

Tanto en el archivo de password como de grupos debe existir por lo menos una entrada esencial para el funcionamiento del sistema: la del usuario root. Este es el superusuario, el administrador que tiene privilegios totales y absolutos sobre cualquier archivo, proceso, programa, etc. del sistema.

Permisos de Archivos

Los permisos de archivos son definidos para usuarios, grupos y otros. Usuario sería el nombre bajo el cual se ingresa al sistema (ej. root). Mas allá, los usuarios pueden ser organizados dentro de grupos para una mejor administración y control. Cada usuario pertenece por lo menos a un grupo por defecto. Otros incluye a cualquiera que las categorias anteriores excluyen.

A continuación se muestra un ejemplo de la salida del comando ls -l:

drwxr-x---   2 jperez   linux        4096 Dec 28 04:09 tmp
-rw-r--r--   1 jperez   linux         9699 Dec 21 02:32 lala
-rwxr-xr-x   1 jperez   linux         3455 Sep  1 04:12 archivo

La información relevante en la primera columna es el tipo de archivo seguido por los permisos del mismo. En la segunda columna aparece la cantidad de subdirectorios existentes bajo el indicado (1 si es archivo). La tercera y cuarta columnas muestran el propietario del archivo y el grupo al cual el archivo pertenece, respectivamente. Los contenidos de las demás columnas son obvios.

Para nuestro ejemplo la primera entrada es tmp. El primer caracter en la primera columna es d, lo que significa que tmp es un directorio. Las otras entradas son archivos simples, tal como lo indica el símbolo -.

Ahora analizaremos en mayor profunidad la primera columna:

d	    rwx    r-x   ---
^            ^      ^     ^
|            |      |     |- Otros
|            |      |
|            |      |- Grupo
|            |
|            |- Usuario propietario del archivo
|
|- Tipo de archivo

Seguido del tipo de archivo, los próximos nueve caracteres definen los permisos del mismo. Estos permisos están dados en grupos de a tres cada uno. Los primeros 3 caracteres son los permisos para el el usuario propietario del archivo o directorio. Los próximos tres son permisos para el grupo al cual pertenece el archivo, y los últimos tres definen los permisos de acceso para todos los demás, es decir, los usuarios que no son el propietario ni pertenecen al grupo definido.

A su vez, existen tres posibles atributos para los permisos de archivos:

r - Permiso de lectura solamente. Indica si el archivo puede ser leído; en caso de ser un directorio indica que sus contenidos pueden ser listados.

w - Permiso de escritura. Indica si el archivo puede ser escrito o modificado. Para un directorio define si es posible hacer cambios a los contenidos del directorio. Si no existe el permiso de escritura, entonces no será posible borrar, renombrar o crear un archivo.

x - Permiso de ejecución. Define si el archivo puede ser ejecutado. En caso de tratarse de un directorio, este atributo decide si es que el usuario tiene el permiso para entrar al mismo, buscar dentro o ejecutar programas desde ese directorio.

Tomemos como ejemplo los permisos de tmp, que son drwxr-x---. El propietario de este directorio es el usuario jperez y el grupo al cual pertenece el directorio es linux. Esta serie de permisos permite acceso completo de lectura, escritura y ejecución al directoro al usuario jperez - por lo que jperez tiene accesoo completo al directorio. Los permisos del grupo son r-x: no hay permiso de escritura dado por lo que los miembros del grupo linux pueden entrar y listar los contenidos del directorio, no pueden crear nuevos archivos o subdirectorios dentro. Además del propietario y del grupo, nadie más tiene ningún tipo de acceso al directorio porque sus atributos para otros estan vacíos (---).

Para el archivo lala los permisos son -rw-r--r--. Aplicando lo anterior, podemos ver que el propietario del archivo (jperez) puede leer y modificar el archivo. Los miembros del grupo linux pueden leer el archivo pero no modificarlo; al igual que todos los demás.

Modificacion de Atributos

Para cambiar los permisos de un archivo o directorio, se utiliza el programa chmod (CHange MODe, cambiar modo). Es necesario ser el usuario propietario del archivo, o root, para cambiar sus permisos. La sintaxis del comando chmod es bastante simple. Los permisos pueden ser definidos para los usuarios propietarios (u), grupos (g) y 'otros' (o).

Un ejemplo de chmod se muestra a continuacion:

chmod u-x,g+w,o+rw archivo

Este comando elimina el permiso de ejecucion para el usuario, coloca el bit de acceso a escritura para el grupo y le da a todos los demás acceso de lectura y escritura. Los permisos para este archivo antes de ejecutar el comando eran -rwxr-xr--; despues del comando son -rw-rwxrw-.

Primero se escoge utilizar u, g u o seguido por un signo + para agregar un permiso, - para quitarlo y = para limpiar cualquier permiso previamente asignado y solamente dejar lo que sea especificado. Tambien es posible utilizar a para dar permiso a todos los usuarios.

Utilicemos los permisos de -rwxrwxrwx para archivo y trabajemos en ellos:

chmod g-wx archivo

Al hacer esto estamos quitando los permisos de escritura y ejecución para los miembros del grupo al cual pertenece el archivo archivo. Sus permisos serían ahora entonces: -rwxr--rwx.

Como vimos anteriormente, tambien es posible especificar permisos para usuarios, grupos y otros en el mismo comando, pero separados por comas.

chmod g+wx,o-rwx archivo

A los miembros del grupo se les ha dado acceso de escritura y ejecucion pero todo acceso ha sido removido para los usuarios que no son miembros de ese grupo. Los permisos del archivo son ahora entonces -rwxrwx---.

chmod a+x archivo

Le da acceso de ejecucion a todos. Los permisos ahora son -rwxrwx--x. Especificar a aqui no es esencial, simplemente podriamos haber dicho +x, a (All) se asume por defecto. Por lo tanto el comando chmod +x archivo es equivalente a lo indicado arriba.

chmod go-rx archivo

Si los mismos bits de permiso se utilizan para asignar/quitar a usuarios, grupos u otros entonces se pueden indicar juntos como se indica. Los permisos son ahora entonces -rwx-w----.

chmod ug=rwx archivo

Esto coloca los permisos del archivo en exactamente lo que se ha especificado: ahora, los premisos son -rwxrwx---.

chmod o=g archivo

Los permisos del archivo para 'otros' ahora son colocados igual a lo que los permisos para el grupo estan asignados: -rwxrwxrwx.

Existe otra manera en que se pueden especificar los permisos de archivos: los bits r, w y x tienen asignados un numero, proveniente de la notacion binaria que se utiliza para almacenarlos como bits propiamente tal:

r = 4
w = 2
x = 1

Ahora es posible utilizar numeros, que son la suma de los distintos bits de permisos. Por ejemplo, rwx seria 4+3+1 = 7. rx seria 4+1 = 5. Por lo tanto el comando chmod ahora se convierte en:

chmod xyz archivo

donde x, y y z son numeros que representan los permisos del usuario, grupo y otros, respectivamente. Cada numero es la suma de los permisos a colocar y se calculan como se indico anteriormente.

chmod 644 archivo
  6 = 4 + 2 = rw
  4 = r
  4 = r

Como podemos ver, los permisos para archivo se han colocado como -rw-r--r--. Esta manera es mas simple y rapida de asignar permisos; puede ser un poco mas tediosa al comienzo pero con la practica se logra la costumbre. A continuacion se explican los distintos permisos como una referencia:

0 - ---
1 - --x
2 - -w-
3 - -wx
4 - r--
5 - r-x
6 - rw-
7 - rwx

Modificacion de Propietario y Grupo

Ademas de los permisos del archivo, tambien es posible modificar al propietario y grupo del mismo. En este caso se utiliza el programa chown (CHange OWNer, cambiar propietario) y su sintaxis es mucho mas simple. Al igual que en el caso anterior, es necesario ser el usuario propietario o root para poder hacer esto:

chown nuevo-usuario archivo
chown novato archivo

En estos ejemplos se cambia al usuario propietario del archivo archivo por los usuarios nuevo-usuario y novato, respectivamente.

Para cambiar el grupo, se utiliza el comando chgrp (CHange GRouP, cambiar grupo); para esto es necesario ser el propietario del archivo, o ser root.

chgrp nuevo-grupo archivo

Esto coloca al grupo nuevo-grupo como el perteneciente al archivo archivo.

Tambien es posible cambiar simultaneamente el usuario propietario y el grupo de un archivo a traves del comando chown, separandolos por punto:

chown jperez.linux archivo

Lo que asigna a jperez como propietario del archivo archivo, ademas de hacer este perteneciente al grupo linux.

Una nota importante es que, algunas veces, al modificar el usuario propietario/grupo/permisos de un archivo, estos cambios no se hacen efectivos en la sesion actual, sino que al iniciar una nueva sesion.

Hosted by www.Geocities.ws

1