Sondeo

Escritorios alternativos Linux

¿Cuál prefieres?

  •  Xfce
  •  LXDE
  •  Razor-qt
  •  Enlightenment 0.17

Resultados
Other polls | 2,825 voters | 2 comentarios
· Próximas fechas Curso Global de Servidores con CentOS 6.
· Taller de programación de Python.
· Curso de programación de PHP.
· Prueba ALDOS 1.4.5. Nuestro sistema operativo para escritorio.

Cómo Configurar las Listas de Control de Acceso - ACL's

Cómo configurar las Listas de Control de Acceso - ACL's.

Autor: John Jairo Toro A.
Correo electrónico: JohnToro en gmail punto com
Sitio de Red:
Jabber ID: johntoro@jabber.org

Creative Commons Reconocimiento-NoComercial-CompartirIgual 2.1

© 1999-2007 John Jairo Toro A. Usted es libre de copiar, distribuir y comunicar públicamente la obra y hacer obras derivadas bajo las condiciones siguientes: a) Debe reconocer y citar al autor original. b) No puede utilizar esta obra para fines comerciales (incluyendo su publicación, a través de cualquier medio, por entidades con fines de lucro). c) Si altera o transforma esta obra o genera una obra derivada, sólo puede distribuir la obra generada bajo una licencia idéntica a ésta. Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la licencia de esta obra. Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor. Los derechos derivados de usos legí­timos u otras limitaciones no se ven afectados por lo anterior. Licencia completa en castellano. La información contenida en este documento y los derivados de éste se proporcionan tal cual son y los autores no asumirán responsabilidad alguna si el usuario o lector hace mal uso de éstos.

Introducción.

Acerca de ACL.

ACL (Access Control List) o Listas de Control de Acceso, corresponden a un conjunto de permisos complementarios a los tradicionales UGO (Usuario/Propietario, Grupo, Otros) dentro del sistema de archivos ext2, ext3, nfs. Básicamente es un parche (complemento) al núcleo (kernel) del sistema operativo que esta disponible desde la versión 2.4 (la versión 2.6 del kernel incluye soporte para: jfs, xfs).

Las ACL cumplen con el estándar POSIX (Portable Operating System for UnIX).

En algunos casos, la asignación de permisos mediante el modelo UGO puede quedarse corto, cuando, por ejemplo, queremos dar permisos a más de un usuario o grupo en un directorio o archivo, cosa que es muy común en ambientes corporativos.

Equipamiento lógico necesario.

Si utiliza CentOS 4 o White Box Enterprise Linux 4, estos ya incluyen el soporte para ACL's.

Los paquetes básicos son: acl, libacl

Los parches se pueden descargar en: http://acl.bestbits.at/download.html

Procedimientos.

Habilitar las ACL's en el volumen deseado

En el archivo /etc/fstab habilitamos el empleo de las ACL's, simplemente agregando el parámetro: acl

Ejemplo:

# /etc/fstab
# This file is edited by fstab-sync - see 'man fstab-sync' for details
/dev/VolGroupJT/LogVol0
LABEL=/boot
none
none
none
none
/dev/VolGroupJT/LogVol01
/dev/hdd4
/dev/hdc
/dev/fd0
/
/boot
/dev/pts
/dev/shm
/proc
/sys
swap
/media/zip
/media/cdrom
/media/floppy
ext3
ext3
devpts
tmpfs
proc
sysfs
swap
auto
auto
auto
defaults,acl
defaults
gid=5,mode=620
defaults
defaults
defaults
defaults
pamconsole,exec,noauto,fscontext=system_u:object_r:removable_t,managed
pamconsole,exec,noauto,fscontext=system_u:object_r:removable_t,managed
pamconsole,exec,noauto,fscontext=system_u:object_r:removable_t,managed
1 1
1 2
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0

Se debe debe desmontar (umount) y volver a montar (mount) el dispositivo o reiniciar el servidor (en el caso del directorio raíz - /)

Asignar permisos adicionales a los directorios.

Para asignación de permisos se emplea el comando: setfacl (set file access control list), el cual permite:

  • Asignar permisos básicos a: Usuario, Grupo, Otros (UGO). Equivalente a lo que hace el comando: chmod.

  • Asignar permisos por defecto (Para nuevos directorios/archivos).

  • Asignar permisos máximos (Mascaras).

  • Asignar permisos adicionales a grupos y usuarios.

 Su sintaxis básica es:

