El blog de i5513, Bares, Debian gnu linux,
Sevilla FC y mucho más

Título histórico: "Páginas sorprendentes o habituales"
Descripción histórica: "Recordaré las páginas q me gusten o con las que me ría"
Descripción actual: No te calles, di lo que piensas y piensa lo que digas
Producciones i5513

Sunday, June 14, 2020

 

¿Cómo evitar que policykitd se apodere de apt-get?

Llevaba bastante tiempo teniendo que esperar un rato para actualizar los paquetes como siempre he hecho:

$ sudo apt update && sudo apt full-upgrade
Leyendo lista de paquetes... Hecho
E: Could not get lock /var/lib/apt/lists/lock. It is held by process 1488 (packagekitd)
N: Be aware that removing the lock file is not a solution and may break your system.
E: No se pudo bloquear el directorio /var/lib/apt/lists/

Ayer me decidí a investigar un poco más de lo que había hecho hasta ahora (había intentado chapucear haciendo el mask a packaekitd)

Y la solución es sencilla, aunque si no das con ella te  puedes tirar un buen rato buceando perdido en la documentación de policykitd

La clave es sobreescribir la política por defecto de la acción org.freedesktop.packagekit.system-sources-refresh (dejando ResultActive a no o a auth_admin):

$ sudo cat /etc/polkit-1/localauthority/10-vendor.d/org.freedesktop.packagekit.pkla
[Allow admins to upgrade the system]
Identity=unix-group:sudo
Action=org.freedesktop.packagekit.system-sources-refresh
ResultAny=no
ResultInactive=no
#ResultActive=yes # comportamiento por defecto
#ResultActive=auth_admin # Te pregunta gnome cuando quiere actualizar
#ResultActive=no # Le decimos que no queremos que se ocupe de esa tarea

Se queda logueado:
$ sudo journalctl | grep PolicyKit | grep Error
jun 14 23:24:42 doraemon polkitd[940]: Error performing authentication: GDBus.Error:org.freedesktop.PolicyKit1.Error.Cancelled: El usuario rechaz? el di?logo de autenticaci?n (polkit-error-quark 1)
Más info en la wikis/doc de las distros ...

https://wiki.debian.org/PolicyKit
https://doc.opensuse.org/documentation/leap/archive/15.0/security/html/book.security/cha.security.policykit.html

PD: No sé qué pasará con la instalación de software vía GUI


Comments:
En 2026 ya no se hace así, según gemini es:

¡Qué buena solución encontraste en su día! Ir directo a las políticas de Polkit (.pkla) para capar la acción org.freedesktop.packagekit.system-sources-refresh es una forma muy elegante de cortar el grifo a nivel de privilegios sin tener que "romper" o enmascarar servicios a lo bruto. [1]
Sin embargo, el motivo por el que hoy en día esa ruta exacta no te funcionaría es que las distribuciones modernas de Linux cambiaron por completo el motor de Polkit. Dejaron atrás los archivos .pkla (formato tipo .ini gestionado por pklocalauthority) y pasaron a utilizar un motor basado en JavaScript con extensiones .rules. [2, 3]
Si quieres replicar exactamente tu misma solución hoy en día (en sistemas actuales como Ubuntu 24.04+, Debian 12+, Fedora, etc.), tienes que escribir la regla en JavaScript. Aquí tienes cómo se hace actualmente:
## La solución moderna con reglas JavaScript (.rules)

1. Crea un nuevo archivo de reglas en el directorio local de Polkit (los nombres de archivos deben empezar por un número de prioridad, usaremos 45 para asegurarnos de que se aplique antes de las de por defecto):

sudo nano /etc/polkit-1/rules.d/45-packagekit-no-refresh.rules

[3]
2. Pega el siguiente código JavaScript, que equivale exactamente a lo que tenías en tu blog:

polkit.addRule(function(action, subject) {
if (action.id == "org.freedesktop.packagekit.system-sources-refresh") {
return polkit.Result.NO;
}
});

[4]
3. Muy importante: Polkit es sumamente estricto con los permisos de este directorio por motivos de seguridad. El archivo tiene que pertenecer obligatoriamente al usuario e interlocutor polkitd (o root según la distro) y tener permisos específicos, de lo contrario Polkit lo ignorará por completo:

