Skip to content
Snippets Groups Projects
Commit 7dacd6bb authored by Vincent Le gallic's avatar Vincent Le gallic Committed by root
Browse files

Makefile côté serveur.

parent dca1572b
No related branches found
No related tags found
No related merge requests found
......@@ -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
......@@ -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
......
......@@ -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 $*
......@@ -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:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment