Skip to content

333.1 Discretionary Access Control

weight: 3

Description Candidates should understand discretionary access control (DAC) and know how to implement it using access control lists (ACL). Additionally, candidates are required to understand and know how to use extended attributes.

Key Knowledge Areas:

Understand and manage file ownership and permissions, including SetUID and SetGID bits
Understand and manage access control lists
Understand and manage extended attributes and attribute classes

Partial list of the used files, terms and utilities:

getfacl
setfacl
getfattr
setfattr

Permisos avanzados

nombre valor valor octal
setuid s 4
setgid s 2
sticky t 1


En ficheros podemos jugar con setuid y setgid, sticky es solo para directorios. El concepto es simple, cuando están aplicados setuid o setgid ese fichero se ejecutara en nombre del usuario del fichero o del grupo del fichero.


Setuid

Con setuid aplicado en un fichero, dicho fichero se ejecutara en nombre del usuario del fichero.

Podemos ver que el bit está asignado (s) haciendo un ls:

$ ls -l /bin/su
-rwsr-xr-x 1 root root 31012 2015-04-04 10:49 /bin/su

# Para asignar este bit a un fichero:
chmod u+s /bin/su
# en octal
chmod 4755 /bin/su

# Y para quitarlo:
chmod u-s /bin/su
# en octal
chmod 0788 /bin/su

Si no tuviera el setuid asignado no podrías ejecutar su, ya que se te negaría el permiso.


Setgid

Setgid se puede aplicar tanto a ficheros como a directorios. En ficheros se comporta igual que setuid pero asignado al grupo. Lo interesante es la aplicación en directorios. Si queremos tener un directorio compartido, se aplica setgid y todos los archivos que se creen dentro pertenecerán al grupo del directorio.

Podemos ver que el bit está asignado (s) haciendo un ls:

$ ls -l compartida
-rwxrwsr-x 1 jorge jorge  31012 2018-08-10 12:25 compartida/

# Para asignar este bit a un fichero:
chmod g+s  compartida/
# en octal
chmod 2755 compartida/

# Y para quitarlo:
chmod g-s  compartida/
# en octal
chmod 0788  compartida/

Creo un archivo con otro usuario dentro del directorio y ago la prueba.

$ su
# touch test
root@sistemas:/home/jorge/compartido
# ls -l
total 0
-rw-r--r-- 1 root jorge 0 2018-08-10 12:30 test
# whoami
root

Sticky
Se suele asignar a directorios al que todo el mundo tiene acceso, permite evitar que un usuario borre los archivos de otro ya que tiene permisos de escritura dentro del directorio. Cabe decir que aun que se asigna en la sección de others también afecta al grupo.

Podemos ver que el bit está asignado (t) haciendo un ls:

$ ls -l compartida
-rwxrwxr-t 1 jorge jorge  31012 2018-08-10 12:25 compartida/

# Para asignar este bit a un fichero:
chmod o+t compartida/
# en octal
chmod 1755 compartida/

# Y para quitarlo:
chmod o-t  compartida/
# en octal
chmod 0788  compartida/


ACL Acces Control List

Opciones básicas

Opción Acción
b borrar todas acl's
k borrar todas las default
R recursivo
x borrar acl especifica
d default añadir por defecto
m añadir o modificar acl


Sintaxis

# Agregar permisos para un usuario
setfacl -m "u:user:permissions" <file/dir>
# Agregar permisos para un grupo (group es el nombre del grupo o el ID del grupo):
setfacl -m "g:group:permissions" <file/dir>

Ejemplos

Mostrar acl\'s

getfacl <nombre archivo>

Borrar todas las acl del directorio compartida

setfacl -bkR compartida
Borrar acl de grupo para el usuario user3
setfacl -x g:user3 <file/dir>

Establecer todos lo permisos para el usuario Jhonny en el archivo con nombre “abc”:

setfacl -m "u:johny:rwx" abc

Dar permisos de g=rw- a archivos dentro del directorio compartida y permisos g=rwx a los directorios por defecto y de forma recursiva

setfacl -dRm g::rwx compartida

Atributos extendidos

Los atributos extendidos son solo valores que quieres añadir a un archivo, sin ningun comportaminto en seguridad, se caracterizaria como metadata.

El usuario estandar usaria la orden attr mientras que root puede utilizar setfattr y getfattr

# añadir etiqueta
attr -s flavor -V vanilla file01.txt 
Attribute "flavor" set to a 7 byte value for file01.txt:
vanilla

setfattr --name user.flavor --value chocolate file02.txt

# visualizar etiqueta
attr -g flavor file02.txt 
Attribute "flavor" had a 9 byte value for file02.txt:
chocolate

getfattr --name user.flavor file01.txt

# visualizar multiples etiquetas
attr -l file01.txt 
getfattr -d file01.txt