\documentclass{report}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage{geometry}
\geometry{top=15mm, bottom=15mm, left=1cm, right=1cm}
\usepackage[french]{babel}
\usepackage{pslatex}
\usepackage[colorlinks=true,urlcolor=black]{hyperref}
\usepackage{graphicx}
\usepackage{fancyhdr}
\pagestyle{fancy}
\renewcommand{\footrulewidth}{0.4pt}
\fancyfoot[L]{Uubu.fr}
\fancyfoot[R]{sam. déc. 24 12:49:32 CET 2016}
\lfoot{\Large \textit{Uubu.fr}}
\hypersetup{pdfinfo={
Title={polkit},
Author={Sylvain Girod},
Creator={Bash script from uubu.fr's format version 1},
Producer={Bash script and PDFLaTeX},
Subject={framework d'autorisation},
CreationDate={D:20161224124932},
ModDate={D:20161224124932},
Keywords={authentification;sécurité;polkit;policyKit}
}}
\begin{document}
 
\begin{center}
{\Huge polkit }
\end{center}
\vspace{1cm}
 
\begin{flushleft}
 
{\large framework d'autorisation}
 
\vspace{10mm}
 
\hspace{1mm}  policyKit fournis une API d'autorisation conçue pour être utilisée par des programmes privilégiés (mécanismes) offrant un service à des programmes non privilégiés (clients) sous la forme d'un mécanisme IPC tel que D-Bus ou pipes Unix. Dans ce scénario, le mécanisme traite généralement le client n'étant pas de confiance. Pour toute requête d'un client, le mécanisme doit déterminer si la requête est autorisée ou si elle devrait refuser le service au client. En utilisant l'API PolicyKit, un mécanisme peut décharger cette décision à un tier de confiant: l'autorité PolicyKit.
\vspace{5mm} \\
 
 
\hspace{1mm}  En plus d'agir comme autorité, PolicyKit permet aux utilisateurs d'obtenir une autorisation temporairement en authentifiant soit un utilisateur administratif ou le propriétaire de la session auquel appartient l'utilisateur. C'est utile pour les scénarios où un mécanisme doit vérifier que l'opérateur du système est réellement l'utilisateur ou réellement un utilisateur administratif.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Architecture système }
 
\
 
\hspace{1mm}  L'architecture système de PolicyKit est composé de l'autorité (implémenté comme un service dans D-Bus) et un agent d'authentification par session utilisateur (fournis et démarré par la session utilisateur). Additionnellement, PolicyKit support des points d'extensions - spécifiquement, les vendeurs et/ou sites peuvent écrire des extensions pour contrôler complètement la stratégie d'autorisation. Dans un diagramme block, l'architecture ressemble à ceci:
\vspace{5mm} \\
 
 
{\ttfamily
\hspace{2mm}+-------------------+\\ \_|\_\_\_Authentication\_\_|\\ \_|\_\_\_\_\_\_\_Agent\_\_\_\_\_\_\_|\\ \_+-------------------+\\ \_|\_libpolkit-agent-1\_|\\ \_+-------------------+\\ \_\_\_\_\_\_\_\_\textasciicircum \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_+--------+\\ \_\_\_\_\_\_\_\_|\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_|\_Client\_|\\ \_\_\_\_\_\_\_\_+--------------+\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_+--------+\\ \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_|\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\textasciicircum \\ \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_|\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_|\\ User\_Session\_\_\_\_\_\_\_\_\_\_\_|\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_|\\ =======================|========================|=============\\ System\_Context\_\_\_\_\_\_\_\_\_|\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_|\\ \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_|\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_|\\ \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_|\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_+---+\\ \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_V\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_|\\ \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_/------------\textbackslash{}\_\_\_\_\_\_\_\_\_|\\ \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_|\_System\_Bus\_|\_\_\_\_\_\_\_\_\_|\\ \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\textbackslash{}------------/\_\_\_\_\_\_\_\_\_|\\ \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\textasciicircum \_\_\_\_\_\_\_\_\textasciicircum \_\_\_\_\_\_\_\_\_\_\_V\\ \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_|\_\_\_\_\_\_\_\_|\_\_\_\_\_\_+---------------------+\\ \_\_\_\_\_\_\_\_+--------------+\_\_\_\_\_\_\_\_|\_\_\_\_\_\_|\_\_\_\_\_\_Mechanism\_\_\_\_\_\_|\\ \_\_\_\_\_\_\_\_|\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_|\_\_\_\_\_\_+---------------------+\\ \_\_\_\_\_\_\_\_V\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_+---->\_|\_libpolkit-gobject-1\_|\\ +------------------+\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_+---------------------+\\ |\_org.freedesktop.\_|\\ |\_\_\_\_PolicyKit1\_\_\_\_|\\ +------------------+\\ |\_\_\_Backends\_and\_\_\_|\\ |\_\_\_\_Extensions\_\_\_\_|\\ +------------------+\\
}
\vspace{8mm}
 
\hspace{1mm}  libpolkit-gobject-1 enveloppe l'API D-Bus PolicyKit utilisant GObject. Cependant, un mécanisme peut également utiliser l'API D-Bus ou la commande pkcheck pour vérifier les autorisations.
\vspace{5mm} \\
 
 
\hspace{1mm}  La librairie libpolkit-agent-1 fournis une abstraction du système d'authentification natif, par exemple pam et également des facilités d'enregistrement et de communication avec le service D-Bus PolicyKit.
\vspace{5mm} \\
 
 
\hspace{1mm}  Les extensions PolicyKit et les backends d'autorité sont implémentés en utilisant libpolkit-backend-1
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Agents d'authentification }
 
\
 
\hspace{1mm}  Un agent d'authentification est utilisé pour que l'utilisateur d'une session prouve qu'il est l'utilisateur ou un utilisateur administratif. Pour s'intégrer avec le reste de la session utilisateur, les agents d'authentification sont censés être fournis par la session utilisateur que l'utilisateur utilise. Par exemple, un agent d'authentification peut ressembler à:
\vspace{5mm} \\
 
 
{\ttfamily
+----------------------------------------------------------+\\ |\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_Authenticate\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\texttt{[}X\texttt{]}\_|\\ +----------------------------------------------------------+\\ |\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_|\\ |\_\_\texttt{[}Icon\texttt{]}\_\_L'authentification\_est\_requise\_pour\_lancer\_\_\_\_\_\_|\\ |\_\_\_\_\_\_\_\_\_\_des\_tests\_ATA\_SMART\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_|\\ |\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_|\\ |\_\_\_\_\_\_\_\_\_Une\_application\_tente\_d'effectuer\_une\_action\_\_\_\_\_|\\ |\_\_\_\_\_\_\_\_\_qui\_nécessite\_des\_privilèges.\_L'authentification\_|\\ |\_\_\_\_\_\_\_\_\_super\_utilisateur\_est\_requis\_pour\_effectuer\_\_\_\_\_\_|\\ |\_\_\_\_\_\_\_\_\_cette\_action.\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_|\\ |\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_|\\ |\_\_\_\_\_\_\_\_\_\_Password\_for\_root:\_\texttt{[}\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\texttt{]}\_\_|\\ |\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_|\\ |\_\texttt{[}V\texttt{]}\_Details:\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_|\\ |\_\_Drive:\_\_ATA\_INTEL\_SSDSA2MH08\_(045C)\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_|\\ |\_\_Device:\_/dev/sda\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_|\\ |\_\_Action:\_org.fd.devicekit.disks.drive-ata-smart-selftest\_|\\ |\_\_Vendor:\_The\_DeviceKit\_Project\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_|\\ |\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_|\\ |\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\texttt{[}Cancel\texttt{]}\_\texttt{[}Authenticate\texttt{]}\_|\\ +----------------------------------------------------------+\\
}
\vspace{8mm}
 
\hspace{1mm} Si le système est configuré sans un compte root il peut vous autoriser à sélectionner un utilisateur administratif:
 
{\ttfamily
+----------------------------------------------------------+\\ |\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_Authenticate\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\texttt{[}X\texttt{]}\_|\\ +----------------------------------------------------------+\\ |\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_|\\ |\_\_\texttt{[}Icon\texttt{]}\_\_Authentication\_is\_required\_to\_run\_ATA\_SMART\_\_\_\_\_|\\ |\_\_\_\_\_\_\_\_\_\_self\_tests\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_|\\ |\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_|\\ |\_\_\_\_\_\_\_\_\_\_An\_application\_is\_attempting\_to\_perform\_an\_\_\_\_\_\_|\\ |\_\_\_\_\_\_\_\_\_\_action\_that\_requires\_privileges.\_Authentication\_|\\ |\_\_\_\_\_\_\_\_\_\_as\_one\_of\_the\_users\_below\_is\_required\_to\_\_\_\_\_\_\_\_|\\ |\_\_\_\_\_\_\_\_\_\_perform\_this\_action.\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_|\\ |\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_|\\ |\_\_\_\_\_\_\_\_\_\_\texttt{[}\texttt{[}Face\texttt{]}\_Patrick\_Bateman\_(bateman)\_\_\_\_\_\_\_\_\_\texttt{[}V\texttt{]}\texttt{]}\_\_|\\ |\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_|\\ |\_\_\_\_\_\_\_\_\_\_Password\_for\_bateman:\_\texttt{[}\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\texttt{]}\_\_|\\ |\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_|\\ |\_\texttt{[}V\texttt{]}\_Details:\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_|\\ |\_\_Drive:\_\_ATA\_INTEL\_SSDSA2MH08\_(045C)\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_|\\ |\_\_Device:\_/dev/sda\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_|\\ |\_\_Action:\_org.fd.devicekit.disks.drive-ata-smart-selftest\_|\\ |\_\_Vendor:\_The\_DeviceKit\_Project\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_|\\ |\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_|\\ |\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\texttt{[}Cancel\texttt{]}\_\texttt{[}Authenticate\texttt{]}\_|\\ +----------------------------------------------------------+\\
}
\vspace{8mm}
 
\hspace{1mm}  Les applications qui tournent pas sous un environnement de bureau peuvent ne pas avoir d'agent d'authentification associé avec lui. De telles applications peuvent utiliser le type PolkitAgentTextListener ou pkttyagent pour que l'utilisateur puisse s'authentifier en utilisant une interface textuelle.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Déclarer des actions }
 
\
 
\hspace{1mm}  Un mécanisme doit déclarer un jeu d'actions pour utiliser PolicyKit. Les actions correspondent aux opérations que les clients peuvent demander et sont définis dans des fichiers XML que le mécanisme install dans /usr/share/polkit-1/actions.
\vspace{5mm} \\
 
 
\hspace{1mm} Les action PolicyKit sont en namespace et peuvent seulement contenir les caractères "[a-z][0-9].-". Chaque fichier XML peut contenir plus d'une action mais toutes les actions doivent être dans le même espace de nom et le fichier doit être nommé après l'espace de nom et doit avoir l'extension .policy. Le fichier XML doit avoir la déclaration doctype suivante:
 
{\ttfamily
<?xml version="1.0" encoding="UTF-8"?>\\ <!DOCTYPE policyconfig PUBLIC "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"\\ "http://www.freedesktop.org/standards/PolicyKit/1.0/policyconfig.dtd">\\
}
\vspace{8mm}
 
\hspace{1mm}  L'élément policyconfig doit être présent exactement une fois. Les éléments qui peuvent être utilisés dans policyconfig incluent:
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} vendor]{Le nom du projet ou vendeur qui fournis les action dans le document XML.}
\item[\hspace{1mm} vendor\_url]{Une URL du projet ou vendeur qui fournis les action dans le document XML.}
\item[\hspace{1mm} icon\_name]{Un icône représentant le projet ou vendeur qui fournis les actions.}
\item[\hspace{1mm} action]{Déclare une action. Le nom de l'action est spécifiée en utilisant l'attribut id et peuvent seulement contenir les caractères "[a-z][0-9].-"}
\end{description}
 
