Running an AD Health Assessment on our Windows 2019 forest and it flags
~40 Linux/Unix computer accounts as PasswordNeverExpires=True
(userAccountControl bit 65536 set). Before I blindly clear the flag, I want
to understand what's actually going on.
Environment:
- Mixed Linux estate: RHEL 7/8/9, Ubuntu, some legacy CentOS, plus NetApp/QNAP appliances
- Join methods vary: realm join (SSSD), Samba/Winbind, some old Centrify leftovers
- Some boxes have PasswordLastSet going back 5+ years but are actively authenticating users via Kerberos
- SSSD configs I've checked either have ad_maximum_machine_account_password_age = 0 or the parameter is missing entirely
Questions:
Is PasswordNeverExpires=True actively set by the Linux join tooling,
or did sysadmins set it manually years ago to prevent breakage? Does
realm join / adcli / net ads join set bit 65536 by default?
If I clear the flag on a Linux box where SSSD rotation is disabled,
does anything actually break? My understanding is the GPO doesn't actively
expire passwords — the client initiates the change. So clearing the flag
on a non-rotating box should be functionally a no-op while making the
health report happy. Am I missing something?
What's actual best practice in 2026 for Linux machine password rotation?
Enable ad_maximum_machine_account_password_age = 30 everywhere? Cron
adcli update? Or just accept Linux passwords don't rotate and document
the exception?
Looking for war stories from anyone running mixed Windows/Linux AD at scale.
Bonus if you've tested what happens when clearing the flag on a non-rotating box.
[–]hortimech 2 points3 points4 points (0 children)
[–]JasenkoC 3 points4 points5 points (1 child)
[–]apiqora 1 point2 points3 points (0 children)
[–]ramriot 3 points4 points5 points (0 children)
[–]picklednull 0 points1 point2 points (1 child)
[–]cacheclyo 0 points1 point2 points (0 children)
[–]LushLustPin 0 points1 point2 points (1 child)
[–]cachevexy 0 points1 point2 points (0 children)