Permisos

y

propietarios

de los archivos

ADMINISTRACIÓN LINUX

ADMINISTRACIÓN LINUX

Seguridad de acceso
a los archivos

La seguridad en un sistema UNIX/Linux asegura que cada archivo o directorio puede ser accedido, modificado o ejecutado por ciertos usuarios, en base a dos factores:

  • El propietario del archivo
  • Los permisos del archivo

ADMINISTRACIÓN LINUX

Seguridad de acceso

ADMINISTRACIÓN LINUX

Cada archivo y directorio tiene tres tipos de propietarios:

  1. Usuario. Es el dueño del archivo. Quién crea el archivo es el dueño. El dueño pude ser cambiado (por root)
  2. Grupo. El grupo es un conjunto de usuarios. Por defecto el GID del usuario que crea el archivo se asigna como propietario.
  3. Otros. Puede ser visto como un super-grupo de todos los usuarios (que no son ni el Usuario ni el Grupo).

Propietrio del archivo

ADMINISTRACIÓN LINUX

Cada archivo y directorio tiene los tres de permisos para cada uno de los tres tipos de propietario

Propietarios y Permisos

-rwxrw-r-- 1 vagrant vagrant 3771 Nov  3 23:01 backup.sh

Tipo archivo

Permisos    r (lectura)   w (escritura)   x (ejecución)   - (sin permiso)

Contador de hard-links

Propietarios    usuario    grupo

Tamaño

Fecha modificación

Otros

archivo directorio
r cat grep vim cp  ls 
w >   >>   rm mv cp 
x ./ cd
vagrant@server:~$ ls -l 
-rwxrw-r-- 1 vagrant vagrant 3771 Nov  3 23:01 backup.sh

vagrant@server:~$ stat backup.sh
  File: backup.sh
  Size: 3771       Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d Inode: 33885       Links: 1
Access: (0764/-rwxrw-r--)  Uid: ( 1000/ vagrant)   Gid: ( 1000/ vagrant)
Access: 2021-11-03 23:01:10.716314550 +0000
Modify: 2021-11-03 23:01:10.716314550 +0000
Change: 2021-11-03 23:02:10.962421647 +0000
 Birth: -

ADMINISTRACIÓN LINUX

Administrar
permisos

ADMINISTRACIÓN LINUX

Permite modificar los permisos de un archivo.

 

Tiene dos formas de uso:

 

  1. modo: ugo  (modo simbólico)
  2. modo: numérico   (modo ocatal)

chmod

ADMINISTRACIÓN LINUX

Símbolos:    + encender,   -  apagar,    = no-modificar

 

Posicion:      u usuario,  g grupo, o otros,  a todos

 

Permisos:   

r lectura,  w escritura,  x ejecución,  X ejecución solo directorio

chmod ugo

Multiples conjuntos pueden ser indicados separados por coma

ADMINISTRACIÓN LINUX

chmod ugo

chmod +x script.sh
chmod ugo+x script.sh
chmod ugo-x script.sh
chmod g=u script.sh
chmod a=rx script.sh
chmod u+rwx,g+rx,g-w,o+r,o-wx script.sh

ADMINISTRACIÓN LINUX

chmod octal

binario r w x
0 0 0 0
1 0 0 1
2 0 1 0
3 0 1 1
4 1 0 0
5 1 0 1
6 1 1 0
7 1 1 1

ADMINISTRACIÓN LINUX

chmod octal   (tip)

binario r w x
0 0 0 0
1 0 0 1
2 0 1 0
3 0 1 1
4 1 0 0
5 1 0 1
6 1 1 0
7 1 1 1

ADMINISTRACIÓN LINUX

binario r w x
0 0 0 0
1 0 0 1
2 0 1 0
3 0 1 1
4 1 0 0
5 1 0 1
6 1 1 0
7 1 1 1

chmod octal   (tip)

ADMINISTRACIÓN LINUX

chmod octal