setfacl [-bkndRLPvh] [ acl_spec] [ acl_file] file ...
setfacl --restore=file

Los parámetros (opciones) básicos son:

Opción

Descripción

-R

Cambia permisos a archivos y directorios de forma descendente a partir de un directorio dado.

-d

Asigna los permisos por defecto.

-b

Borra todos los permisos adicionales, conservando únicamente los básicos de UGO.

-k

Borra los permisos por defecto.

-m

Modifica los permisos agregando/cambiando por los nuevos valores.

Ejemplos:

setfacl -b -k -R "/dir/sub dir"
Borra recursivamente (-R) todos los permisos adicionales (-b) y por defecto (-d), a partir de: "/dir/sub dir"

setfacl -R -d -m group:grupo1:rwx "/dir"
Asigna/modifica (-m) recursivamente (-R) permisos por defecto (-d) al grupo: "grupo1", como de: lectura, escritura, exploración/ejecución (rwx) a partir de: "/dir"

setfacl -m group:grupo2:rx "/dir/sub dir"
Asigna/modifica (-m) permisos de: lectura, exploración (rx) al grupo: "grupo2", en el directorio: "/dir/sub dir"

setfacl -m group::rx "/dir/sub dir"
Asigna/modifica (-m) permisos de: lectura, exploración (rx) al grupo base, en el directorio: "/dir/sub dir". Similar a: chmod g+rx-w "/dir/sub dir"

setfacl -m user:usuario1:rwx "/dir/sub dir/script.sh"
Asigna/modifica (-m) permisos de: lectura, escritura y ejecución (rwx) al usuario: "usuario1", para el archivo: "/dir/sub dir/script.sh"

Conocer permisos adicionales a los directorios.

Para conocer los permisos asignados a un directorio/archivo, se emplea el comando: getfacl (get file access control list).
Su sintaxis básica es:

getfacl [-dRLPvh] file ...
getfacl [-dRLPvh] -

Los parámetros (opciones) básicos son:

Opción

Descripción

-R

Cambia permisos a archivos y directorios de forma descendente a partir de un directorio dado.

-d

Muestra los permisos por defecto.


El resultado de su ejecución incluye valores como estos:

[user@servidor ]# getfacl dir
# file: dir
# owner: usuario1
# group: grupo1
user::rwx
user:usuario2:rwx
group::rwx
group:grupo2:r-x
mask:r-x
other:r-x
default:user::rwx
default:user:usuario2:rwx
default:group::r-x
default:mask:r-x
default:other:---

(Comando)
Nombre del Archivo/Directorio
Propietario
Grupo
Permisos a Usuario (Propietario)
Permisos adicional asignado al Usuario: "usuario2"
Permisos a Grupo
Permisos adicional asignado al Grupo: "grupo2"
Mascara (Permisos máximos)
Permisos a Otros
Permisos por defecto a Usuario (Propietario)
Permisos por defecto al Usuario: "usuario2"
Permisos por defecto a Grupo
Mascara para permisos por defecto
Permisos por defecto a Otros



Ejemplo Practico.

