La semana pasada un sysadmin junior se mandó una pequeña cagada en un servidor de desarrollo: modificar permisos en directorios de sistema editando ACLs. El resultado fue desastroso, en el sentido en que el servidor SSH dejó de funcionar, por tener el directorio /etc
permisos de acceso demasiado permisivos (valga la redundancia). La idea del sysadmin era buena, crear un grupo de "administradores" que tengan la capacidad de editar archivos de configuración, y agregar al mismo a algunos powerusers y sysadmins (ignorando que para esto existe el grupo root
, o wheel
en muchas distribuciones GNU/Linux y *BSD). Como, al mismo tiempo, estaba aprendiendo a trabajar con ACLs, decidió utilizar una para crear este permiso.
Claro está que, por seguridad, muchos servicios requieren permisos restrictivos sobre sus directorios de configuración/trabajo. Por ende el servidor SSH dejó inmediatamente de funcionar. Una valiosa lección para el joven padawan: jamás tocar permisos sobre directorios de sistema como /
, /etc
, /usr
, /boot
, /lib
, /lib64
, /bin
, /sbin
, /usr
, /tmp
, /opt
, y otros.
Pero para eso existen los servidores de desarrollo, para que, tanto desarrolladores como sysadmins, puedan hacer pruebas y romper sin perturbar a los usuarios finales. Y también para que los juniors los utilicen como plataforma de entrenamiento/aprendizaje.
Para solucionar este inconveniente (y dado que sólo se habían alterado ACLs y no permisos Unix) decidí simplemente borrar absolutamente TODAS las ACLs del filesystem, desde el raíz en adelante, de forma recursiva:
# setfacl -R -b /
Borrón y cuenta nueva.
Para más información:
# man setfacl