Skip to main content

A Python interface to MUNGE

Project description

pymunge is a Python wrapper for the C API of MUNGE, called
libmunge. pymunge provides functions and classes to create
and validate credentials with MUNGE, and to use and interact with
MUNGE contexts.

MUNGE (MUNGE Uid 'N' Gid Emporium, https://dun.github.io/munge/)
is an authentication service for creating and validating credentials
designed to be highly scalable for use in an HPC cluster environment.

Official pymunge repository: https://github.com/nomadictype/pymunge

PyPI project page: https://pypi.python.org/pypi/pymunge

API reference: https://pymunge.readthedocs.io/en/latest/


Install instructions
====================

Requirements:

* Python 3.4 or later (or Python 2.7 with the 'enum34' package).
* MUNGE 0.5.x or later.
* A munged daemon must be running on the same machine in order
for pymunge to be able to create and validate credentials.

Make sure that all the above requirements are satisfied. Afterwards,
there are several possible ways to proceed:

* To install pymunge from PyPI, run the following command (preferably
in a virtualenv)::

python3 -m pip install pymunge

* Alternatively, your OS distribution may include pymunge as a package,
with a name such as pymunge, python3-pymunge, or python-pymunge.

* pymunge can also be used directly without installation. Just ensure
that Python can find the pymunge package (for example by appending
the parent directory of the pymunge package to the PYTHONPATH
environment variable).


Getting started / Tutorial
==========================

This quick tutorial describes how to use the pymunge API. If you want,
you can follow along in an interactive Python 3 session; simply copy
all the code preceded by `>>>`.

First of all, import the package:

>>> import pymunge

The simplest way to encode (= create) and decode (= validate) credentials
is to use the `pymunge.encode()` and `pymunge.decode()` functions.
For example:

>>> cred = pymunge.encode(b"some payload")
>>> cred
b'MUNGE:AwQDAA...'

The credential `cred` can now be sent to some other process to decode it
(via a socket or some other IPC mechanism) -- this is the responsibility
of the program which uses pymunge, pymunge does not provide any functions
to do this! For testing purposes, you can also pipe the credential into
the `unmunge` program by hand. To keep this tutorial simple, let us
decode the credential directly in the same process::

>>> payload, uid, gid, ctx = pymunge.decode(cred)
>>> payload
b'some payload'

`pymunge.decode()` returns 4 values: the payload that was encapsulated
within the credential, the UID/GID of the process that created the
credential, and a MUNGE context. This context can be examined to
obtain additional information about the credential:

>>> ctx.cipher_type
<CipherType.AES128: 4>
>>> ctx.encode_time
1514469923
>>> ctx.ttl
300
>>> ctx.uid_restriction
-1

(Also try running `help(ctx)` to see a list of all attributes
a context can have.)

It is possible to encode and decode within existing MUNGE
contexts. This is useful to customize the options used to
encode a credential:

>>> with pymunge.MungeContext() as ctx:
>>> ctx.uid_restriction = 0 # allow only root to decode the credential
>>> cred = ctx.encode(b"some other payload")

Similarly, `MungeContext.decode()` can be used to decode within an
existing context.

This concludes the basic tutorial. A collection of similar examples
is provided in the file `pymunge_example.py` distributed with pymunge.


Author
======

pymunge was written by nomadictype (https://github.com/nomadictype/).

License
-------

Copyright (C) 2017-2018 nomadictype <nomadictype AT tutanota.com>

Like libmunge, pymunge is dual-licensed under GPL-3 and LGPL-3.
See LICENSE.txt for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pymunge-0.1.2.tar.gz (36.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pymunge-0.1.2-py2.py3-none-any.whl (18.0 kB view details)

Uploaded Python 2Python 3

File details

Details for the file pymunge-0.1.2.tar.gz.

File metadata

  • Download URL: pymunge-0.1.2.tar.gz
  • Upload date:
  • Size: 36.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for pymunge-0.1.2.tar.gz
Algorithm Hash digest
SHA256 1dd6c2efc4f38f69208703703fedfc50287be44aca1f4eaa4fd762297d6d6b76
MD5 db4275d7ae97819903234c09bb9378cf
BLAKE2b-256 7e1392f2b24b1d34939e40ef50384aae1830f40c6196c0b9633f0d94f0c60ac7

See more details on using hashes here.

File details

Details for the file pymunge-0.1.2-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for pymunge-0.1.2-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 f6731485552ebfa80a705deaa3f75535e6cb4ce4999c4a2f6e7749ce60fe860b
MD5 8f1fe9fd07c332399e09a88f71add63e
BLAKE2b-256 0ee871fc74b9d4dc913064c03f71b7875751e0094d81d032ac0f6d8d7d8c8d44

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page