chmod 777 script.sh
chmod 755 script.sh
chmod 750 script.sh
chmod 644 archivo.txt
chmod 600 archivo.txt
chmod 007 secreto.dat

ADMINISTRACIÓN LINUX

Permisos especiales
de ejecución

ADMINISTRACIÓN LINUX

-rwsr-sr-t 1 vagrant vagrant 3771 Nov  3 23:01 backup.sh

suid

sgid

sticky bit

ADMINISTRACIÓN LINUX

-rwsr-sr-t 1 vagrant vagrant 3771 Nov  3 23:01 backup.sh

suid

SUID - modifica el permiso de ejecución y provoca que el archivo se ejecute como el usuario (owner)

 

Se usa en ejecutables.

-rwsr-xr-x 1 vagrant docker 3771 Nov  3 23:01 backup.sh

ADMINISTRACIÓN LINUX

-rwsr-sr-t 1 vagrant vagrant 3771 Nov  3 23:01 test/

sgid

SGID - modifica el permiso de ejecución y provoca que el archivo se ejecute como el grupo

Es usado en directorios

-rwsr-xr-x 1 vagrant docker 3771 Nov  3 23:01 test/

ADMINISTRACIÓN LINUX

-rwsr-sr-t 1 vagrant vagrant 3771 Nov  3 23:01 backup.sh

sticky bit

Stiky Bit - Se usa en directorios. Cada archivo en ese directorio puede ser borrado o renombrado solo por el usuario (owner) o root.

ADMINISTRACIÓN LINUX

suid

sgid

sticky bit

1

2

4

chmod 0750

ADMINISTRACIÓN LINUX

-rwSr-Sr-T 1 vagrant vagrant 3771 Nov  3 23:01 backup.sh

mayúscula == no hay x (ejecución)

ADMINISTRACIÓN LINUX

Permisos por defecto
umask

ADMINISTRACIÓN LINUX

umask es la máscara de permisos para el usuario (User-Mask) que permite definir los permisos que serán aplicados por defecto para los nuevos archivos creados por el usuario.

 

umask también es el comando que permite administrar dicha máscara.

 

El umask es parte del environment de usuario.

Define los permisos por defecto para directorios.
Para archivos "le quita" la "x" (el 1) de ejecución

ADMINISTRACIÓN LINUX

$ umask
0002

$ umask -S
u=rwx,g=rwx,o=rx

$ umask -p
umask 0002

$ umask 0022

$ umask -S
u=rwx,g=rx,o=rx

ADMINISTRACIÓN LINUX

Permisos con listas de control de acceso (ACL)

ADMINISTRACIÓN LINUX

Las Listas de Control de Acceso (ACL) son un mecanismo adicional más flexible para el sistema de permisos de archivos. 

Las ACL permiten dar permiso a cualquier usuario o grupo a cualquier archivo del disco.

Las ACL puede ser visto como una flexibilización, como una excepción, o como una extensión al sistema de permisos (ugo)

$ getfacl test/

# file: test/
# owner: vagrant
# group: vagrant
user::rwx
group::rwx
other::r-x

Entradas básicas de ACL:

ADMINISTRACIÓN LINUX

$ setfacl -m u:ubuntu:rx test/
$ setfacl -m g:docker:rwx test/

$ getfacl test/
# file: test/
# owner: vagrant
# group: vagrant
user::rwx
user:ubuntu:r-x       <<<<<<<<
group::rwx
group:docker:rwx      <<<<<<<<
mask::rwx
other::r-x

Usuario ó Grupo nominado

ADMINISTRACIÓN LINUX

$ setfacl -m m:rx test/

$ getfacl test/
# file: test/
# owner: vagrant
# group: vagrant
user::rwx
user:ubuntu:r-x
group::rwx             #effective:r-x
group:docker:rwx       #effective:r-x
mask::r-x            <<<<<
other::r-x

Mascara: permisos efectivos

