24 de mayo de 2007

17. Protecciones en Unix (permisos)

En Unix la seguridad de los diferentes objetos del sistema vienen determinado por usuario y el grupo. Internamente, estas entidades el sistemas las representa a través de dos números, el uid - user id, para el usuario - y el gid - group id, para el grupo -, que representa a un conjunto de usuarios. Cade usuario pertenece a un grupo primario y puede pertenecer a varios grupos secundarios.

Esta información está almacenada en los sistemas Unix más tradicionales en los ficheros /etc/passwd y /etc/group. En los Unix más modernos, no se accede a ellos directamente, sino que existe todo una serie de módulos - conocidos como PAM - que permiten obtener la información necesaria de otras fuentes como pueden ser NIS, LDAP u otro sistema de almacenamiento.

Los permisos que pueden existen sobre los objectos del sistema de ficheros son:

· lectura (r,Read). Permiso de lectura.

· escritura (w,Write(. Permiso de escritura.

· ejecucion (x,eXecute/search). Permiso de ejecución. Cuando se aplica a directorios, sirve para que pueda buscarse un fichero en los mismos.

· setuid (setuid). Un fichero con este permiso puesto, cuando lo ejecuta cualquier usuario, en vez de ejecutarse con dicho permiso, lo hace con el del propietario del fichero.

· setuid (setgid). Igual que setuid, pero para los grupos.

· sticky bit (t). Herencia de los antiguos sistemas Unix. Aplicado a un fichero, hacía que los procesos que arrancaran así, no se fueran al swap. Aplicado a un directorio, hace que los ficheros que existan dentro de un directorio, puedan borrarlos sólo el root o el propietario - frente al caso normal, donde cualquiera con permisos de escritura pueda hacerlo -

Cuando un usuario , user, que pertenece a los grupos groups intenta acceder a un objeto dentro del sistema de fichero, cuyo propietario es fuser y el grupo es fgroup

1. usuario. Si user es igual que fuser se comprueba los permisos asociados al propietario.

2. grupo. Si user pertenece al grupo fgroup. En este caso se comprueban los permisos asociados al grupo.

3. otros. Si user no cumple con las condiciones anteriores se miranlos permisos asociados a otros.

Obteniendo información de permisos

Para los permisos de un fichero basta con usar la opción -l del ls:

ls -l /etc/passwd


Cambiando permisos: chmod

Los permisos se cambian con la ayuda de la orden chmod. La sintaxis de esta orden es:

chmod [opciones] permisos fichero(s)

Las opciones más habituales son:

  • -R procesa los directorios de manera recursiva.
  • -f suprime la mayoría de los mensajes de error.

Los permisos pueden expresarse de dos maneras:

1. Notación simbólica:

[augo][+-=][rwx][ts]

Los permisos corresponden con:

  • u usuario, g grupo, o otros y a todos
  • + Añade el permiso si no existe,- quita el permiso si existe y = fuerza exactamente ese permiso.
  • r permiso de lectura, w permiso de escrituta y x permiso de ejecución / búsqueda.
  • t sticky bit y s setuid o setgid, en función de como vaya combinado.

2. Notación octal. Estos números se suman para poner los permisos adecuados.