<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Kerberos Archives - Linuxcent</title>
	<atom:link href="https://linuxcent.com/tag/kerberos/feed/" rel="self" type="application/rss+xml" />
	<link>https://linuxcent.com/tag/kerberos/</link>
	<description>Infrastructure security, from the kernel up.</description>
	<lastBuildDate>Wed, 13 May 2026 05:35:44 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0.2</generator>

<image>
	<url>https://linuxcent.com/wp-content/uploads/2026/04/favicon-512x512-1-150x150.png</url>
	<title>Kerberos Archives - Linuxcent</title>
	<link>https://linuxcent.com/tag/kerberos/</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">211632295</site>	<item>
		<title>How Active Directory Works: LDAP, Kerberos, and Group Policy Under the Hood</title>
		<link>https://linuxcent.com/active-directory-ldap-kerberos/</link>
					<comments>https://linuxcent.com/active-directory-ldap-kerberos/#respond</comments>
		
		<dc:creator><![CDATA[Vamshi Krishna Santhapuri]]></dc:creator>
		<pubDate>Thu, 07 May 2026 11:00:00 +0000</pubDate>
				<category><![CDATA[Identity & Authentication]]></category>
		<category><![CDATA[Active Directory]]></category>
		<category><![CDATA[Identity Management]]></category>
		<category><![CDATA[Kerberos]]></category>
		<category><![CDATA[LDAP]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Windows]]></category>
		<guid isPermaLink="false">https://linuxcent.com/?p=1796</guid>

					<description><![CDATA[<p><span class="span-reading-time rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">Reading Time: </span> <span class="rt-time"> 6</span> <span class="rt-label rt-postfix">minutes</span></span>How Active Directory works under the hood: LDAP storage, Kerberos authentication, USN replication, KCC site topology, GPO delivery — and how Linux joins it.</p>
<p>The post <a href="https://linuxcent.com/active-directory-ldap-kerberos/">How Active Directory Works: LDAP, Kerberos, and Group Policy Under the Hood</a> appeared first on <a href="https://linuxcent.com">Linuxcent</a>.</p>
]]></description>
										<content:encoded><![CDATA[<span class="span-reading-time rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">Reading Time: </span> <span class="rt-time"> 6</span> <span class="rt-label rt-postfix">minutes</span></span><style>
pre{position:relative;background:#1e1e1e;color:#d4d4d4;
    padding:16px 16px 16px 20px;border-radius:6px;overflow-x:auto;
    font-family:'JetBrains Mono','Fira Code','Cascadia Code',Consolas,'Courier New',monospace;
    font-size:.88em;line-height:1.6;border-left:4px solid #555}
code{background:#f4f4f4;padding:2px 5px;border-radius:3px;font-size:.9em}
pre code{background:transparent;padding:0;color:inherit}
pre[data-lang="bash"],pre[data-lang="sh"],
pre[data-lang="shell"],pre[data-lang="zsh"]{border-left-color:#4ec9b0}
pre[data-lang="yaml"],pre[data-lang="json"],
pre[data-lang="toml"],pre[data-lang="xml"]{border-left-color:#569cd6}
pre[data-lang="python"],pre[data-lang="go"],pre[data-lang="rust"],
pre[data-lang="java"],pre[data-lang="c"],pre[data-lang="cpp"]{border-left-color:#c586c0}
pre[data-lang="text"],pre[data-lang="output"],
pre[data-lang="console"]{border-left-color:#888}
.lc-copy-btn{position:absolute;top:8px;right:8px;background:#2d2d2d;color:#ccc;
    border:1px solid #444;border-radius:4px;padding:3px 9px;font-size:.75em;
    font-family:system-ui,sans-serif;cursor:pointer;opacity:0;
    transition:opacity .15s,background .15s;line-height:1.6}
pre:hover .lc-copy-btn{opacity:1}
.lc-copy-btn:hover{background:#3a3a3a;color:#fff}
.lc-copy-btn.copied{color:#4ec9b0;border-color:#4ec9b0}
.lc-lang-badge{position:absolute;top:8px;left:20px;font-family:system-ui,sans-serif;
    font-size:.7em;color:#666;text-transform:uppercase;letter-spacing:.04em;
    line-height:1;pointer-events:none;opacity:0;transition:opacity .15s}
pre:hover .lc-lang-badge{opacity:1}
table{border-collapse:collapse;width:100%;margin:16px 0}
th,td{border:1px solid #ddd;padding:10px 14px;text-align:left}
th{background:#f0f0f0;font-weight:600}
tr:nth-child(even){background:#fafafa}
</style>
<p><script>
(function(){
  if(window.__lcCodeEnhanced)return;
  window.__lcCodeEnhanced=true;
  function enhance(){
    document.querySelectorAll('pre').forEach(function(pre){
      var code=pre.querySelector('code');
      var lang='';
      if(code){var m=(code.className||'').match(/language-(\S+)/);if(m)lang=m[1].toLowerCase();}
      if(lang)pre.setAttribute('data-lang',lang);
      if(lang){var badge=document.createElement('span');badge.className='lc-lang-badge';badge.textContent=lang;pre.insertBefore(badge,pre.firstChild);}
      var btn=document.createElement('button');
      btn.className='lc-copy-btn';btn.textContent='Copy';btn.setAttribute('aria-label','Copy code to clipboard');
      pre.appendChild(btn);
      btn.addEventListener('click',function(){
        var text=code?code.innerText:pre.innerText;
        if(navigator.clipboard&&window.isSecureContext){
          navigator.clipboard.writeText(text).then(function(){ok(btn);}).catch(function(){fb(text,btn);});
        }else{fb(text,btn);}
      });
    });
  }
  function ok(btn){btn.textContent='Copied!';btn.classList.add('copied');setTimeout(function(){btn.textContent='Copy';btn.classList.remove('copied');},2000);}
  function fb(text,btn){
    try{var ta=document.createElement('textarea');ta.value=text;ta.style.cssText='position:fixed;left:-9999px;top:-9999px;opacity:0';document.body.appendChild(ta);ta.select();document.execCommand('copy');document.body.removeChild(ta);ok(btn);}
    catch(e){btn.textContent='✗ Failed';setTimeout(function(){btn.textContent='Copy';},2000);}
  }
  if(document.readyState==='loading'){document.addEventListener('DOMContentLoaded',enhance);}else{enhance();}
})();
</script></p>
<p><em>The Identity Stack, Episode 9</em><br />
<a href="/freeipa-linux-identity-management/">EP08: FreeIPA</a> → <strong>EP09</strong> → <a href="/saml-vs-oidc-vs-oauth2/">EP10: SAML/OIDC</a> → &#8230;</p>
<hr />
<h2 id="tldr">TL;DR</h2>
<ul>
<li>Active Directory is not a product that happens to use LDAP — it <em>is</em> an LDAP directory with a Microsoft-extended schema, a built-in Kerberos KDC, and DNS tightly integrated</li>
<li>Replication uses USNs (Update Sequence Numbers) and GUIDs — the Knowledge Consistency Checker (KCC) automatically builds the replication topology</li>
<li>Sites and site links tell AD which DCs are physically close — AD prefers to authenticate users against a DC in the same site to minimize WAN latency</li>
<li>Group Policy Objects (GPOs) are stored as LDAP entries (in the <code class="" data-line="">CN=Policies</code> container) and Sysvol files — LDAP tells clients which GPOs apply; Sysvol delivers the policy files</li>
<li>Linux joins AD via <code class="" data-line="">realm join</code> (uses adcli + SSSD) or <code class="" data-line="">net ads join</code> (Samba + winbind) — both register a machine account in AD and get a Kerberos keytab</li>
<li>The difference between Linux in AD and Linux in FreeIPA: AD is optimized for Windows; FreeIPA is optimized for Linux — both interoperate</li>
</ul>
<hr />
<h2 id="the-big-picture-what-ad-actually-is">The Big Picture: What AD Actually Is</h2>
<pre><code class="" data-line="">Active Directory Domain: corp.com
┌────────────────────────────────────────────────────────────┐
│                                                            │
│  LDAP directory          Kerberos KDC                      │
│  ─────────────           ──────────                        │
│  Schema: 1000+ classes   Realm: CORP.COM                   │
│  Objects: users, groups, Issues TGTs + service tickets     │
│  computers, GPOs, OUs    Uses LDAP as the account DB       │
│                                                            │
│  DNS                     Sysvol (DFS share)                │
│  ────                    ────────────────                  │
│  SRV records for KDC     GPO templates                     │
│  and LDAP discovery      Login scripts                     │
│                          Replicated via DFSR               │
│                                                            │
│  Replication engine: USN + GUID + KCC                      │
└────────────────────────────────────────────────────────────┘
          │ replicates to          │ replicates to
          ▼                        ▼
   DC: dc02.corp.com        DC: dc03.corp.com
</code></pre>
<p>EP08 showed FreeIPA as the Linux-native answer to enterprise identity. AD is the Microsoft answer — and because most enterprises run Windows clients, understanding AD is unavoidable for Linux infrastructure engineers. This episode goes behind the LDAP and Kerberos protocols to explain what makes AD specifically work.</p>
<hr />
<h2 id="the-ad-schema-ldap-with-1000-object-classes">The AD Schema: LDAP With 1000+ Object Classes</h2>
<p>AD&#8217;s schema extends the base LDAP schema with Microsoft-specific classes and attributes. Every user object is a <code class="" data-line="">user</code> class (which extends <code class="" data-line="">organizationalPerson</code> which extends <code class="" data-line="">person</code> which extends <code class="" data-line="">top</code>) with additional attributes like:</p>
<pre><code class="" data-line="">sAMAccountName   ← the pre-Windows 2000 login name (vamshi)
userPrincipalName ← the modern UPN (vamshi@corp.com)
objectGUID       ← a globally unique 128-bit identifier (never changes, even if DN changes)
objectSid        ← Windows Security Identifier (used for ACL enforcement on Windows)
whenCreated      ← creation timestamp
pwdLastSet       ← password change timestamp
userAccountControl ← bitmask: disabled, locked, password never expires, etc.
memberOf         ← back-link: groups this user belongs to
</code></pre>
<p><code class="" data-line="">objectGUID</code> is the authoritative identifier in AD — not the DN. When a user is renamed or moved to a different OU, the GUID stays the same. Applications that store a user&#8217;s DN will break on rename; applications that store the GUID won&#8217;t.</p>
<p><code class="" data-line="">userAccountControl</code> is the bitmask that controls account state:</p>
<pre><code class="" data-line="">Flag          Value   Meaning
ACCOUNTDISABLE  2     Account disabled
LOCKOUT         16    Account locked out
PASSWD_NOTREQD  32    Password not required
NORMAL_ACCOUNT  512   Normal user account (set on almost all accounts)
DONT_EXPIRE_PASSWD 65536  Password never expires
</code></pre>
<pre><code class="" data-line=""># Query AD from a Linux machine
ldapsearch -x -H ldap://dc.corp.com \
  -D &quot;vamshi@corp.com&quot; -w password \
  -b &quot;dc=corp,dc=com&quot; \
  &quot;(sAMAccountName=vamshi)&quot; \
  sAMAccountName userPrincipalName objectGUID memberOf userAccountControl
</code></pre>
<hr />
<h2 id="replication-usn-guid-kcc">Replication: USN + GUID + KCC</h2>
<p>AD replication is multi-master — every DC accepts writes. The replication engine uses:</p>
<p><strong>USN (Update Sequence Number)</strong> — a per-DC counter that increments on every local write. Each attribute in the directory stores the USN at which it was last modified (<code class="" data-line="">uSNChanged</code>, <code class="" data-line="">uSNCreated</code>). When DC-A replicates to DC-B, DC-B asks: &#8220;give me everything you&#8217;ve changed since the last USN I saw from you.&#8221;</p>
<p><strong>GUID</strong> — each object has a globally unique identifier. If the same attribute is modified on two DCs before replication (a conflict), the conflict is resolved: last-writer-wins at the attribute level, based on the modification timestamp. If timestamps are equal, the attribute value from the DC with the lexicographically higher GUID wins.</p>
<p><strong>KCC (Knowledge Consistency Checker)</strong> — a component that runs on every DC and automatically constructs the replication topology. You don&#8217;t configure which DCs replicate to which — the KCC builds a minimum spanning tree that ensures every DC is connected to every other within a set number of hops. You configure Sites and site links; the KCC does the rest.</p>
<pre><code class="" data-line=""># Check replication status from a Linux machine (requires rpcclient or adcli)
# Or on the DC: repadmin /showrepl (Windows tool)

# Simulate: query the highestCommittedUSN from a DC
ldapsearch -x -H ldap://dc.corp.com \
  -D &quot;vamshi@corp.com&quot; -w password \
  -b &quot;&quot; -s base highestCommittedUSN
</code></pre>
<hr />
<h2 id="sites-and-site-links">Sites and Site Links</h2>
<p>Sites are AD&#8217;s concept of physical network topology. A site is a set of IP subnets with high-bandwidth connectivity between them. Site links represent the WAN connections between sites.</p>
<pre><code class="" data-line="">Site: Mumbai              Site: Hyderabad
┌────────────────┐        ┌────────────────┐
│ DC: dc-mum-01  │        │ DC: dc-hyd-01  │
│ DC: dc-mum-02  │        │ DC: dc-hyd-02  │
│ subnet: 10.1/16│        │ subnet: 10.2/16│
└───────┬────────┘        └────────┬───────┘
        │                          │
        └──── Site Link ───────────┘
              Cost: 100
              Replication interval: 15 min
</code></pre>
<p>When a user in Mumbai authenticates, AD&#8217;s KDC locates a DC in the same site using DNS SRV records. The SRV records include the site name in the service name: <code class="" data-line="">_ldap._tcp.Mumbai._sites.dc._msdcs.corp.com</code>. SSSD and Windows clients query site-local SRV records first.</p>
<p>If no DC is available in the local site, authentication falls back to a DC in another site across the WAN link. Configuring sites correctly prevents remote authentication failures from killing local operations.</p>
<hr />
<h2 id="group-policy-ldap-sysvol">Group Policy: LDAP + Sysvol</h2>
<p>GPOs are stored in two places:</p>
<p><strong>LDAP</strong> — the <code class="" data-line="">CN=Policies,CN=System,DC=corp,DC=com</code> container holds GPO metadata objects. Each GPO has a GUID, a display name, and version numbers. The <code class="" data-line="">gPLink</code> attribute on OUs and the domain root links GPOs to where they apply.</p>
<p><strong>Sysvol</strong> — the actual policy templates and scripts live in <code class="" data-line="">\\corp.com\SYSVOL\corp.com\Policies\{GPO-GUID}\</code>. Sysvol is a DFS-R (Distributed File System Replication) share replicated to every DC.</p>
<p>When a Windows client applies Group Policy:<br />
1. LDAP query: what GPOs are linked to my OU chain?<br />
2. Sysvol fetch: download the policy templates from the GPO&#8217;s Sysvol path<br />
3. Apply: process Registry settings, Security settings, Scripts</p>
<p>Linux clients don&#8217;t process GPOs natively. The <code class="" data-line="">adcli</code> and <code class="" data-line="">sssd</code> tools interpret a small subset of AD policy (password policy, account lockout) via LDAP. Full GPO processing on Linux requires Samba&#8217;s <code class="" data-line="">samba-gpupdate</code> or third-party tools.</p>
<hr />
<h2 id="joining-linux-to-ad">Joining Linux to AD</h2>
<h3 id="realm-join-recommended">realm join (recommended)</h3>
<pre><code class="" data-line=""># Install required packages
dnf install -y realmd sssd adcli samba-common

# Discover the domain
realm discover corp.com
# corp.com
#   type: kerberos
#   realm-name: CORP.COM
#   domain-name: corp.com
#   configured: no
#   server-software: active-directory
#   client-software: sssd

# Join
realm join corp.com -U Administrator
# Prompts for Administrator password
# Creates machine account in AD
# Configures sssd.conf, krb5.conf, nsswitch.conf, pam.d automatically

# Verify
realm list
id vamshi@corp.com
</code></pre>
<h3 id="what-the-join-does">What the join does:</h3>
<ol>
<li>Creates a machine account <code class="" data-line="">HOSTNAME$</code> in <code class="" data-line="">CN=Computers,DC=corp,DC=com</code></li>
<li>Sets a machine password (rotated automatically by SSSD)</li>
<li>Retrieves a Kerberos keytab to <code class="" data-line="">/etc/krb5.keytab</code></li>
<li>Configures SSSD with <code class="" data-line="">id_provider = ad</code>, <code class="" data-line="">auth_provider = ad</code></li>
<li>Updates <code class="" data-line="">/etc/nsswitch.conf</code> to include <code class="" data-line="">sss</code></li>
<li>Updates <code class="" data-line="">/etc/pam.d/</code> to include <code class="" data-line="">pam_sss</code></li>
</ol>
<p>After joining, SSSD uses the machine&#8217;s Kerberos keytab to authenticate to the DC and query LDAP — no hardcoded service account credentials required.</p>
<hr />
<h2 id="ldap-queries-against-ad-from-linux">LDAP Queries Against AD from Linux</h2>
<pre><code class="" data-line=""># Find a user (after kinit or with -w password)
ldapsearch -Y GSSAPI -H ldap://dc.corp.com \
  -b &quot;dc=corp,dc=com&quot; \
  &quot;(sAMAccountName=vamshi)&quot; \
  sAMAccountName mail memberOf

# Find all members of a group
ldapsearch -Y GSSAPI -H ldap://dc.corp.com \
  -b &quot;dc=corp,dc=com&quot; \
  &quot;(cn=engineers)&quot; \
  member

# Find all AD-joined Linux machines
ldapsearch -Y GSSAPI -H ldap://dc.corp.com \
  -b &quot;dc=corp,dc=com&quot; \
  &quot;(&amp;(objectClass=computer)(operatingSystem=*Linux*))&quot; \
  cn operatingSystem lastLogonTimestamp

# Find disabled accounts
ldapsearch -Y GSSAPI -H ldap://dc.corp.com \
  -b &quot;dc=corp,dc=com&quot; \
  &quot;(userAccountControl:1.2.840.113556.1.4.803:=2)&quot; \
  sAMAccountName
</code></pre>
<p>The last filter uses an LDAP extensible match (<code class="" data-line="">1.2.840.113556.1.4.803</code> is the OID for bitwise AND). <code class="" data-line="">userAccountControl:1.2.840.113556.1.4.803:=2</code> means &#8220;entries where userAccountControl AND 2 equals 2&#8221; — i.e., the ACCOUNTDISABLE bit is set. This is a Microsoft AD extension not in standard LDAP.</p>
<hr />
<h2 id="common-misconceptions"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Common Misconceptions</h2>
<p><strong>&#8220;AD is just Microsoft&#8217;s LDAP.&#8221;</strong> AD is LDAP + Kerberos + DNS + DFS-R + GPO, all tightly integrated and with a schema that the Microsoft ecosystem depends on. You can query AD with standard <code class="" data-line="">ldapsearch</code>. You cannot replace it with OpenLDAP without breaking every Windows client.</p>
<p><strong>&#8220;Linux machines in AD get GPO.&#8221;</strong> Linux machines appear in AD and can be organized into OUs. Standard GPOs don&#8217;t apply to them. Samba&#8217;s <code class="" data-line="">samba-gpupdate</code> can process a subset of AD policy for Linux — mostly Registry and Security settings mapped to Linux equivalents.</p>
<p><strong>&#8220;realm leave removes the machine cleanly.&#8221;</strong> <code class="" data-line="">realm leave</code> removes local configuration but does not delete the machine account from AD. The stale computer object stays in <code class="" data-line="">CN=Computers</code> until an AD admin deletes it. Always run <code class="" data-line="">realm leave &amp;&amp; adcli delete-computer -U Administrator</code> for a clean removal.</p>
<hr />
<h2 id="framework-alignment">Framework Alignment</h2>
<table>
<thead>
<tr>
<th>Domain</th>
<th>Relevance</th>
</tr>
</thead>
<tbody>
<tr>
<td>CISSP Domain 5: Identity and Access Management</td>
<td>AD is the dominant enterprise identity store — understanding its LDAP structure, Kerberos realm, and GPO model is essential for IAM in mixed environments</td>
</tr>
<tr>
<td>CISSP Domain 4: Communications and Network Security</td>
<td>AD replication traffic (RPC, LDAP, Kerberos) is a significant portion of enterprise WAN traffic — Sites and site links are a network security and performance design decision</td>
</tr>
<tr>
<td>CISSP Domain 3: Security Architecture and Engineering</td>
<td>AD forest/domain/OU hierarchy is an architectural decision with long-term security consequences — getting OU structure wrong constrains GPO delegation for years</td>
</tr>
</tbody>
</table>
<hr />
<h2 id="key-takeaways">Key Takeaways</h2>
<ul>
<li>AD is LDAP + Kerberos + DNS + GPO + DFS-R — not a product that &#8220;uses&#8221; these; they&#8217;re the implementation</li>
<li>Replication is multi-master via USN + GUID; the KCC builds the topology automatically from Sites configuration</li>
<li><code class="" data-line="">objectGUID</code> is the stable identifier — not the DN, which changes on rename/move</li>
<li><code class="" data-line="">realm join</code> is the correct way to join Linux to AD — it configures SSSD, Kerberos, PAM, and NSS correctly in one command</li>
<li><code class="" data-line="">userAccountControl</code> is the bitmask that controls account state — <code class="" data-line="">(userAccountControl:1.2.840.113556.1.4.803:=2)</code> finds disabled accounts</li>
</ul>
<hr />
<h2 id="whats-next">What&#8217;s Next</h2>
<p>EP09 covered AD — LDAP and Kerberos inside the corporate network. EP10 covers what happens when identity needs to work across the internet, where Kerberos doesn&#8217;t reach: SAML, OAuth2, and OIDC — the protocols that let identity leave the building.</p>
<p><em>Next: <a href="/saml-vs-oidc-vs-oauth2/">SAML vs OIDC vs OAuth2: Which Protocol Handles Which Identity Problem</a></em></p>
<p>Get EP10 in your inbox when it publishes → <a href="https://linuxcent.com/subscribe">linuxcent.com/subscribe</a></p>
<p><a class="a2a_button_mastodon" href="https://www.addtoany.com/add_to/mastodon?linkurl=https%3A%2F%2Flinuxcent.com%2Factive-directory-ldap-kerberos%2F&amp;linkname=How%20Active%20Directory%20Works%3A%20LDAP%2C%20Kerberos%2C%20and%20Group%20Policy%20Under%20the%20Hood" title="Mastodon" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_email" href="https://www.addtoany.com/add_to/email?linkurl=https%3A%2F%2Flinuxcent.com%2Factive-directory-ldap-kerberos%2F&amp;linkname=How%20Active%20Directory%20Works%3A%20LDAP%2C%20Kerberos%2C%20and%20Group%20Policy%20Under%20the%20Hood" title="Email" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_whatsapp" href="https://www.addtoany.com/add_to/whatsapp?linkurl=https%3A%2F%2Flinuxcent.com%2Factive-directory-ldap-kerberos%2F&amp;linkname=How%20Active%20Directory%20Works%3A%20LDAP%2C%20Kerberos%2C%20and%20Group%20Policy%20Under%20the%20Hood" title="WhatsApp" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_reddit" href="https://www.addtoany.com/add_to/reddit?linkurl=https%3A%2F%2Flinuxcent.com%2Factive-directory-ldap-kerberos%2F&amp;linkname=How%20Active%20Directory%20Works%3A%20LDAP%2C%20Kerberos%2C%20and%20Group%20Policy%20Under%20the%20Hood" title="Reddit" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_x" href="https://www.addtoany.com/add_to/x?linkurl=https%3A%2F%2Flinuxcent.com%2Factive-directory-ldap-kerberos%2F&amp;linkname=How%20Active%20Directory%20Works%3A%20LDAP%2C%20Kerberos%2C%20and%20Group%20Policy%20Under%20the%20Hood" title="X" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_linkedin" href="https://www.addtoany.com/add_to/linkedin?linkurl=https%3A%2F%2Flinuxcent.com%2Factive-directory-ldap-kerberos%2F&amp;linkname=How%20Active%20Directory%20Works%3A%20LDAP%2C%20Kerberos%2C%20and%20Group%20Policy%20Under%20the%20Hood" title="LinkedIn" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_copy_link" href="https://www.addtoany.com/add_to/copy_link?linkurl=https%3A%2F%2Flinuxcent.com%2Factive-directory-ldap-kerberos%2F&amp;linkname=How%20Active%20Directory%20Works%3A%20LDAP%2C%20Kerberos%2C%20and%20Group%20Policy%20Under%20the%20Hood" title="Copy Link" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Flinuxcent.com%2Factive-directory-ldap-kerberos%2F&#038;title=How%20Active%20Directory%20Works%3A%20LDAP%2C%20Kerberos%2C%20and%20Group%20Policy%20Under%20the%20Hood" data-a2a-url="https://linuxcent.com/active-directory-ldap-kerberos/" data-a2a-title="How Active Directory Works: LDAP, Kerberos, and Group Policy Under the Hood"></a></p><p>The post <a href="https://linuxcent.com/active-directory-ldap-kerberos/">How Active Directory Works: LDAP, Kerberos, and Group Policy Under the Hood</a> appeared first on <a href="https://linuxcent.com">Linuxcent</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://linuxcent.com/active-directory-ldap-kerberos/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1796</post-id>	</item>
		<item>
		<title>FreeIPA: LDAP + Kerberos + PKI in a Single Linux Identity Stack</title>
		<link>https://linuxcent.com/freeipa-linux-identity-management/</link>
					<comments>https://linuxcent.com/freeipa-linux-identity-management/#respond</comments>
		
		<dc:creator><![CDATA[Vamshi Krishna Santhapuri]]></dc:creator>
		<pubDate>Thu, 07 May 2026 05:00:00 +0000</pubDate>
				<category><![CDATA[Identity & Authentication]]></category>
		<category><![CDATA[FreeIPA]]></category>
		<category><![CDATA[HBAC]]></category>
		<category><![CDATA[Identity Management]]></category>
		<category><![CDATA[Kerberos]]></category>
		<category><![CDATA[LDAP]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[linux-security]]></category>
		<guid isPermaLink="false">https://linuxcent.com/?p=1793</guid>

					<description><![CDATA[<p><span class="span-reading-time rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">Reading Time: </span> <span class="rt-time"> 5</span> <span class="rt-label rt-postfix">minutes</span></span>FreeIPA combines 389-DS, MIT Kerberos, Dogtag PKI, and Bind DNS into one Linux identity stack. Set up HBAC rules, centralized sudo, and AD trust.</p>
<p>The post <a href="https://linuxcent.com/freeipa-linux-identity-management/">FreeIPA: LDAP + Kerberos + PKI in a Single Linux Identity Stack</a> appeared first on <a href="https://linuxcent.com">Linuxcent</a>.</p>
]]></description>
										<content:encoded><![CDATA[<span class="span-reading-time rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">Reading Time: </span> <span class="rt-time"> 5</span> <span class="rt-label rt-postfix">minutes</span></span><style>
pre{position:relative;background:#1e1e1e;color:#d4d4d4;
    padding:16px 16px 16px 20px;border-radius:6px;overflow-x:auto;
    font-family:'JetBrains Mono','Fira Code','Cascadia Code',Consolas,'Courier New',monospace;
    font-size:.88em;line-height:1.6;border-left:4px solid #555}
code{background:#f4f4f4;padding:2px 5px;border-radius:3px;font-size:.9em}
pre code{background:transparent;padding:0;color:inherit}
pre[data-lang="bash"],pre[data-lang="sh"],
pre[data-lang="shell"],pre[data-lang="zsh"]{border-left-color:#4ec9b0}
pre[data-lang="yaml"],pre[data-lang="json"],
pre[data-lang="toml"],pre[data-lang="xml"]{border-left-color:#569cd6}
pre[data-lang="python"],pre[data-lang="go"],pre[data-lang="rust"],
pre[data-lang="java"],pre[data-lang="c"],pre[data-lang="cpp"]{border-left-color:#c586c0}
pre[data-lang="text"],pre[data-lang="output"],
pre[data-lang="console"]{border-left-color:#888}
.lc-copy-btn{position:absolute;top:8px;right:8px;background:#2d2d2d;color:#ccc;
    border:1px solid #444;border-radius:4px;padding:3px 9px;font-size:.75em;
    font-family:system-ui,sans-serif;cursor:pointer;opacity:0;
    transition:opacity .15s,background .15s;line-height:1.6}
pre:hover .lc-copy-btn{opacity:1}
.lc-copy-btn:hover{background:#3a3a3a;color:#fff}
.lc-copy-btn.copied{color:#4ec9b0;border-color:#4ec9b0}
.lc-lang-badge{position:absolute;top:8px;left:20px;font-family:system-ui,sans-serif;
    font-size:.7em;color:#666;text-transform:uppercase;letter-spacing:.04em;
    line-height:1;pointer-events:none;opacity:0;transition:opacity .15s}
pre:hover .lc-lang-badge{opacity:1}
table{border-collapse:collapse;width:100%;margin:16px 0}
th,td{border:1px solid #ddd;padding:10px 14px;text-align:left}
th{background:#f0f0f0;font-weight:600}
tr:nth-child(even){background:#fafafa}
</style>
<p><script>
(function(){
  if(window.__lcCodeEnhanced)return;
  window.__lcCodeEnhanced=true;
  function enhance(){
    document.querySelectorAll('pre').forEach(function(pre){
      var code=pre.querySelector('code');
      var lang='';
      if(code){var m=(code.className||'').match(/language-(\S+)/);if(m)lang=m[1].toLowerCase();}
      if(lang)pre.setAttribute('data-lang',lang);
      if(lang){var badge=document.createElement('span');badge.className='lc-lang-badge';badge.textContent=lang;pre.insertBefore(badge,pre.firstChild);}
      var btn=document.createElement('button');
      btn.className='lc-copy-btn';btn.textContent='Copy';btn.setAttribute('aria-label','Copy code to clipboard');
      pre.appendChild(btn);
      btn.addEventListener('click',function(){
        var text=code?code.innerText:pre.innerText;
        if(navigator.clipboard&&window.isSecureContext){
          navigator.clipboard.writeText(text).then(function(){ok(btn);}).catch(function(){fb(text,btn);});
        }else{fb(text,btn);}
      });
    });
  }
  function ok(btn){btn.textContent='Copied!';btn.classList.add('copied');setTimeout(function(){btn.textContent='Copy';btn.classList.remove('copied');},2000);}
  function fb(text,btn){
    try{var ta=document.createElement('textarea');ta.value=text;ta.style.cssText='position:fixed;left:-9999px;top:-9999px;opacity:0';document.body.appendChild(ta);ta.select();document.execCommand('copy');document.body.removeChild(ta);ok(btn);}
    catch(e){btn.textContent='✗ Failed';setTimeout(function(){btn.textContent='Copy';},2000);}
  }
  if(document.readyState==='loading'){document.addEventListener('DOMContentLoaded',enhance);}else{enhance();}
})();
</script></p>
<p><em>The Identity Stack, Episode 8</em><br />
<a href="/ldap-high-availability/">EP07: LDAP HA</a> → <strong>EP08</strong> → <a href="/active-directory-ldap-kerberos/">EP09: Active Directory</a> → &#8230;</p>
<hr />
<h2 id="tldr">TL;DR</h2>
<ul>
<li>FreeIPA is 389-DS (LDAP) + MIT Kerberos + Dogtag PKI + Bind DNS + SSSD — one <code class="" data-line="">ipa-server-install</code> command gets you an enterprise identity platform</li>
<li>Host-Based Access Control (HBAC) lets you define centrally: which users can SSH to which hosts — no more managing <code class="" data-line="">/etc/security/access.conf</code> per machine</li>
<li>Sudo rules from the directory: define <code class="" data-line="">sudo</code> policy centrally, have every machine pull it — no <code class="" data-line="">/etc/sudoers.d/</code> files scattered across the fleet</li>
<li><code class="" data-line="">ipa</code> CLI is the management interface — <code class="" data-line="">ipa user-add</code>, <code class="" data-line="">ipa group-add</code>, <code class="" data-line="">ipa hbacrule-add</code> — everything that took five LDAP commands takes one <code class="" data-line="">ipa</code> command</li>
<li>FreeIPA trusts with Active Directory let Linux machines authenticate AD users without joining the AD domain</li>
<li>The right choice for Linux-centric environments; AD is the right choice when Windows clients dominate</li>
</ul>
<hr />
<h2 id="the-big-picture-what-freeipa-integrates">The Big Picture: What FreeIPA Integrates</h2>
<pre><code class="" data-line="">┌─────────────────────────────────────────────────────────┐
│                    FreeIPA Server                        │
│                                                         │
│  389-DS (LDAP)    MIT Kerberos    Dogtag PKI            │
│  ─────────────    ───────────     ─────────             │
│  User/group       TGT + service   Machine certs         │
│  storage          ticket issuing  User certs             │
│                                   OCSP / CRL            │
│  Bind DNS         SSSD (client)   Apache (WebUI)        │
│  ──────────       ────────────    ──────────────        │
│  SRV records      Enrollment      Management UI         │
│  for KDC/LDAP     automation      REST API              │
└─────────────────────────────────────────────────────────┘
              ▲                  ▲
              │ enrollment       │ SSH + sudo rules
   ┌──────────┴──────────┐  ┌───┴──────────────────┐
   │  Linux client        │  │  Linux client         │
   │  (ipa-client-install)│  │  (ipa-client-install) │
   └─────────────────────┘  └──────────────────────┘
</code></pre>
<p>EP06 and EP07 built OpenLDAP from components. FreeIPA gives you all of that plus Kerberos, PKI, DNS, and HBAC — opinionated, integrated, and managed through a single CLI and WebUI. This episode shows what you actually get from it.</p>
<hr />
<h2 id="why-freeipa-instead-of-bare-openldap">Why FreeIPA Instead of Bare OpenLDAP</h2>
<p>Running bare OpenLDAP requires you to:<br />
&#8211; Configure schema for POSIX accounts, SSH keys, sudo rules, HBAC manually<br />
&#8211; Set up MIT Kerberos separately and integrate it with LDAP<br />
&#8211; Build your own PKI for machine certificates<br />
&#8211; Maintain DNS SRV records for Kerberos discovery<br />
&#8211; Write client enrollment scripts<br />
&#8211; Build a management interface (or live in LDIF)</p>
<p>FreeIPA does all of this in one installer, with a consistent data model across all components. The trade-off is opacity — FreeIPA makes decisions for you (schema, replication topology, Kerberos realm name) that bare OpenLDAP leaves to you.</p>
<hr />
<h2 id="installing-freeipa-server">Installing FreeIPA Server</h2>
<pre><code class="" data-line=""># RHEL / Rocky / AlmaLinux
dnf install -y freeipa-server freeipa-server-dns

# Run the installer (interactive)
ipa-server-install

# Or non-interactive:
ipa-server-install \
  --realm=CORP.COM \
  --domain=corp.com \
  --ds-password=DM_password \
  --admin-password=Admin_password \
  --setup-dns \
  --forwarder=8.8.8.8 \
  --unattended

# After install: get an admin Kerberos ticket
kinit admin
</code></pre>
<p>The installer creates:<br />
&#8211; 389-DS instance with the FreeIPA schema<br />
&#8211; MIT KDC with realm <code class="" data-line="">CORP.COM</code><br />
&#8211; Dogtag CA and all certificate infrastructure<br />
&#8211; Bind DNS with SRV records for the KDC and LDAP server<br />
&#8211; Apache WebUI at <code class="" data-line="">https://ipa.corp.com/ipa/ui/</code><br />
&#8211; SSSD configured on the server itself</p>
<p>Time: 5–10 minutes. What used to take a week of manual configuration.</p>
<hr />
<h2 id="the-ipa-cli">The ipa CLI</h2>
<p>Every management action goes through <code class="" data-line="">ipa</code>. It talks to the IPA server&#8217;s REST API and handles Kerberos authentication transparently (it uses your <code class="" data-line="">kinit</code> session).</p>
<pre><code class="" data-line=""># Users
ipa user-add vamshi \
  --first=Vamshi --last=Krishna \
  --email=vamshi@corp.com \
  --password

ipa user-show vamshi
ipa user-find --all              # search all users
ipa user-disable vamshi          # lock account without deleting
ipa user-mod vamshi --shell=/bin/zsh

# Groups
ipa group-add engineers --desc &quot;Engineering team&quot;
ipa group-add-member engineers --users=vamshi,alice

# Password policy
ipa pwpolicy-mod --minlength=12 --maxlife=90 --history=10

# SSH public keys — stored centrally, pushed to every host
ipa user-mod vamshi --sshpubkey=&quot;ssh-ed25519 AAAA...&quot;
# SSSD on enrolled hosts will use this key for SSH login — no authorized_keys file needed
</code></pre>
<hr />
<h2 id="host-based-access-control-hbac">Host-Based Access Control (HBAC)</h2>
<p>HBAC is the feature that justifies FreeIPA for most Linux shops. It lets you define centrally: which users (or groups) can log in to which hosts (or host groups), using which services (SSH, sudo, FTP).</p>
<p>Without HBAC, access control is per-machine: <code class="" data-line="">/etc/security/access.conf</code> or PAM <code class="" data-line="">pam_access</code> rules, replicated across every server, managed inconsistently.</p>
<p>With HBAC: one rule, enforced everywhere.</p>
<pre><code class="" data-line=""># Create host groups
ipa hostgroup-add production-servers --desc &quot;Production Linux hosts&quot;
ipa hostgroup-add-member production-servers --hosts=web01.corp.com,db01.corp.com

# Create user groups
ipa group-add sre-team
ipa group-add-member sre-team --users=vamshi,alice

# Create an HBAC rule
ipa hbacrule-add allow-sre-to-prod \
  --desc &quot;SRE team can SSH to production&quot;
ipa hbacrule-add-user allow-sre-to-prod --groups=sre-team
ipa hbacrule-add-host allow-sre-to-prod --hostgroups=production-servers
ipa hbacrule-add-service allow-sre-to-prod --hbacsvcs=sshd

# Test the rule before applying
ipa hbactest \
  --user=vamshi \
  --host=web01.corp.com \
  --service=sshd
# Access granted: True
# Matched rules: allow-sre-to-prod
</code></pre>
<p>SSSD on each enrolled host enforces the HBAC rules at login time by querying the IPA server. No per-machine configuration. Add a new server to the <code class="" data-line="">production-servers</code> host group and the HBAC rules apply immediately.</p>
<hr />
<h2 id="sudo-rules-from-the-directory">Sudo Rules from the Directory</h2>
<pre><code class="" data-line=""># Create a sudo rule
ipa sudorule-add allow-sre-sudo \
  --cmdcat=all \
  --desc &quot;SRE team gets full sudo on production&quot;
ipa sudorule-add-user allow-sre-sudo --groups=sre-team
ipa sudorule-add-host allow-sre-sudo --hostgroups=production-servers

# Or a scoped rule — only specific commands
ipa sudorule-add allow-service-restart
ipa sudocmdgroup-add service-commands
ipa sudocmd-add /usr/bin/systemctl
ipa sudocmdgroup-add-member service-commands --sudocmds=&quot;/usr/bin/systemctl&quot;
ipa sudorule-add-allow-command allow-service-restart --sudocmdgroups=service-commands
</code></pre>
<p>On enrolled hosts, SSSD&#8217;s <code class="" data-line="">sssd_sudo</code> responder pulls these rules and the <code class="" data-line="">sudo</code> command evaluates them locally. No <code class="" data-line="">/etc/sudoers.d/</code> files. Central policy, local enforcement.</p>
<hr />
<h2 id="enrolling-a-client">Enrolling a Client</h2>
<pre><code class="" data-line=""># On the client machine
dnf install -y freeipa-client

ipa-client-install \
  --domain=corp.com \
  --server=ipa.corp.com \
  --realm=CORP.COM \
  --principal=admin \
  --password=Admin_password \
  --unattended

# What this does:
# 1. Registers the host in IPA as a machine principal
# 2. Retrieves a host Kerberos keytab (/etc/krb5.keytab)
# 3. Configures SSSD (sssd.conf, nsswitch.conf, pam.d)
# 4. Configures Kerberos (/etc/krb5.conf)
# 5. Optionally configures NTP and DNS
</code></pre>
<p>After enrollment: <code class="" data-line="">getent passwd vamshi</code> returns the IPA user. SSH with an IPA password works. HBAC rules are enforced. Sudo rules from the directory apply. SSH public keys from the user&#8217;s IPA profile work without <code class="" data-line="">authorized_keys</code> files.</p>
<hr />
<h2 id="freeipa-trust-with-active-directory">FreeIPA Trust with Active Directory</h2>
<p>In mixed environments (Linux servers + Windows clients), you can establish a trust between FreeIPA and AD without joining the Linux servers to the AD domain directly.</p>
<pre><code class="" data-line=""># On the IPA server (after installing ipa-server-trust-ad)
ipa-adtrust-install --netbios-name=CORP

# Establish the trust
ipa trust-add ad.corp.com \
  --admin=Administrator \
  --password \
  --type=ad

# AD users can now log in to IPA-enrolled Linux hosts
# They appear as: CORP.COM\username or username@corp.com
</code></pre>
<p>Under the hood: FreeIPA acts as an SSSD-enabled Samba DC for the trust relationship. AD users&#8217; Kerberos tickets from the AD KDC are accepted by the FreeIPA KDC, which maps them to POSIX attributes stored in IPA (or automatically generated via ID mapping).</p>
<hr />
<h2 id="common-misconceptions"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Common Misconceptions</h2>
<p><strong>&#8220;FreeIPA is just OpenLDAP with a UI.&#8221;</strong> FreeIPA uses 389-DS (not OpenLDAP), adds a full Kerberos KDC, a certificate authority, DNS, HBAC enforcement, and sudo management — all with a consistent schema designed for these use cases. It&#8217;s an integrated identity platform, not a wrapper.</p>
<p><strong>&#8220;HBAC rules replace firewall rules.&#8221;</strong> HBAC controls who can log in to a host at the authentication layer — not network access. A blocked HBAC rule means the SSH session is rejected after TCP connection. You still need firewall rules to block TCP access.</p>
<p><strong>&#8220;FreeIPA replicas are identical.&#8221;</strong> FreeIPA uses 389-DS Multi-Supplier replication. All replicas accept reads and writes. But the CA is separate — only the initial server (and explicitly designated CA replicas) run the CA. If the CA goes down, certificate operations stop; authentication does not.</p>
<hr />
<h2 id="framework-alignment">Framework Alignment</h2>
<table>
<thead>
<tr>
<th>Domain</th>
<th>Relevance</th>
</tr>
</thead>
<tbody>
<tr>
<td>CISSP Domain 5: Identity and Access Management</td>
<td>FreeIPA is an enterprise IAM platform — HBAC, sudo policy, SSH key management, and certificate-based authentication are all IAM controls</td>
</tr>
<tr>
<td>CISSP Domain 3: Security Architecture and Engineering</td>
<td>FreeIPA&#8217;s integrated CA enables certificate-based authentication for machines and users — a stronger authentication factor than passwords</td>
</tr>
<tr>
<td>CISSP Domain 1: Security and Risk Management</td>
<td>Centralized HBAC and sudo policy reduces the attack surface of privilege escalation — no more inconsistent sudoers files that drift across the fleet</td>
</tr>
</tbody>
</table>
<hr />
<h2 id="key-takeaways">Key Takeaways</h2>
<ul>
<li>FreeIPA = 389-DS + MIT Kerberos + Dogtag PKI + Bind DNS — one installer, one management interface</li>
<li>HBAC rules define centrally who can SSH to which host groups — enforced by SSSD on every enrolled client, no per-machine config</li>
<li>Sudo rules from the directory replace scattered <code class="" data-line="">/etc/sudoers.d/</code> files — central policy, SSSD-enforced locally</li>
<li><code class="" data-line="">ipa hbactest</code> lets you verify access rules before a user hits a blocked login — use it before every policy change</li>
<li>For Linux-centric environments: FreeIPA. For Windows-dominant environments: AD. For mixed: FreeIPA trust with AD.</li>
</ul>
<hr />
<h2 id="whats-next">What&#8217;s Next</h2>
<p>FreeIPA is the Linux answer to enterprise identity. EP09 covers the Microsoft answer — Active Directory — which extended LDAP and Kerberos into a complete enterprise platform with Group Policy, Sites, and a replication model built for global scale.</p>
<p><em>Next: <a href="/active-directory-ldap-kerberos/">How Active Directory Works: LDAP, Kerberos, and Group Policy Under the Hood</a></em></p>
<p>Get EP09 in your inbox when it publishes → <a href="https://linuxcent.com/subscribe">linuxcent.com/subscribe</a></p>
<p><a class="a2a_button_mastodon" href="https://www.addtoany.com/add_to/mastodon?linkurl=https%3A%2F%2Flinuxcent.com%2Ffreeipa-linux-identity-management%2F&amp;linkname=FreeIPA%3A%20LDAP%20%2B%20Kerberos%20%2B%20PKI%20in%20a%20Single%20Linux%20Identity%20Stack" title="Mastodon" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_email" href="https://www.addtoany.com/add_to/email?linkurl=https%3A%2F%2Flinuxcent.com%2Ffreeipa-linux-identity-management%2F&amp;linkname=FreeIPA%3A%20LDAP%20%2B%20Kerberos%20%2B%20PKI%20in%20a%20Single%20Linux%20Identity%20Stack" title="Email" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_whatsapp" href="https://www.addtoany.com/add_to/whatsapp?linkurl=https%3A%2F%2Flinuxcent.com%2Ffreeipa-linux-identity-management%2F&amp;linkname=FreeIPA%3A%20LDAP%20%2B%20Kerberos%20%2B%20PKI%20in%20a%20Single%20Linux%20Identity%20Stack" title="WhatsApp" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_reddit" href="https://www.addtoany.com/add_to/reddit?linkurl=https%3A%2F%2Flinuxcent.com%2Ffreeipa-linux-identity-management%2F&amp;linkname=FreeIPA%3A%20LDAP%20%2B%20Kerberos%20%2B%20PKI%20in%20a%20Single%20Linux%20Identity%20Stack" title="Reddit" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_x" href="https://www.addtoany.com/add_to/x?linkurl=https%3A%2F%2Flinuxcent.com%2Ffreeipa-linux-identity-management%2F&amp;linkname=FreeIPA%3A%20LDAP%20%2B%20Kerberos%20%2B%20PKI%20in%20a%20Single%20Linux%20Identity%20Stack" title="X" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_linkedin" href="https://www.addtoany.com/add_to/linkedin?linkurl=https%3A%2F%2Flinuxcent.com%2Ffreeipa-linux-identity-management%2F&amp;linkname=FreeIPA%3A%20LDAP%20%2B%20Kerberos%20%2B%20PKI%20in%20a%20Single%20Linux%20Identity%20Stack" title="LinkedIn" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_copy_link" href="https://www.addtoany.com/add_to/copy_link?linkurl=https%3A%2F%2Flinuxcent.com%2Ffreeipa-linux-identity-management%2F&amp;linkname=FreeIPA%3A%20LDAP%20%2B%20Kerberos%20%2B%20PKI%20in%20a%20Single%20Linux%20Identity%20Stack" title="Copy Link" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Flinuxcent.com%2Ffreeipa-linux-identity-management%2F&#038;title=FreeIPA%3A%20LDAP%20%2B%20Kerberos%20%2B%20PKI%20in%20a%20Single%20Linux%20Identity%20Stack" data-a2a-url="https://linuxcent.com/freeipa-linux-identity-management/" data-a2a-title="FreeIPA: LDAP + Kerberos + PKI in a Single Linux Identity Stack"></a></p><p>The post <a href="https://linuxcent.com/freeipa-linux-identity-management/">FreeIPA: LDAP + Kerberos + PKI in a Single Linux Identity Stack</a> appeared first on <a href="https://linuxcent.com">Linuxcent</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://linuxcent.com/freeipa-linux-identity-management/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1793</post-id>	</item>
		<item>
		<title>How Kerberos Works: Tickets, KDC, and Why Enterprises Use It With LDAP</title>
		<link>https://linuxcent.com/how-kerberos-works/</link>
					<comments>https://linuxcent.com/how-kerberos-works/#respond</comments>
		
		<dc:creator><![CDATA[Vamshi Krishna Santhapuri]]></dc:creator>
		<pubDate>Mon, 04 May 2026 05:00:00 +0000</pubDate>
				<category><![CDATA[Identity & Authentication]]></category>
		<category><![CDATA[Active Directory]]></category>
		<category><![CDATA[Authentication]]></category>
		<category><![CDATA[Identity Management]]></category>
		<category><![CDATA[Kerberos]]></category>
		<category><![CDATA[LDAP]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Security]]></category>
		<guid isPermaLink="false">https://linuxcent.com/?p=1784</guid>

					<description><![CDATA[<p><span class="span-reading-time rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">Reading Time: </span> <span class="rt-time"> 7</span> <span class="rt-label rt-postfix">minutes</span></span>How Kerberos works: the KDC, TGT flow, ticket-granting service, and why enterprises pair it with LDAP — explained with kinit, klist, and wire-level detail.</p>
<p>The post <a href="https://linuxcent.com/how-kerberos-works/">How Kerberos Works: Tickets, KDC, and Why Enterprises Use It With LDAP</a> appeared first on <a href="https://linuxcent.com">Linuxcent</a>.</p>
]]></description>
										<content:encoded><![CDATA[<span class="span-reading-time rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">Reading Time: </span> <span class="rt-time"> 7</span> <span class="rt-label rt-postfix">minutes</span></span><style>
pre{position:relative;background:#1e1e1e;color:#d4d4d4;
    padding:16px 16px 16px 20px;border-radius:6px;overflow-x:auto;
    font-family:'JetBrains Mono','Fira Code','Cascadia Code',Consolas,'Courier New',monospace;
    font-size:.88em;line-height:1.6;border-left:4px solid #555}
code{background:#f4f4f4;padding:2px 5px;border-radius:3px;font-size:.9em}
pre code{background:transparent;padding:0;color:inherit}
pre[data-lang="bash"],pre[data-lang="sh"],
pre[data-lang="shell"],pre[data-lang="zsh"]{border-left-color:#4ec9b0}
pre[data-lang="yaml"],pre[data-lang="json"],
pre[data-lang="toml"],pre[data-lang="xml"]{border-left-color:#569cd6}
pre[data-lang="python"],pre[data-lang="go"],pre[data-lang="rust"],
pre[data-lang="java"],pre[data-lang="c"],pre[data-lang="cpp"]{border-left-color:#c586c0}
pre[data-lang="text"],pre[data-lang="output"],
pre[data-lang="console"]{border-left-color:#888}
.lc-copy-btn{position:absolute;top:8px;right:8px;background:#2d2d2d;color:#ccc;
    border:1px solid #444;border-radius:4px;padding:3px 9px;font-size:.75em;
    font-family:system-ui,sans-serif;cursor:pointer;opacity:0;
    transition:opacity .15s,background .15s;line-height:1.6}
pre:hover .lc-copy-btn{opacity:1}
.lc-copy-btn:hover{background:#3a3a3a;color:#fff}
.lc-copy-btn.copied{color:#4ec9b0;border-color:#4ec9b0}
.lc-lang-badge{position:absolute;top:8px;left:20px;font-family:system-ui,sans-serif;
    font-size:.7em;color:#666;text-transform:uppercase;letter-spacing:.04em;
    line-height:1;pointer-events:none;opacity:0;transition:opacity .15s}
pre:hover .lc-lang-badge{opacity:1}
table{border-collapse:collapse;width:100%;margin:16px 0}
th,td{border:1px solid #ddd;padding:10px 14px;text-align:left}
th{background:#f0f0f0;font-weight:600}
tr:nth-child(even){background:#fafafa}
</style>
<p><script>
(function(){
  if(window.__lcCodeEnhanced)return;
  window.__lcCodeEnhanced=true;
  function enhance(){
    document.querySelectorAll('pre').forEach(function(pre){
      var code=pre.querySelector('code');
      var lang='';
      if(code){var m=(code.className||'').match(/language-(\S+)/);if(m)lang=m[1].toLowerCase();}
      if(lang)pre.setAttribute('data-lang',lang);
      if(lang){var badge=document.createElement('span');badge.className='lc-lang-badge';badge.textContent=lang;pre.insertBefore(badge,pre.firstChild);}
      var btn=document.createElement('button');
      btn.className='lc-copy-btn';btn.textContent='Copy';btn.setAttribute('aria-label','Copy code to clipboard');
      pre.appendChild(btn);
      btn.addEventListener('click',function(){
        var text=code?code.innerText:pre.innerText;
        if(navigator.clipboard&&window.isSecureContext){
          navigator.clipboard.writeText(text).then(function(){ok(btn);}).catch(function(){fb(text,btn);});
        }else{fb(text,btn);}
      });
    });
  }
  function ok(btn){btn.textContent='Copied!';btn.classList.add('copied');setTimeout(function(){btn.textContent='Copy';btn.classList.remove('copied');},2000);}
  function fb(text,btn){
    try{var ta=document.createElement('textarea');ta.value=text;ta.style.cssText='position:fixed;left:-9999px;top:-9999px;opacity:0';document.body.appendChild(ta);ta.select();document.execCommand('copy');document.body.removeChild(ta);ok(btn);}
    catch(e){btn.textContent='✗ Failed';setTimeout(function(){btn.textContent='Copy';},2000);}
  }
  if(document.readyState==='loading'){document.addEventListener('DOMContentLoaded',enhance);}else{enhance();}
})();
</script></p>
<p><em>The Identity Stack, Episode 5</em><br />
<a href="/what-is-ldap/">EP01</a> → <a href="/ldap-internals-directory-structure/">EP02</a> → <a href="/ldap-authentication-linux-pam-nss/">EP03</a> → <a href="/sssd-linux-authentication/">EP04: SSSD</a> → <strong>EP05</strong> → <a href="/openldap-setup-replication/">EP06: OpenLDAP</a> → &#8230;</p>
<hr />
<h2 id="tldr">TL;DR</h2>
<ul>
<li>Kerberos is a network authentication protocol — it proves identity without sending passwords over the network, using time-limited cryptographic tickets</li>
<li>Three actors: the client, the KDC (Key Distribution Center), and the service — the KDC issues tickets; clients use tickets to authenticate to services</li>
<li>The ticket flow: AS-REQ (get a TGT) → TGS-REQ (exchange TGT for a service ticket) → AP-REQ (present service ticket to the target service)</li>
<li>A TGT (Ticket-Granting Ticket) is a session credential — it lets you request service tickets without re-entering your password for the lifetime of the ticket (default 10 hours)</li>
<li>LDAP + Kerberos together: LDAP stores identity (who you are), Kerberos authenticates it (proves you are who you say you are) — Active Directory is exactly this combination</li>
<li><code class="" data-line="">kinit</code>, <code class="" data-line="">klist</code>, <code class="" data-line="">kdestroy</code> are the hands-on tools — run them and read the ticket output</li>
</ul>
<hr />
<h2 id="the-big-picture-three-actors-three-steps">The Big Picture: Three Actors, Three Steps</h2>
<pre><code class="" data-line="">         1. AS-REQ / AS-REP
Client ◄────────────────────► AS (Authentication Server)
  │                                     │
  │    (part of KDC)                    │
  │                                     ▼
  │         2. TGS-REQ / TGS-REP   TGS (Ticket-Granting Server)
  ├───────────────────────────────────►│
  │         (part of KDC)              │
  │                                    │
  │    3. AP-REQ / AP-REP              │
  └─────────────────────────────► Service (SSH, LDAP, NFS, HTTP...)

KDC = AS + TGS (usually the same process, same machine)
</code></pre>
<p>EP04 mentioned Kerberos tickets and clock skew requirements without explaining the protocol. This episode explains why Kerberos was invented, what a ticket actually is, and how the three-step flow works — so that when SSSD says &#8220;KDC unreachable&#8221; or <code class="" data-line="">kinit</code> fails with &#8220;pre-authentication required,&#8221; you know exactly what&#8217;s happening.</p>
<hr />
<h2 id="the-problem-kerberos-was-built-to-solve">The Problem Kerberos Was Built to Solve</h2>
<p>MIT&#8217;s Project Athena started in 1983 — a campus-wide computing initiative giving students access to thousands of workstations. The problem: how do you authenticate a student at workstation 847 to a file server across campus without sending their password over the network?</p>
<p>In 1988, Steve Miller and Clifford Neuman published Kerberos version 4. The core insight: a trusted third party (the KDC) can issue cryptographic proof that a user has authenticated, and that proof can be presented to any service on the network without the service ever seeing the user&#8217;s password.</p>
<p>The password never leaves the client machine after the initial authentication. Every subsequent authentication — to a different service, to the same service again — uses a ticket. The KDC knows both the client and the service. The client and service only need to trust the KDC.</p>
<hr />
<h2 id="keys-tickets-and-sessions">Keys, Tickets, and Sessions</h2>
<p>Before the protocol, the primitives:</p>
<p><strong>Long-term keys</strong> — derived from passwords. When you set a password in Kerberos, it&#8217;s hashed into a key stored in the KDC database (in the <code class="" data-line="">krbtgt</code> account on AD, in <code class="" data-line="">/var/lib/krb5kdc/principal</code> on MIT Kerberos). The client also derives this key from the password at authentication time. Neither ever sends the raw password.</p>
<p><strong>Session keys</strong> — temporary symmetric keys created by the KDC for a specific session. They&#8217;re valid for the ticket&#8217;s lifetime. After the ticket expires, the session key is useless.</p>
<p><strong>Tickets</strong> — encrypted blobs issued by the KDC. A ticket contains the session key, the client identity, the expiry time, and optional flags. It&#8217;s encrypted with the target service&#8217;s long-term key — only the service can decrypt it. The client carries the ticket but can&#8217;t read the contents.</p>
<hr />
<h2 id="the-three-step-flow">The Three-Step Flow</h2>
<h3 id="step-1-as-req-as-rep-getting-a-tgt">Step 1: AS-REQ / AS-REP — Getting a TGT</h3>
<pre><code class="" data-line="">Client                        KDC (AS component)
  │                                │
  │── AS-REQ ──────────────────────►
  │   {username, timestamp}         │
  │   (timestamp encrypted with     │
  │    client&#039;s long-term key)       │
  │                                 │
  │   KDC verifies: decrypts        │
  │   timestamp with stored key.    │
  │   If valid → issues TGT         │
  │                                 │
  ◄── AS-REP ──────────────────────│
      {session_key_enc_with_client, │
       TGT_enc_with_krbtgt_key}     │
</code></pre>
<p>The client decrypts the session key using its long-term key (derived from the password). The TGT is encrypted with the KDC&#8217;s own key (<code class="" data-line="">krbtgt</code>) — the client can&#8217;t read it, but carries it.</p>
<p>This is the step that requires the password. After this, the TGT is what the client uses for everything else.</p>
<h3 id="step-2-tgs-req-tgs-rep-getting-a-service-ticket">Step 2: TGS-REQ / TGS-REP — Getting a Service Ticket</h3>
<pre><code class="" data-line="">Client                        KDC (TGS component)
  │                                │
  │── TGS-REQ ─────────────────────►
  │   {TGT, authenticator,         │
  │    target_service_name}        │
  │   (authenticator encrypted      │
  │    with TGT session key)        │
  │                                 │
  │   KDC: decrypts TGT,           │
  │   verifies authenticator,       │
  │   issues service ticket         │
  │                                 │
  ◄── TGS-REP ────────────────────│
      {service_session_key_enc,    │
       service_ticket_enc_with_    │
       service_long_term_key}      │
</code></pre>
<p>No password involved. The client proves its identity by presenting the TGT (which only the KDC can issue) and an authenticator (a timestamp encrypted with the TGT&#8217;s session key, proving the client holds the session key without revealing it).</p>
<h3 id="step-3-ap-req-ap-rep-authenticating-to-the-service">Step 3: AP-REQ / AP-REP — Authenticating to the Service</h3>
<pre><code class="" data-line="">Client                        Service (sshd, LDAP, NFS...)
  │                                │
  │── AP-REQ ──────────────────────►
  │   {service_ticket,             │
  │    authenticator_enc_with_      │
  │    service_session_key}        │
  │                                 │
  │   Service: decrypts ticket      │
  │   with its long-term key,       │
  │   verifies authenticator        │
  │                                 │
  ◄── AP-REP (optional) ───────────│
      {mutual authentication}       │
</code></pre>
<p>The service decrypts the ticket using its own key. It extracts the client identity and session key. It verifies the authenticator. No communication with the KDC required — the service trusts what the KDC signed.</p>
<hr />
<h2 id="why-clock-skew-matters">Why Clock Skew Matters</h2>
<p>Every Kerberos authenticator contains a timestamp. The service rejects authenticators older than 5 minutes (by default) — this prevents replay attacks where an attacker captures an authenticator and replays it later.</p>
<p>This is why clock skew over 5 minutes breaks Kerberos authentication entirely. If your machine&#8217;s clock drifts 6 minutes from the KDC, every authenticator you generate is rejected as too old or too far in the future. No tickets. No AD logins. No SSSD authentication.</p>
<pre><code class="" data-line=""># Check time sync status
timedatectl status
chronyc tracking        # if using chrony
ntpq -p                 # if using ntpd

# If clock is off: force a sync
chronyc makestep        # immediate step correction (chrony)
</code></pre>
<hr />
<h2 id="hands-on-kinit-klist-kdestroy">Hands-On: kinit, klist, kdestroy</h2>
<pre><code class="" data-line=""># Get a TGT (will prompt for password)
kinit vamshi@CORP.COM

# Show current tickets
klist
# Credentials cache: FILE:/tmp/krb5cc_1001
# Principal: vamshi@CORP.COM
#
# Valid starting     Expires            Service principal
# 04/27/26 01:00:00  04/27/26 11:00:00  krbtgt/CORP.COM@CORP.COM
#   renew until 05/04/26 01:00:00

# Show encryption types used (the -e flag)
klist -e
# 04/27/26 01:00:00  04/27/26 11:00:00  krbtgt/CORP.COM@CORP.COM
#         Etype: aes256-cts-hmac-sha1-96, aes256-cts-hmac-sha1-96

# Get a service ticket for a specific service
kvno host/server.corp.com@CORP.COM
# host/server.corp.com@CORP.COM: kvno = 3

# Show all tickets including service tickets
klist -f
# Flags: F=forwardable, f=forwarded, P=proxiable, p=proxy, D=postdated,
#        d=postdated, R=renewable, I=initial, i=invalid, H=hardware auth

# Destroy all tickets
kdestroy
</code></pre>
<p>The <code class="" data-line="">Valid starting</code> and <code class="" data-line="">Expires</code> fields are the ticket lifetime. After expiry, you need to re-authenticate (or renew the ticket if it&#8217;s within the <code class="" data-line="">renew until</code> window). The <code class="" data-line="">renew until</code> date is when even renewal stops working.</p>
<hr />
<h2 id="etckrb5conf">/etc/krb5.conf</h2>
<pre><code class="" data-line="">[libdefaults]
    default_realm = CORP.COM
    dns_lookup_realm = false
    dns_lookup_kdc = true         # find KDCs via DNS SRV records
    ticket_lifetime = 10h
    renew_lifetime = 7d
    forwardable = true            # tickets can be forwarded to remote hosts (needed for SSH forwarding)
    rdns = false

[realms]
    CORP.COM = {
        kdc = dc01.corp.com
        kdc = dc02.corp.com       # failover KDC
        admin_server = dc01.corp.com
    }

[domain_realm]
    .corp.com = CORP.COM
    corp.com = CORP.COM
</code></pre>
<p>With <code class="" data-line="">dns_lookup_kdc = true</code>, Kerberos finds KDCs by querying DNS SRV records (<code class="" data-line="">_kerberos._tcp.corp.com</code>). AD sets these up automatically. On MIT Kerberos, you add them manually. DNS-based discovery is the recommended approach for AD environments — it picks up new DCs automatically.</p>
<hr />
<h2 id="kerberos-ldap-why-enterprises-run-both">Kerberos + LDAP: Why Enterprises Run Both</h2>
<p>LDAP and Kerberos solve different problems and are almost always deployed together:</p>
<pre><code class="" data-line="">LDAP answers:  &quot;Who is vamshi? What groups is he in? What&#039;s his home directory?&quot;
Kerberos answers: &quot;Is this really vamshi? Prove it without sending a password.&quot;
</code></pre>
<p>Active Directory is exactly this combination — the directory is LDAP-based, the authentication is Kerberos. When a Linux machine joins an AD domain via <code class="" data-line="">realm join</code> or <code class="" data-line="">adcli</code>, it gets:<br />
&#8211; LDAP access to the AD directory (for NSS: user and group lookups)<br />
&#8211; A Kerberos principal registered in AD (for PAM: ticket-based authentication)<br />
&#8211; A machine account (the machine&#8217;s identity in the directory)</p>
<p>When you SSH into an AD-joined Linux machine:<br />
1. SSSD issues a Kerberos AS-REQ for the user&#8217;s TGT<br />
2. SSSD uses the TGT to get a service ticket for the Linux machine&#8217;s PAM service<br />
3. Authentication is verified via the service ticket — no LDAP Bind with a password<br />
4. SSSD does an LDAP Search to get POSIX attributes (UID, GID, home dir)</p>
<p>Password-based LDAP Bind is the fallback when Kerberos isn&#8217;t available. Kerberos is the default on AD-joined systems — and it&#8217;s more secure because the password never leaves the client.</p>
<hr />
<h2 id="common-misconceptions"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Common Misconceptions</h2>
<p><strong>&#8220;Kerberos sends your password to the KDC.&#8221;</strong> It doesn&#8217;t. The client derives a key from the password locally and uses that key to encrypt a timestamp (the pre-authentication data). The KDC verifies the timestamp using the stored key. The raw password never travels.</p>
<p><strong>&#8220;Kerberos is an authorization protocol.&#8221;</strong> Kerberos authenticates — it proves who you are. Authorization (what you can do) is a separate decision, usually handled by ACLs on the service or directory group membership.</p>
<p><strong>&#8220;Once you have a TGT, you&#8217;re authenticated to everything.&#8221;</strong> A TGT only proves your identity to the KDC. Each service requires a separate service ticket. The TGT is what lets you get those service tickets without re-entering your password.</p>
<p><strong>&#8220;Kerberos requires AD.&#8221;</strong> MIT Kerberos 5 is a standalone implementation. FreeIPA (EP08) runs MIT Kerberos. Heimdal is another implementation. AD uses a Microsoft-extended version of Kerberos 5, but the core protocol is the same RFC.</p>
<hr />
<h2 id="framework-alignment">Framework Alignment</h2>
<table>
<thead>
<tr>
<th>Domain</th>
<th>Relevance</th>
</tr>
</thead>
<tbody>
<tr>
<td>CISSP Domain 5: Identity and Access Management</td>
<td>Kerberos is the de facto enterprise authentication protocol — SSO, delegation, and service account authentication all depend on it</td>
</tr>
<tr>
<td>CISSP Domain 4: Communications and Network Security</td>
<td>Kerberos prevents credential sniffing and replay attacks — two of the core network authentication threat categories</td>
</tr>
<tr>
<td>CISSP Domain 3: Security Architecture and Engineering</td>
<td>The KDC is a critical single point of trust — its availability, key management, and account (<code class="" data-line="">krbtgt</code>) rotation are architectural security decisions</td>
</tr>
</tbody>
</table>
<hr />
<h2 id="key-takeaways">Key Takeaways</h2>
<ul>
<li>Kerberos is a ticket-based protocol — the password is used once to get a TGT; from then on, tickets prove identity without the password</li>
<li>The three-step flow: get a TGT from the AS, exchange it for a service ticket at the TGS, present the service ticket to the target service</li>
<li>Clock skew over 5 minutes breaks Kerberos — time synchronization is a hard dependency</li>
<li>LDAP stores identity; Kerberos authenticates it — Active Directory is exactly this combination, and so is FreeIPA</li>
<li><code class="" data-line="">klist -e</code> shows the encryption types in use — <code class="" data-line="">aes256-cts-hmac-sha1-96</code> is what you want to see; <code class="" data-line="">arcfour-hmac</code> (RC4) is legacy and should be disabled</li>
</ul>
<hr />
<h2 id="whats-next">What&#8217;s Next</h2>
<p>EP05 covered Kerberos as a protocol. EP06 goes hands-on: building a real LDAP directory with OpenLDAP, configuring replication, and understanding how the server-side components — <code class="" data-line="">slapd</code>, the MDB backend, SyncRepl — fit together.</p>
<p><em>Next: <a href="/openldap-setup-replication/">OpenLDAP Setup and Replication: Running Your Own Directory</a></em></p>
<p>Get EP06 in your inbox when it publishes → <a href="https://linuxcent.com/subscribe">linuxcent.com/subscribe</a></p>
<p><a class="a2a_button_mastodon" href="https://www.addtoany.com/add_to/mastodon?linkurl=https%3A%2F%2Flinuxcent.com%2Fhow-kerberos-works%2F&amp;linkname=How%20Kerberos%20Works%3A%20Tickets%2C%20KDC%2C%20and%20Why%20Enterprises%20Use%20It%20With%20LDAP" title="Mastodon" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_email" href="https://www.addtoany.com/add_to/email?linkurl=https%3A%2F%2Flinuxcent.com%2Fhow-kerberos-works%2F&amp;linkname=How%20Kerberos%20Works%3A%20Tickets%2C%20KDC%2C%20and%20Why%20Enterprises%20Use%20It%20With%20LDAP" title="Email" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_whatsapp" href="https://www.addtoany.com/add_to/whatsapp?linkurl=https%3A%2F%2Flinuxcent.com%2Fhow-kerberos-works%2F&amp;linkname=How%20Kerberos%20Works%3A%20Tickets%2C%20KDC%2C%20and%20Why%20Enterprises%20Use%20It%20With%20LDAP" title="WhatsApp" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_reddit" href="https://www.addtoany.com/add_to/reddit?linkurl=https%3A%2F%2Flinuxcent.com%2Fhow-kerberos-works%2F&amp;linkname=How%20Kerberos%20Works%3A%20Tickets%2C%20KDC%2C%20and%20Why%20Enterprises%20Use%20It%20With%20LDAP" title="Reddit" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_x" href="https://www.addtoany.com/add_to/x?linkurl=https%3A%2F%2Flinuxcent.com%2Fhow-kerberos-works%2F&amp;linkname=How%20Kerberos%20Works%3A%20Tickets%2C%20KDC%2C%20and%20Why%20Enterprises%20Use%20It%20With%20LDAP" title="X" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_linkedin" href="https://www.addtoany.com/add_to/linkedin?linkurl=https%3A%2F%2Flinuxcent.com%2Fhow-kerberos-works%2F&amp;linkname=How%20Kerberos%20Works%3A%20Tickets%2C%20KDC%2C%20and%20Why%20Enterprises%20Use%20It%20With%20LDAP" title="LinkedIn" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_copy_link" href="https://www.addtoany.com/add_to/copy_link?linkurl=https%3A%2F%2Flinuxcent.com%2Fhow-kerberos-works%2F&amp;linkname=How%20Kerberos%20Works%3A%20Tickets%2C%20KDC%2C%20and%20Why%20Enterprises%20Use%20It%20With%20LDAP" title="Copy Link" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Flinuxcent.com%2Fhow-kerberos-works%2F&#038;title=How%20Kerberos%20Works%3A%20Tickets%2C%20KDC%2C%20and%20Why%20Enterprises%20Use%20It%20With%20LDAP" data-a2a-url="https://linuxcent.com/how-kerberos-works/" data-a2a-title="How Kerberos Works: Tickets, KDC, and Why Enterprises Use It With LDAP"></a></p><p>The post <a href="https://linuxcent.com/how-kerberos-works/">How Kerberos Works: Tickets, KDC, and Why Enterprises Use It With LDAP</a> appeared first on <a href="https://linuxcent.com">Linuxcent</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://linuxcent.com/how-kerberos-works/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1784</post-id>	</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Page Caching using Disk: Enhanced 

Served from: linuxcent.com @ 2026-07-23 09:25:57 by W3 Total Cache
-->