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
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