summaryrefslogtreecommitdiff
path: root/openssh-6.6p1-kuserok.patch
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2024-07-03 02:42:38 +0000
committerCoprDistGit <infra@openeuler.org>2024-07-03 02:42:38 +0000
commit3c362eae690284f325824e38431881825e32ffdd (patch)
treed2d0e11b92bf88d35c270559d268845d391a4703 /openssh-6.6p1-kuserok.patch
parent62f0a34c39a6846b6a86f2bbc7fb8c319bd46d94 (diff)
automatic import of openssh
Diffstat (limited to 'openssh-6.6p1-kuserok.patch')
-rw-r--r--openssh-6.6p1-kuserok.patch289
1 files changed, 0 insertions, 289 deletions
diff --git a/openssh-6.6p1-kuserok.patch b/openssh-6.6p1-kuserok.patch
deleted file mode 100644
index 6e2c76a..0000000
--- a/openssh-6.6p1-kuserok.patch
+++ /dev/null
@@ -1,289 +0,0 @@
-diff -up openssh-7.4p1/auth-krb5.c.kuserok openssh-7.4p1/auth-krb5.c
---- openssh-7.4p1/auth-krb5.c.kuserok 2016-12-23 14:36:07.640465939 +0100
-+++ openssh-7.4p1/auth-krb5.c 2016-12-23 14:36:07.644465936 +0100
-@@ -56,6 +56,21 @@
-
- extern ServerOptions options;
-
-+int
-+ssh_krb5_kuserok(krb5_context krb5_ctx, krb5_principal krb5_user, const char *client,
-+ int k5login_exists)
-+{
-+ if (options.use_kuserok || !k5login_exists)
-+ return krb5_kuserok(krb5_ctx, krb5_user, client);
-+ else {
-+ char kuser[65];
-+
-+ if (krb5_aname_to_localname(krb5_ctx, krb5_user, sizeof(kuser), kuser))
-+ return 0;
-+ return strcmp(kuser, client) == 0;
-+ }
-+}
-+
- static int
- krb5_init(void *context)
- {
-@@ -160,8 +175,9 @@ auth_krb5_password(Authctxt *authctxt, c
- if (problem)
- goto out;
-
-- if (!krb5_kuserok(authctxt->krb5_ctx, authctxt->krb5_user,
-- authctxt->pw->pw_name)) {
-+ /* Use !options.use_kuserok here to make ssh_krb5_kuserok() not
-+ * depend on the existance of .k5login */
-+ if (!ssh_krb5_kuserok(authctxt->krb5_ctx, authctxt->krb5_user, authctxt->pw->pw_name, !options.use_kuserok)) {
- problem = -1;
- goto out;
- }
-diff -up openssh-7.4p1/gss-serv-krb5.c.kuserok openssh-7.4p1/gss-serv-krb5.c
---- openssh-7.4p1/gss-serv-krb5.c.kuserok 2016-12-23 14:36:07.640465939 +0100
-+++ openssh-7.4p1/gss-serv-krb5.c 2016-12-23 14:36:07.644465936 +0100
-@@ -67,6 +67,7 @@ static int ssh_gssapi_krb5_cmdok(krb5_pr
- int);
-
- static krb5_context krb_context = NULL;
-+extern int ssh_krb5_kuserok(krb5_context, krb5_principal, const char *, int);
-
- /* Initialise the krb5 library, for the stuff that GSSAPI won't do */
-
-@@ -92,6 +93,103 @@ ssh_gssapi_krb5_init(void)
- * Returns true if the user is OK to log in, otherwise returns 0
- */
-
-+/* The purpose of the function is to find out if a Kerberos principal is
-+ * allowed to log in as the given local user. This is a general problem with
-+ * Kerberized services because by design the Kerberos principals are
-+ * completely independent from the local user names. This is one of the
-+ * reasons why Kerberos is working well on different operating systems like
-+ * Windows and UNIX/Linux. Nevertheless a relationship between a Kerberos
-+ * principal and a local user name must be established because otherwise every
-+ * access would be granted for every principal with a valid ticket.
-+ *
-+ * Since it is a general issue libkrb5 provides some functions for
-+ * applications to find out about the relationship between the Kerberos
-+ * principal and a local user name. They are krb5_kuserok() and
-+ * krb5_aname_to_localname().
-+ *
-+ * krb5_kuserok() can be used to "Determine if a principal is authorized to
-+ * log in as a local user" (from the MIT Kerberos documentation of this
-+ * function). Which is exactly what we are looking for and should be the
-+ * preferred choice. It accepts the Kerberos principal and a local user name
-+ * and let libkrb5 or its plugins determine if they relate to each other or
-+ * not.
-+ *
-+ * krb5_aname_to_localname() can use used to "Convert a principal name to a
-+ * local name" (from the MIT Kerberos documentation of this function). It
-+ * accepts a Kerberos principle and returns a local name and it is up to the
-+ * application to do any additional checks. There are two issues using
-+ * krb5_aname_to_localname(). First, since POSIX user names are case
-+ * sensitive, the calling application in general has no other choice than
-+ * doing a case-sensitive string comparison between the name returned by
-+ * krb5_aname_to_localname() and the name used at the login prompt. When the
-+ * users are provided by a case in-sensitive server, e.g. Active Directory,
-+ * this might lead to login failures because the user typing the name at the
-+ * login prompt might not be aware of the right case. Another issue might be
-+ * caused if there are multiple alias names available for a single user. E.g.
-+ * the canonical name of a user is user@group.department.example.com but there
-+ * exists a shorter login name, e.g. user@example.com, to safe typing at the
-+ * login prompt. Here krb5_aname_to_localname() can only return the canonical
-+ * name, but if the short alias is used at the login prompt authentication
-+ * will fail as well. All this can be avoided by using krb5_kuserok() and
-+ * configuring krb5.conf or using a suitable plugin to meet the needs of the
-+ * given environment.
-+ *
-+ * The openEuler version of openssh contain two patches which modify the
-+ * access control behavior:
-+ * - openssh-6.6p1-kuserok.patch
-+ * - openssh-6.6p1-force_krb.patch
-+ *
-+ * openssh-6.6p1-kuserok.patch adds a new option KerberosUseKuserok for
-+ * sshd_config which controls if krb5_kuserok() is used to check if the
-+ * principle is authorized or if krb5_aname_to_localname() should be used.
-+ * The reason to add this patch was that krb5_kuserok() by default checks if
-+ * a .k5login file exits in the users home-directory. With this the user can
-+ * give access to his account for any given principal which might be
-+ * in violation with company policies and it would be useful if this can be
-+ * rejected. Nevertheless the patch ignores the fact that krb5_kuserok() does
-+ * no only check .k5login but other sources as well and checking .k5login can
-+ * be disabled for all applications in krb5.conf as well. With this new
-+ * option KerberosUseKuserok set to 'no' (and this is the default for
-+ * openEuler) openssh can only use krb5_aname_to_localname() with the
-+ * restrictions mentioned above.
-+ *
-+ * openssh-6.6p1-force_krb.patch adds a ksu like behaviour to ssh, i.e. when
-+ * using GSSAPI authentication only commands configured in the .k5user can be
-+ * executed. Here the wrong assumption that krb5_kuserok() only checks
-+ * .k5login is made as well. In contrast ksu checks .k5login directly and
-+ * does not use krb5_kuserok() which might be more useful for the given
-+ * purpose. Additionally this patch is not synced with
-+ * openssh-6.6p1-kuserok.patch.
-+ *
-+ * The current patch tries to restore the usage of krb5_kuserok() so that e.g.
-+ * localauth plugins can be used. It does so by adding a forth parameter to
-+ * ssh_krb5_kuserok() which indicates whether .k5login exists or not. If it
-+ * does not exists krb5_kuserok() is called even if KerberosUseKuserok is set
-+ * to 'no' because the intent of the option is to not check .k5login and if it
-+ * does not exists krb5_kuserok() returns a result without checking .k5login.
-+ * If .k5login does exists and KerberosUseKuserok is 'no' we fall back to
-+ * krb5_aname_to_localname(). This is in my point of view an acceptable
-+ * limitation and does not break the current behaviour.
-+ *
-+ * Additionally with this patch ssh_krb5_kuserok() is called in
-+ * ssh_gssapi_krb5_cmdok() instead of only krb5_aname_to_localname() is
-+ * neither .k5login nor .k5users exists to allow plugin evaluation via
-+ * krb5_kuserok() as well.
-+ *
-+ * I tried to keep the patch as minimal as possible, nevertheless I see some
-+ * areas for improvement which, if they make sense, have to be evaluated
-+ * carefully because they might change existing behaviour and cause breaks
-+ * during upgrade:
-+ * - I wonder if disabling .k5login usage make sense in sshd or if it should
-+ * be better disabled globally in krb5.conf
-+ * - if really needed openssh-6.6p1-kuserok.patch should be fixed to really
-+ * only disable checking .k5login and maybe .k5users
-+ * - the ksu behaviour should be configurable and maybe check the .k5login and
-+ * .k5users files directly like ksu itself does
-+ * - to make krb5_aname_to_localname() more useful an option for sshd to use
-+ * the canonical name (the one returned by getpwnam()) instead of the name
-+ * given at the login prompt might be useful */
-+
- static int
- ssh_gssapi_krb5_userok(ssh_gssapi_client *client, char *name)
- {
-@@ -116,7 +214,8 @@ ssh_gssapi_krb5_userok(ssh_gssapi_client
- /* NOTE: .k5login and .k5users must opened as root, not the user,
- * because if they are on a krb5-protected filesystem, user credentials
- * to access these files aren't available yet. */
-- if (krb5_kuserok(krb_context, princ, name) && k5login_exists) {
-+ if (ssh_krb5_kuserok(krb_context, princ, name, k5login_exists)
-+ && k5login_exists) {
- retval = 1;
- logit("Authorized to %s, krb5 principal %s (krb5_kuserok)",
- name, (char *)client->displayname.value);
-@@ -190,9 +289,8 @@ ssh_gssapi_krb5_cmdok(krb5_principal pri
- snprintf(file, sizeof(file), "%s/.k5users", pw->pw_dir);
- /* If both .k5login and .k5users DNE, self-login is ok. */
- if (!k5login_exists && (access(file, F_OK) == -1)) {
-- return (krb5_aname_to_localname(krb_context, principal,
-- sizeof(kuser), kuser) == 0) &&
-- (strcmp(kuser, luser) == 0);
-+ return ssh_krb5_kuserok(krb_context, principal, luser,
-+ k5login_exists);
- }
- if ((fp = fopen(file, "r")) == NULL) {
- int saved_errno = errno;
-diff -up openssh-7.4p1/servconf.c.kuserok openssh-7.4p1/servconf.c
---- openssh-7.4p1/servconf.c.kuserok 2016-12-23 14:36:07.630465944 +0100
-+++ openssh-7.4p1/servconf.c 2016-12-23 15:11:52.278133344 +0100
-@@ -116,6 +116,7 @@ initialize_server_options(ServerOptions
- options->gss_strict_acceptor = -1;
- options->gss_store_rekey = -1;
- options->gss_kex_algorithms = NULL;
-+ options->use_kuserok = -1;
- options->password_authentication = -1;
- options->kbd_interactive_authentication = -1;
- options->permit_empty_passwd = -1;
-@@ -278,6 +279,8 @@ fill_default_server_options(ServerOption
- if (options->gss_kex_algorithms == NULL)
- options->gss_kex_algorithms = strdup(GSS_KEX_DEFAULT_KEX);
- #endif
-+ if (options->use_kuserok == -1)
-+ options->use_kuserok = 1;
- if (options->password_authentication == -1)
- options->password_authentication = 1;
- if (options->kbd_interactive_authentication == -1)
-@@ -399,7 +402,7 @@ typedef enum {
- sPort, sHostKeyFile, sLoginGraceTime,
- sPermitRootLogin, sLogFacility, sLogLevel, sLogVerbose,
- sKerberosAuthentication, sKerberosOrLocalPasswd, sKerberosTicketCleanup,
-- sKerberosGetAFSToken, sKerberosUniqueCCache, sPasswordAuthentication,
-+ sKerberosGetAFSToken, sKerberosUniqueCCache, sKerberosUseKuserok, sPasswordAuthentication,
- sKbdInteractiveAuthentication, sListenAddress, sAddressFamily,
- sPrintMotd, sPrintLastLog, sIgnoreRhosts,
- sX11Forwarding, sX11DisplayOffset, sX11UseLocalhost,
-@@ -478,12 +481,14 @@ static struct {
- { "kerberosgetafstoken", sUnsupported, SSHCFG_GLOBAL },
- #endif
- { "kerberosuniqueccache", sKerberosUniqueCCache, SSHCFG_GLOBAL },
-+ { "kerberosusekuserok", sKerberosUseKuserok, SSHCFG_ALL },
- #else
- { "kerberosauthentication", sUnsupported, SSHCFG_ALL },
- { "kerberosorlocalpasswd", sUnsupported, SSHCFG_GLOBAL },
- { "kerberosticketcleanup", sUnsupported, SSHCFG_GLOBAL },
- { "kerberosgetafstoken", sUnsupported, SSHCFG_GLOBAL },
- { "kerberosuniqueccache", sUnsupported, SSHCFG_GLOBAL },
-+ { "kerberosusekuserok", sUnsupported, SSHCFG_ALL },
- #endif
- { "kerberostgtpassing", sUnsupported, SSHCFG_GLOBAL },
- { "afstokenpassing", sUnsupported, SSHCFG_GLOBAL },
-@@ -1644,6 +1649,10 @@ process_server_config_line(ServerOptions
- }
- break;
-
-+ case sKerberosUseKuserok:
-+ intptr = &options->use_kuserok;
-+ goto parse_flag;
-+
- case sMatch:
- if (cmdline)
- fatal("Match directive not supported as a command-line "
-@@ -2016,6 +2025,7 @@ copy_set_server_options(ServerOptions *d
- M_CP_INTOPT(client_alive_interval);
- M_CP_INTOPT(ip_qos_interactive);
- M_CP_INTOPT(ip_qos_bulk);
-+ M_CP_INTOPT(use_kuserok);
- M_CP_INTOPT(rekey_limit);
- M_CP_INTOPT(rekey_interval);
- M_CP_INTOPT(log_level);
-@@ -2309,6 +2319,7 @@ dump_config(ServerOptions *o)
- dump_cfg_fmtint(sKerberosGetAFSToken, o->kerberos_get_afs_token);
- # endif
- dump_cfg_fmtint(sKerberosUniqueCCache, o->kerberos_unique_ccache);
-+ dump_cfg_fmtint(sKerberosUseKuserok, o->use_kuserok);
- #endif
- #ifdef GSSAPI
- dump_cfg_fmtint(sGssAuthentication, o->gss_authentication);
-diff -up openssh-7.4p1/servconf.h.kuserok openssh-7.4p1/servconf.h
---- openssh-7.4p1/servconf.h.kuserok 2016-12-23 14:36:07.630465944 +0100
-+++ openssh-7.4p1/servconf.h 2016-12-23 14:36:07.645465936 +0100
-@@ -118,6 +118,7 @@ typedef struct {
- * authenticated with Kerberos. */
- int kerberos_unique_ccache; /* If true, the acquired ticket will
- * be stored in per-session ccache */
-+ int use_kuserok;
- int gss_authentication; /* If true, permit GSSAPI authentication */
- int gss_keyex; /* If true, permit GSSAPI key exchange */
- int gss_cleanup_creds; /* If true, destroy cred cache on logout */
-diff -up openssh-7.4p1/sshd_config.5.kuserok openssh-7.4p1/sshd_config.5
---- openssh-7.4p1/sshd_config.5.kuserok 2016-12-23 14:36:07.637465940 +0100
-+++ openssh-7.4p1/sshd_config.5 2016-12-23 15:14:03.117162222 +0100
-@@ -850,6 +850,10 @@ Specifies whether to automatically destr
- .Cm no
- can lead to overwriting previous tickets by subseqent connections to the same
- user account.
-+.It Cm KerberosUseKuserok
-+Specifies whether to look at .k5login file for user's aliases.
-+The default is
-+.Cm yes .
- .It Cm KexAlgorithms
- Specifies the available KEX (Key Exchange) algorithms.
- Multiple algorithms must be comma-separated.
-@@ -1078,6 +1082,7 @@ Available keywords are
- .Cm IPQoS ,
- .Cm KbdInteractiveAuthentication ,
- .Cm KerberosAuthentication ,
-+.Cm KerberosUseKuserok ,
- .Cm LogLevel ,
- .Cm MaxAuthTries ,
- .Cm MaxSessions ,
-diff -up openssh-7.4p1/sshd_config.kuserok openssh-7.4p1/sshd_config
---- openssh-7.4p1/sshd_config.kuserok 2016-12-23 14:36:07.631465943 +0100
-+++ openssh-7.4p1/sshd_config 2016-12-23 14:36:07.646465935 +0100
-@@ -73,6 +73,7 @@ ChallengeResponseAuthentication no
- #KerberosOrLocalPasswd yes
- #KerberosTicketCleanup yes
- #KerberosGetAFSToken no
-+#KerberosUseKuserok yes
-
- # GSSAPI options
- #GSSAPIAuthentication no