\hspace{1mm}  Les éléments qui peuvent être inclus dans les actions sont:
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{6mm} description]{Une description de l'action}
\item[\hspace{6mm} message]{Le message affiché à l'utilisateur quand les accréditifs sont demandés.}
\item[\hspace{6mm} defaults]{Cet élément est utilisé pour spécifier des autorisation implicites au client}
\end{description}
 
\hspace{6mm}  Les éléments qui peuvent être utilisés dans defaults incluents:
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{12mm} allow\_any]{Autorisation implicite qui s'applique à tout client.}
\item[\hspace{12mm} allow\_inactive]{Autorisation implicite qui s'applique aux clients dans les sessions inactives dans les consoles locales.}
\item[\hspace{12mm} allow\_active]{Autorisation implicite qui s'applique aux clients dans les sessions actives dans les consoles locales.}
\end{description}
 
\hspace{12mm}  Chaque élément allow\_any, allow\_inactive, et allow\_active peuvent contenir les éléments suivants:
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{18mm} no]{non autorisé}
\item[\hspace{18mm} yes]{autorisé}
\item[\hspace{18mm} auth\_self]{Authentification par le propriétaire de la session d'où vient le client requise}
\item[\hspace{18mm} auth\_admin]{Authentification par un utiliateur administratif est requis}
\item[\hspace{18mm} auth\_self\_keep]{Comme auth\_self mais l'autorisation est conservé pour une période brève.}
\item[\hspace{18mm} auth\_admin\_keep]{Comme auth\_admin mais l'autorisation est conservée pour une brève période.}
\end{description}
 
\begin{description} \normalsize
\item[\hspace{6mm} annotate]{Utilisé pour annoter une action avec une paire de clé/valeur. La clé est spécifiée en utilisant l'attribut clé et la valeur est spécifiée en utilisant la valeur attribut. Cet élément peut apparaître 0 ou plusieurs fois.}
\item[\hspace{6mm} vendor]{Utilisé pour remplacer le vendeur sur une base par action}
\item[\hspace{6mm} vendor\_url]{Utilisé pour remplacer l'URL vendeur sur une base par action}
\item[\hspace{6mm} icon\_name]{Utilisé pour remplacer le nom de l'icône sur une base par action}
\end{description}
 
\hspace{1mm}  Les éléments localization, description et message peuvent exister 0 ou plusieurs fois avec différents attributs xml:lang
\vspace{5mm} \\
 
 
\hspace{1mm}  Pour lister les actions installées, utiliser la commande pkaction
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Annotations connues }
 
\
 
\begin{description} \normalsize
\item[\hspace{1mm} org.freedesktop.policykit.exec.path]{est utilisé par le programme pkexec fournis par PolicyKit.}
\item[\hspace{1mm} org.freedesktop.policykit.imply]{(sa valeur est une chaîne contenant une liste séparée par un espace d'identifiants d'action). peut être utilisé pour définir des actions méta. La manière dont elles fonctionnent et que si un sujet est autorisé pour une action spécifiée, il est également autorisé pour toutes les autres action de l'annotation. Une utilisation typique est en définissant un shell avec un simple bouton lock qui devrait débloquer plusieurs actions pour des mécanismes distincts.}
\item[\hspace{1mm} org.freedesktop.policykit.owner]{peut être utilisé pour définir un jeu d'utilisateurs qui peuvent demander si un client est autorisé à effectuer cette action. Si cette annotation n'est pas spécifiée, seul root peut vérifier si un client tournant sous un utilisateur différent est autorisé pour une action. La valeur de cette annotation est une chaîne contenant une liste séparée par des espaces d'entrées PolkitIdentity. par exemple "unix-user:42 unix-user:colord". Une utilisation typique est pour les processus qui tournent sous un utilisateur système au lieu de root.}
\end{description}
\end{flushleft}
\end{document}
