harden-doc 3.19 - en to fr translation catalogue (29 entries)

en: Developer's Best Practices for OS Security
fr: Meilleures pratiques de sécurité pour les développeurs

en: This chapter introduces some best secure coding practices for developers writing Debian packages. If you are really interested in secure coding I recommend you read David Wheeler's <ulink name="Secure Programming for Linux and Unix HOWTO" url="http://www.dwheeler.com/secure-programs/" /> and <ulink name="Secure Coding: Principles and Practices" url="http://www.securecoding.org" /> by Mark G. Graff and Kenneth R. van Wyk (O'Reilly, 2003).
fr: Ce chapitre introduit certaines des meilleures pratiques de code sécurisé pour les développeurs écrivant des paquets Debian. Si vous êtes vraiment intéressé par le code sécurisé, vous devriez lire le <ulink url="http://www.dwheeler.com/secure-programs/" name="HOWTO de programmation sécurisée pour Linux et UNIX" /> de David Wheeler et  <ulink url="http://www.securecoding.org" name="Secure Coding: Principles and Practices" /> de Mark G. Graff et Kenneth R. van Wyk (O'Reilly, 2003).

en: Best practices for security review and design
fr: Meilleures pratiques de vérification et conception sécurisées

en: Developers that are packaging software should make a best effort to ensure that the installation of the software, or its use, does not introduce security risks to either the system it is installed on or its users.
fr: Les développeurs qui empaquettent des logiciels devraient faire de leur mieux pour s'assurer que l'installation du logiciel, ou son utilisation, n'introduit pas de risques en matière de sécurité à la fois au système où il est installé et à ses utilisateurs.

en: In order to do so, they should make their best to review the source code of the package and detect any flaws that might introduce security bugs before releasing the software or distributing a new version. It is acknowledged that the cost of fixing bugs grows for different stages of its development, so it is easier (and cheaper) to fix bugs when designing than when the software has been deployed and is in maintenance mode (some studies say that the cost in this later phase is <emphasis>sixty</emphasis> times higher). Although there are some tools that try to automatically detect these flaws, developers should strive to learn about the different kind of security flaws in order to understand them and be able to spot them in the code they (or others) have written.
fr: Pour ce faire, ils devraient faire de leur mieux pour examiner le code source du paquet et détecter tous les défauts qui pourraient introduire des bogues de sécurité avant de publier le programme ou de distribuer une nouvelle version. Il est reconnu que le coût de correction de bogues augmente aux différentes étapes de son développement, il est donc plus facile (et moins coûteux) de corriger les bogues lors de la conception qu'une fois le logiciel déployé et en mode maintenance (plusieurs études disent que le coût dans cette dernière phase est <emphasis>soixante</emphasis> fois plus élevé). Bien que plusieurs outils essayent de détecter automatiquement ces défauts, les développeurs devraient faire leur possible pour se tenir au courant des différents types de défauts de sécurité afin de les comprendre et être capable de les remarquer dans le code qu'ils (ou d'autres) ont écrit.

en: The programming bugs which lead to security bugs typically include: <ulink name="buffer overflows" url="http://en.wikipedia.org/wiki/Buffer_overflow" />, format string overflows, heap overflows and integer overflows (in C/C++ programs), temporary <ulink name="symlink race conditions" url="http://en.wikipedia.org/wiki/Symlink_race" /> (in scripts), <ulink name="directory traversal" url="http://en.wikipedia.org/wiki/Directory_traversal" /> and command injection (in servers) and <ulink name="cross-site scripting" url="http://en.wikipedia.org/wiki/Cross_site_scripting" />, and <ulink name="SQL injection bugs" url="http://en.wikipedia.org/wiki/SQL_injection" /> (in the case of web-oriented applications). For a more complete information on security bugs review Fortify's <ulink name="Taxonomy of Software Security Errors" url="http://vulncat.fortifysoftware.com/" />.
fr: Parmi les bogues de programmation qui conduisent à des bogues de sécurité, les plus typiques sont les <ulink url="http://fr.wikipedia.org/wiki/Dépassement_de_tampon" name="dépassements de tampon" />, les dépassements de chaîne de formatage, les dépassements de tas et les dépassements d'entier (dans les programmes en C ou C++), les <ulink url="http://en.wikipedia.org/wiki/Symlink_race" name="conditions de situation de compétition de liens symboliques" /> temporaires (dans les scripts), les <ulink url="http://en.wikipedia.org/wiki/Directory_traversal" name="traversées de répertoires" /> et les injections de commande (sur les serveurs) et <ulink url="http://fr.wikipedia.org/wiki/Cross-site_scripting" name="scripts intersites" />, et les <ulink url="http://fr.wikipedia.org/wiki/Injection_SQL" name="bogues d'injection SQL" /> (dans le cas des applications orientées web). Pour de plus amples renseignements sur les bogues de sécurité, consultez la <ulink url="https://www.fortify.com/vulncat/en/vulncat/index.html" name="taxonomie des erreurs de sécurité de logiciels" /> de Fortify.

en: Some of these issues might not be easy to spot unless you are an expert in the programming language the software uses, but some security problems are easy to detect and fix. For example, finding temporary race conditions due to misuse of temporary directories can easily be done just by running <literal>grep -r "/tmp/" .</literal>. Those calls can be reviewed and replace the hardcoded filenames using temporary directories to calls to either <command>mktemp</command> or <command>tempfile</command> in shell scripts, <citerefentry><refentrytitle>File::Temp</refentrytitle> <manvolnum>3perl</manvolnum></citerefentry> in Perl scripts, or <citerefentry><refentrytitle>tmpfile</refentrytitle> <manvolnum>3</manvolnum></citerefentry> in C/C++.
fr: Certains de ces problèmes pourraient ne pas être faciles à repérer à moins d'être un expert dans le langage de programmation utilisé par le logiciel, mais certains problèmes sont faciles à détecter et à corriger. Par exemple, trouver des conditions de situation de compétitions temporaires à cause d'une mauvaise utilisation de répertoires temporaires peut se faire facilement en exécutant « <literal>grep -r "/tmp/" .</literal> ». Ces appels peuvent être examinés et les noms de fichiers écrits en dur, utilisant des répertoires temporaires, remplacés par des appels à <command>mktemp</command> ou <command>tempfile</command> dans les scripts d'interpréteur, <citerefentry><refentrytitle>File::Temp</refentrytitle> <manvolnum>3perl</manvolnum></citerefentry> dans les scripts Perl ou <citerefentry><refentrytitle>tmpfile</refentrytitle> <manvolnum>3</manvolnum></citerefentry> en C ou C++.

en: There are a set of tools available to assist to the security code review phase. These include <package>rats</package>, <package>flawfinder</package> and <package>pscan</package>. For more information, read the <ulink name="list of tools used by the Debian Security Audit Team" url="http://www.debian.org/security/audit/tools" />.
fr: Certains outils permettent d'aider à l'examen de sécurité du code, comme <package>rats</package>, <package>flawfinder</package> et <package>pscan</package>. Pour de plus amples renseignements, consultez la <ulink url="http://www.debian.org/security/audit/tools" name="liste d'outils utilisés par l'équipe d'audit de sécurité Debian" />.

en: When packaging software developers have to make sure that they follow common security principles, including:
fr: Lors de l'empaquetage, les développeurs de logiciel doivent s'assurer de suivre les principes de sécurité habituels, y compris :

en: The software runs with the minimum privileges it needs:
fr: le logiciel s'exécute avec le minimum de droits nécessaires :

en: The package does install binaries setuid or setgid. <command>Lintian</command> will warn of <ulink name="setuid" url=" http://lintian.debian.org/reports/Tsetuid-binary.html" />, <ulink name="setgid" url="http://lintian.debian.org/reports/Tsetgid-binary.html" /> and <ulink name="setuid and setgid" url="http://lintian.debian.org/reports/Tsetuid-gid-binary.html" /> binaries.
fr: le paquet installe des binaires setuid or setgid. <command>Lintian</command> avertira des binaires <ulink url=" http://lintian.debian.org/reports/Tsetuid-binary.html" name="setuid" />, <ulink url="http://lintian.debian.org/reports/Tsetgid-binary.html" name="setgid" /> ou <ulink url="http://lintian.debian.org/reports/Tsetuid-gid-binary.html" name="setuid et setgid" /> ;

en: The daemons the package provide run with a low privilege user (see <xref linkend="bpp-lower-privs" />)
fr: les démons fournis par le paquet s'exécutent avec un utilisateur aux droits restreints (consultez <xref linkend="bpp-lower-privs" />) ;

en: Programmed (i.e., <command>cron</command>) tasks running in the system do NOT run as root or, if they do, do not implement complex tasks.
fr: les tâches programmées (c'est-à-dire <command>cron</command>) s'exécutant sur le système ne le sont <emphasis>pas</emphasis> en tant que superutilisateur, et si elle le sont, elles n'implémentent pas de tâches complexes.

en: If you have to do any of the above make sure the programs that might run with higher privileges have been audited for security bugs. If you are unsure, or need help, contact the <ulink name="Debian Security Audit team" url="http://www.debian.org/security/audit/" />. In the case of setuid/setgid binaries, follow the Debian policy section regarding <ulink name="permissions and owners" url="http://www.debian.org/doc/debian-policy/ch-files.html#s10.9" />
fr: Si vous devez faire l'un des deux, assurez-vous que les programmes qui pourraient s'exécuter avec des privilèges plus élevés ont été contrôlés pour les bogues de sécurité. En cas de doute, ou pour obtenir de l'aide, contactez l'<ulink url="http://www.debian.org/security/audit/" name="équipe d'audit de sécurité Debian" />. Pour les binaires setuid ou setgid, suivez la section de la charte Debian sur les <ulink url="http://www.debian.org/doc/debian-policy/ch-files.html#s-permissions-owners" name="droits et propriétaires" />.

en: For more information, specific to secure programming, make sure you read (or point your upstream to) <ulink name="Secure Programming for Linux and Unix HOWTO" url="http://www.dwheeler.com/secure-programs/" /> and the <ulink name="Build Security In" url="https://buildsecurityin.us-cert.gov/portal/" /> portal.
fr: Pour de plus amples renseignements, spécifiques à la programmation sécurisée, assurez vous de lire (ou d'indiquer en amont) le <ulink url="http://www.dwheeler.com/secure-programs/" name="HOWTO de programmation sécurisée pour Linux et UNIX" /> et le portail <ulink url="https://buildsecurityin.us-cert.gov/portal/" name="Build Security In" />.

en: Creating users and groups for software daemons
fr: Création d'utilisateurs et de groupes pour les démons logiciels

en: If your software runs a daemon that does not need root privileges, you need to create a user for it. There are two kind of Debian users that can be used by packages: static uids (assigned by <package>base-passwd</package>, for a list of static users in Debian see <xref linkend="faq-os-users" />) and dynamic uids in the range assigned to system users.
fr: Si le logiciel exécute un démon qui n'a pas besoin des droits du superutilisateur, vous devez lui créer un utilisateur. Deux types d'utilisateurs Debian peuvent être utilisés par les paquets : avec identifiant (UID) statique (attribué par <application>base-passwd</application> ; consultez <xref linkend="faq-os-users" /> pour une liste des utilisateurs statiques dans Debian) et avec identifiant dynamique dans l'intervalle dévolu aux utilisateurs système.

en: In the first case, you need to ask for a user or group id to the <package>base-passwd</package>. Once the user is available there the package needs to be distributed including a proper versioned depends to the <package>base-passwd</package> package.
fr: Dans le premier cas, il faut demander un identifiant de groupe ou d'utilisateur à <application>base-passwd</application>. Une fois l'utilisateur disponible, le paquet doit être distribué avec une dépendance sur la version adéquate du paquet <application>base-passwd</application>.

en: In the second case, you need to create the system user either in the <emphasis>preinst</emphasis> or in the <emphasis>postinst</emphasis> and make the package depend on <literal>adduser (&gt;= 3.11)</literal>.
fr: Dans le second cas, il faut créer un utilisateur système en <emphasis>preinst</emphasis> ou en <emphasis>postinst</emphasis> et rendre le paquet dépendant de <literal>adduser (>= 3.11)</literal>.

en: The following example code creates the user and group the daemon will run as when the package is installed or upgraded:
fr: L'exemple de code suivant crée les utilisateur et groupe utilisés par le démon pour s'exécuter quand le paquet est installé ou mis à niveau :

en: 
    [...]
    case "$1" in
      install|upgrade)
    
      # If the package has default file it could be sourced, so that
      # the local admin can overwrite the defaults
    
      [ -f "/etc/default/<varname>packagename</varname>" ] &amp;&amp; . /etc/default/<varname>packagename</varname>
    
      # Sane defaults:
    
      [ -z "$SERVER_HOME" ] &amp;&amp; SERVER_HOME=<varname>server_dir</varname>
      [ -z "$SERVER_USER" ] &amp;&amp; SERVER_USER=<varname>server_user</varname>
      [ -z "$SERVER_NAME" ] &amp;&amp; SERVER_NAME="<varname>Server description</varname>"
      [ -z "$SERVER_GROUP" ] &amp;&amp; SERVER_GROUP=<varname>server_group</varname>
    
      # Groups that the user will be added to, if undefined, then none.
      ADDGROUP=""
    
      # create user to avoid running server as root
      # 1. create group if not existing
      if ! getent group | grep -q "^$SERVER_GROUP:" ; then
         echo -n "Adding group $SERVER_GROUP.."
         addgroup --quiet --system $SERVER_GROUP 2&gt;/dev/null ||true
         echo "..done"
      fi
      # 2. create homedir if not existing
      test -d $SERVER_HOME || mkdir $SERVER_HOME
      # 3. create user if not existing
      if ! getent passwd | grep -q "^$SERVER_USER:"; then
        echo -n "Adding system user $SERVER_USER.."
        adduser --quiet \
                --system \
                --ingroup $SERVER_GROUP \
                --no-create-home \
                --disabled-password \
                $SERVER_USER 2&gt;/dev/null || true
        echo "..done"
      fi
      # 4. adjust passwd entry
      usermod -c "$SERVER_NAME" \
              -d $SERVER_HOME   \
              -g $SERVER_GROUP  \
                 $SERVER_USER
      # 5. adjust file and directory permissions
      if ! dpkg-statoverride --list $SERVER_HOME &gt;/dev/null
      then
          chown -R $SERVER_USER:adm $SERVER_HOME
          chmod u=rwx,g=rxs,o= $SERVER_HOME
      fi
      # 6. Add the user to the ADDGROUP group
      if test -n $ADDGROUP
      then
          if ! groups $SERVER_USER | cut -d: -f2 | \
             grep -qw $ADDGROUP; then
               adduser $SERVER_USER $ADDGROUP
          fi
      fi
      ;;
      configure)
    
    [...]
fr: 
    [...]
    case "$1" in
      install|upgrade)
    
      # Si le paquet a un fichier « default » permettant à
      # l'administrateur local d'écraser les valeurs par défaut
    
      [ -f "/etc/default/<varname>nompaquet</varname>" ] &#38;&#38; . /etc/default/<varname>nompaquet</varname>
    
      # Valeurs par défaut correctes :
    
      [ -z "$SERVER_HOME" ] &#38;&#38; SERVER_HOME=<varname>rép_serveur</varname>
      [ -z "$SERVER_USER" ] &#38;&#38; SERVER_USER=<varname>utilisateur_serveur</varname>
      [ -z "$SERVER_NAME" ] &#38;&#38; SERVER_NAME="<varname>Description du serveur</varname>"
      [ -z "$SERVER_GROUP" ] &#38;&#38; SERVER_GROUP=<varname>groupe_serveur</varname>
    
      # Groupes auxquels l'utilisateur sera ajouté ; aucun si non défini.
      ADDGROUP=""
    
      # créer un utilisateur pour éviter d'exécuter le serveur en tant
      # que superutilisateur
      # 1. Créer le groupe s'il n'existe pas
      if ! getent group | grep -q "^$SERVER_GROUP:" ; then
         echo -n "Ajout du groupe $SERVER_GROUP.."
         addgroup --quiet --system $SERVER_GROUP 2>/dev/null ||true
         echo "fait"
      fi
      # 2. Créer un répertoire personnel s'il n'existe pas
      test -d $SERVER_HOME || mkdir $SERVER_HOME
      # 3. Créer un utilisateur s'il n'existe pas
      if ! getent passwd | grep -q "^$SERVER_USER:"; then
        echo -n "Ajout de l'utilisateur système $SERVER_USER.."
        adduser --quiet \
                --system \
                --ingroup $SERVER_GROUP \
                --no-create-home \
                --disabled-password \
                $SERVER_USER 2>/dev/null || true
        echo "fait"
      fi
      # 4. Ajuster l'entrée de mot de passe
      usermod -c "$SERVER_NAME" \
              -d $SERVER_HOME   \
              -g $SERVER_GROUP  \
                 $SERVER_USER
      # 5. Ajuster les droits des fichiers et répertoires
      if ! dpkg-statoverride --list $SERVER_HOME >/dev/null
      then
          chown -R $SERVER_USER:adm $SERVER_HOME
          chmod u=rwx,g=rxs,o= $SERVER_HOME
      fi
      # 6. Ajouter l'utilisateur au groupe ADDGROUP
      if test -n $ADDGROUP
      then
          if ! groups $SERVER_USER | cut -d: -f2 | \
             grep -qw $ADDGROUP; then
               adduser $SERVER_USER $ADDGROUP
          fi
      fi
      ;;
      configure)
    
    [...]

