Code

- Forgot to include modified helpviewer ;-(
[gosa.git] / doc / guide / admin / en / manual_gosa_en_ldap.tex
1 \chapter{openLDAP}
2 \section{Introduction,What is LDAP?}
3 \subsection{Directory Services, X.500}
5 A directory is a search information specialised database based on attributes.
7 X.500|ISO 9594\cite{x500}  is a standard of ITU-S(International Telecommunication Union - Telecommunication Standardisation Burean),  previously known like CCITT, to solve the problem of directories. Based on the works made with X.400 (a directory for electronic mail) and the works of ISO (International Standards Organisation) and ECMA (European Computer Manufacturers Association).\\
9 The X.501|ISO 9594 part 2. define the models, as the information must be organized, the model of user information, the model of administrative information and the directory service, which defines as the information must be distributed between several systems.\\
11 In X.509|ISO 9594 part 8. the standard of authentication and security used for SSL.\\
13 X.525|ISO 9594 part 9.  indicates as the replication must be between systems.\\
15 In X.519|ISO 9594 part 5. the communication protocols are defined, among them the one that have greater importance to us that is DAP - the protocol of access to directories - it defines that operations can be done with the connection: bind, unbind, the objects (entry) and its operation: add, eliminate, modify, search, list, compare, etc.\\
17 DAP is a protocol to complex to make servers and clients usable for Internet, then a comfortable protocol must be created to handle these directories: LDAP.\\
19 LDAP (Lightweight Directory Access Protocol) is a protocol thought for update and search of Internet (TCP/IP) oriented directories. \\
21 The last LDAP version is 3 and it is covered by the RFCs: 2251\cite{2251}, 2252\cite{2252}, 2253\cite{2253}, 2254\cite{2254}, 2255\cite{2255}, 2256\cite{2256} y 3377\cite{3377}.\\
22 \newpage
23 \subsection{Basic Concepts of LDAP}
25 \begin{itemize}
26 \item[]Entry\\
27 An Entry is a collection of attributes identified by its DN (distinguished name). A DN is unique in all the tree and therefore it identifies clearly the entrance to which refers. As example: CN=Alex O=CHAOSDIMENSION C=ES must identify to the object of common name \'Alex\' that is in organization \'CHAOSDIMENSION\' and country is \'ES\' (Spain). A RDN(names distinguished relative) is a part of the DN, in a way that concatenating the RDNs they give as result the DN. Of the previous example  CN=Alex is a RDN.
29 \item[]Object Class\\
30 A Object Class is a special attribute (ObjectClass) that defines attributes that are required and allowed in an entry. The values of the Objects Classes are defined in the schema. All the entrances must have a ObjectClass attribute. It isn\'t allowed to add attributes to the entries that aren\'t allowed by definitions of the Objects Classes of the entry.
32 \item[]Attrib\\
33 An Attribute is a type with one or more values associated. It is identified by a OID (object identifier). The attribute type indicates if can have more of a value of this attribute in an entry, the values that can have and how they can be searched.
35 \item[]Schema\\
36 A Schema is a collection of definitions of types of attributes, Objects Classes  and information that the server use to do the searches, to introduce values in an attribute, and to allow operations to add or to modify.
38 To create a search, we must consider several important parameters:
39 \item[]Filter\\
40 \begin{list}{}{}
41 \item[Base Object]
42 Un DN que sera a partir del cual realizaremos la busqueda.
44 \item[Scope]
45 It can have several values.
46 \begin{list}{}{}
47 \item[base] it will only search in the level base. 
48 \item[sub]  it will make a recursive search by all the tree from the level base 
49 \item[one] search a level below the level base.
50 \end{list}
52 \item[Size Limit]
53 It restricts the number of entries given back as result of a search.
55 \item[Time Limit]
56 It restricts the execution maximum time of a search.
58 \item[Filter]
59 A chain that defines the conditions that must be completed to find an entry.
61 \end{list}
63 The filters can be concatenated with ' and', ' or' and ' not' to create more complex filters. For example a filter with base O=CHAOSDIMENSION, C=ES, scope base and filter (CN=Alex) would find the entry CN=Alex , O=CHAOSDIMENSION, C=ES.
65 \end{itemize}
66 \newpage
67 \subsection{LDAP Servers}
69 LDAP is supported by numerous servers being the knownest Directory Active of Microsoft, eDirectory of Novell, Oracle Internet Directory of Oracle, iPlanet Directory Server of SUN and finally but not less important openLDAP.
71 This manual teach about the use and installation of openLDAP, since this supported by practically all the distributions of linux and their license fulfills the openSource standard. 
73 For more information about LDAP see LDAP Linux HowTo\cite{llh}, Using LDAP\cite{ul}, openLDAP administrator Guide\cite{oag} and in Spanish the LDAP relative part of the magnify manual Ldap+Samba+Cups+Pykota\cite{lscp}. 
75 \section{Installation}
76 Most distributions have packages of openLDAP. The use apt-get in debian, Urpmi in Mandrake, up2date in redhat or Yast2 in Suse is outside this manual. This manual explain the necessary work for the construction and configuration from the sources.
78 \subsection{Downloading openLDAP}
79 \label{down_ldap}
80 Downloading openLDAP 
82 Although they are not really necessary, there is several packages that have to be installed before openLDAP because we need them.
84 The first of them is \textbf{openSSL}, it exists in all the distributions and has documentation in is webpage\cite{ssldoc}. 
86 The sources can be downloaded from \htmladdnormallink{http://www.openssl.org/source/}{http://www.openssl.org/source/}
88 The second is \textbf{Kerberos Services v5}, which have two implementations, one is \htmladdnormallink{MIT Kerberos V}{http://web.mit.edu/kerberos/www} and the other is \htmladdnormallink{Heimdal Kerberos}{http://www.pdc.kth.se/heimdal}, both have good documentation and are widely supported by all the distributions. 
90 It could also be interesting to have the \textbf{Cyrus SASL} libraries installed (Simple Cyrus's Authentication and Security Layer) that could be obtained from \htmladdnormallink{http://asg.web.cmu.edu/sasl/}{http://asg.web.cmu.edu/sasl/sasl-library.html}, Cyrus SASL makes use of openSSL and Kerberos/GSSAPI for authentication. 
92 At last we will need a database for openLDAP, with respect to this manual this will be given through the \htmladdnormallink{\textbf{Sleepycat Software Berkeley DB}}{http://www.sleepycat.com/} libraries, we will need it if we want to use LDBM (Berkeley DB version 3) or BDB (Berkeley DB version 4). Also they exist in the majority of the distributions. 
94 Once obtained and compiled the necessary libraries we download the \htmladdnormallink{sources of openLDAP}{http://www.openldap.org/software/download/} in /usr/src (for example) and decompressed in that directory (for example with tar -zxvf openldap-2.X.XX.tgz).
95 \newpage
96 \subsection{Install Options}
98 The following options are for openLDAP version 2.2.xx that can differ from versions 2.0.XX and 2.1.XX. 
100 We executed \htmladdnormallink{./configure}{http://warping.sourceforge.net/gosa/contrib/en/configure.sh} with the following options:
102 \begin{itemize}
103 \item[](Directories)\\
104 \begin{tabular}{|ll|}\hline
105 --prefix=/usr & \\
106 --libexecdir='\${prefix}/lib' & \\
107 --sysconfdir=/etc & \\
108 --localstatedir=/var/run & \\
109 --mandir='\${prefix}/share/man' & \\
110 --with-subdir=ldap & \\
111 \hline \end{tabular}
113 \item[](Basic Options)\\
114 \begin{tabular}{|ll|}\hline
115 --enable-syslog & \\
116 --enable-proctitle & \\
117 --enable-ipv6 & $\rightarrow$Sockets IPv6\\
118 --enable-local & $\rightarrow$Sockets Unix\\
119 --with-cyrus-sasl & $\rightarrow$Supported authentication Cyrus SASL\\
120 --with-threads & $\rightarrow$Support thread of execution\\
121 --with-tls & $\rightarrow$Support TLS/SSL\\
122 --enable-dynamic & $\rightarrow$Dynamic compilation\\
123 \hline \end{tabular}
125 \item[](Slapd Options)\\
126 \begin{tabular}{|ll|}\hline
127 --enable-slapd & $\rightarrow$To compile the server in addition to the libraries\\
128 --enable-cleartext & $\rightarrow$It allows send clear text passwords\\
129 --enable-crypt & $\rightarrow$Send crypther passwords with DES.\\
130 --enable-spasswd & $\rightarrow$Verification of passwords through SASL\\
131 --enable-modules & $\rightarrow$Support of dynamic modules\\
132 --enable-aci & $\rightarrow$Support of ACIs by objects (Experimental)\\
133 --enable-rewrite & $\rightarrow$Rewriting of DN in recovery of LDAP\\
134 --enable-rlookups & $\rightarrow$Inverse search of the name of the client workstation\\
135 --enable-slp & $\rightarrow$SLPv2 support\\
136 --enable-wrappers & $\rightarrow$Support TCP wrappers\\
137 \hline \end{tabular}
139 \item[](Support)\\
140 \begin{tabular}{|ll|}\hline
141 --enable-bdb=yes & $\rightarrow$Berkeley version 4 support\\
142 --enable-dnssrv=mod & \\
143 --enable-ldap=mod & $\rightarrow$It supports another LDAP server as database\\
144 --enable-ldbm=mod & \\
145 --with-ldbm-api=berkeley & $\rightarrow$Berkeley version 3 support\\
146 --enable-meta=mod & $\rightarrow$Metadirectory support\\
147 --enable-monitor=mod & \\
148 --enable-null=mod & \\
149 --enable-passwd=mod & \\
150 --enable-perl=mod & $\rightarrow$Perl scripts support\\
151 --enable-shell=mod & $\rightarrow$Shell scripts support\\
152 --enable-sql=mod & $\rightarrow$Relational database support\\
153 \hline \end{tabular}
154 \end{itemize}
156 Then do:\\
157 \#make \&\& make install 
158 \newpage
159 \section{Configuration}
160 \subsection{Basic}
162 \noindent The configuration of the LDAP server slapd of openLDAP is in /etc/ldap/slapd.conf 
164 \noindent A \htmladdnormallink{basic configuration}{http://warping.sourceforge.net/gosa/contrib/en/basic_slapd.conf} would be like this: 
165 \begin{center}
166 \begin{longtable}{|ll|}\hline
167 \caption{Basic LDAP COnfiguration}\\
168 \hline \hline
169 \multicolumn{2}{|c|}{\textbf{Basic LDAP COnfiguration}}\\
170 \hline \hline
171 \endfirsthead
172 \hline \hline
173 \multicolumn{2}{|c|}{\textbf{Basic LDAP COnfiguration (continuation)}}\\
174 \hline \hline
175 \endhead
176 \hline
177 \multicolumn{2}{|c|}{Continue $\ldots$}\\
178 \hline
179 \endfoot
180 \hline
181 \multicolumn{2}{|c|}{\textbf{End}}\\
182 \hline
183 \endlastfoot
184 \# Schema and objectClass definitions, basic configuration & \\
185 include         /etc/ldap/schema/core.schema & \\
186 include         /etc/ldap/schema/cosine.schema & \\
187 include         /etc/ldap/schema/inetorgperson.schema & \\
188 include         /etc/ldap/schema/openldap.schema & \\
189 include         /etc/ldap/schema/nis.schema & \\
190 include         /etc/ldap/schema/misc.schema & \\
191  & \\
192 \# Force entries to match schemas for their ObjectClasses & \\
193 schemacheck             on & \\
194  & \\
195 \# Password hash, default crypt type & \\
196 \# Puede ser: \{SHA\}, \{MD5\}, \{MD4\}, \{CRYPT\}, \{CLEARTEXT\} & \\
197 password-hash           \{CRYPT\} & \\
198  & \\
199 \# Default search base & \\
200 defaultsearchbase       "dc=CHAOSDIMENSION,dc=ORG" & \\
201  & \\
202 \#Used by init scripts to stop and to start the server. & \\
203 pidfile         /var/run/slapd.pid & \\
204  & \\
205 \# Arguments passed to the server. & \\
206 argsfile        /var/run/slapd.args & \\
207  & \\
208 \# Level of log information & \\
209 loglevel        1024 & \\
210  & \\
211 \# Where and which modules load & \\
212 modulepath      /usr/lib/ldap & \\
213 moduleload      back\_bdb \# Berkeley BD version 4 & \\
214  & \\
215 \#definitions of the database & \\
216 database        bdb & \\
217  & \\
218 \# The base of the directory & \\
219 suffix          "dc=CHAOSDIMENSION,dc=ORG"  & \\
220  & \\
221 \# Here is the definition of the administrator of the directory and his key & \\
222 \# In this example is " tester"  & \\
223 \# The crypt key can be extract with  & \\
224 \# makepasswd --crypt --clearfrom file\_with\_user\_name & \\
225  & \\
226 rootdn  \verb|"cn=ldapadmin,dc=CHAOSDIMENSION,dc=ORG"|  & \\
227 rootpw  \{crypt\}OuorOLd3VqvC2 & \\
228  & \\
229 \# here are the attributes that we indexed to make searchs & \\
230 index   default                                                sub & \\
231 index   uid,mail                                               eq & \\
232 index   cn,sn,givenName,ou                                     pres,eq,sub & \\
233 index   objectClass                                            pres,eq & \\
234  & \\
235 \# Directory where the database is located & \\
236 directory       " /var/lib/ldap"  & \\
237  & \\
238 \# We say if wished to keep the date of the last modification & \\
239 lastmod off & \\
240  & \\
241 \#Administrator access & \\
242 access to * & \\
243         by dn=\verb|"cn=ldapadmin,dc=CHAOSDIMENSION,dc=ORG"| =wrscx & \\
244         by dn.regex=\verb|"uid=[^{}/]+/admin\+(realm=CHAOSDIMENSION.LOCAL)?"| =wrscx & \\
245         by * read & \\
246 \end{longtable}
247 \end{center}
249 \newpage
250 \subsection{GOsa Specifications}
252 GOsa adds several schemas for the control of certain services and characteristics of users. \\
254 The necessary schemas for GOsa are in the package, in the contrib section, they need to be copied in /etc/ldap/schema. \\
256 A \htmladdnormallink{recommended configuration}{http://warping.sourceforge.net/gosa/contrib/en/gosa_slapd.conf} of /etc/ldap/slapd.conf is the following one: \\
258 \begin{center}
259 \begin{longtable}{|ll|}\hline
260 \caption{LDAP GOsa Configuration}\\
261 \hline \hline
262 \multicolumn{2}{|c|}{\textbf{LDAP GOsa Configuration}}\\
263 \hline \hline
264 \endfirsthead
265 \hline \hline
266 \multicolumn{2}{|c|}{\textbf{LDAP GOsa Configuration (continuation)}}\\
267 \hline \hline
268 \endhead
269 \hline
270 \multicolumn{2}{|c|}{Continue $\ldots$}\\
271 \hline
272 \endfoot
273 \hline
274 \multicolumn{2}{|c|}{\textbf{End}}\\
275 \hline
276 \endlastfoot
277 \# Schema and objectClass definitions, basic configuration & \\
278 include         /etc/ldap/schema/core.schema & \\
279 include         /etc/ldap/schema/cosine.schema & \\
280 include         /etc/ldap/schema/inetorgperson.schema & \\
281 include         /etc/ldap/schema/openldap.schema & \\
282 include         /etc/ldap/schema/nis.schema & \\
283 include         /etc/ldap/schema/misc.schema & \\
284  & \\
285 \# These schemes would be present in GOsa. In the case of samba3 & \\
286 \# we must change samba.schema and gosa.schema by samba3.schema & \\
287 \# and gosa+samba3.schema & \\
288 include         /etc/ldap/schema/samba3.schema & \\
289 include         /etc/ldap/schema/pureftpd.schema & \\
290 include         /etc/ldap/schema/gohard.schema & \\
291 include         /etc/ldap/schema/gofon.schema & \\
292 include         /etc/ldap/schema/goto.schema & \\
293 include         /etc/ldap/schema/gosa+samba3.schema & \\
294 include         /etc/ldap/schema/gofax.schema & \\
295 include         /etc/ldap/schema/goserver.schema & \\
296  & \\
297 \# Force entries to match schemas for their ObjectClasses & \\
298 schemacheck             on & \\
299  & \\
300 \# Password hash, type of key encryption & \\
301 \# Can be: \{SHA\}, \{SMD5\}, \{MD4\}, \{CRYPT\}, \{CLEARTEXT\} & \\
302 password-hash           \{CRYPT\} & \\
303  & \\
304 \# Default search base. & \\
305 defaultsearchbase       " dc=CHAOSDIMENSION,dc=ORG"  & \\
306  & \\
307 \# Used by init scripts to stop and to start the server. & \\
308 pidfile         /var/run/slapd.pid & \\
309  & \\
310 \# Arguments passed to the server. & \\
311 argsfile        /var/run/slapd.args & \\
312  & \\
313 \# Log level information & \\
314 loglevel        1024 & \\
315  & \\
316 \# Where and which modules to load. & \\
317 modulepath      /usr/lib/ldap & \\
318 moduleload      back\_bdb \# Berkeley BD version 4 & \\
319  & \\
320 \# Some performance parameters & \\
321 threads 64 & \\
322 concurrency 32 & \\
323 conn\_max\_pending 100 & \\
324 conn\_max\_pending\_auth 250 & \\
325 reverse-lookup off & \\
326 sizelimit 1000 & \\
327 timelimit 30 & \\
328 idletimeout 30 & \\
329  & \\
330 \# specific limitations & \\
331 limits anonymous    size.soft=500 time.soft=5 & \\
332  & \\
333 \# Definitions of the database & \\
334 database        bdb & \\
335 cachesize       5000 & \\
336 checkpoint      512 720 & \\
337 mode            0600 & \\
338  & \\
339 \# The diretory base. & \\
340 suffix          " dc=CHAOSDIMENSION,dc=ORG"  & \\
341  & \\
342 \# Here is the definition of the administrator of the directory and his key & \\
343 \# In this example is " tester"  & \\
344 \# The crypt key can be extract with  & \\
345 \# makepasswd --crypt --clearfrom file\_with\_user\_name & \\
346  & \\
347 rootdn  \verb|"cn=ldapadmin,dc=CHAOSDIMENSION,dc=ORG"|  & \\
348 rootpw  \{crypt\}OuorOLd3VqvC2 & \\
349  & \\
350 \# That attributes we indexed to make search & \\
351 index   default                                                sub & \\
352 index   uid,mail                                               eq & \\
353 index   gosaMailAlternateAddress,gosaMailForwardingAddress     eq & \\
354 index   cn,sn,givenName,ou                                     pres,eq,sub & \\
355 index   objectClass                                            pres,eq & \\
356 index   uidNumber,gidNumber,memberuid                          eq & \\
357 index   gosaSubtreeACL,gosaObject,gosaUser                     pres,eq & \\
358  & \\
359 \# Indexing for Samba 3
360 index   sambaSID                                               eq & \\
361 index   sambaPrimaryGroupSID                                   eq & \\
362 index   sambaDomainName                                        eq & \\
363  & \\
364 \# Who can change the user keys & \\
365 \# ,only by the own user if is authenticate & \\
366 \# or by the administrator & \\
367 access to attr=sambaPwdLastSet,sambaPwdMustChange,sambaPwdCanChange & \\
368         by dn=\verb|"cn=ldapadmin,dc=CHAOSDIMENSION,dc=ORG"| write & \\
369         by dn.regex=\verb|"uid=[^{}/]+/admin\+(realm=CHAOSDIMENSION.LOCAL)?"| write & \\
370         by anonymous auth & \\
371         by self write & \\
372         by * none  & \\
373 access to attr=userPassword,shadowMax,shadowExpire & \\
374         by dn=\verb|"cn=ldapadmin,dc=CHAOSDIMENSION,dc=ORG"| write & \\
375         by dn.regex=\verb|"uid=[^{}/]+/admin\+(realm=CHAOSDIMENSION.LOCAL)?"| write & \\
376         by anonymous auth & \\
377         by self write & \\
378         by * none  & \\
379  & \\
380 \# Acess deny to imap keys, fax or kerberos saved in & \\
381 \# LDAP & \\
382 access to attr=goImapPassword & \\
383         by dn=\verb|"cn=ldapadmin,dc=CHAOSDIMENSION,dc=ORG"| write & \\
384         by dn.regex=\verb|"uid=[^{}/]+/admin\+(realm=CHAOSDIMENSION.LOCAL)?"| write & \\
385         by * none  & \\
386 access to attr=goKrbPassword & \\
387         by dn=\verb|"cn=ldapadmin,dc=CHAOSDIMENSION,dc=ORG"| write & \\
388         by dn.regex=\verb|"uid=[^{}/]+/admin\+(realm=CHAOSDIMENSION.LOCAL)?"| write & \\
389         by * none  & \\
390 access to attr=goFaxPassword & \\
391         by dn=\verb|"cn=ldapadmin,dc=CHAOSDIMENSION,dc=ORG"| write & \\
392         by dn.regex=\verb|"uid=[^{}/]+/admin\+(realm=CHAOSDIMENSION.LOCAL)?"| write & \\
393         by * none  & \\
394  & \\
395 \# Permit that server write the LastUser attribute & \\
396 access to attr=gotoLastUser & \\
397         by * write & \\
398  & \\
399 \# The samba keys by defect only can be changed & \\
400 \# by the user if has been authenticate. & \\
401 access to attr=sambaLmPassword,sambaNtPassword & \\
402         by dn=\verb|"cn=ldapadmin,dc=CHAOSDIMENSION,dc=ORG"| write & \\
403         by dn.regex=\verb|"uid=[^{}/]+/admin\+(realm=CHAOSDIMENSION.LOCAL)?"| write & \\
404         by anonymous auth & \\
405         by self write & \\
406         by * none & \\
407  & \\
408 \# Allow write access for terminal administrator & \\
409 access to dn=" ou=incoming,dc=CHAOSDIMENSION,dc=ORG"  & \\
410         by dn=\verb|"cn=terminal-admin,dc=CHAOSDIMENSION,dc=ORG"| write & \\
411         by dn=\verb|"cn=ldapadmin,dc=CHAOSDIMENSION,dc=ORG"| write & \\
412         by dn.regex=\verb|"uid=[^{}/]+/admin\+(realm=CHAOSDIMENSION.LOCAL)?"| write & \\
413  & \\
414 access to dn.subtree=" ou=incoming,dc=CHAOSDIMENSION,dc=ORG"  & \\
415         by dn=\verb|"cn=terminal-admin,dc=CHAOSDIMENSION,dc=ORG"| write & \\
416         by dn=\verb|"cn=ldapadmin,dc=CHAOSDIMENSION,dc=ORG"| write & \\
417         by dn.regex=\verb|"uid=[^{}/]+/admin\+(realm=CHAOSDIMENSION.LOCAL)?"| write & \\
418  & \\
419 \# Directory where is the database & \\
420 directory       " /var/lib/ldap"  & \\
421  & \\
422 \# Indicate if we wished to keep the modification last date & \\
423 lastmod off & \\
424  & \\
425 \# Administrator access & \\
426 access to * & \\
427         by dn=\verb|"cn=ldapadmin,dc=CHAOSDIMENSION,dc=ORG"| =wrscx & \\
428         by dn.regex=\verb|"uid=[^{}/]+/admin\+(realm=CHAOSDIMENSION.LOCAL)?"| =wrscx & \\
429         by * read & \\
430 \end{longtable}
431 \end{center}
434 \section{Utilization}
435 \subsection{PAM/NSS Configuration}
437 NSS (Network Security Service Libraries) 
439 NSS is a basic component of the system, is used for control of accounts POSIX, to be able to use LDAP for accounts POSIX (of the system), we will use NSS\_LDAP, that can be downloaded of \htmladdnormallink{http://www.padl.com/OSS/nss\_ldap.html}{http://www.padl.com/OSS/nss\_ldap.html} , we decompressed it in /usr/src and executed:\\ 
441 \noindent \#cd /usr/src/nss\_ldap\\
442 \noindent \#./configure \&\& make \&\& make install\\
444 The basic configuration of NSS are in /etc/nsswitch.conf and must be left like this for what we want.
446 \begin{center}
447 \begin{longtable}{|ll|}\hline
448 \caption{NSSWITCH Configuration}\\
449 \hline \hline
450 \multicolumn{2}{|c|}{\textbf{NSSWITCH Configuration}}\\
451 \hline \hline
452 \endfirsthead
453 \hline \hline
454 \multicolumn{2}{|c|}{\textbf{NSSWITCH Configuration (continuation)}}\\
455 \hline \hline
456 \endhead
457 \hline
458 \multicolumn{2}{|c|}{Continue $\ldots$}\\
459 \hline
460 \endfoot
461 \hline
462 \multicolumn{2}{|c|}{\textbf{End}}\\
463 \hline
464 \endlastfoot
465 passwd:         files ldap & \# These are the lines that we changed so that ldap makes requests\\
466 group:          files ldap & \#\\
467 shadow:         files ldap & \#\\
468  & \\
469 hosts:          files dns & \\
470 networks:       files & \\
471  & \\
472 protocols:      db files & \\
473 services:       db files & \\
474 ethers:         db files & \\
475 rpc:            db files & \\
476  & \\
477 netgroup:       nis & \\
478 \end{longtable}
479 \end{center}
482 \newpage
483 The NSS-LDAP configuration is saved in /etc/nss-ldap.conf and a valid configuration for GOsa would be this: 
485 \begin{center}
486 \begin{longtable}{|ll|}\hline
487 \caption{NSS Configuration}\\
488 \hline \hline
489 \multicolumn{2}{|c|}{\textbf{NSS Configuration}}\\
490 \hline \hline
491 \endfirsthead
492 \hline \hline
493 \multicolumn{2}{|c|}{\textbf{NSS Configuration (continuation)}}\\
494 \hline \hline
495 \endhead
496 \hline
497 \multicolumn{2}{|c|}{Continue $\ldots$}\\
498 \hline
499 \endfoot
500 \hline
501 \multicolumn{2}{|c|}{\textbf{End}}\\
502 \hline
503 \endlastfoot
504 host ip.servidor.ldap & \# Here we will put our LDAP server LDAP\\
505 base ou=people,dc=CHAOSDIMENSION,dc=ORG & \# Here is where are going to go the users and\\
506  & \# their passwords. OU means organizational\\
507  & \# unit and OU=people is the place where\\
508  & \# GOsa save the characteristics of the users\\
509 ldap\_version 3 & \# Supported Version of LDAP \\
510  & \# (the use of version 3 is recommended)\\
511 nss\_base\_passwd ou=people,dc=CHAOSDIMENSION,DC=ORG?one & \# Where we search for POSIX characteristics\\
512 nss\_base\_shadow ou=people,dc=CHAOSDIMENSION,DC=ORG?one & \# Where we search for the passwords\\
513 nss\_base\_group ou=groups,dc=CHAOSDIMENSION,DC=ORG?one & \# Where is the POSIX group characteristics\\
514 \end{longtable}
515 \end{center}
517 PAM (Pluggable Authentication Modules) is a package of dynamic libraries that allow to system administrators to choose in which way the applications authenticates the users. 
519 PAM is in all the distributions, save the configurations of each module in /etc/pam.d and have the dynamic libraries in /lib/security. 
521 We are going to concentrate on one of the PAM modules: pam\_ldap. This module will serve to us so that the applications that don't  use LDAP and use the system base of authentication and control of sessions, indirectly accede LDAP for authentication. 
523 With PAM\_LDAP and the infrastructure of PAM we gain that POSIX users of the system, work through LDAP and they can be created with GOsa.
525 PAM\_LDAP can be downloaded from \htmladdnormallink{http://www.padl.com/OSS/pam\_ldap.html}{http://www.padl.com/OSS/pam\_ldap.html}, we decompressed it is /usr/src and we executed the clasic: \\
527 \#./configure \&\& make \&\& make install\\
528 \\
529 The configuration of this module will be in /etc/pam\_ldap.conf, a basic working configuration will be like this:
530 \begin{center}
531 \begin{longtable}{|ll|}\hline
532 \caption{PAM Configuration}\\
533 \hline \hline
534 \multicolumn{2}{|c|}{\textbf{PAM Configuration}}\\
535 \hline \hline
536 \endfirsthead
537 \hline \hline
538 \multicolumn{2}{|c|}{\textbf{PAM Configuration (continuation)}}\\
539 \hline \hline
540 \endhead
541 \hline
542 \multicolumn{2}{|c|}{Continue $\ldots$}\\
543 \hline
544 \endfoot
545 \hline
546 \multicolumn{2}{|c|}{\textbf{End}}\\
547 \hline
548 \endlastfoot
549 host ip.servidor.ldap & \# Here we put where will be our LDAP server\\
550 base ou=people,dc=CHAOSDIMENSION,dc=ORG & \# Here is where are going to go the users and their passwords.\\
551  & \# OU means organizational unit\\
552  & \# and OU=people is the place where GOsa\\
553  & \# save the users characteristics\\
554 ldap\_version 3 & \# Supported Version of LDAP (very recommended version 3)\\
555 scope one & \# In gosa the users are at the same level, we did not need to descend.\\
556 rootbinddn cn=ldapadmin,dc=solaria,dc=es & \# Here is the LDAP administrator DN of the server,\\
557  & \# is necessary, since the server\\
558  & \# will give access to the encrypted passwords to the administrator.\\
559 pam\_password md5 & \# Indicate as password are encrypted.\\
560 \end{longtable}
561 \end{center}
564 In the file /etc/secret we will put the LDAP administrator password, this file, like the previous one only could be accessible by root.
566 Now, in order to be able to use LDAP authentication with the services, we will have to configure three pam configuration files:\\
567 Control of accounts /etc/pam.d/common-account:
568 \begin{center}
569 \begin{longtable}{|ll|}\hline
570 \caption{PAM common-account Configuration}\\
571 \hline \hline
572 \multicolumn{2}{|c|}{\textbf{PAM common-account Configuration}}\\
573 \hline \hline
574 \endfirsthead
575 \hline \hline
576 \multicolumn{2}{|c|}{\textbf{PAM common-account Configuration (continuation)}}\\
577 \hline \hline
578 \endhead
579 \hline
580 \multicolumn{2}{|c|}{Continue $\ldots$}\\
581 \hline
582 \endfoot
583 \hline
584 \multicolumn{2}{|c|}{\textbf{End}}\\
585 \hline
586 \endlastfoot
587 account required          pam\_unix.so & \# Always required\\
588 account sufficient        pam\_ldap.so & \# The calls to ldap\\
589 \end{longtable}
590 \end{center}
593 Authentication control /etc/pam.d/common-auth:
594 \begin{center}
595 \begin{longtable}{|ll|}\hline
596 \caption{PAM common-auth Configuration}\\
597 \hline \hline
598 \multicolumn{2}{|c|}{\textbf{PAM common-auth Configuration}}\\
599 \hline \hline
600 \endfirsthead
601 \hline \hline
602 \multicolumn{2}{|c|}{\textbf{PAM common-auth Configuration (continuation)}}\\
603 \hline \hline
604 \endhead
605 \hline
606 \multicolumn{2}{|c|}{Continue $\ldots$}\\
607 \hline
608 \endfoot
609 \hline
610 \multicolumn{2}{|c|}{\textbf{End}}\\
611 \hline
612 \endlastfoot
613 auth     sufficient     pam\_unix.so & \# Authentication Standar\\
614 auth     sufficient     pam\_ldap.so try\_first\_pass & \# LDAP Authentication in the first attempt\\
615 auth     required       pam\_env.so & \\
616 auth     required       pam\_securetty.so & \\
617 auth     required       pam\_unix\_auth.so & \\
618 auth     required       pam\_warn.so & \\
619 auth     required       pam\_deny.so & \\
620 \end{longtable}
621 \end{center}
624 Session control /etc/pam.d/common-session:
625 \begin{center}
626 \begin{longtable}{|ll|}\hline
627 \caption{PAM common-session Configuration}\\
628 \hline \hline
629 \multicolumn{2}{|c|}{\textbf{PAM common-session Configuration}}\\
630 \hline \hline
631 \endfirsthead
632 \hline \hline
633 \multicolumn{2}{|c|}{\textbf{PAM common-session Configuration (continuation)}}\\
634 \hline \hline
635 \endhead
636 \hline
637 \multicolumn{2}{|c|}{Continue $\ldots$}\\
638 \hline
639 \endfoot
640 \hline
641 \multicolumn{2}{|c|}{\textbf{End}}\\
642 \hline
643 \endlastfoot
644 session required        pam\_limits.so & \\
645 session required        pam\_unix.so & \# Standar UNIX session\\
646 session optional        pam\_ldap.so & \# LDAP based session\\
647 \end{longtable}
648 \end{center}
650 This configuration will be necessary to use POSIX and SAMBA at least.
651 \newpage
652 \subsection{Replication}
654 If we have more that one domain we must have a distributed structure, that is more efficient against failures. A basic structure would be a master server with a complete LDAP tree and servers with LDAP subtrees that only have the part of the tree for the domain they control.
656 This way GOsa controls the master server and the domain servers through a process called replication.
658 The replication is made in the configuration of ldap, but it is not executed by the daemon slapd, but another one called slurp. Its configuration is made in the database that we want to replicate, like in the basic example we have only configured a database that will be added at the end of the configuration file /etc/ldap/slapd.conf: 
660 \begin{center}
661 \begin{longtable}{|ll|}\hline
662 \caption{Replica Configuration}\\
663 \hline \hline
664 \multicolumn{2}{|c|}{\textbf{Replica Configuration}}\\
665 \hline \hline
666 \endfirsthead
667 \hline \hline
668 \multicolumn{2}{|c|}{\textbf{Replica Configuration (continuation)}}\\
669 \hline \hline
670 \endhead
671 \hline
672 \multicolumn{2}{|c|}{Continue $\ldots$}\\
673 \hline
674 \endfoot
675 \hline
676 \multicolumn{2}{|c|}{\textbf{End}}\\
677 \hline
678 \endlastfoot
679 \# Replica configuration & \\
680 \#Used by init scripts to stop and to start the server. & \\
681 replica-pidfile         /var/run/slurp.pid & \\
682  & \\
683 \# Arguments passed to the server. & \\
684 replica-argsfile        /var/run/slapd.args & \\
685  & \\
686 \# Place where we recorded the log of replica, is used by slurpd & \\
687 replogfile      /var/lib/ldap/replog & \\
688 \# The replicas  & \\
689 \# Slave1 replica indication & \\
690 replica & \\
691 \#URI direction of slave1 & \\
692 uri=ldap://ip.server.slave1 & \\
693 \#That we are going to reply & \\
694 \# from the master server & \\
695 suffix=" dc=domain1,dc=CHAOSDIMENSION,dc=ORG" & \\
696 \#How we are going to authenticate & \\
697 bindmethod=simple & \\
698 \# reply DN of the slave1 & \\
699 binddn=\verb|"cn=esclavo1,ou=people,dc=dominio1,dc=CHAOSDIMENSION,dc=ORG"| & \\
700 \#Password of slave1 reply DN & \\
701 credentials=" tester" & \\
702 \# Slave2 replica indication & \\
703 replica & \\
704 uri=ldap://ip.server.slave2 & \\
705 suffix=" dc=domain2,dc=CHAOSDIMENSION,dc=ORG" & \\
706 bindmethod=simple & \\
707 binddn=\verb|"cn=esclavo2,ou=people,dc=dominio2,dc=CHAOSDIMENSION,dc=ORG"| & \\
708 credentials=" tester" & \\
709 \end{longtable}
710 \end{center}
713 By simplicity we suppose that both slaved servers are configured like the master, excepted the replica configuration of the master and the indications at the slaves of who is the master server.
715 In the slaved servers we must add at the end of /etc/ldap/slapd.conf: 
717 In slave 1:\\
719 \begin{tabular}{|ll|}\hline
720 \# Who can update the server & \\
721 updatedn \verb|"cn=slave1,dc=domain1,dc=CHAOSDIMENSION,dc=ORG"| & \\
722 \# From where & \\
723 updateref ldap://ip.server.master & \\
724 \#Access allow & \\
725 access to dn.subtree= " dc=domain1,dc=CHAOSDIMENSION,dc=ORG" & \\
726 by dn= \verb|"cn=slave1,dc=domain1,dc=CHAOSDIMENSION,dc=ORG"|  =wrscx & \\
727 by * none & \\
728 \hline\end{tabular}
729 \vspace{0.5cm}
731 In slave 2:\\
733 \begin{tabular}{|ll|}\hline
734 \# Who can update the server & \\
735 updatedn \verb|"cn=slave2,dc=domain2,dc=CHAOSDIMENSION,dc=ORG"| & \\
736 \#From where & \\
737 updateref ldap://ip.server.master & \\
738 \#Access allow & \\
739 access to dn.subtree= " dc=domain2,dc=CHAOSDIMENSION,dc=ORG" & \\
740 by dn= \verb|"cn=slave2,dc=domain2,dc=CHAOSDIMENSION,dc=ORG"| =wrscx & \\
741 by * none & \\
742 \hline\end{tabular}
743 \vspace{0.5cm}
745 Also we must create the replica users in the corresponding databases. That will be explained in the following point.
747 \subsection{Data Load}
750 In this point we will give the initial data of our necessary LDAP tree for GOsa. Also we will show how upload the data and what to do in the case of a unique servant or in a case where there are replicas. 
752 The load can be done of two ways, one is trought of slapadd and the other is trought of ldapadd.\\
753 In the first case the load is made against the database, this replication does not exist and then will not be update the data in LDAP server until is initiated again, \textbf{the load of data this way must be done with the server stopped}. In the second case, the load will be trought LDAP and it will update self and will be replicated in the pertinent way.
755 For a load from zero of the database, we will have to do it from slapadd, with the daemon slapd stopped. 
757 The way slapadd must be used is: \\
759 \noindent \#slapadd -v -l fichero\_con\_datos.ldif\\
761 LDIF is the standard format to save data from LDAP. GOsa come with its own ldif of example, in following two points we will explain how it must be used for our necessities.
762 \vspace{1cm}
764 \subsubsection{Server Alone}
766 This is the most basic case, here isn't replication and only we need a single tree. In our example we will suppose that our GOsa tree is in dc=CHAOSDIMENSION, dc=ORG.\\
768 We will load the data with a script, called \htmladdnormallink{load.sh}{http://warping.sourceforge.net/gosa/contrib/en/load.sh}, this simplified the steps to load. The parameters of script will be: DN of the base, IMAP Server adn Kerberos Realm.
769 \begin{center}
770 \begin{longtable}{|l|}\hline
771 \caption{Load Data on Single Server Configuration}\\
772 \hline \hline
773 \multicolumn{1}{|c|}{\textbf{Load Data on Single Server Configuration}}\\
774 \hline \hline
775 \endfirsthead
776 \hline \hline
777 \multicolumn{1}{|c|}{\textbf{Load Data on Single Server Configuration (continuation)}}\\
778 \hline \hline
779 \endhead
780 \hline
781 \multicolumn{1}{|c|}{Continue $\ldots$}\\
782 \hline
783 \endfoot
784 \hline
785 \multicolumn{1}{|c|}{\textbf{End}}\\
786 \hline
787 \endlastfoot
788 \#!/bin/sh\\
789 \\
790 if [ \$\{\#@\} != 3 ]\\
791 then\\
792 \verb|    |echo "The parameters DN base, IMAP Server and Kerberos server are needed"\\
793 \verb|    |echo "For example: ./carga.sh dc=CHAOSDIMENSION,dc=ORG imap.solaria krb.solaria"\\
794 \verb|    |exit\\
795 fi\\
796 \\
797 DC=`echo \$1|cut -d\textbackslash= -f 2|cut -d\textbackslash, -f 1`\\
798 IMAP=\$2\\
799 KRB=\$3\\
800 \\
801 slapadd \verb|<<| EOF\\
802 dn: \$1\\
803 objectClass: dcObject\\
804 objectClass: organization\\
805 description: Base object\\
806 dc: \$DC\\
807 o: My own Organization\\
808 \\
809 dn: cn=terminal-admin,\$1\\
810 objectClass: person\\
811 cn: terminal-admin\\
812 sn: Upload user\\
813 description: GOto Upload Benutzer\\
814 userPassword:: e2tlcmJlcm9zfXRlcm1pbmFsYWRtaW5AR09OSUNVUy5MT0NBTAo=\\
815 \\
816 dn: ou=systems,\$1\\
817 objectClass: organizationalUnit\\
818 ou: systems\\
819 \\
820 dn: ou=terminals,ou=systems,\$1\\
821 objectClass: organizationalUnit\\
822 ou: terminals\\
823 \\
824 dn: ou=servers,ou=systems,\$1\\
825 objectClass: organizationalUnit\\
826 ou: servers\\
827 \\
828 dn: ou=people,\$1\\
829 objectClass: organizationalUnit\\
830 ou: people\\
831 \\
832 dn: ou=groups,\$1\\
833 objectClass: organizationalUnit\\
834 ou: groups\\
835 \\
836 dn: cn=default,ou=terminals,ou=systems,\$1\\
837 objectClass: gotoTerminal\\
838 cn: default\\
839 gotoMode: disabled\\
840 gotoXMethod: query\\
841 gotoRootPasswd: tyogUVSVZlEPs\\
842 gotoXResolution: 1024x768\\
843 gotoXColordepth: 16\\
844 gotoXKbModel: pc104\\
845 gotoXKbLayout: de\\
846 gotoXKbVariant: nodeadkeys\\
847 gotoSyslogServer: lts-1\\
848 gotoSwapServer: lts-1:/export/swap\\
849 gotoLpdServer: lts-1:/export/spool\\
850 gotoNtpServer: lts-1\\
851 gotoScannerClients: lts-1.\$DC.local\\
852 gotoFontPath: inet/lts-1:7110\\
853 gotoXdmcpServer: lts-1\\
854 gotoFilesystem: afs-1:/export/home /home nfs exec,dev,suid,rw,hard,nolock,fg,rsize=8192 1 1\\
855 \\
856 dn: cn=admin,ou=people,\$1\\
857 objectClass: person\\
858 objectClass: organizationalPerson\\
859 objectClass: inetOrgPerson\\
860 objectClass: gosaAccount\\
861 uid: admin\\
862 cn: admin\\
863 givenName: admin\\
864 sn: GOsa main administrator\\
865 sambaLMPassword: 10974C6EFC0AEE1917306D272A9441BB\\
866 sambaNTPassword: 38F3951141D0F71A039CFA9D1EC06378\\
867 userPassword:: dGVzdGVy\\
868 \\
869 dn: cn=administrators,ou=groups,\$1\\
870 objectClass: gosaObject\\
871 objectClass: posixGroup\\
872 objectClass: top\\
873 gosaSubtreeACL: :all\\
874 cn: administrators\\
875 gidNumber: 999\\
876 memberUid: admin\\
877 \\
878 dn: cn=lts-1,ou=servers,ou=systems,\$1\\
879 objectClass: goTerminalServer\\
880 objectClass: goServer\\
881 goXdmcpIsEnabled: true\\
882 macAddress: 00:B0:D0:F0:DE:1D\\
883 cn: lts-1\\
884 goFontPath: inet/lts-1:7110\\
885 \\
886 dn: cn=afs-1,ou=servers,ou=systems,\$1\\
887 objectClass: goNfsServer\\
888 objectClass: goNtpServer\\
889 objectClass: goLdapServer\\
890 objectClass: goSyslogServer\\
891 objectClass: goCupsServer\\
892 objectClass: goServer\\
893 macAddress: 00:B0:D0:F0:DE:1C\\
894 cn: afs-1\\
895 goExportEntry: /export/terminals 10.3.64.0/255.255.252.0(ro,async,no\_root\_squash)\\
896 goExportEntry: /export/spool 10.3.64.0/255.255.252.0(rw,sync,no\_root\_squash)\\
897 goExportEntry: /export/swap 10.3.64.0/255.255.252.0(rw,sync,no\_root\_squash)\\
898 goExportEntry: /export/home 10.3.64.0/255.255.252.0(rw,sync,no\_root\_squash)\\
899 goLdapBase: \$1\\
900 \\
901 dn: cn=vserver-02,ou=servers,ou=systems,\$1\\
902 objectClass: goImapServer\\
903 objectClass: goServer\\
904 macAddress: 00:B0:D0:F0:DE:1F\\
905 cn: vserver-02\\
906 goImapName: imap://\$IMAP\\
907 goImapConnect: {\$IMAP:143}\\
908 goImapAdmin: cyrus\\
909 goImapPassword: secret\\
910 goImapSieveServer: \$IMAP\\
911 goImapSievePort: 2000\\
912 \\
913 dn: cn=kerberos,ou=servers,ou=systems,\$1\\
914 objectClass: goKrbServer\\
915 objectClass: goServer\\
916 macAddress: 00:B0:D0:F0:DE:1E\\
917 cn: kerberos\\
918 goKrbRealm: \$KRB\\
919 goKrbAdmin: admin/admin\\
920 goKrbPassword: secret\\
921 \\
922 dn: cn=fax,ou=servers,ou=systems,\$1\\
923 objectClass: goFaxServer\\
924 objectClass: goServer\\
925 macAddress: 00:B0:D0:F0:DE:10\\
926 cn: fax\\
927 goFaxAdmin: fax\\
928 goFaxPassword: secret\\
929 \\
930 dn: ou=incoming,\$1\\
931 objectClass: organizationalUnit\\
932 ou: incoming\\
933 \\
934 EOF\\
935 \end{longtable}
936 \end{center}
939 \subsubsection{Master Server and two slaves}
941 The data will be loaded with the same script of the previous section, in the master and in the slaves, with the following differences:\\
943 In the master "DC=CHAOSDIMENSION, dc=ORG" we will execute this script \htmladdnormallink{creating\_base.sh}{http://warping.sourceforge.net/gosa/contrib/en/creating\_base.sh} to create the base: \\
945 \begin{center}
946 \begin{longtable}{|l|}\hline
947 \caption{Create Base Configuration}\\
948 \hline \hline
949 \multicolumn{1}{|c|}{\textbf{Create Base Configuration}}\\
950 \hline \hline
951 \endfirsthead
952 \hline \hline
953 \multicolumn{1}{|c|}{\textbf{Create Base Configuration (continuation)}}\\
954 \hline \hline
955 \endhead
956 \hline
957 \multicolumn{1}{|c|}{Continue $\ldots$}\\
958 \hline
959 \endfoot
960 \hline
961 \multicolumn{1}{|c|}{\textbf{End}}\\
962 \hline
963 \endlastfoot
964 \#!/bin/sh\\
965 \\
966 if [ \$\{\#@\} != 1 ]\\
967 then\\
968 \verb|    |echo "Is needed the parameter base DN of the master"\\
969 \verb|    |echo "For example creating\_base.sh dc=CHAOSDIMENSION,dc=ORG"\\
970 \verb|    |exit\\
971 fi\\
972 \\
973 DC=`echo \$1|cut -d\textbackslash= -f 2|cut -d\textbackslash, -f 1`\\
974 \\
975 slapadd \verb|<<|  EOF\\
976 dn: \$1\\
977 objectClass: dcObject\\
978 objectClass: organization\\
979 description: Base object\\
980 dc: \$DC\\
981 o: My own Base Organization\\
982 EOF\\
983 \end{longtable}
984 \end{center}
987 Also with the script of the previous section we will load the domains\\ "DC=domain1, DC=CHAOSDIMENSION, DC=ORG" and "DC=domain2, DC=CHAOSDIMENSION, DC=ORG". \\
989 In slave1 we will execute script with "DC=domain1, DC=CHAOSDIMENSION, DC=ORG" and in slave2 with "DC=domain2, DC=CHAOSDIMENSION, DC=ORG". In both cases both LDAP slave servers will be configured for their own DN.\\
991 At last we need to create the user for the replica, who could make it with the following script (\htmladdnormallink{user\_replica.sh}{http://warping.sourceforge.net/gosa/contrib/en/user\_replica.sh}) with the name of the user and the DN base: \\
993 \begin{center}
994 \begin{longtable}{|l|}\hline
995 \caption{Create replica user Configuration}\\
996 \hline \hline
997 \multicolumn{1}{|c|}{\textbf{Create replica user Configuration}}\\
998 \hline \hline
999 \endfirsthead
1000 \hline \hline
1001 \multicolumn{1}{|c|}{\textbf{Create replica user Configuration (continuation)}}\\
1002 \hline \hline
1003 \endhead
1004 \hline
1005 \multicolumn{1}{|c|}{Continue $\ldots$}\\
1006 \hline
1007 \endfoot
1008 \hline
1009 \multicolumn{1}{|c|}{\textbf{End}}\\
1010 \hline
1011 \endlastfoot
1012 \#!/bin/sh\\
1013 \\
1014 if [ \$\{\#@\} != 2 ]\\
1015 then\\
1016 \verb|    |echo "Are needed the parameters name of user and DN base for replica"\\
1017 \verb|    |echo "For example user\_replica.sh replicator dc=domain1,dc=CHAOSDIMENSION,dc=ORG"\\
1018 \verb|    |exit\\
1019 fi\\
1020 \\
1021 KEY=`makepasswd --crypt --chars=7 \textbackslash\\ --string="abcdefghijklmnopqrstuvwxyz1234567890"`\\
1022 PASS=`echo \$KEY|awk '\{ print \$1\}'`\\
1023 CRYPT=`echo \$KEY|awk '\{ print \$2\}'`\\
1025 echo "Creating user \$1 with password: \$PASS"\\
1027 slapadd \verb|<<| EOF\\
1028 dn: cn=\$1,ou=people,\$2\\
1029 displayName: Debian User,,,\\
1030 userPassword: \{crypt\} \$CRYPT\\
1031 sambaLMPassword: \\
1032 sambaNTPassword: \\
1033 sn: \$1\\
1034 givenName: \$1\\
1035 cn: \$1\\
1036 homeDirectory: /home/\$1\\
1037 loginShell: /bin/false\\
1038 uidNumber: 10000\\
1039 gidNumber: 100\\
1040 gecos: \$1\\
1041 shadowMin: 0\\
1042 shadowMax: 99999\\
1043 shadowWarning: 7\\
1044 shadowInactive: 0\\
1045 shadowLastChange: 12438\\
1046 gosaDefaultLanguage: en\_EN\\
1047 uid: \$1\\
1048 objectClass: posixAccount\\
1049 objectClass: shadowAccount\\
1050 objectClass: person\\
1051 objectClass: organizationalPerson\\
1052 objectClass: inetOrgPerson\\
1053 objectClass: gosaAccount\\
1054 objectClass: top\\
1055 EOF\\
1056 \end{longtable}
1057 \end{center}