On (08/12/14 10:11), Pavel Reichl wrote: > >On 12/05/2014 10:47 AM, Lukas Slebodnik wrote: >>On (13/11/14 12:24), Pavel Reichl wrote: >>>On 06/04/2014 07:49 PM, Pavel Reichl wrote: >>>>On Wed, 2014-06-04 at 16:11 +0200, Jakub Hrozek wrote: >>>>>On Wed, Jun 04, 2014 at 09:58:20AM +0200, Sumit Bose wrote: >>>>>>On Wed, Jun 04, 2014 at 08:42:21AM +0200, Jakub Hrozek wrote: >>>>>>>On Tue, Jun 03, 2014 at 04:22:51PM -0400, Simo Sorce wrote: >>>>>>>>On Tue, 2014-06-03 at 15:52 -0400, Stephen Gallagher wrote: >>>>>>>>>On 06/03/2014 08:26 AM, Pavel Reichl wrote: >>>>>>>>>>Hello, >>>>>>>>>> >>>>>>>>>>I noticed that if using simple access provider and having >>>>>>>>>>non-existing group or user in access/deny list then access will be >>>>>>>>>>denied and "su: System error" will be printed. >>>>>>>>>> >>>>>>>>>>I think it's OK to simply skip non-existing objects on allow_list. >>>>>>>>>> >>>>>>>>>>I'm not so sure what to do in case of deny lists. Should we also >>>>>>>>>>just skip them or should we deny the user and print more >>>>>>>>>>appropriate message ("su: Permission denied")? >>>>>>>>>I agree that skipping (and logging) on allow lists is fine. >>>>>>>>> >>>>>>>>>For deny lists, it implies that either 1) the admin typoed the >>>>>>>>>user/group name in the list or 2) that the user/group was removed from >>>>>>>>>LDAP. >>>>>>>>> >>>>>>>>>In the first case, we're potentially dealing with privilege leakage >>>>>>>>>(someone who shouldn't have access has it due to an admin >>>>>>>>>misconfiguration). In the second case, this is perhaps just normal >>>>>>>>>operating changes and shouldn't require client modification. >>>>>>>>> >>>>>>>>>As I type this, I become more certain that the correct approach here >>>>>>>>>should be to log this with a better message (in both >>>>>>>>>SSSDBG_CRIT_FAILURE and sss_log) and just proceed as if it didn't >>>>>>>>>exist. >>>>>>>>> >>>>>>>>>A better message would perhaps be: >>>>>>>>>"The [user|group] %s does not exist. Possible typo in >>>>>>>>>simple_[allow|deny]_[users|groups]" >>>>>>>>The secure thing to do is to fail, because you do not know with >>>>>>>>certainty who should be allowed. >>>>>>>So if an admin typoes a group, noone can log in? That might effectivelly >>>>>>>lock out legitimate access that would subsequently use sudo vi to fix the >>>>>>>typo.. >>>>>>I think we can skip with a log message in the allow case because then >>>>>>access is still only allowed if another entry matches. >>>>>> >>>>>>In the deny case I would prefer a reject as well. With this we would >>>>>>make the allow list more comfortable to use and people might rethink >>>>>>their deny list usage in environments where groups are often deleted or >>>>>>renamed. >>>>>> >>>>>>bye, >>>>>>Sumit >>>>>OK, that sounds like a far compromise. I also hope noone would use the >>>>>deny list then. Thanks! >>>>Hello, >>>>new patches are attached. >>>> >>>>1st patch: >>>>I amended the debug messages as Stephen suggested. >>>>Non-existing objects are ignored on allow lists, but imply access denied >>>>on deny lists. >>>> >>>>2nd patch: >>>>amended mam page - documenting missing objects from deny lists. >>>> >>>>3rd patch: >>>>Minor optimization - don't continue matching username with names from >>>>simple_allow_list after successful match. >>>> >>>I have rebased 1st and 3rd patch as there are users who might benefit from >>>the changes immediately. >>>From d4e70ce1c81476e4546709c898c75afb881d7b9c Mon Sep 17 00:00:00 2001 >>>From: Pavel Reichl <prei...@redhat.com> >>>Date: Wed, 4 Jun 2014 17:41:31 +0100 >>>Subject: [PATCH 1/3] simple access provider: non-existing object >>> >>>Not existing user/group in simple_allow_users/simple_allow_groups should not >>>imply access denied. >>>--- >>>src/providers/simple/simple_access_check.c | 36 >>>+++++++++++++++++++++--------- >>>1 file changed, 26 insertions(+), 10 deletions(-) >>> >>>diff --git a/src/providers/simple/simple_access_check.c >>>b/src/providers/simple/simple_access_check.c >>>index >>>13c66d58f71225a6c458c19e7fb9d26fd15c08ea..01f1d392a81fac2d1f7e237fee56df649b192cb4 >>> 100644 >>>--- a/src/providers/simple/simple_access_check.c >>>+++ b/src/providers/simple/simple_access_check.c >>>@@ -24,6 +24,11 @@ >>>#include "util/sss_utf8.h" >>>#include "db/sysdb.h" >>> >>>+#define NON_EXIST_USR_ALLOW "The user %s does not exist. Possible typo in >>>simple_allow_users.\n" >>>+#define NON_EXIST_USR_DENY "The user %s does not exist. Possible typo in >>>simple_deny_users.\n" >>>+#define NON_EXIST_GRP_ALLOW "The group %s does not exist. Possible typo in >>>simple_allow_groups.\n" >>>+#define NON_EXIST_GRP_DENY "The group %s does not exist. Possible typo in >>>simple_deny_groups.\n" >>>+ >>>static bool >>>is_posix(const struct ldb_message *group) >>>{ >>>@@ -53,9 +58,11 @@ simple_check_users(struct simple_ctx *ctx, const char >>>*username, >>> domain = find_domain_by_object_name(ctx->domain, >>> ctx->allow_users[i]); >>> if (domain == NULL) { >>>- DEBUG(SSSDBG_CRIT_FAILURE, "Invalid user %s!\n", >>>- ctx->allow_users[i]); >>>- return EINVAL; >>>+ DEBUG(SSSDBG_CRIT_FAILURE, NON_EXIST_USR_ALLOW, >>>+ ctx->allow_users[i]); >>>+ sss_log(SSS_LOG_CRIT, NON_EXIST_USR_ALLOW, >>>+ ctx->allow_users[i]); >>>+ continue; >>> } >>> >>> if (sss_string_equal(domain->case_sensitive, username, >>>@@ -86,9 +93,12 @@ simple_check_users(struct simple_ctx *ctx, const char >>>*username, >>> domain = find_domain_by_object_name(ctx->domain, >>> ctx->deny_users[i]); >>> if (domain == NULL) { >>>- DEBUG(SSSDBG_CRIT_FAILURE, "Invalid user %s!\n", >>>- ctx->deny_users[i]); >>>+ DEBUG(SSSDBG_CRIT_FAILURE, NON_EXIST_USR_DENY, >>>+ ctx->deny_users[i]); >>>+ sss_log(SSS_LOG_CRIT, NON_EXIST_USR_DENY, >>>+ ctx->deny_users[i]); >>> return EINVAL; >>>+ >>This extra line needn't be added. >> >>Otherwise code looks good to me but I need to run some tests. >> >>LS >OK, updated patches attached. > Thank you.
>From e536c51728d2c99ff4fe7146b0a27b40c51164b3 Mon Sep 17 00:00:00 2001 >From: Pavel Reichl <prei...@redhat.com> >Date: Wed, 4 Jun 2014 17:41:31 +0100 >Subject: [PATCH 1/2] simple access provider: non-existing object > >Not existing user/group in simple_allow_users/simple_allow_groups should not >imply access denied. >--- ACK >From e6b832abb42512f14ad183817bdf75b7b263bf37 Mon Sep 17 00:00:00 2001 >From: Pavel Reichl <prei...@redhat.com> >Date: Wed, 4 Jun 2014 18:24:08 +0100 >Subject: [PATCH 2/2] simple-access-provider: break matching allowed users > >Stop matching username with names in simple_allow_users after positive >match. >--- ACK LS _______________________________________________ sssd-devel mailing list sssd-devel@lists.fedorahosted.org https://lists.fedorahosted.org/mailman/listinfo/sssd-devel