en: You have to make sure that the init.d script file:
fr: Assurez-vous que le fichier de script init.d :

en: Starts the daemon dropping privileges: if the software does not do the <citerefentry><refentrytitle>setuid</refentrytitle> <manvolnum>2</manvolnum></citerefentry> or <citerefentry><refentrytitle>seteuid</refentrytitle> <manvolnum>2</manvolnum></citerefentry> call itself, you can use the <literal>--chuid</literal> call of <command>start-stop-daemon</command>.
fr: démarre le démon en abandonnant les droits du superutilisateur : si le logiciel ne fait pas l'appel <citerefentry><refentrytitle>setuid</refentrytitle> <manvolnum>2</manvolnum></citerefentry> ou <citerefentry><refentrytitle>seteuid</refentrytitle> <manvolnum>2</manvolnum></citerefentry> lui-même, l'option <literal>--chuid</literal> de <command>start-stop-daemon</command> est utilisable.

en: Stops the daemon only if the user id matches, you can use the <command>start-stop-daemon</command> <literal>--user</literal> option for this.
fr: n'arrête le démon que si l'identifiant utilisateur correspond, l'option <literal>--user</literal> de <command>start-stop-daemon</command> permet de faire cela.

en: Does not run if either the user or the group do not exist:
fr: ne s'exécute pas si l'utilisateur ou le groupe n'existent pas :

