Ejecutar órdenes como root sin autenticación
En muchos sistemas operativos basados en Linux, los usuarios avanzados pueden usar el archivo /etc/sudoers para posibilitar la ejecución de ciertas órdenes usando sudo sin necesidad de autenticarse. KDE Linux no usa /etc/sudoers ni sudo. ¿Cómo se puede conseguir lo mismo?
La respuesta consiste en configurar un servicio de systemd que ejecute la orden indicada y, a continuación, crear una regla de polkit que permita invocar el servicio del sistema sin necesidad de autenticación.
Servicio de systemd
Esto es un ejemplo del servicio de systemd que ejecuta /usr/bin/systemd-sysext refresh --always-refresh=yes para refrescar las extensiones de systemd:
/etc/systemd/system/sysext-refresh.service
[Unit]
Description=Refresh systemd extensions
[Service]
Type=oneshot
ExecStart=/usr/bin/systemd-sysext refresh --always-refresh=yes
Regla de Polkit
Y esto es un ejemplo de una regla de polkit que permite que los miembros activos del grupo wheel que hayan iniciado sesión localmente puedan invocar dicho servicio de systemd sin necesidad de autenticarse:
/etc/polkit-1/rules.d/50-sysext-refresh.rules
polkit.addRule(function(action, subject) {
if (action.id == "org.freedesktop.systemd1.manage-units" &&
action.lookup("unit") == "sysext-refresh.service" &&
action.lookup("verb") == "start" &&
subject.local &&
subject.active &&
subject.isInGroup("wheel")) {
return polkit.Result.YES;
}
});
Para restringir aún más esta regla, de modo que solo omita la autenticación para ti, sustituye «wheel» por tu nombre de usuario.
Uso
Tras crear ambos archivos, puedes refrescar las extensiones de systemd sin autenticarte invocando al servicio de systemd: systemctl start sysext-refresh.
Puedes hacer lo mismo para otras órdenes: solo tienes que crear los servicios de systemd necesarios y reglas de polkit para ellos.
Más información
Artículo escrito por Nate Graham bajo las condiciones de la licencia CC-BY-4.0.