Date: 21 Jan 2002 18:01:45 +0100 From: Dag-Erling Smorgrav <des@ofug.org> To: "Andrey A. Chernov" <ache@nagual.pp.ru> Cc: mark@grondar.za, current@FreeBSD.ORG Subject: Re: Step6, corresponding /etc/pam.d/* fixes for review Message-ID: <xzplmervds6.fsf@flood.ping.uio.no> In-Reply-To: <20020121162726.GH37234@nagual.pp.ru> References: <20020121142038.GA36519@nagual.pp.ru> <xzpsn8zwwey.fsf@flood.ping.uio.no> <20020121154244.GC37234@nagual.pp.ru> <xzpbsfnwvfz.fsf@flood.ping.uio.no> <20020121161534.GE37234@nagual.pp.ru> <xzpu1tfvfib.fsf@flood.ping.uio.no> <20020121162726.GH37234@nagual.pp.ru>
next in thread | previous in thread | raw e-mail | index | archive | help
--=-=-=
"Andrey A. Chernov" <ache@nagual.pp.ru> writes:
> On Mon, Jan 21, 2002 at 17:24:28 +0100, Dag-Erling Smorgrav wrote:
> > - enable OPIE by default, with the no_fake_prompts option, leaving it
> > up to the admin to enable fake prompts if he so wishes
> I vote for this one.
I agree, for the reasons stated previously. Mark?
> > Please, I'm getting paid to do this :) Make yourself a cup of tea or
> > something and put your feet up on the desk for a couple of minutes.
> Ok, ok.
Here are the patches. Comments:
1) if pam_get_pass(), if the current token is non-null but empty,
ignore it. This allows a user to just press enter at an OPIE
prompt and still get a Unix prompt.
2) in pam_opie(8), clear the previous token before generating a
challenge, and ignore use_first_pass or try_first_pass instead of
returning PAM_AUTH_ERR if they are set.
3) in pam_opie(8), return PAM_AUTH_ERR if no_fake_prompts was
specified and the user hasn't set up OPIE.
4) in pam.d(5), enable OPIE by default (with the no_fake_prompts
option) in all policies, and use pam_opieaccess(8) to enforce
opieaccess and opiealways checks.
DES
--
Dag-Erling Smorgrav - des@ofug.org
--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment; filename=libpam.diff
Index: libpam/pam_get_pass.c
===================================================================
RCS file: /home/ncvs/src/lib/libpam/libpam/pam_get_pass.c,v
retrieving revision 1.3
diff -u -r1.3 pam_get_pass.c
--- libpam/pam_get_pass.c 30 Sep 2001 22:10:58 -0000 1.3
+++ libpam/pam_get_pass.c 21 Jan 2002 16:40:40 -0000
@@ -1,6 +1,13 @@
/*-
* Copyright 1998 Juniper Networks, Inc.
* All rights reserved.
+ * Copyright (c) 2002 Networks Associates Technologies, Inc.
+ * All rights reserved.
+ *
+ * Portions of this software was developed for the FreeBSD Project by
+ * ThinkSec AS and NAI Labs, the Security Research Division of Network
+ * Associates, Inc. under DARPA/SPAWAR contract N66001-01-C-8035
+ * ("CBOSS"), as part of the DARPA CHATS research program.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -10,6 +17,9 @@
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
@@ -78,6 +88,8 @@
retval = pam_get_item(pamh, PAM_AUTHTOK, &item);
if (retval != PAM_SUCCESS)
return retval;
+ if (item != NULL && *(const char *)item == '\0')
+ item = NULL;
}
if (item == NULL) {
Index: modules/pam_opie/pam_opie.8
===================================================================
RCS file: /home/ncvs/src/lib/libpam/modules/pam_opie/pam_opie.8,v
retrieving revision 1.5
diff -u -r1.5 pam_opie.8
--- modules/pam_opie/pam_opie.8 21 Jan 2002 13:43:52 -0000 1.5
+++ modules/pam_opie/pam_opie.8 21 Jan 2002 17:00:51 -0000
@@ -8,7 +8,6 @@
.\" Associates, Inc. under DARPA/SPAWAR contract N66001-01-C-8035
.\" ("CBOSS"), as part of the DARPA CHATS research program.
.\"
-.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
@@ -94,7 +93,21 @@
where the user's ability to retype
their own password
might be deemed sufficient.
+.It Cm no_fake_prompts
+Do not generate fake challenges for users who do not have an OPIE key.
+Note that this can leak information to a hypothetical attacker about
+who uses OPIE and who doesn't, but it can be useful on systems where
+some users want to use OPIE but most don't.
.El
+.Pp
+Note that
+.Nm
+ignores the standard options
+.Cm try_first_pass
+and
+.Cm use_first_pass ,
+since a challenge must be generated before the user can submit a valid
+response.
.Sh FILES
.Bl -tag -width ".Pa /etc/opiekeys" -compact
.It Pa /etc/opiekeys
Index: modules/pam_opie/pam_opie.c
===================================================================
RCS file: /home/ncvs/src/lib/libpam/modules/pam_opie/pam_opie.c,v
retrieving revision 1.15
diff -u -r1.15 pam_opie.c
--- modules/pam_opie/pam_opie.c 20 Jan 2002 20:56:47 -0000 1.15
+++ modules/pam_opie/pam_opie.c 21 Jan 2002 16:34:09 -0000
@@ -4,6 +4,8 @@
* Based upon code Copyright 1998 Juniper Networks, Inc.
* Copyright (c) 2001 Networks Associates Technologies, Inc.
* All rights reserved.
+ * Copyright (c) 2002 Networks Associates Technologies, Inc.
+ * All rights reserved.
*
* Portions of this software were developed for the FreeBSD Project by
* ThinkSec AS and NAI Labs, the Security Research Division of Network
@@ -53,10 +55,14 @@
#include <security/pam_modules.h>
#include "pam_mod_misc.h"
-enum { PAM_OPT_AUTH_AS_SELF=PAM_OPT_STD_MAX };
+enum {
+ PAM_OPT_AUTH_AS_SELF = PAM_OPT_STD_MAX,
+ PAM_OPT_NO_FAKE_PROMPTS
+};
static struct opttab other_options[] = {
{ "auth_as_self", PAM_OPT_AUTH_AS_SELF },
+ { "no_fake_prompts", PAM_OPT_NO_FAKE_PROMPTS },
{ NULL, 0 }
};
@@ -78,15 +84,6 @@
PAM_LOG("Options processed");
- /*
- * It doesn't make sense to use a password that has already been
- * typed in, since we haven't presented the challenge to the user
- * yet.
- */
- if (pam_test_option(&options, PAM_OPT_USE_FIRST_PASS, NULL) ||
- pam_test_option(&options, PAM_OPT_TRY_FIRST_PASS, NULL))
- PAM_RETURN(PAM_AUTH_ERR);
-
user = NULL;
if (pam_test_option(&options, PAM_OPT_AUTH_AS_SELF, NULL)) {
if ((pwd = getpwnam(getlogin())) == NULL)
@@ -102,11 +99,28 @@
PAM_LOG("Got user: %s", user);
/*
+ * If the no_fake_prompts option was given, and the user
+ * doesn't have an OPIE key, just fail rather than present the
+ * user with a bogus OPIE challenge.
+ */
+ /* XXX generates a const warning because of incorrect prototype */
+ if (pam_test_option(&options, PAM_OPT_NO_FAKE_PROMPTS, NULL))
+ if (opielookup(&opie, user) != 0)
+ PAM_RETURN(PAM_AUTH_ERR);
+
+ /*
* Don't call the OPIE atexit() handler when our program exits,
* since the module has been unloaded and we will SEGV.
*/
opiedisableaeh();
+ /*
+ * It doesn't make sense to use a password that has already been
+ * typed in, since we haven't presented the challenge to the user
+ * yet, so clear the stored password.
+ */
+ pam_set_item(pamh, PAM_AUTHTOK, NULL);
+
opiechallenge(&opie, (char *)user, challenge);
for (i = 0; i < 2; i++) {
snprintf(prompt, sizeof prompt, promptstr[i], challenge);
--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment; filename=pam_d.diff
Index: csshd
===================================================================
RCS file: /home/ncvs/src/etc/pam.d/csshd,v
retrieving revision 1.2
diff -u -r1.2 csshd
--- csshd 5 Dec 2001 21:26:00 -0000 1.2
+++ csshd 21 Jan 2002 16:41:57 -0000
@@ -5,4 +5,5 @@
#
# auth
-auth required pam_opie.so no_warn
+auth sufficient pam_opie.so no_warn no_fake_prompts
+auth requisite pam_opieaccess.so no_warn
Index: ftp
===================================================================
RCS file: /home/ncvs/src/etc/pam.d/ftp,v
retrieving revision 1.2
diff -u -r1.2 ftp
--- ftp 5 Dec 2001 21:26:00 -0000 1.2
+++ ftp 21 Jan 2002 16:41:57 -0000
@@ -8,7 +8,8 @@
auth required pam_nologin.so no_warn
#auth sufficient pam_kerberosIV.so no_warn
#auth sufficient pam_krb5.so no_warn
-#auth required pam_opie.so no_warn
+auth sufficient pam_opie.so no_warn no_fake_prompts
+auth requisite pam_opieaccess.so no_warn
#auth required pam_ssh.so no_warn try_first_pass
auth required pam_unix.so no_warn try_first_pass
Index: ftpd
===================================================================
RCS file: /home/ncvs/src/etc/pam.d/ftpd,v
retrieving revision 1.12
diff -u -r1.12 ftpd
--- ftpd 19 Jan 2002 18:29:49 -0000 1.12
+++ ftpd 21 Jan 2002 16:41:57 -0000
@@ -9,10 +9,9 @@
#auth sufficient pam_kerberosIV.so no_warn
#auth sufficient pam_krb5.so no_warn
#auth sufficient pam_ssh.so no_warn try_first_pass
-# Uncomment either pam_opie or pam_unix, but not both of them.
-# pam_unix can't be simple chained with pam_opie, ftpd provides proper fallback
-auth required pam_opie.so no_warn
-#auth required pam_unix.so no_warn try_first_pass
+auth sufficient pam_opie.so no_warn no_fake_prompts
+auth requisite pam_opieaccess.so no_warn
+auth required pam_unix.so no_warn try_first_pass
# account
#account required pam_kerberosIV.so
Index: imap
===================================================================
RCS file: /home/ncvs/src/etc/pam.d/imap,v
retrieving revision 1.2
diff -u -r1.2 imap
--- imap 5 Dec 2001 21:26:00 -0000 1.2
+++ imap 21 Jan 2002 16:41:57 -0000
@@ -6,6 +6,7 @@
# auth
#auth required pam_nologin.so no_warn
-#auth required pam_opie.so no_warn
+#auth sufficient pam_opie.so no_warn no_fake_prompts
+#auth requisite pam_opieaccess.so no_warn
#auth required pam_ssh.so no_warn try_first_pass
#auth required pam_unix.so no_warn try_first_pass
Index: kde
===================================================================
RCS file: /home/ncvs/src/etc/pam.d/kde,v
retrieving revision 1.2
diff -u -r1.2 kde
--- kde 5 Dec 2001 21:26:00 -0000 1.2
+++ kde 21 Jan 2002 16:41:57 -0000
@@ -6,7 +6,8 @@
# auth
auth required pam_nologin.so no_warn
-#auth sufficient pam_opie.so no_warn
+auth sufficient pam_opie.so no_warn no_fake_prompts
+auth requisite pam_opieaccess.so no_warn
#auth sufficient pam_kerberosIV.so no_warn try_first_pass
#auth sufficient pam_krb5.so no_warn try_first_pass
#auth required pam_ssh.so no_warn try_first_pass
Index: login
===================================================================
RCS file: /home/ncvs/src/etc/pam.d/login,v
retrieving revision 1.5
diff -u -r1.5 login
--- login 19 Jan 2002 18:29:49 -0000 1.5
+++ login 21 Jan 2002 16:41:57 -0000
@@ -6,7 +6,8 @@
# auth
auth required pam_nologin.so no_warn
-#auth sufficient pam_opie.so no_warn
+auth sufficient pam_opie.so no_warn no_fake_prompts
+auth requisite pam_opieaccess.so no_warn
#auth sufficient pam_kerberosIV.so no_warn try_first_pass
#auth sufficient pam_krb5.so no_warn try_first_pass
#auth required pam_ssh.so no_warn try_first_pass
@@ -24,7 +25,6 @@
session required pam_unix.so
# password
-#password sufficient pam_opie.so no_warn
#password sufficient pam_kerberosIV.so no_warn try_first_pass
#password sufficient pam_krb5.so no_warn try_first_pass
password required pam_unix.so no_warn try_first_pass
Index: other
===================================================================
RCS file: /home/ncvs/src/etc/pam.d/other,v
retrieving revision 1.2
diff -u -r1.2 other
--- other 5 Dec 2001 21:26:00 -0000 1.2
+++ other 21 Jan 2002 16:41:57 -0000
@@ -6,7 +6,8 @@
# auth
auth required pam_nologin.so no_warn
-#auth required pam_opie.so no_warn
+auth sufficient pam_opie.so no_warn no_fake_prompts
+auth requisite pam_opieaccess.so no_warn
auth required pam_unix.so no_warn try_first_pass
# account
Index: pop3
===================================================================
RCS file: /home/ncvs/src/etc/pam.d/pop3,v
retrieving revision 1.2
diff -u -r1.2 pop3
--- pop3 5 Dec 2001 21:26:00 -0000 1.2
+++ pop3 21 Jan 2002 16:41:57 -0000
@@ -6,6 +6,7 @@
# auth
#auth required pam_nologin.so no_warn
-#auth required pam_opie.so no_warn
+#auth sufficient pam_opie.so no_warn no_fake_prompts
+#auth requisite pam_opieaccess.so no_warn
#auth required pam_ssh.so no_warn try_first_pass
#auth required pam_unix.so no_warn try_first_pass
Index: su
===================================================================
RCS file: /home/ncvs/src/etc/pam.d/su,v
retrieving revision 1.5
diff -u -r1.5 su
--- su 19 Jan 2002 18:29:49 -0000 1.5
+++ su 21 Jan 2002 16:41:57 -0000
@@ -9,33 +9,45 @@
auth requisite pam_wheel.so no_warn auth_as_self noroot_ok
#auth sufficient pam_kerberosIV.so no_warn
#auth sufficient pam_krb5.so no_warn try_first_pass auth_as_self
-#auth required pam_opie.so no_warn
+auth sufficient pam_opie.so no_warn no_fake_prompts
+auth requisite pam_opieaccess.so no_warn
#auth required pam_ssh.so no_warn try_first_pass
auth required pam_unix.so no_warn try_first_pass nullok
-#auth sufficient pam_rootok.so no_warn
-##auth sufficient pam_kerberosIV.so no_warn
-##auth sufficient pam_krb5.so no_warn
-#auth required pam_opie.so no_warn auth_as_self
-#auth required pam_unix.so no_warn try_first_pass auth_as_self
# account
#account required pam_kerberosIV.so
#account required pam_krb5.so
account required pam_unix.so
-##account required pam_kerberosIV.so
-##account required pam_krb5.so
-#account required pam_unix.so
# session
#session required pam_kerberosIV.so
#session required pam_krb5.so
#session required pam_ssh.so
session required pam_unix.so
+
+# password
+password required pam_permit.so
+
+
+# If you want a "WHEELSU"-type su(1), then comment out the
+# above, and uncomment the entries below.
+## auth
+#auth sufficient pam_rootok.so no_warn
+##auth sufficient pam_kerberosIV.so no_warn
+##auth sufficient pam_krb5.so no_warn
+#auth required pam_opie.so no_warn auth_as_self no_fake_prompts
+#auth required pam_unix.so no_warn try_first_pass auth_as_self
+
+## account
+##account required pam_kerberosIV.so
+##account required pam_krb5.so
+#account required pam_unix.so
+
+## session
##session required pam_kerberosIV.so
##session required pam_krb5.so
##session required pam_ssh.so
#session required pam_unix.so
-# password
-password required pam_permit.so
+## password
#password required pam_permit.so
--=-=-=--
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?xzplmervds6.fsf>