La empresa X tiene centralizada la información en un servidor SAMBA corriendo bajo CentOS 4 (ext3), la cual es accesible desde la red interna tanto por estaciones Linux (smb://servidor/Empresa) como Windows (servidorEmpresa).

La información esta almacenada dentro del directorio: /share/Empresa y esta organizada en directorios que corresponden a sus diferentes Departamentos (D. Administrativo, D. Comercial, etc.)

Arbol

Existe un grupo general (empresa) al que pertenecen todos los usuarios y grupos para cada uno de los departamentos (d_administrativo, d_comercial, etc.) y estos tienen asignados los diferentes usuarios (Pedro, Juan, Maria, etc.) según su labor, al departamento correspondiente.

Aplicaremos una política de seguridad sencilla:

  1. Veamos los permisos actuales.

    [ ]# getfacl -R /share/Empresa
    getfacl: Removing leading '/' from absolute path names
    # file: share/Empresa
    # owner: root
    # group: root
    user::r-x
    group::-wx
    other::r-x
    # file: share/Empresa/D.?40Comercial
    # owner: root
    # group: root
    user::rwx
    group::r-x
    other::r-x
    # file: share/Empresa/D.?40Contable
    # owner: root
    # group: root
    user::rwx
    group::r-x
    other::r-x
    # file: share/Empresa/D.?40Sistemas
    # owner: root
    # group: root
    user::rwx
    group::r-x
    other::r-x
    # file: share/Empresa/D.?40Administrativo
    # owner: root
    # group: root
    user::rwx
    group::r-x
    other::r-x
    # file: share/Empresa/D.?40Administrativo/Correspondencia
    # owner: root
    # group: root
    user::rwx
    group::r-x
    other::r-x
    # file: share/Empresa/D.?40Administrativo/Correspondencia/2006
    # owner: root
    # group: root
    user::rwx
    group::r-x
    other::r-x
    # file: share/Empresa/D.?40Administrativo/Correspondencia/2007
    # owner: root
    # group: root
    user::rwx
    group::r-x
    other::r-x
    # file: share/Empresa/D.?40Compras
    # owner: root
    # group: root
    user::rwx
    group::r-x
    other::r-x
    # file: share/Empresa/D.?40Producci303263n
    # owner: root
    # group: root
    user::rwx
    group::r-x
    other::r-x
  2. Apliquemos las política de seguridad

    1. Todo los empleados deben tener acceso a la carpeta/directorio de la Empresa (/share/Empresa), pero no pueden crear directorios/archivos adicionales.

      [ ]# setfacl -m -d group:empresa:rx /share/Empresa
      [ ]# setfacl -m group:empresa:rx /share/Empresa
      NOTA: Se asignan permisos adicionales y por defecto (-d), para garantizar que los nuevos directorios/documentos, hereden los permisos existentes (se conserve la política).
    2. Cada usuarios debe tener acceso al departamento en el cual labora.

      [ ]# setfacl -R -m -d group:d_administrativo:rwx "/share/Empresa/D. Administrativo"
      [ ]# setfacl -R -m group:d_administrativo:rwx "/share/Empresa/D. Administrativo"
      [ ]# setfacl -R -m -d group:d_comercial:rwx "/share/Empresa/D. Comercial"
      [ ]# setfacl -R -m group:d_comercial:rwx "/share/Empresa/D. Comercial"
      [ ]# setfacl -R -m -d group:d_compras:rwx "/share/Empresa/D. Compras"
      [ ]# setfacl -R -m group:d_compras:rwx "/share/Empresa/D. Compras"
      [ ]# setfacl -R -m -d group:d_contable:rwx "/share/Empresa/D. Contable"
      [ ]# setfacl -R -m group:d_contable:rwx "/share/Empresa/D. Contable"
      [ ]# setfacl -R -m -d group:d_produccion:rwx "/share/Empresa/D. Producción"
      [ ]# setfacl -R -m group:d_produccion:rwx "/share/Empresa/D. Producción"
      [ ]# setfacl -R -m -d group:d_sistemas:rwx "/share/Empresa/D. Sistemas"
      [ ]# setfacl -R -m group:d_sistemas:rwx "/share/Empresa/D. Sistemas"
      NOTA: Por lo general se deben asignar los permisos a grupos de usuarios, así, si hay rotación del personal no se ven afectadas las políticas de seguridad.
    3. Todos los empleados tienen acceso al Directorio de "Correspondencia" ubicado en el "D. Administrativo" (/share/Empresa/D. Administrativo/Correspondencia), podrán consultar la correspondencia de otros años (solo lectura), pero solo podrán guardar correspondencia en el directorio correspondiente al año actual (2007).

      [ ]# setfacl -m group:empresa:rx "/share/Empresa/D. Administrativo"
      [ ]# setfacl -R -m -d group:empresa:rx "/share/Empresa/D. Administrativo/Correspondencia"
      [ ]# setfacl -R -m group:empresa:rx "/share/Empresa/D. Administrativo/Correspondencia"
      NOTA: Se permite el acceso de todos los usuarios a: “D. Administrativo” y dentro de este a: “Correspondencia”
      [ ]# setfacl -R -m mask::rx "/share/Empresa/D. Administrativo/Correspondencia"
      NOTA: Se aplica la mascara (permisos máximos) de solo lectura a: “Correspondencia”
      [ ]# setfacl -R -m -d group:empresa:rwx "/share/Empresa/D. Administrativo/Correspondencia/2007"
      [ ]# setfacl -R -m group:empresa:rwx "/share/Empresa/D. Administrativo/Correspondencia/2007"
      [ ]# setfacl -R -m mask::rwx "/share/Empresa/D. Administrativo/Correspondencia/2007"
      NOTA: Se permite el acceso de Lectura/Escritura al año actual: “2007” y se cambia la mascara para este.
    4. "Juan" como Gerente desea ver toda la información almacenada.

      [ ]# setfacl -R -m -d user:juan:rx "/share/Empresa"
      [ ]# setfacl -R -m user:juan:rx "/share/Empresa"
      NOTA: Como se menciono inicialmente, los permisos se deben aplicar a nivel de grupo, en este caso se debería emplear un grupo “gerencia”, así, si hay un cambio de gerente, basta con asignar el nuevo gerente al grupo “gerencia” sin alterar las políticas de seguridad.
    5. Las personas del "D. Sistemas", esta construyendo una base de datos con la información de clientes (Clientes.xls) existente en el "D. Comercial".

      [ ]# setfacl -m group:d_sistemas:rx "/share/Empresa/D. Comercial"
      NOTA: Se permite el acceso del grupo: “d_sistemas” a: “D. Comercial”
      [ ]# setfacl -m group:d_sistemas:rwx "/share/Empresa/D. Comercial/Clientes.xls"
      NOTA: Por facilidad de administración, los permisos se deben asignar a nivel de directorios, no de archivos individuales.
  3. Veamos el Resultado.

[ ]# getfacl -R /share/Empresa
getfacl: Removing leading '/' from absolute path names
# file: share/Empresa
# owner: root
# group: root
user::rwx
user:juan:r-x
group::rwx
group:empresa:r-x
mask::rwx
other::r-x
default:user::rwx
default:user:juan:r-x
default:group::rwx
default:group:empresa:r-x
default:mask::rwx
default:other::r-x

# file: share/Empresa/D.?40Comercial
# owner: root
# group: root
user::rwx
user:juan:r-x
group::rwx
group:d_comercial:rwx
group:d_sistemas:r-x
mask::rwx
other::r-x
default:user::rwx
default:user:juan:r-x
default:group::rwx
default:group:d_comercial:rwx
default:mask::rwx
default:other::r-x

# file: share/Empresa/D.?40Comercial/Clientes.xls
# owner: root
# group: root
user::rwx
user:juan:r-x
group::rwx
group:d_comercial:rwx
group:d_sistemas:rwx
mask::rwx
other::---

# file: share/Empresa/D.?40Contable
# owner: root
# group: root
user::rwx
user:juan:r-x
group::rwx
group:d_contable:rwx
mask::rwx
other::r-x
default:user::rwx
default:user:juan:r-x
default:group::rwx
default:group:d_contable:rwx
default:mask::rwx
default:other::r-x

# file: share/Empresa/D.?40Sistemas
# owner: root
# group: root
user::rwx
user:juan:r-x
group::rwx
group:d_sistemas:rwx
mask::rwx
other::r-x
default:user::rwx
default:user:juan:r-x
default:group::rwx
default:group:d_sistemas:rwx
default:mask::rwx
default:other::r-x

# file: share/Empresa/D.?40Administrativo
# owner: root
# group: root
user::rwx
user:juan:r-x
group::rwx
group:empresa:r-x
group:d_administrativo:rwx
mask::rwx
other::r-x
default:user::rwx
default:user:juan:r-x
default:group::rwx
default:group:d_administrativo:rwx
default:mask::rwx
default:other::r-x

# file: share/Empresa/D.?40Administrativo/Correspondencia
# owner: root
# group: root
user::rwx
user:juan:r-x
group::rwx
group:empresa:r-x
group:d_administrativo:rwx
mask::rwx
other::r-x
default:user::rwx
default:user:juan:r-x
default:group::rwx
default:group:empresa:r-x
default:group:d_administrativo:rwx
default:mask::rwx
default:other::r-x

# file: share/Empresa/D.?40Administrativo/Correspondencia/2006
# owner: root
# group: root
user::rwx
user:juan:r-x
group::rwx
group:empresa:r-x
group:d_administrativo:rwx
mask::rwx
other::r-x
default:user::rwx
default:user:juan:r-x
default:group::rwx
default:group:empresa:r-x
default:group:d_administrativo:rwx
default:mask::rwx
default:other::r-x

# file: share/Empresa/D.?40Administrativo/Correspondencia/2007
# owner: root
# group: root
user::rwx
user:juan:r-x
group::rwx
group:empresa:rwx
group:d_administrativo:rwx
mask::rwx
other::r-x
default:user::rwx
default:user:juan:r-x
default:group::rwx
default:group:empresa:rwx
default:group:d_administrativo:rwx
default:mask::rwx
default:other::r-x

# file: share/Empresa/D.?40Compras
# owner: root
# group: root
user::rwx
user:juan:r-x
group::rwx
group:d_compras:rwx
mask::rwx
other::r-x
default:user::rwx
default:user:juan:r-x
default:group::rwx
default:group:d_compras:rwx
default:mask::rwx
default:other::r-x

# file: share/Empresa/D.?40Producci303263n
# owner: root
# group: root
user::rwx
user:juan:r-x
group::rwx
group:d_produccion:rwx
mask::rwx
other::r-x
default:user::rwx
default:user:juan:r-x
default:group::rwx
default:group:d_produccion:rwx
default:mask::rwx
default:other::r-x



Como vimos en el ejemplo, en muchos casos debemos asignar los permisos por defecto iguales a los permisos efectivos, para que cada nuevo directorio/archivo asuma estos permisos. por lo que para facilitar un poco las cosas he creado este script: setACL.sh:

# Script: setACL.sh
# Autor: JohnToro
# Desc.: Asigna permisos ACL's por defecto y efectivos
if [ $# -ge 4 ]
then
setfacl $1 -d $2 $3 "$4"
setfacl $1 $2 $3 "$4"
else
if [ $# -ge 3 ]
then
setfacl -d $1 $2 "$3"
setfacl $1 $2 "$3"
else
echo "Parametros insuficientes."
echo "Uso: setACL -m [-R] <derecho> <directorio>"
fi
fi

Y para facilitar aun mas las cosas se puede crear otro script, donde registramos todos los permisos asignados (política de seguridad), el cual he llamado: setEmpACL.sh.

# Script: setEmpACL.sh
# Autor: JohnToro
# Desc.: Asigna los ACL's al directorio de datos de la Empresa
# Nota: -c = Limpia la definicion Previa
if [ $# -ge 1 ]
then
if [ $1 = -c ]
then
echo Borrando definicion previa...
setfacl -b -k -R "/share/Empresa"
else
echo "Parametros incorrectos."
echo "Modo de Empleo: setEmpACL [-c]"
echo " -c: Borra los ACL's definidos previamente"
fi
fi
echo Aplicando politicas de Seguridad
echo

# Asigna derechos Generales
echo Permisos Generales Empresa...
setfacl -R -m user::rwx "/share/Empresa"
setfacl -R -m group::rwx "/share/Empresa"
./setACL.sh -m group:empresa:rx "/share/Empresa"
./setACL.sh -R -m user:juan:rx "/share/Empresa"

# Asigna derechos a cada Departamento
echo D. Administrativo...
./setACL.sh -R -m group:d_administrativo:rwx "/share/Empresa/D. Administrativo"
setfacl -R -m mask::rx "/share/Empresa/D. Administrativo/Correspondencia"

./setACL.sh -m group:empresa:rx "/share/Empresa/D. Administrativo"
./setACL.sh -R -m group:empresa:rx "/share/Empresa/D. Administrativo/Correspondencia"
./setACL.sh -R -m group:empresa:rwx "/share/Empresa/D. Administrativo/Correspondencia/2007"
setfacl -R -m mask::rwx "/share/Empresa/D. Administrativo/Correspondencia/2007"

echo D. Comercial...
./setACL.sh -R -m group:d_comercial:rwx "/share/Empresa/D. Comercial"

./setACL.sh -m group:d_sistemas:rx "/share/Empresa/D. Comercial"
./setACL.sh -m group:d_sistemas:rx "/share/Empresa/D. Comercial/Clientes.xls"

echo D. Compras...
./setACL.sh -R -m group:d_compras:rwx "/share/Empresa/D. Compras"

echo D. Contable...
./setACL.sh -R -m group:d_contable:rwx "/share/Empresa/D. Contable"

echo D. Produccion...
./setACL.sh -R -m group:d_produccion:rwx "/share/Empresa/D. Producción"

echo D. Sistemas...
./setACL.sh -R -m group:d_sistemas:rwx "/share/Empresa/D. Sistemas"

# echo Otros... (Ejemplos)
# ./setACL.sh -R -m group:empresa:rx "/var/www/crm/img"
# ./setACL.sh -R -m group:d_produccion:rwx "/var/www/intranet/produccion"
# ./setACL.sh -R -m group:d_administrativo:rwx "/var/www/intranet/administrativo"



Última Edición: 19/04/2007, 07:55|Hits: 35,972 Ver la versión para imprimir