La máscara limita los permisos efectivos que tendrán (como máximo) los usuarios y grupos nominados.   Los permisos de usuario no se afectan por la máscara.

ADMINISTRACIÓN LINUX

$ setfacl -m d::rw test/

$ getfacl test/
# file: test/
# owner: vagrant
# group: vagrant
user::rwx
user:ubuntu:r-x
group::r-x
group:docker:rwx #effective:r-x
mask::r-x
other::r-x
default:user::rw-
default:group::r-x
default:other::r-x

Permisos por defecto

Los directorios pueden tener permisos configurados por defecto que serán heredados por todas las sub-carpetas

ADMINISTRACIÓN LINUX

$ setfacl -m d:u:www-data:rwx test/

$getfacl test/
# file: test/
# owner: vagrant
# group: vagrant
user::rwx
user:ubuntu:r-x
group::r-x
group:docker:rwx #effective:r-x
mask::r-x
other::r-x
default:user::rw-
default:user:www-data:rwx     <<<<<<<
default:group::r-x
default:mask::rwx
default:other::r-x

Permisos por defecto

ADMINISTRACIÓN LINUX

ADMINISTRACIÓN LINUX

1) Respaldar las ACL
$ getfacl -R test > ~/facl.bak

2) Recuperar permisos de ACL
$ setfacl --restore=~/facl.bak

3) Copiar ACL de un archivo a otro
$ getfacl archivo.dat | setfacl --set-file=- archivo2.dat

4) Copiar default ACL de un directorio a otro 
$ getfacl dir/ | setfacl -d -M- test2/

 

4) Remover una entrada 
$ setfacl -x "entry" /path/to/file

5) Remover todas las entradas
$ setfacl -b path/to/file

ADMINISTRACIÓN LINUX

1) Guardar y recuperar incluyendo ACL con TAR
$ tar czv --acls -f test.tgz test/
$ tar x --acls -f test.tgz



2) Sincronizar directorios con RSYNC incluyendo ACL
$ rsync -aA test/ destest/
setfacl
getfacl

ADMINISTRACIÓN LINUX

Permisos con atributos de archivos
(ext2, ext4 y xfs)

ADMINISTRACIÓN LINUX

Los archivos en el filesystem (ext2, ext4 y xfs) tienen atributos propios que modifican el acceso o las acciones que se pueden realizar con un determinado archivo.

Estas acciones están gestionadas por las llamadas a funciones del propio filesystem.  

ADMINISTRACIÓN LINUX

       The format of a symbolic mode is +-=[aAcCdDeijsStTu].

       The  operator  '+'  causes  the  selected attributes to be added to the
       existing attributes of the files; '-' causes them to  be  removed;  and
       '=' causes them to be the only attributes that the files have.

       The  letters  'aAcCdDeijsStTu' select the new attributes for the files:
       append only (a), no atime updates (A), compressed (c), no copy on write
       (C), no dump (d), synchronous directory updates (D), extent format (e),
       immutable (i), data journalling (j), secure deletion  (s),  synchronous
       updates  (S),  no tail-merging (t), top of directory hierarchy (T), and
       undeletable (u).

       The following attributes are read-only, and may be listed by  lsattr(1)
       but  not  modified  by  chattr:  compression  error (E), huge file (h),
       indexed directory (I), inline data (N), compression raw access (X), and
       compressed dirty file (Z).

       Not  all  flags  are supported or utilized by all filesystems; refer to
       filesystem-specific man pages such as btrfs(5), ext4(5), and xfs(5) for
       more filesystem-specific details.

ADMINISTRACIÓN LINUX

SELinux

ADMINISTRACIÓN LINUX

Security-Enhanced Linux (SELInux) es un módulo de seguridad del kernel Linux que proporciona un mecanismo para implementar Control de Acceso Obligatorio (MAC) y Control de Acceso basado en Roles (RBAC)

 

