Fact-checked by Grok 2 weeks ago

389 Directory Server

The 389 Directory Server is an open-source, enterprise-class (LDAP) directory server designed primarily for environments, enabling the storage, management, and retrieval of identities, groups, and hierarchical organizational data in a scalable, secure manner. Originating from the Directory Server project initiated in 1996 by LDAP co-inventor Tim Howes and colleagues at Communications, the codebase evolved through several corporate transitions, including the formation of the iPlanet Alliance with in 1999, its dissolution in 2001, and Red Hat's acquisition of the server in December 2004. The first open-source release occurred as Fedora Directory Server 1.0 on December 8, 2005, following an initial partial release in June 2005, with a rebranding to 389 Directory Server in to reflect its community-driven development under the umbrella. As of November 2025, 389 Directory Server remains actively maintained by a global open-source community, with recent stable releases including version 3.1.3 in June 2025 and ongoing updates integrated into distributions like 43. It supports high-performance operations, handling thousands of queries per second across hundreds of thousands of entries, and features asynchronous multi-supplier replication for , zero-downtime online management, and integration with tools like for ACID-compliant storage. Security is emphasized through TLS encryption up to 256 bits, SASL/ authentication, attribute-level encryption, and advanced access controls, making it suitable for large-scale deployments in and as a structured alternative.

Development and History

Origins and Early Development

The 389 Directory Server originated in 1996 when Netscape Communications recruited LDAP co-inventor Tim Howes, along with colleagues Mark Smith and Gordon Good from the University of Michigan, to develop a commercial directory server. This project built upon the university's open-source slapd implementation, transforming it into a robust LDAP-based system tailored for enterprise use. Netscape's initial focus was on creating a scalable solution for managing large directories, addressing the growing need for centralized authentication and information lookup in networked environments. The resulting Netscape Directory Server debuted as the first commercial LDAPv3-compliant implementation in early 1998, supporting the protocol defined in RFC 2251 and enabling efficient, lightweight access to directory data. It incorporated standards through LDAP's design as a simplified front-end to directories, facilitating interoperability with legacy systems while prioritizing performance for high-volume operations. By the late , the server had evolved to handle enterprise-scale deployments, with features like prototypes emerging to support distributed architectures. In 1999, acquired , leading to the formation of the with to jointly advance server products, including the Directory Server. This partnership enhanced the codebase's maturity, introducing improvements in replication and until the alliance dissolved in 2001, after which Sun forked the code and rebranded it as Sun Directory Server. By the early 2000s, the server was widely deployed in production environments by major organizations, demonstrating its reliability for managing millions of entries in scalable, mission-critical setups. Sun continued proprietary development through the mid-2000s, culminating in versions like Sun Directory Server 5.2 in 2004, which solidified its role as a leading LDAP solution before the shift toward open-source initiatives.

Open Source Transition

On June 1, 2005, Red Hat announced the open source release of what would become the Fedora Directory Server under the , forking from its proprietary Red Hat Directory Server, which was itself derived from the Directory Server code base originating in the 1990s iPlanet alliance between and and later maintained as Sun Java System Directory Server before Oracle's involvement. This initial release, version 7.1, made the core Directory Server engine available under the GNU General Public License (GPL), though pre-built binaries for the administration server and console were provided without source code at that time. The full open source version 1.0 followed on December 8, 2005, completing the transition by including source for all components, with the administration server now leveraging the open source Apache web server; licensing encompassed the GPL for the core, alongside LGPL version 2 for certain libraries and the Apache License for specific modules. The rationale behind the transition was to foster community-driven development of a robust LDAP server, enabling it to serve as a free and open alternative to closed-source solutions like Microsoft Active Directory, while reducing dependence on expensive proprietary tools and encouraging innovation within the ecosystem. As an interim name, Fedora Directory Server was adopted to align with the Fedora Project's branding, facilitating seamless integration into the distribution for packaging, testing, and distribution through its repositories.

Recent Milestones and Versions

In May 2009, the Fedora Directory Server project was renamed to 389 Directory Server to promote vendor neutrality and broader adoption beyond Fedora-specific ecosystems. The 1.2 series, released throughout the 2010s, emphasized stability improvements and bug fixes to solidify the server's reliability for enterprise use. Starting with the 1.4 series in 2017, enhancements to multi-master replication were introduced, enabling more robust asynchronous data synchronization across multiple writable masters. The 2.x series, beginning in the early 2020s, focused on performance tuning, including optimizations for resource usage and query efficiency in large-scale deployments. In January 2025, version 3.1.2 was released, followed by 3.0.6 in February 2025, which addressed critical security vulnerabilities and stability issues. By November 2025, 3.1.2 had been superseded by subsequent 3.1.x patches, with the latest stable release being 3.1.3 in September 2025. On November 11, 2025, Red Hat issued a bug fix update for 389-ds-base in Red Hat Enterprise Linux 9. Key milestones include the integration of containerization support with in the 2.x series, facilitating easier deployment in modern cloud and containerized environments. Experimental support for was merged in late 2016, expanding platform compatibility. Support for legacy platforms like and was deprecated after the 1.4.x series and fully removed by 2025 to streamline development on contemporary systems. The project is primarily maintained by engineers with contributions from the open-source community, and recent versions like 3.1.3 emphasize features such as zero-downtime updates through enhanced replication mechanisms.

