-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathINSTALL
338 lines (266 loc) · 13.7 KB
/
INSTALL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
OTPasswd - One-Time Password Authentication System
--------------------------------------------------
https://savannah.nongnu.org/projects/otpasswd
Updated: 02-Oct-13 (v0.8)
INSTALLATION GUIDE
Contents
========
0. Introduction
1. Installation Overview
2. Package Dependencies
3. Installation - Source Package
4. System Configuration
5. User Configuration
6. PAM Configuration
9. Copyright
0. Introduction
===============
OTPasswd can easily be configured to work in conjunction with any text-based
PAM-aware application, such as sudo, su, ftp, or any standard *nix console
login. The typical use case for OTPasswd by far, however, is to secure
non-publickey SSH logins, which is what will be described in this section.
Short installation steps:
$ cmake . -DNLS=1
$ make
# make install
# Set ChallengeResponseAuthentication and UsePAM to yes in sshd_config
# Enable otpasswd in PAM (see examples).
You need cmake and libpam-dev.
In case of problems you can always check your configuration with:
$(which agent_otp) --check-config
Operational Mode
----------------
OTPasswd is able to run in two slightly different modes, which are
distinguished by the location of the stored user data (called `the
state'). By default OTPasswd works in a less intrusive mode called
`USER DB'. Changing mode is an essential configuration choice that
must be understood well by the system administrator.
In the 'USER DB' mode, a user's state is stored in the user's home directory.
Because of this, the OTPasswd agent does not need escalated SUID privileges
to access and modify the user's state. As a consequence, however, the user's
data may be changed by the user at will. This prevents OTPasswd from
effectively enforcing various security policies. Among other things, it
permits a user to create a situation where one-time passwords (passcodes) are
reused, which could be interpreted as effectively defeating the entire point
behind OTP authentication. It should be noted that if the system user-base is
trusted, competent, and conversant in IT security issues, this may not be a
relevant concern. In any event, the USER DB mode effectively implies that
OTPasswd security is optional.
In the second operational mode, the 'GLOBAL DB' mode, every user's state is
stored in a single database under system control. This operational mode may
use a number of backend database interfaces, such as a flat-file, usually
/etc/otpasswd/otshadow, or (not yet implemented) LDAP/MySQL database. The
user has no read/write access to the configuration and state data, and hence
the system is capable of enforcing OTPasswd security policies. As an example,
GLOBAL DB mode ensures that passcodes are never reused. This mode of operation
does require that the OTPasswd agent be installed as SUID root, which may be
viewed by some as being undesirable since this may present a security exposure
in its own right. It should be stressed, however, that the OTPasswd software
was written in a manner observant of secure coding practices, and while the
agent is installed SUID root, it merely uses these privileges to read its
configuration files and then it promptly drops the root privileges. Or, put
another way, the OTPasswd agent only holds root privileges for a brief time
during which it never processes any user input. The benefit of this approach
is that the GLOBAL DB mode allows the system administrator to choose whether
OTPasswd security is optional, or mandatory.
To even increase security the OTPasswd console utility was split into two
executables: utility (otpasswd) and agent (agent_otp). Only the latter is given
the root privileges, but it's completely bereft of any user interface, which is
implemented in the utility. This division ensures the user won't be able to
suspend execution of the agent while it has locked the global database.
1. Installation Overview
========================
To compile, install, and configure OTPasswd to work with SSH you must
complete the following steps:
0. Have all required dependencies
1. Install the package
2. Tweak OTPasswd configuration
3. Generate a user key (and print at least one passcard)
4. Enable OTPasswd in /etc/pam.d
5. Configure SSH to use PAM authentication
Be aware that if OTPasswd is installed over an SSH connection, it is possible
to inadvertently become "locked-out". This can happen if OTPasswd is enabled
for SSH logins prior to having generated an initial set of passcodes, which
in turn requires the generation of a OTPasswd user key. The installation
procedure outlined above is intended to minimize the likelihood that this
will happen.
2. Package Dependencies
=======================
OTPasswd may be installed either through compilation from source, or
if available, from a pre-compiled binary package. Prefer distribution
packages if possible.
OTPasswd has no external runtime dependencies except for
PAM. Additional packages are required when OTPasswd is compiled from
source, namely, the CMake cross-platform build system, as well as the
corresponding development packages for PAM. To generate documentation
of internal API one is required to install Doxygen. All of these
packages should be available in your distribution's repositories.
Packages you need:
* cmake
* libpam-dev (usually libpam0g-dev)
* compilers (build-essential for Debian / Ubuntu)
* doxygen
3. Installation (Source Package)
================================
Check to see if a pre-compiled binary package is available for OTPasswd
in your distribution's package manager. If so, then install it as you
would any other package. Otherwise, you will need to compile OTPasswd
from source, as follows:
$ cd otpasswd
$ cmake -DNLS=1 . # Generate makefiles (You can add -DDEBUG=1)
$ make # Compile everything
On Linux distributions you can install OTPasswd into the system
by running as root a following command:
$ make install
If you would prefer to perform the final installation step manually,
then instead of using 'make install' you can copy the following files:
a) PAM module 'pam_otpasswd.so'
Linux: /lib/security/
FreeBSD: /usr/lib
b) Utility program 'otpasswd' and agent 'otp_agent'
Linux: /usr/bin/
FreeBSD: /usr/local/bin/
c) PAM configuration
Copy into /etc/pam.d one of files:
Linux: example/otpasswd-login
FreeBSD: example/otpasswd-login_FreeBSD
d) OTPasswd configuration
'example/otpasswd.conf' -> /etc/otpasswd/otpasswd.conf
Using GLOBAL DB
---------------
When using 'GLOBAL DB' mode you should:
* Create a unique system user exclusively for OTPasswd, 'otpasswd' is
recommended.
** adduser --system --no-create-home otpasswd
* Directory /etc/otpasswd should be owned by this selected user.
* `agent_otp' and `otpasswd' should be owned by root.
* `agent_otp' should be SETUID root.
* Set DB option to GLOBAL in otpasswd configuration file.
By default, no OTPasswd binaries are SUID. If choosing a non-standard
name for user please remember to update config file accordingly.
To run test suite you'd best install the otpasswd in the system
(before updating PAM configuration) and then run tests. To run them in
the source directory you need to compile otpasswd with -DDEBUG and
place default config in /etc directory.
4. System Configuration
=======================
OTPasswd is configured via the /etc/otpasswd/otpasswd.conf file. Upon
initial installation, otpasswd.conf located in this directory will
contain a template of all valid configuration options along with
copious commentary. A pristine version of this file should be
available in the OTPasswd package documentation directory of your
system's /usr/share hierarchy. Default file should allow for
out-of-the-box usage with USER DB mode.
The most important configuration setting is the "DB" option. The DB option
can be set as follows:
DB=user
-------
In this mode, OTPasswd stores user state information in the user's
home directory. As a result, the OTPasswd agent doesn't require
any SUID privilege, and can be run in the user's security context.
Note that even if the agent is installed with the SUID flag, it
will drop privileges immediately after reading the configuration file.
The major disadvantage of this mode is that since the user has complete
access to his state file, it is impossible to guarantee all aspects of
system security policy compliance. Among other things, a user could cause
passcode recycling/reuse through manipulation of state file information.
DB=global
---------
This mode uses a system-wide configuration database. The default
location for this database is /etc/otpasswd/otshadow. The database
file and directory which contains it must be owned by a special user
created for OTPasswd use, and it MUST not be readable for normal users.
Since all critical data is under system control, system security policies
can be enforced. However, the OTPasswd agent must be granted SUID
privilege to the OTPasswd UID to enable access to this database on the
user's behalf.
DB=mysql
--------
(Not currently implemented) The user state information is stored in a
MySQL database. The database access password is stored in the OTPasswd
configuration file /etc/otpasswd/otpasswd.conf, so this file must be
readable only by the special OTPasswd UID described above. The OTPasswd
utility must be run with SUID privilege to gain access the configuration
file, however privileges are dropped promptly after reading the file.
DB=ldap
-------
(Not currently implemented) The user state information is stored in an
LDAP database. See the DB=mysql description above for more information.
5. User Configuration
=====================
Generate OTPasswd Key & Print Passcard
-----------------------------------------
To use OTPasswd, a user is required to have a cryptographic key, which is
then used to generate the user's passcodes. To generate this key, ensure
that you are logged in as the user for whom you want to create the key,
then issue the following command:
$ otpasswd --key
An administrator may generate a key for any user, as follows:
$ otpasswd --key --user tux
Be aware that OTPasswd, by default, generates a key which is not compatible
with the PPPv3.1 specification. If you would like to retain compatibility
with the specification and thereby also retain interoperability with other
PPPv3 applications, you may either change the default behavior by modifying
the SALT_DEF parameter in the otpasswd.conf configuration file, or add
the --config salt=off flag during key generation as in the following example:
$ otpasswd --config salt=off --key
You may also combine other flags with key generation (-k), to set contact
or label like this:
$ otpasswd -c label=Home -c contact=012689 -c alphabet=2 -c codelength=6 -k
Note: As mentioned above, if OTPasswd is being configured over an SSH
session, it is conceivable that one can lose one's ability to log back
in after any key change since one will not yet have any valid passcodes.
Because of this, the OTPasswd utility will immediately print a passcard
upon key generation. The prudent user would be wise to either print
this passcard, or minimally jot down the first few passcodes. You have
been warned.
6. PAM Configuration
====================
Debian package comes with a PAM otpasswd profile in
<examples/pam-configs/otpasswd> which after installation in
</usr/share/pam-configs> can be easily enabled and disabled using
`pam-auth-update' command. This method of PAM installation is
preferred on all systems which support it.
To enable OTPasswd use with SSH, pam_otpasswd must be called
inside the `auth' PAM stack, right after the default pam_unix module.
An example pam.d configuration file is in <examples/otpasswd-login>.
One can move otpasswd-login example to /etc/pam.d directory and set it
up for ssh instead of the original authentication stack by
substituting:
From:
auth include system-remote-login
to:
auth include otpasswd-login
Consult the section titled 'About PAM' in the <docs/security> document
for more detailed information.
PAM Configuration - OpenSSH
---------------------------
While it would technically also be possible for OTPasswd to be used in
GUI-based PAM applications, as one might find in the KDE or Gnome desktops,
the necessary GUI layers do not presently exist. The typical use case for
OTPasswd by far, however, is to secure non-publickey SSH logins, which is
what will be described in this section.
The OpenSSH daemon's (SSHD) configuration is usually located in the file
'/etc/ssh/sshd_config'. Ensure that this file contains the following
two lines:
ChallengeResponseAuthentication yes
UsePAM yes
It is entirely possible that these two configuration settings are already
enabled, and that no modification is required. If the file must be modified,
it should contain no other uncommented instances of either keyword.
Note that it is always advisable to make a backup copy of configuration
files prior to making any changes.
PAM Configuration - su
----------------------
As an example of the flexibility that OTPasswd is able to offer by using
the PAM (Pluggable Authentication Modules) Library, once OTPasswd has
been configured it is easy to incorporate OTP authentication with other
PAM-aware applications. The su(1) command is easily secured by OTPasswd
by modifying its PAM configuration, as is described in this section.
OTPasswd also works with xscreensaver.
9. Copyright
============
Copyright (c) 2010-2013 Tomasz bla Fortuna
This file is part of OTPasswd. See README file for licensing
information.
###