
Mi pregunta es ¿cómo podría configurar systemd(?) para que deje de abrir esta molesta ventana emergente cada vez que me olvido de escribir sudo. Simplemente dame un mensaje sudo basado en texto o muestra un error, para que pueda corregir el error rápidamente.
Este es Arch Linux, la última versión (systemd 238.133).
Respuesta1
Este no es un mensaje 'sudo', es un mensaje 'polkit'. Una forma de evitarlo – global atodosoftware, no solo systemctl, es escribir una regla polkit que inmediatamente niegue la acción (o la permita inmediatamente).
polkit.addRule(function(action, subject) {
if (subject.user !== "root") {
if (/^org\.freedesktop\.systemd1\./.test(action.id)) {
return polkit.Result.NO;
}
}
});
(La subject.user
prueba podría omitirse, ya que las acciones invocadas por root omiten las comprobaciones de polkit por completo).
Las reglas de polkit se almacenan en /etc/polkit/rules.d/*.rules
, generalmente con nombres similares 80-custom.rules
(procesadas en orden ascendente). Para más información, verlunares(8).
(Dicho esto, si su configuración de sudo no tiene contraseña, entonces no existe una diferencia de seguridad práctica entre usar 'sudo' y hacer que polkit permita la acción inmediatamente. Y viceversa, si su configuración de sudorequiereuna contraseña... entonces ¿por qué no simplemente ingresarla en el cuadro de diálogo de polkit? Es la misma contraseña.)
Respuesta2
Hay una opción --no-ask-password
. Haz un alias:
alias systemctl='systemctl --no-ask-password'
(probado en Bash, Kubuntu).
Respuesta3
No utilice sudo para systemctl,alguna vez; si ustedsonpermitido hacer el mantenimiento, configurar polkit correctamente.
Razón fundamental: sudo
hace que el programa que ejecuta sea efectivo para el usuario solicitado (generalmente root
:). Incluyendo todos los kits de herramientas vinculados. Cualquier error en el programa, bibliotecas o configuración de sudo te hace vulnerable. En el caso de systemd
, el systemctl
binario es sólo uncontrolador(en general). Élno esrequiere privilegios de root (para la mayoría de los casos de uso), ya que no realiza operaciones con privilegios por sí solo, sino que solicita init
. Usar la cuenta real root
(ya sea directamente o a través de sudo
) es una solución atómica (bomba) de todo o nada, mientras que lasoloLo que se requiere esautorizar(no: autenticar)contrasystemd
. ya que systemd
entiende polkit
porautorización, usandoautenticadoroot
Son demasiados permisos concedidos.
Considere un error en systemctl
, que permite invocar comandos arbitrarios directamente (no a través de systemd
). Cuando root
los permisos los otorga sudo
, se puede ejecutar cualquier comando con EUID = 0. Al systemctl
ejecutar como usuario sin privilegios, uno solo puede ejecutar dicho comando con la cuenta a la que obtuvo acceso anteriormente. Esta es una simple consecuencia de algunas reglas básicas de seguridad:
- use solo el conjunto de permisos necesarios (no el conjunto completo ==
root
), - otorgue estos permisos solo al código que lo requiere (autorice
systemd
sin otorgar permisos asystemctl
).
En cuanto a ser el único usuario de una máquina, si trabaja con una cuenta sin privilegios, no esa root
, supongo que desea restringir los programas que ejecuta para que no obtengan permisos superfluos. Dárselos systemctl
sólo porque la root
cuenta es authorized
para mandar systemd
es un permiso superfluo.
Además, polkit
puedes tener diferentes criterios de acceso para diferentes acciones (iniciar/detener/recargar/lo que sea) y diferentes servicios. Puede poner comandos exactos en sudoers
, pero la solución polkit conoce las partes específicas de dichos comandos.
Concluyendo: no lo use sudo
si hay disponible algún método con menos privilegios. sudo
es una solución de último recurso de todo o nada.
Si desea que la solicitud de contraseña se muestre en texto, no en forma gráfica, simplementePANTALLA desarmada, por ejemplo:desvincule su terminal de la sesión gráfica, que ejecuta el agente de autenticación.