\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]{mer. oct. 6 20:53:54 CEST 2010}
\lfoot{\Large \textit{Uubu.fr}}
\hypersetup{pdfinfo={
Title={pam\_namespace},
Author={Sylvain Girod},
Creator={Bash script from uubu.fr's format version 1},
Producer={Bash script and PDFLaTeX},
Subject={Définit un espace de nom privé},
CreationDate={D:20101006205354},
ModDate={D:20101006205354},
Keywords={pam;authentification;sécurité}
}}
\begin{document}
 
\begin{center}
{\Huge pam\_namespace }
\end{center}
\vspace{1cm}
 
\begin{flushleft}
 
{\large Définit un espace de nom privé}
 
\vspace{10mm}
 
\hspace{1mm}  \textbf{pam\_namespace} définit un espace de nom privé pour une session avec répertoire poly-instancés. Un répertoire poly-instancié fournis une instance différente de lui-même basé sur le nom utilisateur, ou en utilisant SELinux, le nom d'utilisateur, contexte de sécurité ou les 2. Si un script exécutable \textbf{/etc/security/namespace.init} existe, il est utilisé pour initialiser l'instance du répertoire après qu'il ai été définis et monté dans le répertoire poly-instancié. Le script reçoit le chemin du répertoire poly-instancié, le chemin du répertoire instance, si le répertoire instance a été nouvellement crée (0 pour non, 1 pour oui), et le nom de l'utilisateur.
\vspace{5mm} \\
\hspace{1mm}  Le module dissocie l'espace de nom de session du parent. Un \textbf{mount/umount} est effectué dans l'espace de nom du parent.
\vspace{5mm} \\
 
 
\hspace{1mm}  \textbf{/etc/security/namespace.conf} spécifie quels répertoires sont poly-instanciés, comment ils sont poly-instanciés, comment l'instance sera nommé, et les utilisateurs pour qui la poly-instatiation sera effectuée.
\vspace{5mm} \\
\hspace{1mm}  Le format de \textbf{/etc/security/namespace.conf}:
\vspace{5mm} \\
\hspace{1mm}  \textbf{polydir instance\_prefix method list\_of\_uids}
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} polydir]{est un chemin absolu du répertoire à poly-instancier. La chaîne \$HOME est remplacée avec le home de l'utilisateur, et \$USER par le nom d'utilisateur. Ce champs ne peut pas être vide}
\item[\hspace{1mm} instance\_prefix]{chaîne utilisée pour construire le chemin pour l'instanciation de polydir. En fonction de la méthode de poly-instanciation}
\item[\hspace{1mm} method]{est la méthode utilisée pour la poly-instanciation. Ce champs ne peut pas être vide. Peut être:}
\end{description}
 
\begin{description} \normalsize
\item[\hspace{6mm} user]{pour une poly-instaciation basé sur le nom d'utilisateur}
\item[\hspace{6mm} level]{pour une poly-instanciation basé sur le niveau MLS sur processus et le nom d'utilisateur}
\item[\hspace{6mm} context]{pour une poly-instanciation basé sur le contexte de sécurité du processus et le nom d'utilisateur}
\item[\hspace{6mm} tmpfs]{pour monter le système de fichier tmpfs comme instance de répertoire}
\item[\hspace{6mm} tmpdir]{pour créer un répertoire temporaire comme instance de répertoire qui est supprimé quand l'utilisateur ferme sa session}
\item[\hspace{6mm} context et level]{sont disponible uniquement avec SELinux.}
\end{description}
 
\begin{description} \normalsize
\item[\hspace{1mm} list\_of\_uids]{est une liste séparée par une virgule de noms d'utilisateurs pour qui la poly-instanciation n'est pas effectuée. Si ce champs est vide, s'effectue pour tous les utilisateurs si la liste est précédée par " ", la poly-instanciation est effectuée uniquement pour les utilisateurs dans la liste.}
\end{description}
 
\hspace{1mm}  \textbf{method} peut aussi contenir les flags optionnels suivant:
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{6mm} create=mode,owner,group]{crée le répertoire poly-instancié. Les paramètres sont optionnels. Par défaut le \textbf{mode} est déterminé par umask, \textbf{owner} est l'utilisateur et \textbf{group} est le groupe de l'utilisateur.}
\item[\hspace{6mm} iscript=path]{chemin du script d'init.}
\item[\hspace{6mm} noinit]{Le script d'init ne sera pas exécuté}
\item[\hspace{6mm} shared]{les répertoire instanciés pour les méthodes "context" et "level" ne contiendrons pas le nom d'utilisateur et seront partagés à tous les utilisateurs.}
\end{description}
 
\hspace{1mm}  Le répertoire où les instances poly-instanciées sont créées, doit exister et doit avoir, par défaut, le mode 0000. Cela nécessite que le parent de l'instance soit de mode 0000 et puisse être écrasé avec l'option de ligne de commande \textbf{ignore\_instance\_parent\_mode}
\vspace{5mm} \\
\hspace{1mm}  Avec les méthodes \textbf{context} et \textbf{level}, le contexte SELinux qui est utilisé est le contexte utilisé pour exécuter un nouveau processus comme obtenus par \textbf{getexeccon}. Ce contexte doit être définis par l'application appelante ou le module pam\_selinux.so. Si ce contexte n'est pas définis la poly-instaciation sera basé uniquement sur le nom d'utilisateur.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge OPTIONS }
 
\
 
\begin{description} \normalsize
\item[\hspace{1mm} debug]{syslog les informations de debuggage}
\item[\hspace{1mm} unmnt\_remnt]{Pour les programmes comme su et newrole, le login session a déjà définis un espace de nom poly-instancié. Pour ces programmes, la poly-instanciation est effectuée basé sur le nouveau user id ou le contexte de sécurité, cependant la commande a d'abord besoin d'annuler la poly-instanciation effectuée par login. Cet argument instruit la commande d'annuler d'abord la précédente poly-instanciation avant de traiter avec la nouvelle basé sur le nouveau id/context}
\item[\hspace{1mm} unmnt\_only]{Pour les programmes de confiance qui veulent annuler un mount existant et traiter les répertoires instanciés, cet argument leur permet de démonter une instance actuellement montée.}
\item[\hspace{1mm} require\_selinux]{si SELinux n'est pas activé, retourne une erreur}
\item[\hspace{1mm} gen\_hash]{Au lieu d'utiliser la chaîne de contexte de sécurité pour le nom de l'instance, génère et utilise son hash md5}
\item[\hspace{1mm} ignore\_config\_error]{Si une ligne dans le fichier de configuration correspondant à un répertoire poly-instancié contient une erreur de format, ignore le traitement de la ligne suivante. Sans cette option, pam va retourner une erreur au programme appelant, forçant à terminer la session}
\item[\hspace{1mm} ignore\_instance\_parent\_mode]{Les répertoires parents sont supposés avec le mode 000. En utilisant cette option, un administrateur peut choisir d'ignorer le mode du parent. À utiliser avec précaution vu que cela réduit le but d'isolation et de sécurité de la poly-instanciation}
\item[\hspace{1mm} no\_unmount\_on\_close]{Pour certain programmes de confiance comme newrole, la session ouverte est appelée depuis un processus enfant alors que le parent ferme la session. Pour ces commandes, utiliser cette option pour instruire pam\_close\_session de ne pas démonter le répertoire poly-instancié dans la parent.}
\item[\hspace{1mm} use\_current\_context]{utile pour les services qui n'utilisent pas pam\_selinux pour changer le contexte SELinux avec l'appel setexeccon. Le module va utiliser le contexte SELinux par défaut de l'utilisateur pour la poly-instanciation level et context}
\end{description}
 
\hspace{1mm}  ne fournis que le type de module session. Ce module ne doit pas être appelé depuis un processus multithread.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Valeurs retournées }
 
\
 
\begin{description} \normalsize
\item[\hspace{1mm} PAM\_SUCCESS]{espace de nom définit avec succès}
\item[\hspace{1mm} PAM\_SERVICE\_ERR]{erreur inattendue}
\item[\hspace{1mm} PAM\_SESSION\_ERR]{erreur de configuration inattendue}
\end{description}
 
\vspace{1cm}{\huge Exemples }
 
\
 
\hspace{1mm} exemple de ligne dans /etc/security/namespace.conf \\
\hspace{1mm} \textbf{/tmp /tmp-inst/ level root,adm} \\
\hspace{1mm} \textbf{/var/tmp /var/tmp/tmp-inst/ level root,adm} \\
\hspace{1mm} \textbf{\$HOME \$HOME/\$USER.inst/inst- context} \\
\hspace{1mm} ligne à placer dans une fichier de config \\
\hspace{1mm} \textbf{session required pam\_namespace.so [arguments]} \\
\end{flushleft}
\end{document}