Los conceptos clave son proyectos de la United States National Security Agency (NSA) de EE.UU.

 

SELinux por defecto está disponible en RedHat, Fedora, CentOS

 

Ubuntu y derivados utilizan AppArmor

ADMINISTRACIÓN LINUX

DAC vs MAC

  • Discretionary Access Control (DAC)
    • El usuario, discrecionalmente, determina quién está autorizado a acceder a los objeto que él crea.
  • Mandatory Access Control (MAC)
    • El creador de un objeto no necesariamente tiene la habilidad de determinar quién puede acceder a él.
    • Politicas de acceso, generalmente de autoridad central
    • La política que se aplica sobre un objeto depende en cómo el objeto fue creado

ADMINISTRACIÓN LINUX

Funcionamiento de SELinux 

SELinux define control de acceso para procesos y archivos en el sistema. Utiliza políticas de seguridad que son un conjunto de reglas.

 

Cuando un proceso (sujeto) hace una petición de acceso a un objeto (archivo, dispositivo, socket, puerto, etc.) SELinux revisa el access vector cache (AVC).

 

Si SELinux no puede tomar una decisión sobre el acceso basada en el cache, envía la petición al server de seguridad. El servidor ubica el contexto del proceso y del archivo. Y el contexto es contrastado contra la base de datos de políticas de SELinux para conceder o denegar el permiso.

ADMINISTRACIÓN LINUX

Configuración de SELinux 

  • Políticas
    • Los procesos son etiquetados y corren con esa etiqueta.
    • Los procesos no reconocidos reciben la etiqueta unconfined_t
  • Seguridad multi-nivel (MLS)
    • Es un nivel "avanzado" de seguridad utilizado tipicamente por organizaciones gubernamentales.
  • Etiquetas
    • Todo es etiquetado y el kernel lo inicializa en el booteo 

usuario:rol:contexto:nivel    (el nivel es opcional)

 

Política: Un proceso corriendo con cierta etiqueta puede acceder a un archivo con otra cierta etiqueta 

ADMINISTRACIÓN LINUX

Configuración de SELinux 

httpd_sys_content_t
httpd_t

httpd

/var/www/html

/tmp

/var/tmp

httpd

/var/www/html

/tmp

/var/tmp

tmp_t
tmp_t
$ ps -ZC httpd
$ ls -Z /var/www

Política

$ netstat -tanZ | grep LISTEN | grep :80

ADMINISTRACIÓN LINUX

Modos en SELinux 

$ getenforce
  • Enforced:  Las políticas son aplicadas
  • Permissive:  Las políticas son consultadas, las violaciones se registran. Todos los accesos son concedidos.
  • Disabled: SELinux no es iniciado
$ setenforce
/etc/selinux/config

ADMINISTRACIÓN LINUX

Booleanos en SELinux 

$ getsebol -a

Los booleanos de SELinux permite prender y apagar reglas que cambian el funcionamiento de las políticas

$ setsebool httpd_enable_homedirs=on

ADMINISTRACIÓN LINUX

Contextos en SELinux 

$ ls -Zd /var/www/html

httpd_sys_content_t

$ echo prueba > ~/prueba.html
$ mv ~/prueba.html /var/www/html/prueba.html
$ ls -Zl /var/www/html/prueba.html

-rw-r--r--   root:root            admin_home_t

$ tail /var/log/audit/audit.log

avc:  denied for pid=2347
scontext=httpd_t       tcontext=admin_home_t

ADMINISTRACIÓN LINUX

Contextos en SELinux 

$ restorecon -R /var/www/html
$ ls -Zl /var/www/html/prueba.html

httpd_sys_content_t

$ semanage fcontext -l

/var/www(/.*)?       all files          system_u:object_r:httpd_sys_content_t:s0

Sobre esta presentación

Atribución 4.0 Internacional (CC BY 4.0)

https://creativecommons.org/licenses/by/4.0/deed.es

ADMINISTRACIÓN LINUX