mirror of
https://github.com/netbox-community/netbox.git
synced 2026-01-11 21:10:29 +01:00
Integration with AUTH_LDAP_FIND_GROUP_PERMS does not work #4345
Closed
opened 2025-12-29 18:35:01 +01:00 by adam
·
19 comments
No Branch/Tag Specified
main
update-changelog-comments-docs
feature-removal-issue-type
20911-dropdown
20239-plugin-menu-classes-mutable-state
21097-graphql-id-lookups
feature
fix_module_substitution
20923-dcim-templates
20044-elevation-stuck-lightmode
feature-ip-prefix-link
v4.5-beta1-release
20068-import-moduletype-attrs
20766-fix-german-translation-code-literals
20378-del-script
7604-filter-modifiers-v3
circuit-swap
12318-case-insensitive-uniqueness
20637-improve-device-q-filter
20660-script-load
19724-graphql
20614-update-ruff
14884-script
02496-max-page
19720-macaddress-interface-generic-relation
19408-circuit-terminations-export-templates
20203-openapi-check
fix-19669-api-image-download
7604-filter-modifiers
19275-fixes-interface-bulk-edit
fix-17794-get_field_value_return_list
11507-show-aggregate-and-rir-on-api
9583-add_column_specific_search_field_to_tables
v4.5.0
v4.4.10
v4.4.9
v4.5.0-beta1
v4.4.8
v4.4.7
v4.4.6
v4.4.5
v4.4.4
v4.4.3
v4.4.2
v4.4.1
v4.4.0
v4.3.7
v4.4.0-beta1
v4.3.6
v4.3.5
v4.3.4
v4.3.3
v4.3.2
v4.3.1
v4.3.0
v4.2.9
v4.3.0-beta2
v4.2.8
v4.3.0-beta1
v4.2.7
v4.2.6
v4.2.5
v4.2.4
v4.2.3
v4.2.2
v4.2.1
v4.2.0
v4.1.11
v4.1.10
v4.1.9
v4.1.8
v4.2-beta1
v4.1.7
v4.1.6
v4.1.5
v4.1.4
v4.1.3
v4.1.2
v4.1.1
v4.1.0
v4.0.11
v4.0.10
v4.0.9
v4.1-beta1
v4.0.8
v4.0.7
v4.0.6
v4.0.5
v4.0.3
v4.0.2
v4.0.1
v4.0.0
v3.7.8
v3.7.7
v4.0-beta2
v3.7.6
v3.7.5
v4.0-beta1
v3.7.4
v3.7.3
v3.7.2
v3.7.1
v3.7.0
v3.6.9
v3.6.8
v3.6.7
v3.7-beta1
v3.6.6
v3.6.5
v3.6.4
v3.6.3
v3.6.2
v3.6.1
v3.6.0
v3.5.9
v3.6-beta2
v3.5.8
v3.6-beta1
v3.5.7
v3.5.6
v3.5.5
v3.5.4
v3.5.3
v3.5.2
v3.5.1
v3.5.0
v3.4.10
v3.4.9
v3.5-beta2
v3.4.8
v3.5-beta1
v3.4.7
v3.4.6
v3.4.5
v3.4.4
v3.4.3
v3.4.2
v3.4.1
v3.4.0
v3.3.10
v3.3.9
v3.4-beta1
v3.3.8
v3.3.7
v3.3.6
v3.3.5
v3.3.4
v3.3.3
v3.3.2
v3.3.1
v3.3.0
v3.2.9
v3.2.8
v3.3-beta2
v3.2.7
v3.3-beta1
v3.2.6
v3.2.5
v3.2.4
v3.2.3
v3.2.2
v3.2.1
v3.2.0
v3.1.11
v3.1.10
v3.2-beta2
v3.1.9
v3.2-beta1
v3.1.8
v3.1.7
v3.1.6
v3.1.5
v3.1.4
v3.1.3
v3.1.2
v3.1.1
v3.1.0
v3.0.12
v3.0.11
v3.0.10
v3.1-beta1
v3.0.9
v3.0.8
v3.0.7
v3.0.6
v3.0.5
v3.0.4
v3.0.3
v3.0.2
v3.0.1
v3.0.0
v2.11.12
v3.0-beta2
v2.11.11
v2.11.10
v3.0-beta1
v2.11.9
v2.11.8
v2.11.7
v2.11.6
v2.11.5
v2.11.4
v2.11.3
v2.11.2
v2.11.1
v2.11.0
v2.10.10
v2.10.9
v2.11-beta1
v2.10.8
v2.10.7
v2.10.6
v2.10.5
v2.10.4
v2.10.3
v2.10.2
v2.10.1
v2.10.0
v2.9.11
v2.10-beta2
v2.9.10
v2.10-beta1
v2.9.9
v2.9.8
v2.9.7
v2.9.6
v2.9.5
v2.9.4
v2.9.3
v2.9.2
v2.9.1
v2.9.0
v2.9-beta2
v2.8.9
v2.9-beta1
v2.8.8
v2.8.7
v2.8.6
v2.8.5
v2.8.4
v2.8.3
v2.8.2
v2.8.1
v2.8.0
v2.7.12
v2.7.11
v2.7.10
v2.7.9
v2.7.8
v2.7.7
v2.7.6
v2.7.5
v2.7.4
v2.7.3
v2.7.2
v2.7.1
v2.7.0
v2.6.12
v2.6.11
v2.6.10
v2.6.9
v2.7-beta1
Solcon-2020-01-06
v2.6.8
v2.6.7
v2.6.6
v2.6.5
v2.6.4
v2.6.3
v2.6.2
v2.6.1
v2.6.0
v2.5.13
v2.5.12
v2.6-beta1
v2.5.11
v2.5.10
v2.5.9
v2.5.8
v2.5.7
v2.5.6
v2.5.5
v2.5.4
v2.5.3
v2.5.2
v2.5.1
v2.5.0
v2.4.9
v2.5-beta2
v2.4.8
v2.5-beta1
v2.4.7
v2.4.6
v2.4.5
v2.4.4
v2.4.3
v2.4.2
v2.4.1
v2.4.0
v2.3.7
v2.4-beta1
v2.3.6
v2.3.5
v2.3.4
v2.3.3
v2.3.2
v2.3.1
v2.3.0
v2.2.10
v2.3-beta2
v2.2.9
v2.3-beta1
v2.2.8
v2.2.7
v2.2.6
v2.2.5
v2.2.4
v2.2.3
v2.2.2
v2.2.1
v2.2.0
v2.1.6
v2.2-beta2
v2.1.5
v2.2-beta1
v2.1.4
v2.1.3
v2.1.2
v2.1.1
v2.1.0
v2.0.10
v2.1-beta1
v2.0.9
v2.0.8
v2.0.7
v2.0.6
v2.0.5
v2.0.4
v2.0.3
v2.0.2
v2.0.1
v2.0.0
v2.0-beta3
v1.9.6
v1.9.5
v2.0-beta2
v1.9.4-r1
v1.9.3
v2.0-beta1
v1.9.2
v1.9.1
v1.9.0-r1
v1.8.4
v1.8.3
v1.8.2
v1.8.1
v1.8.0
v1.7.3
v1.7.2-r1
v1.7.1
v1.7.0
v1.6.3
v1.6.2-r1
v1.6.1-r1
1.6.1
v1.6.0
v1.5.2
v1.5.1
v1.5.0
v1.4.2
v1.4.1
v1.4.0
v1.3.2
v1.3.1
v1.3.0
v1.2.2
v1.2.1
v1.2.0
v1.1.0
v1.0.7-r1
v1.0.7
v1.0.6
v1.0.5
v1.0.4
v1.0.3-r1
v1.0.3
1.0.0
Labels
Clear labels
beta
breaking change
complexity: high
complexity: low
complexity: medium
needs milestone
netbox
pending closure
plugin candidate
pull-request
severity: high
severity: low
severity: medium
status: accepted
status: backlog
status: blocked
status: duplicate
status: needs owner
status: needs triage
status: revisions needed
status: under review
topic: GraphQL
topic: Internationalization
topic: OpenAPI
topic: UI/UX
topic: cabling
topic: event rules
topic: htmx navigation
topic: industrialization
topic: migrations
topic: plugins
topic: scripts
topic: templating
topic: testing
type: bug
type: deprecation
type: documentation
type: feature
type: housekeeping
type: translation
Mirrored from GitHub Pull Request
Milestone
No items
No Milestone
Projects
Clear projects
No project
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: starred/netbox#4345
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @igor-raits on GitHub (Dec 11, 2020).
Originally assigned to: @tobiasge on GitHub.
Environment
Steps to Reproduce
AUTH_LDAP_FIND_GROUP_PERMSdjango-auth-ldapmoduleExpected Behavior
User is able to use those permissions.
Observed Behavior
User is getting permission denied on creating api token.
Analyze
I've spent many hours trying to find out why users can't have permissions in our netbox installation but it does seem to me like a bug in Netbox.
What django-auth-ldap is doing:
Here it gets empty
QuerySet.Enabling
DEBUGand inspecting SQL:It is trying to get info from the
auth_group_permissions, but inspecting the database it shows completely empty table. Even there is some permissions assigned to the group.Dumping the DB, removing group permission, dumping DB again and comparing shows something interesting:
So it does change
users_objectpermission_groupsand not theauth_permission_groups. And that's why django-auth-ldap can't find any permissions (without explicitly creating group).Seems that
ObjectPermissionBackendwritten in netbox is behaving differently than the standard django one.@jeremystretch commented on GitHub (Dec 11, 2020):
NetBox v2.9 introduced object-based permissions, which employ a custom ObjectPermission model rather than Django's built-in Permission. NetBox's LDAPBackend class likely needs to be extended to support the described behavior. Marking this as
needs ownerfor anyone who would like to volunteer.@jeremystretch commented on GitHub (Dec 11, 2020):
This might be a duplicate of #5125.
@igor-raits commented on GitHub (Dec 11, 2020):
@jeremystretch yep, that seems to be same case, though linked ticket is missing information why it is broken so if you decide to close one as dupe of another - IMO would be better to close that one as a duplicate (even though it is older).
Do you have any hint about this? I could try to make a patch, but quick look into the code does not help me to guess even where to look.
@jeremystretch commented on GitHub (Dec 24, 2020):
I wasn't able to replicate this on v2.10.2: The group assignment works automatically as expected. Here's what I did:
The LDAP user account is automatically created and assigned to the specified group. After logging in as the user, I am granted the permissions assigned to the group.
Here's my LDAP configuration:
Note that I'm using
PosixGroupTyperather thanGroupOfNamesTypeas given in the documentation, but I believe this is dependent on the specific LDAP backend.@igor-raits commented on GitHub (Dec 24, 2020):
I believe this is the key. This will sync all groups of a user into the netbox and will "add user to the group".
https://django-auth-ldap.readthedocs.io/en/latest/permissions.html#group-mirroring
@jeremystretch , it is supposed to work without that option but that is not compatible with netbox user backend.
@jeremystretch commented on GitHub (Dec 24, 2020):
Ok, I think I see the disconnect. My expectation is just to have the LDAP user assigned to the groups that exist in Django, so that it gets granted the associated permissions by proxy. But it looks like you're trying to assign those permissions to the user directly?
As you point out, django-auth-ldap's
_load_group_permissions()method references Django's built-inPermissionclass, which NetBox v2.9+ no longer uses. So if the goal is to replicate permissions to the individual user, this method needs to be overridden to work with NetBox's ObjectPermission class.@igor-raits commented on GitHub (Dec 24, 2020):
If I understand how
AUTH_LDAP_FIND_GROUP_PERMSworks, when user tries to do something - django-auth-ldap checks in which groups the user is and give him permissions from the group that is already created in netbox. Without adding user specifically to the group or creating new one.@jeremystretch commented on GitHub (Dec 24, 2020):
That's my impression as well. This seems undesirable, though: IMO I'd rather just assign the user to the appropriate Django group(s) so that they inherit all associated permissions assigned to each group. It looks like
AUTH_LDAP_MIRROR_GROUPSis required for that though?@igor-raits commented on GitHub (Dec 24, 2020):
@jeremystretch I don't think it actually "assigns" them. It just overrides "get_group_permissions()" from Django to return "extra" permissions without assigning user to a group. So it actually does not modify permissions DB at all, merely just returns more permissions on the fly.
That seems quite desirable because you don't have to force re-login users when you change some group assignment and so on.
@PieterL75 commented on GitHub (Jan 28, 2021):
Hey, any update on this ?
We are facing this issue. New users dont get the group added to them when being auto-created by ldap.
I can see that the ldap debug shows they are member of the group.. (I tried creating groups in netbox with the whole CN and lots of other lower/uppercase combinations, but non work)
I dont want all of the ldap groups to be created in netbox wirh 'AUTH_LDAP_MIRROR_GROUPS '
@moonrail commented on GitHub (Jan 28, 2021):
We are also facing this issue.
We've started on 2.10 with a blank installation and neither
AUTH_LDAP_MIRROR_GROUPS,AUTH_LDAP_MIRROR_GROUPS_EXCEPTorAUTH_LDAP_FIND_GROUP_PERMSare currently working.As @PieterL75 we've tried numerous combinations of DNs, plain "True" on
AUTH_LDAP_MIRROR_GROUPSand multiple manually created, DN-equal, groups, but no luck.While testing, we've debug-logged django-auth-ldap & Django and ran Netbox itself in debug-Mode, but no error messages were thrown on logins. Logs show, that all infos on a DN are found and processed.
@PieterL75
If
AUTH_LDAP_MIRROR_GROUPSwould be working, you could define Groups to mirror, if you provide a list of DNs instead of "True" or "False". And combine it with a list of undesired Group-DNs inAUTH_LDAP_MIRROR_GROUPS_EXCEPT.Edit: We've had a pretty obvious configuration issue in our deployment, soooo... MIRROR_GROUPS is working flawlessy now. :)
@tyler-8 commented on GitHub (Feb 1, 2021):
Mirror groups does seem to workaround this issue (and other LDAP issues I've had) - however I'd recommend also setting
AUTH_LDAP_MIRROR_GROUPS(docs) to a list of the groups you want NetBox to mirror, otherwise you'll get unrelated LDAP groups being created in NetBox. That setting should probably be added to the NetBox docs as well.I'd initially not used the group mirroring since the
django-auth-ldapdocs had described it as less ideal. In the past I'd solely relied onAUTH_LDAP_FIND_GROUP_PERMSsince I was manually creating the NetBox-specific groups in NetBox to line up with the LDAP groups.However - in NetBox's case
itmirroring does have advantages; API tokens will work for LDAP authenticated users, and as established in this thread, it works with the new permissions model without having to create a custom LDAP handler (though I imagine there will be some users that really don't want to mirror groups for good reasons and then will need a custom handler).@github-actions[bot] commented on GitHub (Apr 14, 2021):
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. NetBox is governed by a small group of core maintainers which means not all opened issues may receive direct feedback. Please see our contributing guide.
@igor-raits commented on GitHub (Apr 23, 2021):
Please don't close it as it is real issue.
@jeremystretch commented on GitHub (Apr 23, 2021):
@ignatenkobrain would you like to volunteer to work on this?
@tobiasge commented on GitHub (Jun 10, 2021):
I have created PR #6580 which fixes this issue in our environment.
@ignatenkobrain @tyler-8 Could you try to run your system with the changes and verify if they work for you?
@jeremystretch commented on GitHub (Jun 10, 2021):
LGTM from the NetBox side but will wait for confirmation from others.
@tyler-8 commented on GitHub (Jun 10, 2021):
If you can wait a couple days I'd be happy to test out the change.
@tyler-8 commented on GitHub (Jun 14, 2021):
I ran into an issue with the PR and noted the error and steps to reproduce: https://github.com/netbox-community/netbox/pull/6580#issuecomment-860831706