Technical Architecture

Core Components

The 389 Directory Server's architecture is built around a modular that separates concerns between handling, persistence, and administrative interfaces, enabling extensible and scalable directory services. At its , the server consists of a front-end for client interactions, a backend for , and a suite of tools for configuration and oversight, all designed to support LDAP-based operations in enterprise environments. The server front-end serves as the primary interface for network communications, listening on port 389 for LDAP requests and supporting secure connections via TLS on port 636 or StartTLS upgrades for and . It employs a multi-threaded model to handle concurrent client connections efficiently, using system calls like poll() to manage I/O without blocking, with configurable parameters such as nsslapd-maxdescriptors to limit open file descriptors. This front-end processes incoming LDAP operations, routes them to appropriate plugins or backends, and returns responses, ensuring reliable handling of searches, modifications, and binds. The directory backend provides persistent storage for directory data, utilizing the (LMDB) as the underlying engine to support ACID-compliant transactions, indexed searches, and entry caching. Since version 3.1.3 (released in 2025), LMDB is the only supported backend, following the and removal of (BDB), which was the traditional option but is no longer available in current releases. Data is organized in a hierarchical directory tree, with schema and configuration stored in LDIF files, and the backend handles operations like adding, deleting, and querying entries while maintaining indexes for efficient lookups. Administrative management is facilitated through command-line tools. The dscreate utility creates new server instances from configuration templates, requiring root privileges and supporting custom setups like suffix definitions. dsctl manages instance lifecycle tasks, such as starting, stopping, status checks, and offline backups, operating locally on the host. For , dsconf provides LDAP-based access to server settings, enabling of plugins, schemas, and tasks via the cn=Directory Manager credentials. Additionally, dsidm offers user and group management capabilities. The server's modular design incorporates a architecture that allows extensibility without altering core code, with plugins handling functions such as , password policies, and integration with replication systems. This enables developers to add custom behaviors via the Server Plug-in API, supporting a range of pre-built plugins for common LDAP extensions. Furthermore, 389 Directory Server supports multi-instance deployments on a single host, allowing multiple independent directory instances to run concurrently for or resource partitioning, each with its own and backend.

Data Storage and Backend

The 389 Directory Server utilizes the Lightning Memory-Mapped Database (LMDB) as its backend database, introduced experimentally in version 1.4.x (around 2020) and becoming the default in version 3.0.0, with full replacement of Berkeley DB (BDB) in version 3.1.3 (2025) due to BDB's upstream deprecation. LMDB's memory-mapped design allows for efficient handling of read-heavy workloads with a single-writer, multi-reader architecture that enhances concurrency for large-scale directories, though it limits concurrent writes to one. Administrators can migrate from older BDB instances to LMDB using tools like dsctl, which export and reimport data while preserving transaction integrity. Schema management in 389 Directory Server relies on (LDIF) files for defining and importing object classes and attributes, enabling seamless integration with standard LDAP environments. The server supports dynamic schema updates without requiring downtime, through a two-phase process of validation followed by reloading, which ensures consistency before applying changes. By default, it includes core schemas such as COSINE and standards, providing foundational elements like organizational units and person attributes compliant with 4524 and related specifications. These schemas are stored in /usr/share/dirsrv/schema/ and can be extended via LDIF imports or direct modifications to cn=schema entries. For optimized query performance, the server employs database indexing on key attributes such as distinguished name (DN) and uid, using equality, substring, and presence index types to enable rapid lookups. The entry cache, a memory-resident store of deserialized directory entries, further accelerates frequent read operations by maintaining high hit ratios—ideally approaching 100%—reducing disk I/O and achieving sub-millisecond response times for cached queries. Indexing and caching together support disk-limited scaling for directories with millions of entries, as demonstrated in designs handling over 10 million objects without performance cliffs in cache utilization. The backend also maintains a changelog database to audit modifications for replication purposes, logging changes in a structured format that integrates directly with the primary LMDB store to ensure transactional consistency. This the backend interfaces with the core front-end components to process LDAP queries efficiently, abstracting storage details for higher-level operations.

Replication and Scalability

The 389 Directory Server implements multi-supplier replication as an asynchronous, multi-master model that enables multiple read-write replicas to store and synchronize directory data across a distributed environment. In this setup, each supplier server maintains its own writable copy of the data and pushes updates to other suppliers using a changelog mechanism from the backend database, ensuring eventual consistency without requiring a single point of failure. This approach supports high availability through automatic failover, where one supplier can acquire exclusive access to a consumer if another is unavailable, with configurable wait times to manage concurrent access attempts. Conflict resolution is handled primarily through timestamp-based mechanisms, where the most recent modification prevails during synchronization. Multi-supplier replication was introduced in the early open-source releases as part of Fedora Directory Server 7.1 in 2005. The replication can be configured in hub-and-spoke or full-mesh arrangements, allowing administrators to define replication agreements between suppliers via command-line tools like dsconf or the web-based management console. Each supplier is assigned a unique 16-bit replica ID to track changes and prevent loops, supporting up to 20 suppliers in a single topology for complex deployments involving consumers as well. Updates are propagated in a push model, where suppliers initiate sessions to deliver entries to peers, with fractional replication options to limit synchronized attributes or subtrees for efficiency in large-scale environments. This configurable structure facilitates load balancing by distributing write operations across multiple writable nodes. For scalability, 389 Directory Server supports horizontal scaling by adding more supplier instances to handle increased load, capable of processing thousands of operations per second in replicated setups while managing hundreds of thousands of user entries. The server includes auto-tuning features that dynamically adjust database and entry cache sizes based on available hardware resources such as CPU and , optimizing without manual intervention. In replication contexts, this enables deployments to scale across geographically distributed sites, with bandwidth and agreement configurations influencing overall throughput. Enhancements in version 1.4.x improved replication reliability, including better handling of conflicts and support for integrations like pass-through authentication with , allowing seamless credential validation in hybrid environments.

Features and Capabilities

Standards Compliance

The 389 Directory Server is fully compliant with LDAP version 3 (LDAPv3), ensuring interoperability with other directory services and clients through adherence to key (IETF) standards. This compliance has been a core design principle since its initial release as version 1.0 in 2005, with ongoing validation in subsequent versions to maintain protocol correctness. At its foundation, the server implements the essential LDAPv3 specifications outlined in RFC 4510, which provides the technical specification roadmap for the protocol, including operations for directory access and updates. RFC 4511 defines the LDAPv3 information model, specifying directory structure, entries, attributes, and naming conventions that the server uses to organize and retrieve data. Authentication mechanisms are handled per RFC 4512, supporting simple bind, SASL-based binds, and related considerations. Additionally, RFC 4513 covers LDAPv3 filters, matching rules, and extensions, enabling advanced search capabilities and custom operations within the server. Beyond the core protocol, 389 Directory Server supports several supplementary RFCs that enhance functionality and schema compatibility. RFC 1274 specifies the COSINE and Internet X.500 schema, providing standard object classes and attributes for organizational data. RFC 2222 defines the Simple Authentication and Security Layer (SASL) framework, allowing flexible authentication mechanisms such as Kerberos integration. For secure transport, RFC 2830 outlines the StartTLS extension, enabling encryption of LDAP sessions over standard ports. RFC 4527 adds support for read entry controls, permitting pre-read and post-read operations to inspect entries before and after modifications. RFC 4532 implements the content synchronization operation, facilitating efficient replication and updates between directory instances. The server provides partial support for non-standard or experimental extensions, such as aspects of 4533 related to content rules in validation, prioritizing operational correctness over complete experimental features to ensure stability in production environments. Regular releases, including those up to version 3.1.x, undergo internal audits to verify adherence to these RFCs, with updates addressing any compliance gaps identified through community testing and vendor integrations.

Security and Authentication

The 389 Directory Server provides robust mechanisms to secure user access to directory data. It supports the (SASL) for advanced authentication, including GSSAPI for Kerberos-based credential verification and DIGEST-MD5 for challenge-response authentication without transmitting plaintext s. Additionally, it enables simple bind authentication using distinguished names (DNs) and passwords, integrated with comprehensive password policies that enforce lockout after failed attempts, password expiration based on configurable periods, and account inactivation for inactivity thresholds. These policies can be applied server-wide, by subtree, or per user, ensuring flexible enforcement during bind operations. Access control in the 389 Directory Server is managed through Access Control Instructions (), which define granular permissions on entries and attributes. ACIs use target specifications, such as LDAP URLs or filters, to limit read, write, add, delete, or search operations to specific DNs, groups, or attributes, with bind rules that evaluate the authenticating user's and rights. Permissions can enforce requirements like secure connections, for instance, by denying access unless the client uses TLS, thereby integrating transport security with . The system also supports macro-based ACIs for scalable rules across large numbers of entries and the Get Effective Rights operation, which allows administrators to simulate and verify access for hypothetical users without performing actual operations. Encryption is a core security feature, with mandatory support for (TLS) to protect , using the Network Security Services (NSS) library for cryptographic operations. Clients can initiate secure connections via LDAPS on port 636 or upgrade unencrypted sessions to TLS using StartTLS on port 389, as defined in relevant LDAP standards. Certificate management is handled through NSS tools like certutil for generating, importing, and listing keys and s stored in the server's database, supporting up to 256-bit ciphers and client authentication for mutual verification. Attribute-level encryption on disk further safeguards sensitive . Passwords are stored using secure hashing algorithms, including Salted SHA-1 (SSHA) for legacy compatibility and with SHA-256 as the preferred method for its resistance to brute-force attacks through iterative hashing (defaulting to 100,000 rounds). During simple binds, the server can automatically upgrade weaker hashes to if the plaintext password is available, enhancing security without requiring user intervention. Auditing capabilities include detailed access logs that record all LDAP operations, including binds, searches, and modifications, with timestamps, client IPs, and outcomes for forensic analysis. A dedicated security audit log captures and failures, such as invalid credentials or permission denials, in a structured format to facilitate monitoring for attacks like brute-force attempts, with configurable rotation and retention up to 12 months.

Advanced Functionality

The 389 Directory Server provides several advanced plugins that extend its core LDAP functionality, enabling efficient management of complex directory structures without relying solely on standard RFC-compliant operations. These plugins address common administrative challenges in large-scale deployments, such as maintaining bidirectional relationships and automating attribute generation. They are implemented as post-operation hooks that integrate seamlessly with the server's backend, ensuring data consistency and optimization. The MemberOf plugin maintains reverse group memberships by automatically populating the memberOf attribute in entries whenever membership changes occur in group entries, such as those using the groupOfUniqueNames object . This allows for efficient queries of a user's group affiliations without traversing the entire directory tree, as the plugin updates the memberOf attribute on add, modify, or delete operations targeting the member attribute in groups. The groupOfUniqueNames object specifically enforces unique member DNs, preventing duplicates and supporting scenarios like groups where membership integrity is critical. Introduced in early versions and enhanced progressively from 1.2.x onward, the plugin supports scoping to specific suffixes and options to skip nested group processing for . Class of Service (CoS) offers a template-based for generating virtual attributes dynamically, reducing storage overhead by computing values on-the-fly rather than storing them per entry. For instance, it can automatically derive an from a user's by applying rules defined in CoS templates, such as pointer-based or indirect CoS schemes that shared entries. This feature supports multiple CoS types, including classic and schema-aware variants, allowing administrators to apply consistent policies across entry sets without manual updates. CoS integrates with the virtual attribute provider interface, ensuring generated values appear transparent to LDAP clients during searches. Available since early releases and refined in versions like 1.2.x for merged value support, it enhances usability in environments with repetitive attribute patterns. Distributed Numeric Assignment (DNA) automates the allocation of unique numeric identifiers, such as uidNumber and gidNumber, across replicated servers to prevent collisions in multi-master environments. The plugin intercepts add operations on managed entries and assigns values from predefined ranges, using a shared to coordinate assignments via replication protocols. For example, in a setup with multiple suppliers, DNA ensures sequential numbering starts from configurable values while reserving blocks to avoid overlaps during offline periods. This capability, introduced in version 1.2.x and evolved with remote server support in later updates, relies on the server's replication for synchronization, making it ideal for distributed . The plugin prevents dangling references by automatically updating or removing links to deleted or renamed entries, such as group memberships or other DN-pointing attributes. Upon detecting a delete or modify DN operation, it scans for referencing entries within a configurable —typically limited to specific suffixes or object classes—and adjusts them accordingly, like removing a from all groups. This post-operation supports replication-aware behavior, ensuring changes propagate consistently across topologies without manual intervention. Deployed progressively from 1.2.x versions with enhancements for shared and scoping, it maintains hygiene in dynamic environments.

Deployment and Management

Installation Process

The installation of 389 Directory Server begins with verifying the system prerequisites to ensure compatibility and performance. It is supported on various distributions, including , (RHEL), and Debian-based systems. Minimum hardware requirements include at least 2 of and 10 GB of disk space for small deployments with up to 10,000 entries, though larger setups demand more resources such as additional for caching and disk for database storage. Key dependencies encompass Python 3 for management tools, the Network Security Services (NSS) library for cryptographic operations, and other libraries like NSPR and components. As of version 3.1.3 (September 2025), the server uses a self-contained backend, eliminating the Berkeley DB dependency for easier deployment. For binary installations, users on , RHEL, or can employ package managers like DNF or YUM to install the core package. For example, on or RHEL 9, the command sudo dnf install 389-ds-base retrieves the necessary binaries, including the server daemon and utilities. On and systems, DEB packages are available through the official repositories, installable via sudo apt install 389-ds-base. These methods provide pre-compiled binaries tailored to the distribution, ensuring seamless integration with system services like SELinux on RHEL derivatives. Alternatively, for custom builds, 389 Directory Server can be compiled from source using . Clone the repository with git clone https://github.com/389ds/389-ds-base.git, install build dependencies as listed in the SPEC file (such as , , and NSS development packages), run ./autogen.sh followed by ./configure with desired options (e.g., --enable-autobind), and execute make then make install. This approach allows modifications or support for non-standard environments but requires more setup time compared to binaries. Once binaries or are installed, creating a directory instance uses the dscreate utility, which automates setup including import and port configuration. In interactive mode, run dscreate interactive to follow prompts for parameters like the root password, (e.g., dc=example,dc=com), and ports; non-interactively, generate and edit a with dscreate create-template /tmp/instance.inf, then apply it via dscreate from-file /tmp/instance.inf. The default ports are 389 for unencrypted LDAP and 636 for LDAPS, with sample entries and initial (such as core and cosine schemas) imported automatically during creation. The entire quickstart process, from package to a running instance, typically takes under one hour for basic setups. Since version 2.x, 389 Directory Server supports containerized deployments via official and Podman images, available on Docker Hub as 389ds/dirsrv, facilitating easy orchestration in environments like . These images are multi-architecture, supporting x86_64 and ARM platforms, and use the dscontainer entrypoint to handle instance initialization within the volume. To run, execute podman run -p 389:389 -p 636:636 -v /host/data:/data 389ds/dirsrv:latest, adjusting for persistent data.

Configuration and Administration

The configuration of 389 Directory Server is primarily managed through LDAP-based updates to the server stored in the dse.ldif file, located at /etc/dirsrv/slapd-instance_name/dse.ldif, which holds all instance-specific settings such as database backends, replication agreements, and access controls. Custom schema extensions are added via the 99user.ldif file in /etc/dirsrv/schema/99user.ldif, allowing administrators to define additional object classes and attributes without altering core files. These files are not edited directly; instead, changes are applied using tools like ldapmodify for LDAP operations (e.g., ldapmodify -D "cn=Directory Manager" -W -x -H ldap://server.example.com:389 -f config.ldif) or the dsconf for simplified command-line (e.g., dsconf instance config replace nsslapd-errorlog-level=16384). Since version 2.x, many updates support zero-downtime application, enabling online modifications to , settings, and access controls without server restarts. User and group management in 389 Directory Server relies on (LDIF) files for bulk operations and standard LDAP tools for individual CRUD (create, read, update, delete) actions. Entries are imported using ldapadd with an LDIF file (e.g., ldapadd -D "cn=Directory Manager" -W -x -f users.ldif), while modifications leverage ldapmodify and deletions use ldapdelete (e.g., ldapdelete -D "cn=Directory Manager" -W -x "uid=user,ou=people,dc=example,dc=com"). These operations target the directory suffix (e.g., dc=example,dc=com) and require appropriate bind credentials, typically the Directory Manager, to ensure secure administration of organizational units, users, and groups. Plugin administration occurs through the cn=config entry, where plugins like (CoS) for dynamic attribute inheritance and Distributed Numeric Assignment (DNA) for generating unique identifiers (e.g., uidNumber or gidNumber) are enabled or disabled using dsconf (e.g., dsconf instance plugin automember enable) or ldapmodify. plugins allow shared attributes across entries without replication overhead, while DNA ensures collision-free numbering in multi-supplier environments by allocating ranges (e.g., configuring a range of 1000 numbers starting at 5000). Some plugin changes may require a server restart, but the LDAP-based approach in cn=config supports live updates where possible. A web-based console, accessible at https://server.example.com:9090, provides a graphical for and , allowing tasks like and entry alongside command-line tools. Backups are performed using db2ldif to export database contents to LDIF while the is running (e.g., db2ldif -s "dc=example,dc=com" -a backup.ldif), supporting online operations with the -r flag for replication-inclusive exports.

Monitoring and Maintenance

Monitoring and maintenance of 389 Directory Server involve systematic , tracking, regular backups, and diagnostic tools to ensure operational reliability and quick issue resolution in production environments. The server generates detailed logs to capture activities and , facilitating proactive oversight. Access logs record client operations such as binds and searches, including timestamps, addresses, operation types, and timings like wait time (wtime), operation time (optime), and entry time (etime). Error logs document server transactions, severity levels (e.g., ERR, CRIT), and issues like replication failures or errors. These logs are stored by default in /var/log/dirsrv/slapd-instance/ for each instance, with configurable levels for , such as level 256 for entry access in access logs or 8192 for replication details in error logs. For performance monitoring, 389 Directory Server exposes metrics through the read-only cn=monitor LDAP entry, which provides on state, including initiated and completed (enabling calculation of operations per second), current and total connections, read waiters, threads, and descriptor table size. This allows integration with external tools; for instance, community-developed exporters query cn=monitor to expose metrics like connection counts and rates in a format compatible with for alerting and visualization. Additionally, the supports SNMP monitoring via the AgentX protocol, extending the net-snmp to report metrics such as simple binds, counts, and statistics through OIDs like .1.3.6.1.4.1.2312.6.1.1.3.389. Configuration involves enabling master agentx in /etc/snmp/snmpd.conf and starting the LDAP with a pointing to the instance. Backup and restore procedures are essential for , with support for full backups using database or LDIF exports. The db2bak tool creates full offline backups of the database, transaction logs, and indexes in /var/lib/dirsrv/slapd-instance/bak/, while db2ldif exports data in LDIF for portability, such as dsctl instance db2ldif --replication userRoot. Restores use bak2db for archives or ldif2db for LDIF files, requiring the server to be stopped beforehand. Although native incremental backups are not directly supported, ongoing replication serves as a form of incremental , enabling by promoting a to master in multi-supplier topologies. backups are possible via dsconf for minimal . Troubleshooting relies on log analysis and diagnostic utilities to address common issues like replication lag or certificate expiration. The logconv.pl script parses access logs to generate reports on operation statistics, error frequencies, and performance trends, such as bind success rates or search latencies, aiding in pinpointing bottlenecks. For replication lag, administrators check instance agreements with dsconf and review error logs for session errors, often resolving via re-initialization or network verification. Certificate expiry, which can disrupt TLS connections, is handled by renewing via the server's certutil tools or external CAs, monitoring validity through cn=monitor or log alerts. Regular maintenance tasks include rebuilding to optimize query performance, especially after changes or large imports. Using dsconf backend rebuild-index --suffix "dc=example,dc=com", administrators regenerate indexes offline, ensuring equality, substring, and presence types remain efficient. patching occurs through upstream distributions like or RHEL, where dnf update 389-ds-base applies fixes for vulnerabilities, with testing recommended in staging environments before production rollout.

References

  1. [1]
    389 Directory Server - Main Page
    389 Directory Server is hardened by real-world use, is full-featured, supports multi-supplier replication, and already handles many of the largest LDAP ...DocumentationDownloadGet started with a new install!FeaturesFAQs
  2. [2]
    History - 389 Directory Server
    The Directory Server project dates back to 1996, when Netscape hired the inventor of LDAP, Tim Howes, and his colleagues such as Mark Smith and Gordon Good.
  3. [3]
    Release Notes - 389 Directory Server
    Release Notes · 389 Directory Server 3.1.1 (July 30, 2024) · 389 Directory Server 3.0.4 (July 30, 2024) · 389 Directory Server 2.5.2 (July 30, 2024) · 389 ...
  4. [4]
    Changes/389 Directory Server 3.1.3 - Fedora Project Wiki
    Sep 15, 2025 · Current status. Targeted release: Fedora Linux 43; Last updated: 2025-09-15; Announced · Discussion thread; FESCo issue: #3432; Tracker bug ...
  5. [5]
    389 Directory Server - Features
    ### Summary of Key Features of 389 Directory Server
  6. [6]
  7. [7]
    Netscape Directory Server Deployment Guide
    One of these was the X.500 ISO standard, which is a protocol in use in many enterprises today. X.500 has several advantages that make it attractive for ...Missing: integration | Show results with:integration
  8. [8]
    Sun absorbing iPlanet staff, functions - CNET
    Oct 5, 2001 · The iPlanet group, originally called the Sun-Netscape Alliance, was spawned by America Online's acquisition of Netscape Communications in 1998. ...
  9. [9]
    Fedora Directory Server Now Available to the Open Source ...
    Jun 1, 2005 · Red Hat extends commitment to open source innovation in new areas of key infrastructure by releasing Fedora Directory Server with GPL ...
  10. [10]
    Red Hat Directory Server Scales Up - eWeek
    Sep 19, 2005 · Red Hat Directory Server is an open-source, LDAP-based directory server descended from the popular and mature Netscape/iPlanet code base.
  11. [11]
    Fedora Project Releases Fedora Directory Server 1.0 - Red Hat
    Dec 7, 2005 · Fully open source directory project with security enhancements to further the evolution of open source identity management development.
  12. [12]
    Fedora Directory Server: the Evolution of Linux Authentication
    Sep 1, 2007 · Enter the Fedora Directory Server (FDS). Released under the GPL in June 2005 as Fedora Directory Server 7.1 (changed to version 1.0 in ...Missing: announcement | Show results with:announcement
  13. [13]
    389 Change FAQ - 389 Directory Server
    389 Change FAQ. In May 2009 the Fedora Directory Server project changed its name to 389. 389 Change FAQ; Why the name change? Does this mean the project will ...Missing: history | Show results with:history
  14. [14]
    Old Release Notes - 389 Directory Server
    Old 389 Directory Server releases include 2.4.5 (Jan 15, 2024), 2.4.4 (Nov 15, 2023), 2.3.7 (Aug 9, 2023), 2.3.1 (Nov 18, 2022), and 2.2.4 (Nov 18, 2022).
  15. [15]
    15.3. Multi-Supplier Replication | Red Hat Directory Server | 11
    In a multi-supplier replication scenario, the supplier copies of the directory data are stored on multiple read-write replicas. Each of these servers ...
  16. [16]
    Roadmap - 389 Directory Server
    Directory Server Roadmap. The following describes what we would like to get done in various releases of Directory Server. This is a living document, ...
  17. [17]
    Releases/1.3.x Archive - 389 Directory Server
    The 389 Directory Server team is proud to announce 389-ds-base version 1.3.3.0. Fedora packages are available from the Fedora 21 and Rawhide repositories.<|separator|>
  18. [18]
    Architecture - 389 Directory Server
    The Back End handles higher level functions such as indexing, query optimization, query execution, bulk load, archive and restore, entry caching and record- ...Missing: tuning | Show results with:tuning<|control11|><|separator|>
  19. [19]
    Database Architecture - 389 Directory Server
    Overview. Fedora Directory Server is implemented on top of the popular, open source database software, Sleepycat Berkeley DB.
  20. [20]
    Using LMDB - 389 Directory Server
    LMDB can replace bdb in 389ds. Install lmdb-libs and libdb. Switch using `dsconf` or environment variables. There are some performance differences.
  21. [21]
    BerkeleyDB backend deprecation - 389 Directory Server
    BerkeleyDB is deprecated because its library is no longer supported upstream and is deprecated in some OS. New instances default to LMDB.How the database... · How to configure a new... · How to migrate between...
  22. [22]
    Quick Start - 389 Directory Server
    Finally check you have the correct package version installed - it should be in the 1.4. ... Hint: if you are running in docker, you'll need to use the -c flag in ...
  23. [23]
    Building Console - 389 Directory Server
    The 389 Directory Server Console manages the server, loaded by the 389 Management Console, which is a toolkit for managing server applications.Missing: dsconf | Show results with:dsconf<|control11|><|separator|>
  24. [24]
    Releases/3.0.1 - 389 Directory Server
    389-ds-base 3.0.1 uses LMDB by default, replacing BerkeleyDB, which may change server dynamics. Install with `dnf install 389-ds-base`.Missing: HP- UX Solaris
  25. [25]
    Migrate database from BerkeleyDB to lmdb - 389 Directory Server
    How to migrate 389 directory server database from BerkeleyDB to lmdb · 2a) if all the backend are replicated · 2b) if there is enough disk space · 3b) otherwise:.
  26. [26]
    FAQs - 389 Directory Server
    See History for a history of Netscape, iPlanet, and Sun Directory Server. Since the break up of iPlanet, the products have followed different development ...
  27. [27]
    Dynamically Reload Schema Design - 389 Directory Server
    The schema reload task has two phases: the schema validation and the schema reload. Unless the schema validation is successful, the schema reload will not be ...Missing: COSINE 500
  28. [28]
    Chapter 12. Managing the Directory Schema - Red Hat Documentation
    New, custom attributes and object classes can be added to a Directory Server instance to extend the schema, and there are several ways to add schema elements.
  29. [29]
    Chapter 3. Designing the directory schema - Red Hat Documentation
    The default directory schema is stored in the /usr/share/dirsrv/schema/ directory, containing all the common schema for the Directory Server. You can find the ...
  30. [30]
    Performance Tuning Guide | Red Hat Directory Server | 11
    This article provides some procedures and options that administrators can use to optimize the performance of their Red Hat Directory Server deployments.
  31. [31]
    DS Cache Structure - 389 Directory Server
    Inside of Directory Server we maintain a number of caches. This ranges from the large and important entry cache, the DN cache, Normalised DN cache and even the ...The Problem With Lru · Locking And Lru · Questions
  32. [32]
    Integrate Changelog and Backend Database - 389 Directory Server
    If a changelog database file is maintained for a a replica is define by the nsds5ReplicaFlags attribute, which determines if changes are logged.
  33. [33]
    Tuning the performance of Red Hat Directory Server
    To improve Directory Server performance, you can tune the number of locks, resource limits, and transaction log. You can also monitor the local disk and shut ...
  34. [34]
    20.13. Using Pass-Through Authentication | Red Hat Directory Server
    Pass-through authentication (PTA) is a mechanism which allows one Red Hat Directory Server instance to consult another to authenticate bind requests.
  35. [35]
    8.154. 389-ds-base | 6.5 Technical Notes | Red Hat Enterprise Linux
    The 389 Directory Server is an LDAPv3 compliant server. The base packages include the Lightweight Directory Access Protocol (LDAP) server and command-line ...
  36. [36]
    LDAP whoami - 389 Directory Server
    The feature works as an extended operation plugin. The whoami request sent by the client has a requestName field containing the whoami OID “1.3.6.1.4.1 ...
  37. [37]
    Releases/3.1.1 - 389 Directory Server
    The 389 Directory Server team is proud to announce 389-ds-base version 3.1.1. Fedora packages are available on Fedora 41.
  38. [38]
    Design/SASL Mechanism Configuration - 389 Directory Server
    SASL Mechanism Control Design. Overview. Starting 1.3.1 there is now control over what SASL mechanisms the Directory Server will allow for authentication.Use Cases · Design · Major Configuration Options...
  39. [39]
    Account Policy Plugin - Software Design Specification
    The Fedora Directory Server equips administrators with a set of features for managing account access, including password policy and account inactivation.Introduction · General Plugin Configuration · Detailed Design of Account...
  40. [40]
    Access Control Plug-in Order in Backend - 389 Directory Server
    Aug 18, 2025 · For modify operations, the ACIs are currently evaluated before bepreop. One possible solution would be to move the add operation behavior to be ...
  41. [41]
    Howto: TLS/StartTLS - 389 Directory Server
    Aug 27, 2020 · To enable TLS/StartTLS, set `nsslapd-security: on` in `cn=config` and restart the server. StartTLS uses port 389, and ldaps uses port 636.
  42. [42]
    Supported Ciphers in 389-ds-base - 389 Directory Server
    Overview. Directory Server supports SSL and StartTLS for the secure connections. The ciphers to encrypt the data are provided by NSS which the Directory Server ...
  43. [43]
    pbkdf2 - 389 Directory Server -
    PBKDF2. PBKDF2 unlike SSHA and friends is a real password derivation function. This takes the input (the password) and after many rounds of hashing outputs ...
  44. [44]
    Password Upgrade on Bind - 389 Directory Server
    We can upgrade the quality of the password hash on login. During a simple bind, we have access to the plaintext password due to the nature of the bind ...Password Storage Best... · How We Improve This... · How To Alter This BehaviourMissing: PBKDF2 | Show results with:PBKDF2<|separator|>
  45. [45]
    Security Audit log - 389 Directory Server
    The access logs do have all the info this security audit log would maintain, but it requires expensive parsing to get all the info. As stated above, logs ...Why · What · Events · Log Format
  46. [46]
    Parsable audit events from access logs - 389 Directory Server
    A utility is required to parse 389/directory server access logs whose output is a well defined record (event) of the LDAP request and any resultant responses.
  47. [47]
    Plugin Design - 389 Directory Server
    The memberOf plug-in looks for an operation that modifies group membership via altering the “member” attribute in a group entry. After this update of membership ...Pre-Operation (preoperation) · Backend Transaction Pre... · Extended Operation...
  48. [48]
    MemberOf Plugin - 389 Directory Server
    The memberOf LDAP attribute is an attribute used for grouping of user entries. Typically, when you add a user as a member of a group, you add a “member” ...Overview · FreeIPA Plug-in Architecture · Callbacks · Handling of LDAP Operations
  49. [49]
    MemberOf Plugin Scoping - 389 Directory Server
    MemberOf Plugin scoping defines what suffixes the plugin will act upon. You can define multiple “include” and/or “exclude” suffixes. This allows for more fine ...
  50. [50]
    MemberOf Plugin Skip Nested Groups - 389 Directory Server
    MemberOf Plugin Skip Nested Groups. Overview. By default when a user is added to or removed from a group we check if that group is a member of another group ...
  51. [51]
    Howto: Class of Service - 389 Directory Server
    Class of Service (CoS) - a virtual attribute service - some attribute values may not be stored with the entry itself - instead, they are generated by CoS logic.<|control11|><|separator|>
  52. [52]
    DNA Plugin Design - 389 Directory Server
    The DNA (distributed numeric assignment) plug-in is designed to manage a set of unique numeric values within a particular range across a group of entries.Overview · Usage With Multi-Supplier... · ConfigurationMissing: indexing | Show results with:indexing
  53. [53]
    Howto:DNA - 389 Directory Server
    DNA is used to auto-generate unique uid and gid numbers for users, using a magic number and a set start value to avoid collisions.
  54. [54]
    DNA Plugin Remote Server Settings
    This is because the plugin uses the bind information/credentials from the agreement to authenticate and retrieve the new range from that remote replica server.Overview · Design · Major Configuration Options...<|separator|>
  55. [55]
    Referential Integrity Plugin and Replication Design
    This document describes how the Referential Integrity Plugin handles replicated delete/modrdn operations, and how to change this behavior.
  56. [56]
    Configuring scope for Referential Integrity Plugin
    The referential integrity plugins maintains references between entries and containers, eg groups. If an entry is deleted the references are deleted or modified ...
  57. [57]
    Referential Integrity Plugin Configuration - 389 Directory Server
    The new shared configuration entry for the plugin allows the configuration to be replicated, so that all the servers can use the exact same settings. Design.
  58. [58]
    Chapter 2. File Locations Overview | Red Hat Directory Server | 11
    Schema configuration is also stored in LDIF format, and these files are located in the /etc/dirsrv/schema directory. The following table lists all of the ...Missing: COSINE | Show results with:COSINE
  59. [59]
    etc/dirsrv/schema/99user.ldif - Ubuntu Manpage
    NAME. /etc/dirsrv/schema/99user.ldif - LDIF file containing custom LDAP Schema for 389 Directory Server. ; SYNOPSIS. /etc/dirsrv/schema/99user.ldif ; DESCRIPTION.Missing: dse. | Show results with:dse.
  60. [60]
    Red Hat Directory Server Administration Guide
    This guide covers both GUI and command-line procedures for managing Directory Server instances and databases.Missing: compliance | Show results with:compliance
  61. [61]
    db2ldif(8) — 389-ds-base — Debian unstable
    Jan 2, 2019 · Exports the contents of the database to a LDIF file. This script can be executed while the server is still running, except when using the -r ...
  62. [62]
    Chapter 7. Log File Reference | Red Hat Directory Server | 11
    Red Hat Directory Server (Directory Server) provides logs to help monitor directory activity. Monitoring helps quickly detecting and remedying failures.
  63. [63]
    Chapter 4. cn=monitor | Red Hat Directory Server | 12
    The cn=monitor stores information used to monitor the server. This entry and its children are read-only and automatically updated by the server.
  64. [64]
    Prometheus exporter for 389-DS LDAP Server - GitHub
    This exporter request ldap cn=Monitor tree to export the metric in prometheus format. To build the exporter: go buildPrometheus Exporter For... · The Directory Server 389... · Exporter Usage<|control11|><|separator|>
  65. [65]
    SNMP Monitoring of FDS - 389 Directory Server
    Monitoring a FDS server with SNMP is relatively simple. FDS uses the Agent Extensibility Protocol (AgentX) to extend SNMP.
  66. [66]
    logconv(1) — 389-ds-base — Debian testing — Debian Manpages
    Analyzes Directory Server access log files for specific information defined on the command line. OPTIONS¶. -h, --help: help/usage. -v, -- ...
  67. [67]
    Replication Troubleshooting - 389 Directory Server
    To troubleshoot, trigger a new session, check supplier logs, compare RUVs, and focus on specific issues using access/error logs and configuration.Missing: 1.4 | Show results with:1.4
  68. [68]
    Howto: TLS/SSL - 389 Directory Server
    This page is a graphically illustrated (screenshots) step-by-step guide to setting up your Fedora DS servers to use TLS/SSL.
  69. [69]
    13.3. Creating New Indexes to Existing Databases
    Learn how to initiate indexing operations on Directory Server. You must create indexes manually because Directory Server does not automatically index databases.