uk/2015/why_polkit/
Como siempre, las opiniones en este blog son las propias, no las de colaboracin.
Acciones privilegiadas
En trminos generales, hay dos formas en que un proceso puede hacer algo: puede
hacerlo directamente (es decir, preguntar directamente al kernel), o puede utilizar
la comunicacin entre procesos para pedir a un servicio que haga esa operacin en
su nombre. Si lo hace directamente, los componentes que dicen si puede tener xito
son las comprobaciones de permisos normales del kernel de Linux (DAC), y si estn
configurados, AppArmor, SELinux o una capa similar de Mac. Todo muy simple hasta
ahora.
El lema del desarrollador del kernel para este tipo de cosas es "mecanismo, no
poltica": estn muy interesados en evitar la codificacin de polticas de entornos
particulares (el tipo de cosas que se podra considerar como "reglas de negocio")
en el ncleo, porque eso hace que sea no genrica y difcil de mantener. Como
resultado, las acciones directas de montaje/desmontaje slo estn permitidas por
procesos privilegiados, y corresponde a los procesos de espacio de usuario
organizar un proceso privilegiado para crear el syscall de montaje deseado.
Estas son algunas otras acciones privilegiadas que los usuarios de computadoras
porttiles / computadoras de escritorio pueden razonablemente esperar que
"funcionen", con o sin necesidad de un usuario similar a un administrador de
sistema (equivalente a root):
En entornos que utilizan un marco MAC como AppArmor, las acciones que normalmente
se permitirn pueden convertirse en privilegiados: por ejemplo, en un marco para
aplicaciones de espacio aislado, la mayora de las aplicaciones no deben permitir
grabar audio. Esto impide llevar a cabo estas acciones directamente, resultando de
nuevo que la nica manera de lograrlas es pedir a un servicio que lleve a cabo la
accin.
Usted podra pensar que estoy a punto de empezar a discutir D-Bus y demonios, pero
en realidad, una prominente implementacin anterior de esto fue Mount (8), que
normalmente es setuid root:
% ls -l /bin/mount
-rwsr-xr-x 1 root root 40000 May 22 11:37 /bin/mount
udisks2 es uno de estos daemon privilegiado, que utiliza el D-Bus como su canal
IPC. El D-Bus es un sistema de interprocesos comnmente utilizado; uno de sus usos
previstos/diseados es permitir que los procesos del usuario y los servicios del
sistema se comuniquen, especialmente este tipo de comunicacin entre un daemon
privilegiado y sus clientes menos privilegiados.
La gente a veces critica a D-Bus por no hacer nada que no pueda hacer usted mismo
con algunos sockets AF_UNIX. Bueno, no, por supuesto que no - la parte importante
de la implementacin de referencia y las diversas reimplementaciones interoperables
consiste en un daemon y algunos sockets AF_UNIX, y el resto es una simple cuestin
de programacin. Sin embargo, es suficiente para la mayora de los usos en su
espacio del problema, y es generalmente mejor que inventare los suyos.
La ventaja de D-bus sobre hacer su propia cosa es precisamente que usted no est
haciendo su propia cosa: el buen diseo de IPC es difcil, y D-bus toma algunas
decisiones estructurales de modo que menos autores de la aplicacin tienen que
pensar en ellos. Por ejemplo, tiene un daemon central "hub" (el dbus-daemon, o
"message bus") para que n aplicaciones comunicandose no necesiten O(n ) sockets ;
utiliza el dbus-daemon para proporcionar un pedido total de mensajes por lo que no
tiene que pensar en el reordenamiento de mensajes; tiene un modelo de denominacin
distribuida (que tambin puede utilizarse como mutex distribuido) para que no tenga
que disearlo; tiene un formato de serializacin y un sistema de tipo para que no
tenga que disear uno de esos; tiene un marco para "activar" los daemons de
ejecucin a peticin para que no tengan que utilizar los recursos inicialmente,
implementados utilizando un ayudante de setuid y/o sistema; y as sucesivamente.
Est bin?
Tiene que tomar algn tipo de decisin sobre este ltima basndose en la
informacin disponible. Sin embargo, antes de llegar hasta all, hay otra capa:
En el modelo setuid, hay una simple comprobacin de seguridad que puede aplicar:
puede hacer que /bin/Mount slo sea ejecutable por un grupo determinado, o slo
ejecutable por ciertos perfiles AppArmor, o similar. Esto funciona hasta un punto,
pero no puede distinguir entre usuarios fsicamente presentes y no fsicamente
presentes, u otros hechos que podran ser interesantes para su poltica de
seguridad local. Del mismo modo, en el modelo IPC, puede hacer imposibles ciertos
canales de comunicacin, por ejemplo, utilizando la capacidad del daemon de dbus
para decidir qu mensajes entregar, o los permisos del sistema de archivos de
sockets AF_UNIX, o un marco MAC como AppArmor.
Ambos son bastante "asperos" comprueba que realmente no entienden los detalles ms
finos de lo que est pasando. Si la respuesta a "esto es seguro?" Es algo de la
forma "tal vez, depende de ...", entonces no pueden hacer lo correcto: deben
dejarlo pasar y dejar que el dominio del proceso privilegiado haga la comprobacin,
o negarlo y perder la funcionalidad potencialmente til.
Por lo tanto, un enfoque ingenuo podra ser escribir una funcin en udisks2 que se
parece a algo como este seudocdigo:
if (disk no es extraible)
return false;
# https://en.wikipedia.org/wiki/Multiseat_configuration
if (user is not logged-in on the same seat where the disk is
plugged in)
return false;
return true;
}
Mientras tanto, no todos los sistemas son iguales. Una distribucin Linux de
propsito general como Debian podra funcionar en sistemas de servidor/mainframe
con slo usuarios remotos, ordenadores personales portatiles/de-escritorio con un
usuario equivalente a root, ordenadores corporativos bloqueados portatiles/de-
escritorio, dispositivos mviles y as sucesivamente; Estos sistemas no deberan
necesariamente tener la misma poltica de seguridad.
* s, djalo
* no, no lo permitas
* pedir al usuario autenticarse como ellos mismos o como un usuario
privilegiado (administrador del sistema) para permitirlo, o cancelar la
autenticacin para no permitirlo
* pedir al usuario autenticar la primera vez, pero si lo hace, recuerde durante
un tiempo y no preguntar de nuevo
Entonces, cmo decide polkit esto? Lo primero es que lee la descripcin legible de
la mquina de las acciones, en /usr/share/polkit-1/actions, que especifica una
poltica predeterminada. A continuacin, evala una poltica de seguridad local
para ver lo que dice. En la versin actual de polkit, la poltica de seguridad
local se configura escribiendo JavaScript en /etc/polkit-1/rules.d (poltica local)
y /usr/share/polkit-1/rules.d (valores predeterminados del proveedor del OS). En
las versiones anteriores como la actualmente embarcadas en la rama inestable de
Debian, hubo una arquitectura de plugin; pero en la prctica nadie escribi plugins
para ella, y, en su lugar, todos utilizan el ejemplo de autoridad local despachada
con polkit, configurado a travs de los archivos en /etc/polkit-1/localauthority
y /etc/polkit-1/localauthority.d.
polkit.addRule(function(action, subject) {
if ((action.id == "org.freedesktop.locale1.set-locale" ||
action.id == "org.freedesktop.locale1.set-keyboard" ||
action.id == "org.freedesktop.hostname1.set-static-hostname" ||
action.id == "org.freedesktop.hostname1.set-hostname" ||
action.id == "org.gnome.controlcenter.datetime.configure") &&
subject.local &&
subject.active &&
subject.isInGroup ("sudo")) {
return polkit.Result.YES;
}
});
Que est razonablemente cerca de ser pseudocdigo para "usuarios locales activos en
el grupo de sudo puede establecer la configuracin regional del sistema, el diseo
del teclado, el nombre de la mquina y la hora, sin necesidad de autenticarse". Por
supuesto, un administrador del sistema podra anularlo al eliminar una poltica de
mayor prioridad para algunas o todas estas acciones en /etc/polkit-1/rules.d.
Resumen
muy informativo
Por lo general la gente que mejor entender es la gente que menos necesidad de tener
para la documentacin y por lo que no te molestes ... pero esto fue genial!
Estupendo!
Me alegro de ver finalmente alguna informacin escrita sobre esto. Alguna
posibilidad de que esto sea puesto en una pgina de manual o un doc de texinfo o
algo similar? La objecin # 1 que tengo sobre casi cada proyecto libre de
desktop.org es su absoluta falta de documentacin de cmo funcionan las cosas. La
objecin # 2 no es religiosa como usted asume, sino tcnica, pero no me inclinar
contra ese molino de viento aqu.
Comentarios de June - Jue 18 jun 2015 15:23:45 BST