summaryrefslogtreecommitdiff
path: root/src/Team_Password_Management.ascii
diff options
context:
space:
mode:
Diffstat (limited to 'src/Team_Password_Management.ascii')
-rw-r--r--src/Team_Password_Management.ascii112
1 files changed, 112 insertions, 0 deletions
diff --git a/src/Team_Password_Management.ascii b/src/Team_Password_Management.ascii
new file mode 100644
index 0000000..b48fb36
--- /dev/null
+++ b/src/Team_Password_Management.ascii
@@ -0,0 +1,112 @@
+Team Password Management
+========================
+:author: Aaron Ball
+:email: nullspoon@iohq.net
+
+
+== {doctitle}
+
+A while back I started looking for alternate means to manage my passwords,
+specifically because I started playing more with pgp encryption. I thought it'd
+be neat to be able to use pgp to encrypt a password database and/or use git to
+version the passwords. It turns out that someone had the idea before I did: the
+developers of password-store.
+
+Password-store, or pass, is a [very impressive] command line bash script that
+uses git to version passwords, and pgp keys to encrypt/decrypt each password.
+Specifically to this post though, it implements support for something that
+pgp/gpg supports: the --encrypt-to switch.
+
+
+== gpg --encrypt-to
+
+The --encrypt-to switch for the gpg command allows for encryption of the given
+stream to multiple recipients. For the purposes of password management, it
+allows for each user of the password database to add their pgp key to the
+_.gpg-id_ file. The effect is that each subsequent save of the given password
+re-encrypts it using every pgp key listed in the .gpg-id file.
+
+Effectively, each user of the password repo can have their own password (the
+password to their pgp privat key), whilst not knowing the passwords other
+members are using. This means that if for example, an employee leaves the
+company, the remaining repo members can just remove that person's key from the
+\.gpg-id file, and all further changes (regenerations) of the passwords will
+not be encrypted with the departed employee's key, thus revoking their access.
+
+
+== Setup
+
+Setup for this is fairly simple, if you're accustomed to using git and gpg/pgp.
+The commands for pass are very intuitive.
+
+To create a pass database (assuming you already have it installed), execute...
+
+----
+pass init user@gpg-id-to-be-used.com
+----
+
+To add other user's pgp keys, just add their ids to the .gpg-id file located at
+\~/.password-store/.gpg-id. Each password created after that will be encrypted
+to each user listed in that file.
+
+Note: Remember that each key that you're adding to the .gpg-id file must at
+ least have marginal trust in gpg.
+
+
+== Questions
+
+=== What about arbitrary users adding themselves to .gpg-id?
+
+The nice thing about gpg is that it will not allow usage of the --encrypt-to
+switch (amongst other switches) without a measure of trust given the key in
+question. This means that if any user does add their key to the .gpg-id file,
+every subsequent password change will yield an error, indicating that the
+password file cannot be encrypted to the given untrusted key.
+
+Another perk to pass is that it versions all changes to the password "database"
+in git, so the user who added their key to the .gpg-id file will have left a
+log entry (assuming they didn't rewrite history to conceal their subterfuge),
+and thus they can be dealt with appropriately.
+
+
+=== What if I want to run more than one database?
+
+Add the following to your .bashrc file.
+
+----
+#
+# Function to override calls to pass binary. Allows for multiple password-store
+# backends. Based on the first argument given to "pass", selects a different
+# password store backend.
+#
+# Example Usage:
+# # Will edit default password-store foo
+# pass edit foo
+#
+# # Will edit alternate, team, password-store foo
+# pass team edit foo
+#
+function pass {
+ alt='team'
+ if [[ ${1} == ${alt} ]]; then
+ export PASSWORD_STORE_DIR=~/.password-store.${alt}
+ # Shift off the first argument
+ shift
+ else
+ export PASSWORD_STORE_DIR=~/.password-store
+ fi
+
+ # Call the actual binary
+ /usr/bin/pass ${@}
+}
+----
+
+That will override calls to the pass binary (usually /usr/bin/pass),
+intercepting the first argument. If the first argument is team, it will look in
+\~/.password-store.team for passwords. If the first argument is not team, then
+it looks in the default location, ~/.password-store.
+
+
+Category:Security
+Category:Encryption
+// vim: set syntax=asciidoc:

Generated by cgit