Acerca del poder de root y permisos de usuarios y grupos II

Una manera no tan conocida (tal vez por su relativa inmadurez) son las POSIX CAPABILITIES en Linux. Las PCaps permiten asignar determinados permisos a procesos y archivos ejecutables. La idea es evitar el uso del poderoso pero a la vez peligroso SUID Bit.

El archivo  /usr/include/linux/capability.h contiene la descripción definición de las 31 PCaps. Para poder usarlas:

  • Verificar que esta soportado por el kernel

Soporte de PCaps

  • Habilitar KPROBES y compilar si es necesario

Habilitar KPROBES en el kernel

  • Compilar e instalar las nuevas libreras PCAPS

Se trata de la version 2.x de estas libreras que in

cluyen las herramientas setcap y getcap.

  • Cargar el modulo capable_probe

Este módulo es muy importante para comenzar a usar las PCaps e ir aprendiendo como funcionan. De esta manera, podremos ver los mensajes relativas a las PCaps en el archivo /var/log/messages. Hay que tener en cuenta que dicho archivo crecer notablemente, por lo que se recomienda no tener cargado todo el tiempo el módulo capable_probe.

Una de las primeras cosas que se pueden hacer es probar alguna aplicación y ver que capabilities esta usado. Por ejemplo, vemos que el comando at requiere la facultad para realizar diversas tareas administrativas, pasar por el alto el control de acceso discrecional, cambiar propietarios de archivos, manipulación de SUID y SGID bits.
PCaps requeridas

Espero pronto poder escribir algunas cosas ms sobre este apasionante tema.

Acerca del poder de root y permisos de usuarios y grupos

Más allá de lo clásico

El tradicional poder de root en Linux se puede prestar, delegar, fragmentar, etc. mediante distintos métodos. El esquema típico de permisos también se puede ampliar…

Prestando el poder: el comando su

El comando su permite que un usuario haga las veces de otro usuario (generalmente root) ingresando la contraseña de este último. Se puede desde correr un único comando hasta correr una sesión completa como root usando todas sus variables de entorno.  Existe un comando similar llamado sg, que sirve para tomar temporalmente las atribuciones de un grupo. Una diferencia importante es que con sg solamente se registran los intentos fallidos. Además, con sg se hace necesario el uso de las poco utilizadas contraseñas de grupos.

Jun 28 17:56:11 pulperia sg[7865]:\
Invalid password for group `users' from `sergio'

gksu

Delegando el poder: sudo

La página del manual correspondiente a sudo dice que es un programa diseñado para permitir que el administrador conceda privilegios de root limitados a otros usuarios y registrar su actividad. Si bien sudo tiene una buena cantidad de años, casi tres décadas, se hizo popular hace mucho menos tiempo gracias a Ubuntu. Esta distribución usa sudo de manera predeterminada. Cuando se instala la distribución, se crea un usuario que actuará como “power user”: cada vez que se deba realizar una tarea administrativa se deberá ingresar la contraseña de este usuario calificado. El usuario tendrá además un tiempo de gracia para ejecutar comandos administrativos en la misma terminal.

El archivo de configuración es /etc/sudoers, y una línea típica dice algo así:

¿Qué usuario? ¿Dónde? ¿Cómo qué usuarios? ¿Qué comandos?

Además, se pueden definir alias de usuarios, de usuarios ejecutores, de hosts y de comandos.

User_Alias     DBMASTER = sergio
User_Alias      RANGER = sergio
Runas_Alias    DB = mysql,root
root    ALL=(ALL) ALL
DBMASTER pulperia=(DB) /etc/init.d/mysqld,/usr/sbin/mysql*
RANGER pulperia=(ALL) /usr/bin/tail /var/log/messages,/sbin/reboot,\
/sbin/halt,/sbin/poweroff
Interfaz gráfica para sudo de KDE

Repartiendo el poder: ACLs al estilo POSIX

Recordemos que el esquema en Linux tradicional es UGO (user, group, others)

  • Cada archivo y cada proceso tiene un único usuario dueño
  • Cada archivo y cada proceso tiene un único usuario

Las ACLs al estilo POSIX en Linux se aplican al sistema de archivos y a procesos y permiten extender el enfoque arriba mencionado. De este modo, cada archivo puede contener más de un usuario dueño y/o más de un grupo dueño.

Dolphin y acls

Para sacar provecho de las ACLs es necesario que el sistema de archivos sobre las cuales se quiere aplicar tenga soporte para las mismas.

UUID=831727be-3460-455e-bd1e-200231b2fb84 / \
ext2    relatime,errors=remount-ro,acl,user_xattr 0

Una vez aplicados los cambios, además de los conocidos comandos chmod y chown se pueden usar los comandos setfacl y getfacl.

El comando setfacl permite definir y/o agregar usuarios y permisos.

setfacl -m u:prueba:rw file2

Luego ejecutando ls -l file2 puede informarnos si el archivo tiene acls:

-rw-rwx—+ 1 sergio sergio 0 2008-06-29 18:51 file2

Sin embargo, el comando getfacl es mucho más informativo:

sergio@coldplay:~/testdir$ getfacl file2
# file: file2
# owner: sergio
# group: sergio
user::rw-
user:prueba:rw-
user:burrufini:rwx
group::r-x
group:users:r-x
mask::rwx
other::---

El archivo tiene un dueño (owner) que es sergio, y dos copropietarios (named users) es decir, prueba y burrufini. Asimismo, tiene un grupo dueño que es sergio y un grupo copropietario (named group) que es user. Las máscara (mask) es muy importante ya que pone límite a los permisos de los usuarios copropietarios del grupo propietario y de los grupos copropietarios.

La máscara también se configura con setfacl:

sergio@coldplay:~/testdir$ setfacl -m mask:r-x file2
sergio@coldplay:~/testdir$ getfacl file2
# file: file2
# owner: sergio
# group: sergio
user::rw-
user:prueba:rw-                 #effective:r--
user:burrufini:rwx              #effective:r-x
group::r-x
group:users:r-x
mask::r-x
other::---

Notar lo siguiente:

sergio@coldplay:~/testdir$ chmod g+rw file2
sergio@coldplay:~/testdir$ ls -l file2
-rw-rwx---+ 1 sergio sergio 0 2008-06-29 18:51 file2
sergio@coldplay:~/testdir$ getfacl file2
# file: file2
# owner: sergio
# group: sergio
user::rw-
user:prueba:rw-
user:burrufini:rwx
group::r-x
group:users:r-x
mask::rwx
other::---

Esto quiere decir que al ejecutar chmod para cambiar los permisos del grupo, en realidad se cambiaron los permisos de la máscara. Por lo tanto al usar acls para cambiar o definir los permisos del grupo dueño se debe usar el comando setfacl (setfacl -m group::permisos archivo).

Pero con las acls se puede hacer algo más: se pueden definir que permisos tendrán los archivos creados en un directorio:

sergio@coldplay:~/testdir$ setfacl -m g:users:rw- pepe
# file: pepe
# owner: sergio
# group: sergio
user::rwx
group::r-x
group:users:rw-
mask::rwx
other::---
default:user::rwx
default:group::r-x
default:group:users:r-x
default:mask::r-x
default:other::---

Nautilus y Eiciel

Es importante recordar que en el caso de los archivos (no directorios), no importa que permisos se establezcan por defecto, siempre se aplica el limitante de lectura-escritura como permisos máximos para todos los usuarios, dicho de otra manera, nunca se creará por defecto un archivo con permiso de ejecución habilitado.