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’
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
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.
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::—
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.