Fix previous commit.
[pwmd.git] / README
blob07e2f18dfd323ae67f9c65ed9e90f08b60849476
1 Password Manager Daemon is a server that provides a way for applications to
2 securely store and retrieve data at a centralized location. The data is stored
3 in an XML file and clients connect and send commands to manipulate the data.
4 It mimics a filesystem in many ways with commands to store, copy, move and
5 delete elements.
7 There are quite a few password managers around and pwmd is similar to most.
8 The need for pwmd is that gnupg keys stored on a smartcard cannot be cached in
9 gpg-agent and therefore each access to a datafile would require the smartcard
10 present to decrypt it. Pwmd decrypts the datafile once and caches it in memory
11 and has it's own cache expiration settings rather than using the gpg-agent
12 cache.
14 You may also find pwmd useful if you have a few applications that require the
15 same credentials but hate having to update all those configuration files to
16 reflect any changes. The data file can be edited once with a pwmd client and
17 other clients can retrieve the updated shared info.  Similar to how a symbolic
18 link on a filesystem works. See the "Target Attribute" in the documentation
19 for details.
21 Some other features include:
23     * Multi-threaded. More than one client may access the data at the same
24       time
25     * OpenPGP encrypted XML data files via GnuPG with smartcard support
26     * Remote network connections via libpwmd over GnuTLS or SSH via a proxy
27     * Configuration file which supports file specific settings including:
28       cache expiration, passphrase file and more
29     * Logging to file and/or syslog
30     * Secure memory usage. Pwmd will zero out memory before freeing it and
31       also has the option to lock the entire process in RAM to avoid swapping
32       the data to virtual memory
33     * Per file and element ACL's including connections over TLS
36 Requirements:
37 -------------
38     C99 compiler - http://www.gnu.org/software/gcc
39                    Has been tested to work. Others should work fine, too.
41     libassuan    - ftp://ftp.gnupg.org/gcrypt/libassuan
42                    Protocol. Version 2.0.2 or later is required. Version
43                    2.1.0 or later is recommended for UDS peer credential
44                    checking on OS's other than Linux.
46     libgpg-error - http://www.gnupg.org
47                    Error handling. Version 1.18 or later is required.
49     gpg-agent    - http://www.gnupg.org
50                    Keypair generation, decryption and caching. Version 2.1.15
51                    or later is required.
53     pinentry     - http://www.gnupg.org
54                    Normally required for passphrase retrieval from gpg-agent.
56     libxml2      - http://xmlsoft.org
57                    Required for XML parsing and data manipulation.
59     libgpgme     - http://www.gnupg.org
60                    For data file crypto operations. Version 1.7.0 or later is
61                    required.
63     libgcrypt    - http://www.gnupg.org
64                    Cache encryption and hashing. Version 1.5.0 or later is
65                    required.
67     libgnutls    - http://www.gnu.org/software/gnutls/
68                    For encrypted connections over a TCP network. Version
69                    3.3.0 or later. Optional.
72 Installation:
73 -------------
74 ./configure && make install
76 For TLS support, pass --enable-gnutls to ./configure.
78 Typing 'pwmd' will start the server and wait for connections to
79 ~/.pwmd/socket.  Passing --allow-preset-passphrase to gpg-agent is recommended
80 and gpg-agent option --allow-loopback-pinentry is required if using a keyfile
81 or connecting over TLS. These options can be added to the gpg-agent.conf
82 configuration file in the gnupg home directory (~/.pwmd/.gnupg). See the
83 gpg-agent(1) manual page for details about these options and the pwmd
84 documentation for details about the location of the GnuPG home directory.
87 Connecting:
88 -----------
89 Any program that can connect to a UNIX domain socket will work although using
90 pwmc, a client included with libpwmd, is recommended:
92     echo command | pwmc filename
93 or interactively
94     pwmc filename
96     socat UNIX-CONNECT:$HOME/.pwmd/socket -
98 A much more user-friendly full featured client QPwmc is also available. It has
99 a nice Qt GUI and is much easier to use. See http://qpwmc.sourceforge.net/ for
100 details.
102 Please read pwmd.info manual for protocol commands, syntax and
103 configuration details. A HTML version is also available in doc/pwmd.html.
106 GIT Repository
107 --------------
108 There is a public GIT repository available at repo.or.cz. Anonymous checkouts
109 can be done by doing:
111     git clone git://repo.or.cz/pwmd.git
112     or from the mirror:
113     git clone https://gitlab.com/bjk/pwmd.git
115 The gitweb interface can be viewed at:
117     http://repo.or.cz/w/pwmd.git
118     or
119     https://gitlab.com/bjk/pwmd
122 Mailing lists
123 -------------
124 For pwmd:
125 https://lists.sourceforge.net/lists/listinfo/pwmd-devel
127 And for libpwmd:
128 https://lists.sourceforge.net/lists/listinfo/libpwmd-devel
131 Issue tracker:
132 --------------
133 Please send any bug reports, feature requests or patches to the issue tracker
134 at Gitlab: https://gitlab.com/bjk/pwmd/issues.
137 Ben Kibbey <bjk@luxsci.net>
138 http://pwmd.sourceforge.net/