en: 
      if ! getent passwd | grep -q "^<varname>server_user</varname>:"; then
         echo "Server user does not exist. Aborting" &gt;&amp;2
         exit 1
      fi
      if ! getent group | grep -q "^<varname>server_group</varname>:" ; then
         echo "Server group does not exist. Aborting" &gt;&amp;2
         exit 1
      fi
fr: 
      if ! getent passwd | grep -q "^<varname>utilisateur_serveur</varname>:"; then
         echo "L'utilisateur du serveur n'existe pas. Abandon" &#62;&#38;2
         exit 1
      fi
      if ! getent group | grep -q "^<varname>groupe_serveur</varname>:" ; then
         echo "Le groupe du serveur n'existe pas. Abandon" &#62;&#38;2
         exit 1
      fi

en: If the package creates the system user it can remove it when it is purged in its <emphasis>postrm</emphasis>. This has some drawbacks, however. For example, files created by it will be orphaned and might be taken over by a new system user in the future if it is assigned the same uid<footnote><para>Some relevant threads discussing these drawbacks include <ulink url="http://lists.debian.org/debian-mentors/2004/10/msg00338.html" /> and <ulink url="http://lists.debian.org/debian-devel/2004/05/msg01156.html" /></para> </footnote>. Consequently, removing system users on purge is not yet mandatory and depends on the package needs. If unsure, this action could be handled by asking the administrator for the prefered action when the package is installed (i.e. through <command>debconf</command>).
fr: Si le paquet crée l'utilisateur système, il peut le retirer lors de la purge en <emphasis>postrm</emphasis>. Cela a cependant quelques inconvénients. Par exemple les fichiers créés par cet utilisateur seront orphelins et pourraient être repris par un nouvel utilisateur système plus tard si le même identifiant utilisateur lui est attribué<footnote><para>Plusieurs discussions à propos de ces inconvénients ont déjà eu lieu comme <ulink url="http://lists.debian.org/debian-mentors/2004/10/msg00338.html" /> et <ulink url="http://lists.debian.org/debian-devel/2004/05/msg01156.html" />.</para></footnote>. Par conséquent, retirer les utilisateurs système lors de la purge n'est pas encore obligatoire et dépend des besoins du paquet. En cas de doute, cette action pourrait être faite en demandant à l'administrateur sa préfèrence lors du retrait du paquet (c'est-à-dire avec <command>debconf</command>).

