diff --git a/Makefile b/Makefile
index 03df032b8ae489a992bfa09aa516c1a57ccfb87a..da9a566a2979c8d3964f6fbaad5075049ffdfef4 100644
--- a/Makefile
+++ b/Makefile
@@ -11,6 +11,12 @@ after=cmd_name = '${cmd_name}'
 before2=cmd_name=${cmd_original_name}
 after2=cmd_name=${cmd_name}
 
+# Path du sudoer-file utilisé pour autoriser l'accès au script serveur
+sudoer_file_path=/etc/sudoers.d/${cmd_name}
+# Groupe qui aura le droit de lire les fichiers de mot de passe
+# (indépendamment de pouvoir les déchiffrer)
+sudoer_group=respbats
+
 build:
 	@echo "Pour installer ${cmd_name} :"
 	@echo "Exécutez make install pour installer le client pour vous."
@@ -35,3 +41,9 @@ install:
 	@if [ "${cmd_name}" != "${cmd_original_name}" ]; then make --quiet rerename; fi
 
 install-server:
+	@echo "Création du sudoer-file."
+	@echo "# Autorisation locale d'éxécution de ${cmd_name}" > ${sudoer_file_path}
+	@echo " %${sudoer_group}   ALL=(root) NOPASSWD: /usr/local/bin/${cmd_name}-server" >> ${sudoer_file_path}
+	install server.py /usr/local/bin/${cmd_name}-server
+	install -d /etc/${cmd_name}
+	install serverconfig.example.py /etc/${cmd_name}/serverconfig.py
diff --git a/README b/README
index 7097b9e8c80ab60a618ce3c490b1ceca5ef9f6ba..881ceda47f6db3a28ca4aa9d0d387cb654317ce7 100644
--- a/README
+++ b/README
@@ -5,17 +5,29 @@ ordinateur) et le serveur.
 == Nom de la commande ==
 Si vous voulez appeler votre commande autrement que "cranspasswords",
 c'est possible. Il faut pour cela changer la variable cmd_name dans le Makefile
-avant de lancer make install.
+avant de lancer make install ou make install-server.
 
 == Installation et configuration du client ==
- * Copier le dépôt git sur votre machine :
+ * Copiez le dépôt git sur votre machine :
     $ git clone git://git.crans.org/git/cranspasswords.git 
- * Installer le package python-gnupg
+ * Installez le package python-gnupg
  * Si ce n'est déjà fait, indiquer votre clé publique sur gest_crans
  * Lancez make install
  * Assurez-vous d'avoir ~/bin dans votre $PATH
  * Exécutez cranspasswords test pour voir si vous arrivez à récupérer le mot de passe de test
 
+== Installation et configuration du serveur ==
+ * Copiez le dépôt git sur le serveur :
+    $ git clone git://git.crans.org/git/cranspasswords.git
+ * Lancez sudo make install-server
+  * Il va installer un suoder-file, si vous voulez paramétrer
+    le groupe qui aura les accès en lecture aux fichiers de mot de passe,
+    changez la variable sudoer_group au début de Makefile.
+    La possibilité de lire les fichiers est indépendante de la capacité
+    à les déchiffrer.
+ * Éditez /etc/cranspasswords/serverconfig.py pour qu'il soit conforme
+   à vos désirs.
+
 == Complétion ==
  * Pour avoir la bash-complétion, dans votre .bashrc :
   * Sourcez le fichier bash_completion présent dans le dépôt
diff --git a/server b/server
index a438404ba0f55f16137773f4534839928e59816f..973125b32dee36ac48328854ba44ffdbb9cbc686 100755
--- a/server
+++ b/server
@@ -2,4 +2,4 @@
 # sudo-wrapper pour exécuter cranspasswords côté serveur
 
 cmd_name=cranspasswords
-sudo /root/${cmd_name}/server.py $*
+sudo /usr/local/bin/${cmd_name}/server.py $*
diff --git a/server.py b/server.py
index aed4786c97236844f3391805c963cd05774ba3bc..427fd0f0a6b40a263f9bf770fa86990612a7feb1 100755
--- a/server.py
+++ b/server.py
@@ -13,7 +13,11 @@ import datetime
 from email.mime.text import MIMEText
 from email.mime.multipart import MIMEMultipart
 
-from serverconfig import READONLY, CRANSP_MAIL, DEST_MAIL, KEYS, ROLES, STORE, cmd_name
+# Même problème que pour le client, il faut bootstraper le nom de la commande
+# Pour accéder à la config
+cmd_name = os.path.split(sys.argv[0])[1].replace("-server", "")
+sys.path.append("/etc/%s/" % (cmd_name,))
+import serverconfig
 
 MYUID = pwd.getpwuid(os.getuid())[0]
 if MYUID == 'root':
@@ -26,13 +30,13 @@ def validate(roles, mode='r'):
     for role in roles:
         if mode == 'w':
             role += '-w'
-        if ROLES.has_key(role) and MYUID in ROLES[role]:
+        if serverconfig.ROLES.has_key(role) and MYUID in serverconfig.ROLES[role]:
             return True
     return False
 
 def getpath(filename, backup=False):
     """Récupère le chemin du fichier ``filename``"""
-    return os.path.join(STORE, '%s.%s' % (filename, 'bak' if backup else 'json'))
+    return os.path.join(serverconfig.STORE, '%s.%s' % (filename, 'bak' if backup else 'json'))
 
 def writefile(filename, contents):
     """Écrit le fichier avec les bons droits UNIX"""
@@ -43,15 +47,15 @@ def writefile(filename, contents):
 
 def listroles():
     """Liste des roles existant et de leurs membres"""
-    return ROLES
+    return serverconfig.ROLES
 
 def listkeys():
     """Liste les usernames et les (mail, fingerprint) correspondants"""
-    return KEYS
+    return serverconfig.KEYS
 
 def listfiles():
     """Liste les fichiers dans l'espace de stockage, et les roles qui peuvent y accéder"""
-    os.chdir(STORE)
+    os.chdir(serverconfig.STORE)
     
     filenames = glob.glob('*.json')
     files = {}
@@ -128,14 +132,14 @@ def backup(corps, fname, old):
 def notification(subject, corps, fname, old):
     """Envoie par mail une notification de changement de fichier"""
     conn = smtplib.SMTP('localhost')
-    frommail = CRANSP_MAIL
-    tomail = DEST_MAIL
+    frommail = serverconfig.CRANSP_MAIL
+    tomail = serverconfig.DEST_MAIL
     msg = MIMEMultipart(_charset="utf-8")
     msg['Subject'] = subject
-    msg['X-Mailer'] = cmd_name.decode()
-    msg['From'] = CRANSP_MAIL
-    msg['To'] = DEST_MAIL
-    msg.preamble = u"%s report" % (cmd_name.decode(),)
+    msg['X-Mailer'] = serverconfig.cmd_name.decode()
+    msg['From'] = serverconfig.CRANSP_MAIL
+    msg['To'] = serverconfig.DEST_MAIL
+    msg.preamble = u"%s report" % (serverconfig.cmd_name.decode(),)
     info = MIMEText(corps + 
         u"\nLa version précédente a été sauvegardée." +
         u"\n\n-- \nCranspasswords.py", _charset="utf-8")
@@ -150,7 +154,7 @@ if __name__ == "__main__":
     if len(argv) not in [1, 2]:
         sys.exit(1)
     command = argv[0]
-    if READONLY and command in WRITE_COMMANDS:
+    if serverconfig.READONLY and command in WRITE_COMMANDS:
         raise IOError("Ce serveur est read-only.")
     filename = None
     try: