Why objectClass is different between LDAP servers - ldap

I am trying to write an application which sync users from multiple LDAP servers into one database. I was trying to write a code which finds all groups in the server from a given basedn. But then I noticed that objectClass values are different between LDAP servers.
Example, OpenLDAP uses objectClass=posixgroup to identify a group where as AD uses objectClass=group. Tried to find why isn't there a standard for this, but couldn't.
Is there a way to identify the value of objectClass name used by that server for groups other than configuring it for each server type?

There is no single answer to this. In the case of OpenLDAP and many others it depends what schema you're using. I use groupOfUniqueNames for groups and organizationalRole for roles in OpenLDAP, and there are other choices.

OpenLDAP does not use objectClass=posixgroup to identify a group. In fact, it is the services that connect to the directory server that use specific schemata or not. The directory server itself is oblivious (or at least it is from an LDAP standpoint -- Active Directory does more than LDAP).
On POSIX systems, e.g. Linux it is obvious that posixgroup is used by many services, likewise the group class is Windows-specific. Many services allow to customize how information is searched in the directory, i.e. you can adapt their configuration to your schema.
So while you can use tricks to work for both cases, if you want to really determine which schemata are used, you have two options:
Identify the services that are using the directory and look it up for them
Query the server for the schemata it supports. Often these are the ones that are also in use (at least by 'somebody'). For example on my OpenLDAP server I only included the schemata on a per-demand basis. So on this server you would find the posixgroup schema. However I doubt that on a typical Active Directory server you will find it (but you will find group). Schemata have world-unique Object IDs, so you can test for the presence of a specific ID to make sure group is really the group that you know.

Related

Implementing LDAP (preferably OpenLDAP) 'tiered' server

I'm trying to set up an LDAP server which has a local database of some users, but will refer the request to another 'parent' server if the record is not found on it's own database. The records would not have a different suffix, just that the userid would be different. I have read lots about referrals, chaining, master/slave, producer/consumer, etc. However, I cannot work out which is the right solution for me as there is a lot of differing confusing documentation. I am only a user of the 'parent' server, so would prefer not to have to change any settings on it. I would like to use OpenLDAP or an equivalent FOSS solution.
Thanks!

LDAP query to fetch all reports

I need to extract all the people managed by a particular manager ("report"). Each person has a "manager" attribute which point to the manager. I can search on the manager attribute - but this only finds direct reports. If we have a second-level manager, it doesn't find their whole team.
I realise I can use the search query repeatedly, but this could get slow when people have a large team. Especially as I don't know if a particular user is a manager or not - until I do the search query.
Is there a single LDAP query to fetch all the reports? I'm using openldap. A similar kind of query is possible in SQL using CONNECT BY or WITH RECURSIVE.
Using Lightweight Directory Access Protocol (LDAP) in openLDAP and most LDAP implementations you have no choice but to do repeated LDAP Queries.
(Note the word Lightweight )
Microsoft Active Directory has a really neat Extensible Matching Rule they call LDAP_MATCHING_RULE_IN_CHAIN which can be used for such purposes, but, it only works on Microsoft Active Directory.

LDAP server - usage

I know that LDAP server (or directory service or directory) stores information (mostly used for storing user information) in object oriented database.
Is it just a "user store"? And can be used using LDAP API or "LDAP configuration in server" for user authentication and to get user information...
LDAP in itself provides any other functionality than storing user information? Like security configuration? policy configuration? etc.
How bad performance will be if a relational database (say Oracle) is used to store user information?
Thanks.
Actually newer versions of OpenLDAP store their configuration inside itself only, classic text configuration file is depreciated, if not removed already. This feature is called cn=config in OpenLDAP [ http://www.openldap.org/doc/admin24/slapdconf2.html#cn=config ]. Thing you're probably thinking about is dynamic ACI ( not to be confused with ACL which is also provided ), and sure, LDAP, in general, provides much functionality like that. There are also monitor backends provided, in general LDAP likes itself, and is driven into self-managed direction. However, it's purpose is quite different than RDBMS, it's optimized for search operations, but not manipulating data and doing computations on it. Think it that way - e.g. user information, or DNS information is retrieved enormously more times than modified, and that's field in which ldap rocks. You actually rarely need suming UserID's, don't you? :) Object oriented database means, that - in contrary to RDBMS - data is organized with the way closer to OO type ( classess, attributes, inheritance etc. ). There are also SQL backends to ldap ( don't know what sense does it make though ), but I haven't heard about LDAP backends for SQL database.
Have a look on OpenLDAP Administration Guide here
http://www.openldap.org/doc/admin24/
Regarding storing custom information, you can create your own classes, objects and even attribute types, by inheritance/composing existing entities, or from scratch. Sky is the limit, man ;-)
An LDAP directory server stores data in attributes which are grouped in entries. Which attributes are required or allowed in an entry is defined by an attribute called an objectClass. Each attribute type has an attribute definition in a schema. The attribute type definition has a syntax which defines what sort of data is allowed, possibly a matching rule and/or ordering rule defining how attribute values are compared, and other data describing the attribute. Any sort of data can be stored in a directory server database, including binary data. Most often a directory server is used for authentication and profile information. Legacy directory servers like OpenLDAP don't perform as well on updates (ADD, MOD, DELETE, MODRDN) as on authentication or searches, but more modern servers perform updates at a very high rate.

Active Directory to LDIF OpenLDAP

How would I create an LDAP that mimics the structure of a typical Active Directory?
I need the following values to be included in each user:
This isn't the right syntax but I want to add a user with a specific user name and password
dn: dc=users
userlogin: USERNAME
userPassword: PASSWORD
objectclass: person
userPrincipalName: USERNAME#domain.com
sAMAccountName: USERNAME
I tried using a tldif, but I'm unsure how to create an appropriate Distinguished Name that allows for me to add users like the above syntax, or what equates to it.
Ultimately several remote servers queries the OpenLDAP server with this sql query.
select sAMAccountName FROM '" + ConnectionPath + "' where objectclass='person' and userPrincipalName='"+ UserName + "'
Thanks! :)
If you want to use OpenLDAP with Active-Directory attributes, the first thing you need to do is to modify the OpenLDAP schema. There is a "faq-O-Matic" which explain that on OpenLDAP site.
The schema of your Directory defines a set of rules, which specify types of objects a directory may contain and the required and optional attributes entries of different types should have. A LDAP schema may also specify the namespace structure and the relationship between different types of objects.
To stay simple just modify the Schema which is located in /etc/openldap/schema/ and do not try to implement a dynamic schema.
There is a second solution, which is not expensive and perhaps more simple as far as Active directory is concerned, if you have Windows servers in your network. This solution is called ADAM (Active Directory Application Mode) on W2K3 or LDS (Lightweigh Directory Server) on W2K8. These two products are free. ADAM and LDS are the binary of Active Directory you can use to build application directories, and they are ready and able in a few clicks. It's easy to implement AD schema on them. You can even synchronize them with an existing AD and use them as proxy.

What is LDAP used for?

I know that LDAP is used to provide some information and to help facilitate authorization.
But what are the other usages of LDAP?
I will focus on why using LDAP, not what is LDAP.
The use model is similar like how people use library cards or phonebooks. When you have a task that requires “write/update once, read/query many times”, you might consider using LDAP. LDAP is designed to provide extremely fast read/query performance for a large scale of dataset. Typically you want to store only a small piece of information for each entry. The add/delete/update performance is relatively slower compared with read/query because the assumption is that you don’t do “update” that often.
Imagine you have a website that has a million registered users with thousands of page requests per second. Without LDAP, every time users click a page, even for static page viewing, you will probably need to interact with your database to validate the user ID and its digital signature for this login session. Obviously, the query to your database for user-validation will become your bottleneck. By using LDAP, you can easily offload the user validation and gain significant performance improvement. Essentially, in this example, LDAP is another optimization layer outside your database to enhance performance, not replacing any database functions.
LDAP is not just for user validation, any task that has the following properties might be a good use case for LDAP:
You need to locate ONE piece of data many times and you want it fast
You don’t care about the logic and relations between different data
You don’t update, add, or delete the data very often
The size of each data entry is small
You don’t mind having all these small pieces of data at a centralized place
That's a rather large question.
LDAP is a protocol for accessing a directory. A directory contains objects; generally those related to users, groups, computers, printers and so on; company structure information (although frankly you can extend it and store anything in there).
LDAP gives you query methods to add, update and remove objects within a directory (and a bunch more, but those are the central ones).
What LDAP does not do is provide a database; a database provides LDAP access to itself, not the other way around. It is much more than signup.
Well, there are LDAP servers and the LDAP protocol. Combined, it's a data store, or a database. It's not relational, but it's just a place to store data, and it's optimized to be efficient at reads more than writes. It doesn't support transactions.
Now, it happens to be very popular for storing credentials, but that's by no means its only purpose, and not its original purpose.
LDAP stands for Lightweight Directory Access Protocol. As the name suggests, it is a lightweight protocol for accessing directory services, specifically X.500-based directory services. LDAP runs over TCP/IP or other connection oriented transfer services. The nitty-gritty details of LDAP are defined in RFC2251 "The Lightweight Directory Access Protocol (v3)" and other documents comprising the technical specification RFC3377. This section gives an overview of LDAP from a user's perspective.
What kind of information can be stored in the directory? The LDAP information model is based on entries. An entry is a collection of attributes that has a globally-unique Distinguished Name (DN). The DN is used to refer to the entry unambiguously. Each of the entry's attributes has a type and one or more values. The types are typically mnemonic strings, like cn for common name, or mail for email address. The syntax of values depend on the attribute type. For example, a cn attribute might contain the value Babs Jensen. A mail attribute might contain the value babs#example.com. A jpegPhoto attribute would contain a photograph in the JPEG (binary) format.
How is the information arranged? In LDAP, directory entries are arranged in a hierarchical tree-like structure.
LDAP is the Lightweight Directory Access Protocol. Basically, it's a protocol used to access data from a database (or other source) and it's mostly suited for large numbers of queries and minimal updates (the sort of thing you would use for login information for example).
LDAP doesn't itself provide a database, just a means to query data in the database.
The main idea of LDAP is to keep in one place all the information of a user (contact details, login, password, permissions), so that it is easier to maintain by network administrators. For example you can:
use the same login/passwd to login on an Intranet and on your local computer.
give specific permissions to a group of user. For example some could access some specific page of your Intranet, or some specific directories on a shared drive.
get all the contact details of the people in a company on Outlook for example.
The main benefit of using LDAP is that information for an entire organization can be consolidated into a central repository. For example, rather than managing user lists for each group within an organization, LDAP can be used as a central directory accessible from anywhere on the network. And because LDAP supports Secure Sockets Layer (SSL) and Transport Layer Security (TLS), sensitive data can be protected from prying eyes.
LDAP also supports a number of back-end databases in which to store directories. This allows administrators the flexibility to deploy the database best suited for the type of information the server is to disseminate. Because LDAP also has a well-defined client Application Programming Interface (API), the number of LDAP-enabled applications are numerous and increasing in quantity and quality.
LDAP main usage is to provider faster retrieval of data . It acts as a central repository for storing user details that can be accessed by various application at same time .
The data that is read various time but we rarely update the data then LDAP is better option as it is faster to read in it because of its structure but updating(add/updatee or delete) is bit tedious job in case of LDAP
Security provided by LDAP : LDAP can work with SSL & TLS and thus can be used for sensitive information .
LDAP also can work with number of database providing greater flexibility to choose database best suited for our environment
Can be a better option for synchronising information between master and its replicase
LDAP apart from supporting the data recovery capability .Also , allows us to export data into LDIF file that can be read by various software available in the market
I have had the opportunity to start a project for school about ldap, from scratch, but before getting to know what is ldap, I had to understand what is a directory, there are many (most used directories are novell and windows), here you can see what the directory in Wikipedia.
And ldap is the protocol to communicate with the board, one of the best books I've found is this one.
LDAP is just a protocol to access structured information. LDAP has standardized local and remote access to information whereas in case of database there is only standardized local access and remote access is proprietary.
LDAP server is optimized for search operation and database for transactions(Insert/Delete).
For more information refer following link:
http://www.itszero.in/2013/09/what-is-ldap-ad-adam.html
In Windows Server LDAP is a protocol which is used for access Active Directory object, user authentication, authorization.
To take the definitions the other mentioned earlier a bit further, how about this perspective...
LDAP is Lightweight Directory Access Protocol. DAP, is an X.500 notion, and in X.500 is VERY heavy weight! (It sort of requires a full 7 layer ISO network stack, which basically only IBM's SNA protocol ever realistically implemented).
There are many other approaches to DAP. Novell has one called NDAP (NCP Novell Core Protocols are the transport, and NDAP is how it reads the directory).
LDAP is just a very lightweight DAP, as the name suggests.
Well,
LDAP is a protocol(way) to access structured info. LDAP uses client-server model so, LDAP client makes request to access required info. LDAP server stores info not in relational way but in attribute and value pair. You can use LDAP to assign same privilege to group of user or same credential to access multiple services. For more details refer following link : http://www.zytrax.com/books/ldap/ch2/
LDAP stands for Lightweight Directory Access Protocol.It is used in Active Directory for communicating user queries..e.g.. LDAP can be used by users to search and locate a particular object like a laser printer in a domain.
LDAP is also used to store your credentials in a network security system and retrieve it with your password and decrypted key giving you access to the services.
Light weight directory access protocal is used to authenticate users to access AD information
LDAP stands for Lightweight Directory Access Protocol (not a database). As the name says it is used for accessing/reading data. LDAP is a protocol to access data from directory servers which is a hierarchical database, it is designed for reading, browsing, searching, and organizing data. This kind of data we do not modify regularly or it is very infrequently modified data.
Big companies store their internal data, for example, user names with their title and id or phonebooks of their workers on LDAP servers (this server implements a tree-structured database). Those data can be reached by the workers of that company through the LDAP protocol. LDAP protocol runs over TCP or UDP protocol and accesses the server through port 389. There is also LDAPS that runs over SSL and accesses the server through port 636.