en: Maintainers that want to remove users in their <emphasis>postrm</emphasis> scripts are referred to the <command>deluser</command>/<command>deluser</command> <literal>--system</literal> option.
fr: Les responsables qui souhaitent supprimer des utilisateurs dans leurs scripts <emphasis>postrm</emphasis> sont renvoyés à l'option <command>deluser</command>/<command>deluser</command> <literal>--system</literal>.

en: Running programs with a user with limited privileges makes sure that any security issue will not be able to damage the full system. It also follows the principle of <emphasis>least privilege</emphasis>. Also consider you can limit privileges in programs through other mechanisms besides running as non-root<footnote><para>You can even provide a SELinux policy for it</para></footnote>. For more information, read the <ulink name="Minimize Privileges" url="http://www.dwheeler.com/secure-programs/Secure-Programs-HOWTO/minimize-privileges.html" /> chapter of the <emphasis>Secure Programming for Linux and Unix HOWTO</emphasis> book.
fr: L'exécution de programmes avec un utilisateur ayant des droits restreints assure qu'aucun problème de sécurité ne pourra endommager tout le système. Cela suit aussi le principe du <emphasis>minimum de droits</emphasis>. Songez aussi à limiter les droits dans les programmes avec d'autres mécanismes que l'exécution en tant que non superutilisateur<footnote><para>Vous pouvez même fournir une politique SELinux pour cela.</para></footnote>. Pour de plus amples renseignements, consultez le chapitre <ulink url="http://www.dwheeler.com/secure-programs/Secure-Programs-HOWTO/minimize-privileges.html" name="Minimiser les droits" /> du livre <emphasis>HOWTO de programmation sécurisée pour Linux et UNIX</emphasis>.