sudo chown root:root /etc/polkit-1/rules.d/45-packagekit-no-refresh.rules
sudo chmod 644 /etc/polkit-1/rules.d/45-packagekit-no-refresh.rules

[5]

## ¿Qué hace este cambio?
Al igual que en tu artículo original, cuando tu entorno gráfico (GNOME Software, Discover, etc.) intente llamar en segundo plano a PackageKit para hacer el refresco automático de las fuentes (system-sources-refresh), Polkit le devolverá un NO rotundo de inmediato sin llegar a congelar las listas de APT ni bloquearte la terminal. En el journalctl verás un rechazo automático de la acción idéntico al que mostrabas. [1, 6, 7]
¿Qué te parece la evolución a JavaScript de Polkit? Si te apetece, dime qué versión de distribución estás usando actualmente y podemos verificar si ha aplicado la regla correctamente monitorizando los logs en vivo.

[1] [https://c-nergy.be](https://c-nergy.be/blog/?p=14051)
[2] [https://github.com](https://github.com/neutrinolabs/xrdp/discussions/2112)
[3] [https://docs.redhat.com](https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/7/html/desktop_migration_and_administration_guide/policykit)
[4] [https://bbs.archlinux.org](https://bbs.archlinux.org/viewtopic.php?id=159152)
[5] [https://askubuntu.com](https://askubuntu.com/questions/1540026/polkit-rule-for-reboot-ignored)
[6] [https://bugzilla.redhat.com](https://bugzilla.redhat.com/show_bug.cgi?id=1857654)
[7] [https://docs.redhat.com](https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/10/html/security_hardening/controlling-access-to-smart-cards-by-using-polkit)

 
Post a Comment

Subscribe to Post Comments [Atom]





<< Home

Archives

09/01/2003 - 10/01/2003   09/01/2008 - 10/01/2008   10/01/2008 - 11/01/2008   11/01/2008 - 12/01/2008   12/01/2008 - 01/01/2009   03/01/2009 - 04/01/2009   05/01/2009 - 06/01/2009   06/01/2009 - 07/01/2009   07/01/2009 - 08/01/2009   08/01/2009 - 09/01/2009   09/01/2009 - 10/01/2009   10/01/2009 - 11/01/2009   11/01/2009 - 12/01/2009   12/01/2009 - 01/01/2010   02/01/2010 - 03/01/2010   03/01/2010 - 04/01/2010   04/01/2010 - 05/01/2010   05/01/2010 - 06/01/2010   06/01/2010 - 07/01/2010   07/01/2010 - 08/01/2010   08/01/2010 - 09/01/2010   09/01/2010 - 10/01/2010   10/01/2010 - 11/01/2010   11/01/2010 - 12/01/2010   12/01/2010 - 01/01/2011   01/01/2011 - 02/01/2011   02/01/2011 - 03/01/2011   03/01/2011 - 04/01/2011   04/01/2011 - 05/01/2011   05/01/2011 - 06/01/2011   10/01/2011 - 11/01/2011   01/01/2012 - 02/01/2012   08/01/2012 - 09/01/2012   11/01/2012 - 12/01/2012   02/01/2013 - 03/01/2013   03/01/2013 - 04/01/2013   03/01/2014 - 04/01/2014   05/01/2014 - 06/01/2014   09/01/2015 - 10/01/2015   11/01/2015 - 12/01/2015   12/01/2015 - 01/01/2016   02/01/2016 - 03/01/2016   05/01/2016 - 06/01/2016   12/01/2016 - 01/01/2017   11/01/2018 - 12/01/2018   12/01/2018 - 01/01/2019   03/01/2020 - 04/01/2020   06/01/2020 - 07/01/2020   07/01/2020 - 08/01/2020   05/01/2021 - 06/01/2021   03/01/2022 - 04/01/2022   04/01/2025 - 05/01/2025   01/01/2026 - 02/01/2026   05/01/2026 - 06/01/2026  

This page is powered by Blogger. Isn't yours?

Subscribe to Posts [Atom]