[203] | 1 | <?xml version="1.0" encoding="iso-8859-1"?>
|
---|
| 2 | <!DOCTYPE chapter PUBLIC "-//Samba-Team//DTD DocBook V4.2-Based Variant V1.0//EN" "http://www.samba.org/samba/DTD/samba-doc">
|
---|
| 3 | <chapter id="nw4migration">
|
---|
| 4 | <title>Migrating NetWare Server to Samba-3</title>
|
---|
| 5 |
|
---|
| 6 | <para>
|
---|
| 7 | <indexterm><primary>Novell</primary></indexterm>
|
---|
| 8 | <indexterm><primary>SUSE</primary></indexterm>
|
---|
| 9 | Novell is a company any seasoned IT manager has to admire. It has become increasingly
|
---|
| 10 | Linux-friendly and is emerging out of a deep regression that almost saw the company
|
---|
| 11 | disappear into obscurity. Novell's SUSE Linux hosts the NetWare server and it is the
|
---|
| 12 | platform of choice to which many older NetWare servers are being migrated.
|
---|
| 13 | It will be interesting to see what becomes of NetWare over time.
|
---|
| 14 | Meanwhile, there can be no denying that Novell is a Linux company.
|
---|
| 15 | </para>
|
---|
| 16 |
|
---|
| 17 | <para>
|
---|
| 18 | <indexterm><primary>Red Hat</primary></indexterm>
|
---|
| 19 | <indexterm><primary>Debian</primary></indexterm>
|
---|
| 20 | <indexterm><primary>Gentoo</primary></indexterm>
|
---|
| 21 | <indexterm><primary>Mandrake</primary></indexterm>
|
---|
| 22 | Whatever flavor of Linux is preferred in your environment, whether Red Hat, Debian,
|
---|
| 23 | Gentoo, Mandrake, or SUSE (Novell), the information in this chapter should be read with
|
---|
| 24 | the knowledge that file locations may vary a little; even so, the information
|
---|
| 25 | in this chapter should provide something of value.
|
---|
| 26 | </para>
|
---|
| 27 |
|
---|
| 28 | <para>
|
---|
| 29 | <indexterm><primary>migration</primary></indexterm>
|
---|
| 30 | Contributions to this chapter were made by Misty Stanley-Jones, a UNIX administrator of many
|
---|
| 31 | years who surfaced on the Samba mailing list with a barrage of questions and who
|
---|
| 32 | regularly helps other administrators to solve thorny Samba migration questions.
|
---|
| 33 | </para>
|
---|
| 34 |
|
---|
| 35 | <para>
|
---|
| 36 | <indexterm><primary>NetWare</primary></indexterm>
|
---|
| 37 | <indexterm><primary>NLM</primary></indexterm>
|
---|
| 38 | <indexterm><primary>NetWare</primary></indexterm>
|
---|
| 39 | <indexterm><primary>Mars_NWE</primary></indexterm>
|
---|
| 40 | One wonders how many NetWare servers remain in active service. Many are being migrated
|
---|
| 41 | to Samba on Linux. Red Hat Linux, SUSE Linux 9.x, and SUSE Linux Enterprise Server 9 are
|
---|
| 42 | ideal target platforms to which a NetWare server may be migrated. The migration method
|
---|
| 43 | of choice is much dependent on the tools that the administrator finds most natural to use.
|
---|
| 44 | The old-hand NetWare guru will likely want to use tools like the NetWare NLM for
|
---|
| 45 | <command>rsync</command> to migrate files from the NetWare server to the Samba server.
|
---|
| 46 | The UNIX administrator might prefer tools that are part of the Mars_NWE (Martin Stovers' NetWare
|
---|
| 47 | Emulator) open source package. The MS Windows network administrator will likely make use of the
|
---|
| 48 | NWConv utility that is a part of Windows NT4 Server. Whatever your tool of choice,
|
---|
| 49 | migration will be filled with joyous and challenging moments &smbmdash; though probably not
|
---|
| 50 | concurrently.
|
---|
| 51 | </para>
|
---|
| 52 |
|
---|
| 53 | <para>
|
---|
| 54 | The priority that Misty faced was one of migration of the data files off the NetWare 4.11
|
---|
| 55 | server and onto a Samba-based Windows file and print server. This chapter does not pretend
|
---|
| 56 | to document all the different methods that could be used to migrate user and group accounts
|
---|
| 57 | off a NetWare server. Its focus is on migration of data files.
|
---|
| 58 | </para>
|
---|
| 59 |
|
---|
| 60 | <para>
|
---|
| 61 | This chapter tells its own story, so ride along. Maybe the information presented here
|
---|
| 62 | will help to smooth over a similar migration challenge in your favorite networking environment.
|
---|
| 63 | </para>
|
---|
| 64 |
|
---|
| 65 | <para>
|
---|
| 66 | File paths have been modified to permit use of RPM packages provided by Novell. In the
|
---|
| 67 | original documentation contributed by Misty, the Courier-IMAP package had been built
|
---|
| 68 | directly from the original source tarball.
|
---|
| 69 | </para>
|
---|
| 70 |
|
---|
| 71 | <sect1>
|
---|
| 72 | <title>Introduction</title>
|
---|
| 73 |
|
---|
| 74 | <para>
|
---|
| 75 | <indexterm><primary>Novell</primary></indexterm>
|
---|
| 76 | Misty Stanley-Jones was recruited by Abmas to administer a network that had
|
---|
| 77 | not received much attention for some years and was much in need of a makeover.
|
---|
| 78 | As a brand-new sysadmin to this company, she inherited a very old Novell file server
|
---|
| 79 | and came with a determination to change things for the better.
|
---|
| 80 | </para>
|
---|
| 81 |
|
---|
| 82 | <para>
|
---|
| 83 | A site survey turned up the following details for the old NetWare server:
|
---|
| 84 | </para>
|
---|
| 85 |
|
---|
| 86 | <simplelist>
|
---|
| 87 | <member><para>200 MHz MMX processor</para></member>
|
---|
| 88 | <member><para>512K RAM</para></member>
|
---|
| 89 | <member><para>24 GB disk space in RAID1</para></member>
|
---|
| 90 | <member><para>Novell 4.11 patched to service pack 7</para></member>
|
---|
| 91 | <member><para>60+ users</para></member>
|
---|
| 92 | <member><para>7 network-attached printers</para></member>
|
---|
| 93 | </simplelist>
|
---|
| 94 |
|
---|
| 95 | <para>
|
---|
| 96 | The company had outgrown this server several years before and was dealing with
|
---|
| 97 | severe growing pains. Some of the problems experienced were:
|
---|
| 98 | </para>
|
---|
| 99 |
|
---|
| 100 | <itemizedlist>
|
---|
| 101 | <listitem>
|
---|
| 102 | <para>Very slow performance</para>
|
---|
| 103 | </listitem>
|
---|
| 104 | <listitem>
|
---|
| 105 | <para>Available storage hovering around the 5% range</para>
|
---|
| 106 | <itemizedlist>
|
---|
| 107 | <listitem>
|
---|
| 108 | <para>Extremely slow print spooling.</para>
|
---|
| 109 | </listitem>
|
---|
| 110 | <listitem>
|
---|
| 111 | <para>
|
---|
| 112 | Users storing information on their local hard
|
---|
| 113 | drives, causing backup integrity problems
|
---|
| 114 | </para>
|
---|
| 115 | </listitem>
|
---|
| 116 | </itemizedlist>
|
---|
| 117 | </listitem>
|
---|
| 118 | </itemizedlist>
|
---|
| 119 |
|
---|
| 120 | <para>
|
---|
| 121 | <indexterm><primary>payroll</primary></indexterm>
|
---|
| 122 | At one point disk space had filled up to 100 percent, causing the payroll database
|
---|
| 123 | to become corrupt. This caused the accounting department to be down for over
|
---|
| 124 | a week and necessitated deployment of another file server. The replacement
|
---|
| 125 | server was created with very poor security and design considerations from
|
---|
| 126 | a discarded desktop PC.
|
---|
| 127 | </para>
|
---|
| 128 |
|
---|
| 129 | <sect2>
|
---|
| 130 | <title>Assignment Tasks</title>
|
---|
| 131 |
|
---|
| 132 | <para>
|
---|
| 133 | Misty has provided this summary of her migration experience in the hope
|
---|
| 134 | that it will help someone to avoid the challenges she faced. Perhaps her
|
---|
| 135 | configuration files and background will accelerate your learning as you
|
---|
| 136 | grapple with a similar migration challenge. Let there be no confusion,
|
---|
| 137 | the information presented in this chapter is provided to demonstrate
|
---|
| 138 | how Misty dealt with a particular NetWare migration requirement, and
|
---|
| 139 | it provides an overall approach to the implementation of a Samba-3
|
---|
| 140 | environment that is significantly divergent from that presented in
|
---|
| 141 | <link linkend="happy"/>.
|
---|
| 142 | </para>
|
---|
| 143 |
|
---|
| 144 | <para>
|
---|
| 145 | The complete removal of all site-specific information in order to produce
|
---|
| 146 | a generic migration solution would rob this chapter of its character.
|
---|
| 147 | It should be recognized, therefore, that the examples given require
|
---|
| 148 | significant adaptation to suit local needs and thus
|
---|
| 149 | there are some gaps in the example files. That is not Misty's fault;it
|
---|
| 150 | is the result of treatment given to her files in an attempt to make
|
---|
| 151 | the overall information more useful to you.
|
---|
| 152 | </para>
|
---|
| 153 |
|
---|
| 154 | <para>
|
---|
| 155 | <indexterm><primary>cost-benefit</primary></indexterm>
|
---|
| 156 | After management reviewed a cost-benefit report as well as an estimated
|
---|
| 157 | time-to-completion, approval was given proceed with the solution proposed.
|
---|
| 158 | The server was built from purchased components. The total project cost
|
---|
| 159 | was $3,000. A brief description of the configuration follows:
|
---|
| 160 | </para>
|
---|
| 161 |
|
---|
| 162 | <simplelist>
|
---|
| 163 | <member>
|
---|
| 164 | <para>3.0 GHz P4 Processor</para>
|
---|
| 165 | </member>
|
---|
| 166 | <member>
|
---|
| 167 | <para>1 GB RAM</para>
|
---|
| 168 | </member>
|
---|
| 169 | <member>
|
---|
| 170 | <para>120 GB SATA operating system drive</para>
|
---|
| 171 | </member>
|
---|
| 172 | <member>
|
---|
| 173 | <para>4 x 80 GB SATA data drives (RAID5 240 GB capacity)</para>
|
---|
| 174 | </member>
|
---|
| 175 | <member>
|
---|
| 176 | <para>2 x 80 GB SATA removable drives for online backup</para>
|
---|
| 177 | </member>
|
---|
| 178 | <member>
|
---|
| 179 | <para>A DLT drive for asynchronous offline backup</para>
|
---|
| 180 | </member>
|
---|
| 181 | <member>
|
---|
| 182 | <para>SUSE Linux Professional 9.1</para>
|
---|
| 183 | </member>
|
---|
| 184 | </simplelist>
|
---|
| 185 |
|
---|
| 186 | <para>
|
---|
| 187 | The new system has operated for 6 months without problems. Over the past months
|
---|
| 188 | much attention has been focused on cleaning up desktops and user profiles.
|
---|
| 189 | </para>
|
---|
| 190 |
|
---|
| 191 | </sect2>
|
---|
| 192 | </sect1>
|
---|
| 193 |
|
---|
| 194 | <sect1>
|
---|
| 195 | <title>Dissection and Discussion</title>
|
---|
| 196 |
|
---|
| 197 | <para>
|
---|
| 198 | <indexterm><primary>LDAP</primary></indexterm>
|
---|
| 199 | <indexterm><primary>e-Directory</primary></indexterm>
|
---|
| 200 | <indexterm><primary>authentication</primary></indexterm>
|
---|
| 201 | <indexterm><primary>identity management</primary></indexterm>
|
---|
| 202 | A decision to use LDAP was made even though I knew nothing about LDAP except that
|
---|
| 203 | I had been reading the book <quote>LDAP System Administration,</quote> by Gerald Carter.
|
---|
| 204 | LDAP seemed to provide some of the functionality of Novell's e-Directory Services
|
---|
| 205 | and would provide centralized authentication and identity management.
|
---|
| 206 | </para>
|
---|
| 207 |
|
---|
| 208 | <para>
|
---|
| 209 | <indexterm><primary>database</primary></indexterm>
|
---|
| 210 | <indexterm><primary>RPM</primary></indexterm>
|
---|
| 211 | <indexterm><primary>tree</primary></indexterm>
|
---|
| 212 | Building the LDAP database took a while and a lot of trial and error. Following
|
---|
| 213 | the guidance I obtained from <quote>LDAP System
|
---|
| 214 | Administration,</quote> I installed OpenLDAP (from RPM; later I compiled
|
---|
| 215 | a more current version from source) and built my initial LDAP tree.
|
---|
| 216 | </para>
|
---|
| 217 |
|
---|
| 218 | <sect2>
|
---|
| 219 | <title>Technical Issues</title>
|
---|
| 220 |
|
---|
| 221 | <para>
|
---|
| 222 | <indexterm><primary>white-pages</primary></indexterm>
|
---|
| 223 | <indexterm><primary>inetOrgPerson</primary></indexterm>
|
---|
| 224 | <indexterm><primary>OpenLDAP</primary></indexterm>
|
---|
| 225 | <indexterm><primary>/etc/passwd</primary></indexterm>
|
---|
| 226 | <indexterm><primary>/etc/shadow</primary></indexterm>
|
---|
| 227 | <indexterm><primary>LDIF</primary></indexterm>
|
---|
| 228 | <indexterm><primary>IMAP</primary></indexterm>
|
---|
| 229 | <indexterm><primary>POP3</primary></indexterm>
|
---|
| 230 | <indexterm><primary>SMTP</primary></indexterm>
|
---|
| 231 | The first challenge was to create a company white pages, followed by manually
|
---|
| 232 | entering everything from the printed company directory. This used only the inetOrgPerson
|
---|
| 233 | object class from the OpenLDAP schemas. The next step was to write a shell script that
|
---|
| 234 | would look at the <filename>/etc/passwd</filename> and <filename>/etc/shadow</filename>
|
---|
| 235 | files on our mail server and create an LDIF file from which the information could be
|
---|
| 236 | imported into LDAP. This would allow use of LDAP for Linux authentication, IMAP, POP3,
|
---|
| 237 | and SMTP.
|
---|
| 238 | </para>
|
---|
| 239 |
|
---|
| 240 | <para>
|
---|
| 241 | Because a decision was made to use Courier-IMAP the schema <quote>authldap.schema</quote>
|
---|
| 242 | from the Courier-IMAP source, tarball is necessary to resolve Courier-specific LDAP directory
|
---|
| 243 | needs. Where the Courier-IMAP file provided by SUSE is used, this file is named
|
---|
| 244 | <filename>courier.schema</filename>.
|
---|
| 245 | </para>
|
---|
| 246 |
|
---|
| 247 | <para>
|
---|
| 248 | Looking back, it would have been much easier to populate the LDAP directory using a convenient
|
---|
| 249 | tool such as <command>phpLDAPAdmin</command> from the outset. An excessive amount of time was
|
---|
| 250 | spent trying to generate LDIF files that could be parsed using the <command>ldapmodify</command>
|
---|
| 251 | so that necessary changes could be written to the directory. This was a learning experience!
|
---|
| 252 | </para>
|
---|
| 253 |
|
---|
| 254 | <para>
|
---|
| 255 | An attempt was made to use the PADL POSIX account migration scripts, but I gave up trying to
|
---|
| 256 | make them work. Instead, even though it is most inelegant, I wrote a simple script that did
|
---|
| 257 | what I needed. It is enclosed as a simple example to demonstrate that you do not need to be
|
---|
| 258 | a guru to make light of otherwise painful repetition. This file is listed in <link linkend="sbeamg"/>.
|
---|
| 259 | </para>
|
---|
| 260 |
|
---|
| 261 | <example id="sbeamg">
|
---|
| 262 | <title>A Rough Tool to Create an LDIF File from the System Account Files</title>
|
---|
| 263 | <screen>
|
---|
| 264 | #!/bin/bash
|
---|
| 265 |
|
---|
| 266 | cat /etc/passwd | while read l; do
|
---|
| 267 | uid=`echo $l | cut -d : -f 1`
|
---|
| 268 | uidNumber=`echo $l | cut -d : -f 3`
|
---|
| 269 | gidNumber=`echo $1 | cut -d : -f 4`
|
---|
| 270 | gecos=`echo $l | cut -d : -f 5`
|
---|
| 271 | homeDirectory=`echo $l | cut -d : -f 6`
|
---|
| 272 | loginShell=`echo $l | cut -d : -f 6`
|
---|
| 273 | userPassword=`cat /etc/shadow | grep $uid | cut -d : -f 2`
|
---|
| 274 |
|
---|
| 275 | echo "dn: cn=$gecos,ou=people,dc=mycompany,dc=com"
|
---|
| 276 | echo "objectClass: account"
|
---|
| 277 | echo "objectClass: posixAccount"
|
---|
| 278 | echo "cn: $gecos"
|
---|
| 279 | echo "uid: $uid"
|
---|
| 280 | echo "uidNumber: $uidNumber"
|
---|
| 281 | echo "gidNumber: $gidNumber"
|
---|
| 282 | echo "homeDirectory: $homeDirectory"
|
---|
| 283 | echo "loginShell: $loginShell"
|
---|
| 284 | echo "userPassword: $userPassword"
|
---|
| 285 | done
|
---|
| 286 | </screen>
|
---|
| 287 | </example>
|
---|
| 288 |
|
---|
| 289 | <note><para>
|
---|
| 290 |
|
---|
| 291 | The PADL MigrationTools are recommended for migration of the UNIX account information into
|
---|
| 292 | the LDAP directory. The tools consist of a set of Perl scripts for migration of users, groups,
|
---|
| 293 | aliases, hosts, netgroups, networks, protocols, PRCs, and services from the existing ASCII text
|
---|
| 294 | files (or from a name service such as NIS). This too set can be obtained from the <ulink url=
|
---|
| 295 | "http://www.padl.com">PADL Web site</ulink>.
|
---|
| 296 | </para></note>
|
---|
| 297 |
|
---|
| 298 | </sect2>
|
---|
| 299 |
|
---|
| 300 | </sect1>
|
---|
| 301 |
|
---|
| 302 | <sect1>
|
---|
| 303 | <title>Implementation</title>
|
---|
| 304 |
|
---|
| 305 | <para>
|
---|
| 306 | </para>
|
---|
| 307 |
|
---|
| 308 | <sect2>
|
---|
| 309 | <title>NetWare Migration Using LDAP Backend</title>
|
---|
| 310 |
|
---|
| 311 | <para>
|
---|
| 312 | The following software must be installed on the SUSE Linux Enterprise Server to perform
|
---|
| 313 | this migration:
|
---|
| 314 | </para>
|
---|
| 315 |
|
---|
| 316 | <simplelist>
|
---|
| 317 | <member><para>courier-imap</para></member>
|
---|
| 318 | <member><para>courier-imap-ldap</para></member>
|
---|
| 319 | <member><para>nss_ldap</para></member>
|
---|
| 320 | <member><para>openldap2-client</para></member>
|
---|
| 321 | <member><para>openldap2-devel (only for Samba compilation)</para></member>
|
---|
| 322 | <member><para>openldap2</para></member>
|
---|
| 323 | <member><para>pam_ldap</para></member>
|
---|
| 324 | <member><para>samba-3.0.20 or later</para></member>
|
---|
| 325 | <member><para>samba-client-3.0.20 or later</para></member>
|
---|
| 326 | <member><para>samba-winbind-3.0.20 or later</para></member>
|
---|
| 327 | <member><para>smbldap-tools Version 0.9.1</para></member>
|
---|
| 328 | </simplelist>
|
---|
| 329 |
|
---|
| 330 | <para>
|
---|
| 331 | Each software application must be carefully configured in preparation for migration.
|
---|
| 332 | The configuration files used at Abmas are provided as a guide and should be modified
|
---|
| 333 | to meet needs at your site.
|
---|
| 334 | </para>
|
---|
| 335 |
|
---|
| 336 | <sect3>
|
---|
| 337 | <title>LDAP Server Configuration</title>
|
---|
| 338 |
|
---|
| 339 | <para>
|
---|
| 340 | The <filename>/etc/openldap/slapd.conf</filename> file Misty used is shown here:
|
---|
| 341 | <programlisting>
|
---|
| 342 | #/etc/openldap/slapd.conf
|
---|
| 343 | #
|
---|
| 344 | # See slapd.conf(5) for details on configuration options.
|
---|
| 345 | # This file should NOT be world readable.
|
---|
| 346 | #
|
---|
| 347 | include /etc/openldap/schema/core.schema
|
---|
| 348 | include /etc/openldap/schema/cosine.schema
|
---|
| 349 | include /etc/openldap/schema/inetorgperson.schema
|
---|
| 350 | include /etc/openldap/schema/nis.schema
|
---|
| 351 | include /etc/openldap/schema/samba3.schema
|
---|
| 352 | include /etc/openldap/schema/dhcp.schema
|
---|
| 353 | include /etc/openldap/schema/misc.schema
|
---|
| 354 | include /etc/openldap/schema/idpool.schema
|
---|
| 355 | include /etc/openldap/schema/eduperson.schema
|
---|
| 356 | include /etc/openldap/schema/commURI.schema
|
---|
| 357 | include /etc/openldap/schema/local.schema
|
---|
| 358 | include /etc/openldap/schema/courier.schema
|
---|
| 359 |
|
---|
| 360 | pidfile /var/run/slapd/run/slapd.pid
|
---|
| 361 | argsfile /var/run/slapd/run/slapd.args
|
---|
| 362 |
|
---|
| 363 | replogfile /data/ldap/log/slapd.replog
|
---|
| 364 |
|
---|
| 365 | # Load dynamic backend modules:
|
---|
| 366 | modulepath /usr/lib/openldap/modules
|
---|
| 367 |
|
---|
| 368 | #######################################################################
|
---|
| 369 | # Logging parameters
|
---|
| 370 | #######################################################################
|
---|
| 371 | loglevel 256
|
---|
| 372 |
|
---|
| 373 | #######################################################################
|
---|
| 374 | # SASL and TLS options
|
---|
| 375 | #######################################################################
|
---|
| 376 | sasl-host ldap.corp.abmas.org
|
---|
| 377 | sasl-realm DIGEST-MD5
|
---|
| 378 | sasl-secprops none
|
---|
| 379 | TLSCipherSuite HIGH:MEDIUM:+SSLV2
|
---|
| 380 | TLSCertificateFile /etc/ssl/certs/private/abmas-cert.pem
|
---|
| 381 | TLSCertificateKeyFile /etc/ssl/certs/private/abmas-key.pem
|
---|
| 382 | password-hash {SSHA}
|
---|
| 383 | defaultsearchbase "dc=abmas,dc=biz"
|
---|
| 384 |
|
---|
| 385 | #######################################################################
|
---|
| 386 | # bdb database definitions
|
---|
| 387 | #######################################################################
|
---|
| 388 | database bdb
|
---|
| 389 | suffix "dc=abmas,dc=biz"
|
---|
| 390 | rootdn "cn=manager,dc=abmas,dc=biz"
|
---|
| 391 | rootpw {SSHA}gdo/dUvoT4ZJmULz3rUt6A3H/hBEduJ5
|
---|
| 392 | directory /data/ldap
|
---|
| 393 | mode 0600
|
---|
| 394 | # The following is for BDB to make it flush its data to disk every
|
---|
| 395 | # 500 seconds or 5kb of data
|
---|
| 396 | checkpoint 500 5
|
---|
| 397 |
|
---|
| 398 | ## For running slapindex
|
---|
| 399 | #readonly on
|
---|
| 400 |
|
---|
| 401 | ## Indexes for often-requested attributes
|
---|
| 402 | index objectClass eq
|
---|
| 403 | index cn eq,sub
|
---|
| 404 | index sn eq,sub
|
---|
| 405 | index uid eq,sub
|
---|
| 406 | index uidNumber eq
|
---|
| 407 | index gidNumber eq
|
---|
| 408 | index sambaSID eq
|
---|
| 409 | index sambaPrimaryGroupSID eq
|
---|
| 410 | index sambaDomainName eq
|
---|
| 411 | index default sub
|
---|
| 412 | cachesize 2000
|
---|
| 413 |
|
---|
| 414 | replica host=baa.corp.abmas.org:389
|
---|
| 415 | suffix="dc=abmas,dc=biz"
|
---|
| 416 | binddn="cn=replica,dc=abmas,dc=biz"
|
---|
| 417 | credentials=verysecret
|
---|
| 418 | bindmethod=simple
|
---|
| 419 | tls=yes
|
---|
| 420 | replica host=ns.abmas.org:389
|
---|
| 421 | suffix="dc=abmas,dc=biz"
|
---|
| 422 | binddn="cn=replica,dc=abmas,dc=biz"
|
---|
| 423 | credentials=verysecret
|
---|
| 424 | bindmethod=simple
|
---|
| 425 | tls=yes
|
---|
| 426 |
|
---|
| 427 | #######################################################################
|
---|
| 428 | # ACL section
|
---|
| 429 | #######################################################################
|
---|
| 430 | ## MOST RESTRICTIVE RULES MUST GO FIRST!
|
---|
| 431 | # Admins get access to everything. This way I do not have to rename.
|
---|
| 432 | access to *
|
---|
| 433 | by group/groupOfUniqueNames/uniqueMember="cn=LDAP
|
---|
| 434 | Administrators,ou=groups,dc=abmas,dc=biz" write
|
---|
| 435 | by * break
|
---|
| 436 |
|
---|
| 437 | ## Users can change their own passwords.
|
---|
| 438 | access to
|
---|
| 439 | attrs=userPassword,sambaNTPassword,sambaLMPassword,sambaPwdLastSet,
|
---|
| 440 | sambaPwdMustChange,sambaPwdCanChange
|
---|
| 441 | by self write
|
---|
| 442 | by * auth
|
---|
| 443 |
|
---|
| 444 | ## Home contact info restricted to the logged-in user and the HR dept
|
---|
| 445 | access to attrs=hometelephoneNumber,homePostalAddress,
|
---|
| 446 | mobileTelephoneNumber,pagerTelephoneNumber
|
---|
| 447 | by group/groupOfUniqueNames/uniqueMember="cn=hr_admin,
|
---|
| 448 | ou=groups,dc=abmas,dc=biz"
|
---|
| 449 | write
|
---|
| 450 | by self write
|
---|
| 451 | by * none
|
---|
| 452 |
|
---|
| 453 | ## Everyone can read email aliases
|
---|
| 454 | access to dn.sub="ou=Email Aliases,dc=abmas,dc=biz"
|
---|
| 455 | by * read
|
---|
| 456 |
|
---|
| 457 | ## Only admins can manage email aliases
|
---|
| 458 | ## If someone is the role occupant of an alias they can change it -- this
|
---|
| 459 | ## is accomplished by the "organizationalRole" objectclass and is
|
---|
| 460 | ## pretty cool -- like a groupOfUniqueNames but for individual
|
---|
| 461 | ## users.
|
---|
| 462 | access to dn.children="ou=Email Aliases,dc=abmas,dc=biz"
|
---|
| 463 | by dnattr=roleOccupant write
|
---|
| 464 | by * read
|
---|
| 465 |
|
---|
| 466 | ## Admins and HR can add and delete users
|
---|
| 467 | access to dn.sub="ou=people,dc=abmas,dc=biz"
|
---|
| 468 | by group/groupOfUniqueNames/uniqueMember="cn=hr_admin,
|
---|
| 469 | ou=groups,dc=abmas,dc=biz"
|
---|
| 470 | write
|
---|
| 471 | by * read
|
---|
| 472 |
|
---|
| 473 | ## Admins and HR can add and delete bizputers
|
---|
| 474 | access to dn.sub="ou=bizputers,dc=abmas,dc=biz"
|
---|
| 475 | by group/groupOfUniqueNames/uniqueMember="cn=hr_admin,
|
---|
| 476 | ou=groups,dc=abmas,dc=biz"
|
---|
| 477 | write
|
---|
| 478 | by * read
|
---|
| 479 |
|
---|
| 480 | ## Admins and HR can add and delete groups
|
---|
| 481 | access to dn.sub="ou=groups,dc=abmas,dc=biz"
|
---|
| 482 | by group/groupOfUniqueNames/uniqueMember="cn=hr_admin,
|
---|
| 483 | ou=groups,dc=abmas,dc=biz"
|
---|
| 484 | write
|
---|
| 485 | by * read
|
---|
| 486 |
|
---|
| 487 | ## This is used to quickly deactivate any LDAP object only
|
---|
| 488 | ## Admins have access.
|
---|
| 489 | access to dn.sub="ou=inactive,dc=abmas,dc=biz"
|
---|
| 490 | by * none
|
---|
| 491 |
|
---|
| 492 | ## This is for programs like Windows Address Book that can
|
---|
| 493 | ## detect the default search base.
|
---|
| 494 | access to attrs=namingcontexts,supportedControl
|
---|
| 495 | by anonymous =cs
|
---|
| 496 | by * read
|
---|
| 497 |
|
---|
| 498 | ## Default to read-only access
|
---|
| 499 | access to *
|
---|
| 500 | by dn.base="cn=replica,ou=people,dc=abmas,dc=biz" write
|
---|
| 501 | by * read
|
---|
| 502 | </programlisting>
|
---|
| 503 | </para>
|
---|
| 504 |
|
---|
| 505 | <para>
|
---|
| 506 | <indexterm><primary>/etc/ldap.conf</primary></indexterm>
|
---|
| 507 | The <filename>/etc/ldap.conf</filename> file used is listed in <link linkend="ch8ldap"/>.
|
---|
| 508 | </para>
|
---|
| 509 |
|
---|
| 510 | <example id="ch8ldap">
|
---|
| 511 | <title>NSS LDAP Control File &smbmdash; /etc/ldap.conf</title>
|
---|
| 512 | <screen>
|
---|
| 513 | # /etc/ldap.conf
|
---|
| 514 | # This file is present on every *NIX client that authenticates to LDAP.
|
---|
| 515 | # For me, most of the defaults are fine. There is an amazing amount of
|
---|
| 516 | # customization that can be done see the man page for info.
|
---|
| 517 |
|
---|
| 518 | # Your LDAP server. Must be resolvable without using LDAP. The following
|
---|
| 519 | # is for the LDAP server all others use the FQDN of the server
|
---|
| 520 | URI ldap://127.0.0.1
|
---|
| 521 |
|
---|
| 522 | # The distinguished name of the search base.
|
---|
| 523 | base ou=corp,dc=abmas,dc=biz
|
---|
| 524 |
|
---|
| 525 | # The LDAP version to use (defaults to 3 if supported by client library)
|
---|
| 526 | ldap_version 3
|
---|
| 527 |
|
---|
| 528 | # The distinguished name to bind to the server with if the effective
|
---|
| 529 | # user ID is root. Password is stored in /etc/ldap.secret (mode 600)
|
---|
| 530 | rootbinddn cn=Manager,dc=abmas,dc=biz
|
---|
| 531 |
|
---|
| 532 | # Filter to AND with uid=%s
|
---|
| 533 | pam_filter objectclass=posixAccount
|
---|
| 534 |
|
---|
| 535 | # The user ID attribute (defaults to uid)
|
---|
| 536 | pam_login_attribute uid
|
---|
| 537 |
|
---|
| 538 | # Group member attribute
|
---|
| 539 | pam_member_attribute memberUID
|
---|
| 540 |
|
---|
| 541 | # Use the OpenLDAP password change
|
---|
| 542 | # extended operation to update the password.
|
---|
| 543 | pam_password exop
|
---|
| 544 |
|
---|
| 545 | # OpenLDAP SSL mechanism
|
---|
| 546 | # start_tls mechanism uses the normal LDAP port, LDAPS typically 636
|
---|
| 547 | ssl start_tls
|
---|
| 548 |
|
---|
| 549 | tls_cacertfile /etc/ssl/certs/private/abmas-cert.pem
|
---|
| 550 | ...
|
---|
| 551 | </screen>
|
---|
| 552 | </example>
|
---|
| 553 |
|
---|
| 554 | <para>
|
---|
| 555 | The NSS control file <filename>/etc/nsswitch.conf</filename> has the following contents:
|
---|
| 556 | <screen>
|
---|
| 557 | # /etc/nsswitch.conf
|
---|
| 558 | # This file controls the resolve order for system databases.
|
---|
| 559 |
|
---|
| 560 | # the following two lines obviate the "+" entry in /etc/passwd and /etc/group.
|
---|
| 561 | passwd: compat ldap
|
---|
| 562 | group: compat ldap
|
---|
| 563 | # The above are all that I store in LDAP at this point. There are
|
---|
| 564 | # possibilities to store hosts, services, ethers, and lots of other things.
|
---|
| 565 | </screen>
|
---|
| 566 | </para>
|
---|
| 567 |
|
---|
| 568 | <para>
|
---|
| 569 | <indexterm><primary>PAM</primary></indexterm>
|
---|
| 570 | <indexterm><primary>NSS</primary></indexterm>
|
---|
| 571 | In my setup, users authenticate via PAM and NSS using LDAP-based accounts.
|
---|
| 572 | The configuration file that controls the behavior of the PAM <command>pam_unix2</command>
|
---|
| 573 | module is shown in <link linkend="sbepu2"/> file.
|
---|
| 574 | This works out of the box with the configuration files in this chapter. It
|
---|
| 575 | enables you to have no local accounts for users (it is highly advisable
|
---|
| 576 | to have a local account for the root user). Traps for the unwary include the following:
|
---|
| 577 | </para>
|
---|
| 578 |
|
---|
| 579 | <example id="sbepu2">
|
---|
| 580 | <title>The PAM Control File <filename>/etc/security/pam_unix2.conf</filename></title>
|
---|
| 581 | <screen>
|
---|
| 582 | # pam_unix2 config file
|
---|
| 583 | #
|
---|
| 584 | # This file contains options for the pam_unix2.so module.
|
---|
| 585 | # It contains a list of options for every type of management group,
|
---|
| 586 | # which will be used for authentication, account management and
|
---|
| 587 | # password management. Not all options will be used from all types of
|
---|
| 588 | # management groups.
|
---|
| 589 | #
|
---|
| 590 | # At first, pam_unix2 will read this file and then uses the local
|
---|
| 591 | # options. Not all options can be set her global.
|
---|
| 592 | #
|
---|
| 593 | # Allowed options are:
|
---|
| 594 | #
|
---|
| 595 | # debug (account, auth, password, session)
|
---|
| 596 | # nullok (auth)
|
---|
| 597 | # md5 (password / overwrites /etc/default/passwd)
|
---|
| 598 | # bigcrypt (password / overwrites /etc/default/passwd)
|
---|
| 599 | # blowfish (password / overwrites /etc/default/passwd)
|
---|
| 600 | # crypt_rounds=XX
|
---|
| 601 | # none (session)
|
---|
| 602 | # trace (session)
|
---|
| 603 | # call_modules=x,y,z (account, auth, password)
|
---|
| 604 | #
|
---|
| 605 | # Example:
|
---|
| 606 | # auth: nullok
|
---|
| 607 | # account:
|
---|
| 608 | # password: nullok blowfish crypt_rounds=8
|
---|
| 609 | # session: none
|
---|
| 610 | #
|
---|
| 611 | auth: use_ldap
|
---|
| 612 | account: use_ldap
|
---|
| 613 | password: use_ldap
|
---|
| 614 | session: none
|
---|
| 615 | </screen>
|
---|
| 616 | </example>
|
---|
| 617 |
|
---|
| 618 | <indexterm><primary>LDAP</primary></indexterm>
|
---|
| 619 | <indexterm><primary>authenticate</primary></indexterm>
|
---|
| 620 | <indexterm><primary>DNS</primary></indexterm>
|
---|
| 621 | <itemizedlist>
|
---|
| 622 | <listitem>
|
---|
| 623 | <para>
|
---|
| 624 | If your LDAP database goes down, nobody can authenticate except for root.
|
---|
| 625 | </para>
|
---|
| 626 | </listitem>
|
---|
| 627 |
|
---|
| 628 | <listitem>
|
---|
| 629 | <para>
|
---|
| 630 | If failover is configured incorrectly, weird behavior can occur. For example,
|
---|
| 631 | DNS can fail to resolve.
|
---|
| 632 | </para>
|
---|
| 633 | </listitem>
|
---|
| 634 | </itemizedlist>
|
---|
| 635 |
|
---|
| 636 | <para>
|
---|
| 637 | I do have two LDAP slave servers configured. That subject is beyond the scope
|
---|
| 638 | of this document, and steps for implementing it are well documented.
|
---|
| 639 | </para>
|
---|
| 640 |
|
---|
| 641 | <para>
|
---|
| 642 | The following services authenticate using LDAP:
|
---|
| 643 | </para>
|
---|
| 644 | <indexterm><primary>UNIX</primary></indexterm>
|
---|
| 645 | <indexterm><primary>Postfix</primary></indexterm>
|
---|
| 646 | <indexterm><primary>Courier-IMAP</primary></indexterm>
|
---|
| 647 | <simplelist>
|
---|
| 648 | <member><para>UNIX login/ssh</para></member>
|
---|
| 649 | <member><para>Postfix (SMTP)</para></member>
|
---|
| 650 | <member><para>Courier-IMAP/IMAPS/POP3/POP3S</para></member>
|
---|
| 651 | </simplelist>
|
---|
| 652 |
|
---|
| 653 | <para>
|
---|
| 654 | <indexterm><primary>white-pages</primary></indexterm>
|
---|
| 655 | <indexterm><primary>Windows Address Book</primary></indexterm>
|
---|
| 656 | Companywide white pages can be searched using an LDAP client
|
---|
| 657 | such as the one in the Windows Address Book.
|
---|
| 658 | </para>
|
---|
| 659 |
|
---|
| 660 | <para>
|
---|
| 661 | <indexterm><primary>LDAP</primary></indexterm>
|
---|
| 662 | <indexterm><primary>smbldap-tools</primary></indexterm>
|
---|
| 663 | Having gained a solid understanding of LDAP and a relatively workable LDAP tree
|
---|
| 664 | thus far, it was time to configure Samba. I compiled the latest stable Samba and
|
---|
| 665 | also installed the latest <command>smbldap-tools</command> from
|
---|
| 666 | <ulink url="http://idealx.com">Idealx</ulink>.
|
---|
| 667 | </para>
|
---|
| 668 |
|
---|
| 669 | <para>
|
---|
| 670 | The Samba &smb.conf; file was configured as shown in <link linkend="ch8smbconf"/>.
|
---|
| 671 | </para>
|
---|
| 672 |
|
---|
| 673 | <example id="ch8smbconf">
|
---|
| 674 | <title>Samba Configuration File &smbmdash; smb.conf Part A</title>
|
---|
| 675 | <smbconfblock>
|
---|
| 676 | <smbconfcomment>Global parameters</smbconfcomment>
|
---|
| 677 | <smbconfsection name="[global]"/>
|
---|
| 678 | <smbconfoption name="workgroup">MEGANET2</smbconfoption>
|
---|
| 679 | <smbconfoption name="netbios name">MASSIVE</smbconfoption>
|
---|
| 680 | <smbconfoption name="server string">Corp File Server</smbconfoption>
|
---|
| 681 | <smbconfoption name="passdb backend">ldapsam:ldap://localhost</smbconfoption>
|
---|
| 682 | <smbconfoption name="pam password change">Yes</smbconfoption>
|
---|
| 683 | <smbconfoption name="username map">/etc/samba/smbusers</smbconfoption>
|
---|
| 684 | <smbconfoption name="log level">1</smbconfoption>
|
---|
| 685 | <smbconfoption name="log file">/data/samba/log/%m.log</smbconfoption>
|
---|
| 686 | <smbconfoption name="name resolve order">wins host bcast</smbconfoption>
|
---|
| 687 | <smbconfoption name="time server">Yes</smbconfoption>
|
---|
| 688 | <smbconfoption name="printcap name">cups</smbconfoption>
|
---|
| 689 | <smbconfoption name="show add printer wizard">No</smbconfoption>
|
---|
| 690 | <smbconfoption name="cups options">Raw</smbconfoption>
|
---|
| 691 | <smbconfoption name="add user script">/opt/IDEALX/sbin/smbldap-useradd -m "%u"</smbconfoption>
|
---|
| 692 | <smbconfoption name="add group script">/opt/IDEALX/sbin/smbldap-groupadd -p "%g"</smbconfoption>
|
---|
| 693 | <smbconfoption name="add user to group script">/opt/IDEALX/sbin/smbldap-groupmod -m "%u" "%g"</smbconfoption>
|
---|
| 694 | <smbconfoption name="delete user from group script">/opt/IDEALX/sbin/smbldap-groupmod -x "%u" "%g"</smbconfoption>
|
---|
| 695 | <smbconfoption name="set primary group script">/opt/IDEALX/sbin/smbldap-usermod -g "%g" "%u"</smbconfoption>
|
---|
| 696 | <smbconfoption name="add machine script">/usr/local/sbin/smbldap-useradd -w "%m"</smbconfoption>
|
---|
| 697 | <smbconfoption name="logon script">logon.bat</smbconfoption>
|
---|
| 698 | <smbconfoption name="logon path">\\%L\profiles\%U\%a</smbconfoption>
|
---|
| 699 | <smbconfoption name="logon drive">H:</smbconfoption>
|
---|
| 700 | <smbconfoption name="logon home">\\%L\%U</smbconfoption>
|
---|
| 701 | <smbconfoption name="domain logons">Yes</smbconfoption>
|
---|
| 702 | <smbconfoption name="wins support">Yes</smbconfoption>
|
---|
| 703 | <smbconfoption name="ldap admin dn">cn=Manager,dc=abmas,dc=biz</smbconfoption>
|
---|
| 704 | <smbconfoption name="ldap group suffix">ou=Groups</smbconfoption>
|
---|
| 705 | <smbconfoption name="ldap idmap suffix">ou=People</smbconfoption>
|
---|
| 706 | <smbconfoption name="ldap machine suffix">ou=People</smbconfoption>
|
---|
| 707 | <smbconfoption name="ldap passwd sync">Yes</smbconfoption>
|
---|
| 708 | <smbconfoption name="ldap suffix">ou=MEGANET2,dc=abmas,dc=biz</smbconfoption>
|
---|
| 709 | <smbconfoption name="ldap ssl">no</smbconfoption>
|
---|
| 710 | <smbconfoption name="ldap user suffix">ou=People</smbconfoption>
|
---|
| 711 | <smbconfoption name="admin users">root, "@Domain Admins"</smbconfoption>
|
---|
| 712 | <smbconfoption name="printer admin">"@Domain Admins"</smbconfoption>
|
---|
| 713 | <smbconfoption name="force printername">Yes</smbconfoption>
|
---|
| 714 | </smbconfblock>
|
---|
| 715 | </example>
|
---|
| 716 |
|
---|
| 717 | <example id="ch8smbconf2">
|
---|
| 718 | <title>Samba Configuration File &smbmdash; smb.conf Part B</title>
|
---|
| 719 | <smbconfblock>
|
---|
| 720 | <smbconfsection name="[netlogon]"/>
|
---|
| 721 | <smbconfoption name="comment">Network logon service</smbconfoption>
|
---|
| 722 | <smbconfoption name="path">/data/samba/netlogon</smbconfoption>
|
---|
| 723 | <smbconfoption name="write list">"@Domain Admins"</smbconfoption>
|
---|
| 724 | <smbconfoption name="guest ok">Yes</smbconfoption>
|
---|
| 725 |
|
---|
| 726 | <smbconfsection name="[profiles]"/>
|
---|
| 727 | <smbconfoption name="comment">Roaming Profile Share</smbconfoption>
|
---|
| 728 | <smbconfoption name="path">/data/samba/profiles/</smbconfoption>
|
---|
| 729 | <smbconfoption name="read only">No</smbconfoption>
|
---|
| 730 | <smbconfoption name="profile acls">Yes</smbconfoption>
|
---|
| 731 | <smbconfoption name="veto files">desktop.ini</smbconfoption>
|
---|
| 732 | <smbconfoption name="browseable">No</smbconfoption>
|
---|
| 733 |
|
---|
| 734 | <smbconfsection name="[homes]"/>
|
---|
| 735 | <smbconfoption name="comment">Home Directories</smbconfoption>
|
---|
| 736 | <smbconfoption name="valid users">%S</smbconfoption>
|
---|
| 737 | <smbconfoption name="read only">No</smbconfoption>
|
---|
| 738 | <smbconfoption name="create mask">0770</smbconfoption>
|
---|
| 739 | <smbconfoption name="veto files">desktop.ini</smbconfoption>
|
---|
| 740 | <smbconfoption name="hide files">desktop.ini</smbconfoption>
|
---|
| 741 | <smbconfoption name="browseable">No</smbconfoption>
|
---|
| 742 |
|
---|
| 743 | <smbconfsection name="[software]"/>
|
---|
| 744 | <smbconfoption name="comment">Software for %a computers</smbconfoption>
|
---|
| 745 | <smbconfoption name="path">/data/samba/shares/software/%a</smbconfoption>
|
---|
| 746 | <smbconfoption name="guest ok">Yes</smbconfoption>
|
---|
| 747 |
|
---|
| 748 | <smbconfsection name="[public]"/>
|
---|
| 749 | <smbconfoption name="comment">Public Files</smbconfoption>
|
---|
| 750 | <smbconfoption name="path">/data/samba/shares/public</smbconfoption>
|
---|
| 751 | <smbconfoption name="read only">No</smbconfoption>
|
---|
| 752 | <smbconfoption name="guest ok">Yes</smbconfoption>
|
---|
| 753 |
|
---|
| 754 | <smbconfsection name="[PDF]"/>
|
---|
| 755 | <smbconfoption name="comment">Location of documents printed to PDFCreator printer</smbconfoption>
|
---|
| 756 | <smbconfoption name="path">/data/samba/shares/pdf</smbconfoption>
|
---|
| 757 | <smbconfoption name="guest ok">Yes</smbconfoption>
|
---|
| 758 | </smbconfblock>
|
---|
| 759 | </example>
|
---|
| 760 |
|
---|
| 761 | <example id="ch8smbconf3">
|
---|
| 762 | <title>Samba Configuration File &smbmdash; smb.conf Part C</title>
|
---|
| 763 | <smbconfblock>
|
---|
| 764 | <smbconfsection name="[EVERYTHING]"/>
|
---|
| 765 | <smbconfoption name="comment">All shares</smbconfoption>
|
---|
| 766 | <smbconfoption name="path">/data/samba</smbconfoption>
|
---|
| 767 | <smbconfoption name="valid users">"@Domain Admins"</smbconfoption>
|
---|
| 768 | <smbconfoption name="read only">No</smbconfoption>
|
---|
| 769 |
|
---|
| 770 | <smbconfsection name="[CDROM]"/>
|
---|
| 771 | <smbconfoption name="comment">CD-ROM on MASSIVE</smbconfoption>
|
---|
| 772 | <smbconfoption name="path">/mnt</smbconfoption>
|
---|
| 773 | <smbconfoption name="guest ok">Yes</smbconfoption>
|
---|
| 774 |
|
---|
| 775 | <smbconfsection name="[print$]"/>
|
---|
| 776 | <smbconfoption name="comment">Printer Drivers Share</smbconfoption>
|
---|
| 777 | <smbconfoption name="path">/data/samba/drivers</smbconfoption>
|
---|
| 778 | <smbconfoption name="write list">root</smbconfoption>
|
---|
| 779 | <smbconfoption name="browseable">No</smbconfoption>
|
---|
| 780 |
|
---|
| 781 | <smbconfsection name="[printers]"/>
|
---|
| 782 | <smbconfoption name="comment">All Printers</smbconfoption>
|
---|
| 783 | <smbconfoption name="path">/data/samba/spool</smbconfoption>
|
---|
| 784 | <smbconfoption name="create mask">0644</smbconfoption>
|
---|
| 785 | <smbconfoption name="printable">Yes</smbconfoption>
|
---|
| 786 | <smbconfoption name="browseable">No</smbconfoption>
|
---|
| 787 |
|
---|
| 788 | <smbconfsection name="[acct_hp8500]"/>
|
---|
| 789 | <smbconfoption name="comment">"Accounting Color Laser Printer"</smbconfoption>
|
---|
| 790 | <smbconfoption name="path">/data/samba/spool/private</smbconfoption>
|
---|
| 791 | <smbconfoption name="valid users">@acct, @acct_admin, @hr, "@Domain Admins",@Receptionist, dwayne, terri, danae, jerry</smbconfoption>
|
---|
| 792 | <smbconfoption name="create mask">0644</smbconfoption>
|
---|
| 793 | <smbconfoption name="printable">Yes</smbconfoption>
|
---|
| 794 | <smbconfoption name="copy">printers</smbconfoption>
|
---|
| 795 |
|
---|
| 796 | <smbconfsection name="[plotter]"/>
|
---|
| 797 | <smbconfoption name="comment">Engineering Plotter</smbconfoption>
|
---|
| 798 | <smbconfoption name="path">/data/samba/spool</smbconfoption>
|
---|
| 799 | <smbconfoption name="create mask">0644</smbconfoption>
|
---|
| 800 | <smbconfoption name="printable">Yes</smbconfoption>
|
---|
| 801 | <smbconfoption name="use client driver">Yes</smbconfoption>
|
---|
| 802 | <smbconfoption name="copy">printers</smbconfoption>
|
---|
| 803 | </smbconfblock>
|
---|
| 804 | </example>
|
---|
| 805 |
|
---|
| 806 | <example id="ch8smbconf4">
|
---|
| 807 | <title>Samba Configuration File &smbmdash; smb.conf Part D</title>
|
---|
| 808 | <smbconfblock>
|
---|
| 809 | <smbconfsection name="[APPS]"/>
|
---|
| 810 | <smbconfoption name="path">/data/samba/shares/Apps</smbconfoption>
|
---|
| 811 | <smbconfoption name="force group">"Domain Users"</smbconfoption>
|
---|
| 812 | <smbconfoption name="read only">No</smbconfoption>
|
---|
| 813 |
|
---|
| 814 | <smbconfsection name="[ACCT]"/>
|
---|
| 815 | <smbconfoption name="path">/data/samba/shares/Accounting</smbconfoption>
|
---|
| 816 | <smbconfoption name="valid users">@acct, "@Domain Admins"</smbconfoption>
|
---|
| 817 | <smbconfoption name="force group">acct</smbconfoption>
|
---|
| 818 | <smbconfoption name="read only">No</smbconfoption>
|
---|
| 819 | <smbconfoption name="create mask">0660</smbconfoption>
|
---|
| 820 | <smbconfoption name="directory mask">0770</smbconfoption>
|
---|
| 821 |
|
---|
| 822 | <smbconfsection name="[ACCT_ADMIN]"/>
|
---|
| 823 | <smbconfoption name="path">/data/samba/shares/Acct_Admin</smbconfoption>
|
---|
| 824 | <smbconfoption name="valid users">@âacct_adminâ</smbconfoption>
|
---|
| 825 | <smbconfoption name="force group">acct_admin</smbconfoption>
|
---|
| 826 |
|
---|
| 827 | <smbconfsection name="[HR_PR]"/>
|
---|
| 828 | <smbconfoption name="path">/data/samba/shares/HR_PR</smbconfoption>
|
---|
| 829 | <smbconfoption name="valid users">@hr, @acct_admin</smbconfoption>
|
---|
| 830 | <smbconfoption name="force group">hr</smbconfoption>
|
---|
| 831 |
|
---|
| 832 | <smbconfsection name="[ENGR]"/>
|
---|
| 833 | <smbconfoption name="path">/data/samba/shares/Engr</smbconfoption>
|
---|
| 834 | <smbconfoption name="valid users">@engr, @receptionist, @truss, "@Domain Admins", cheri</smbconfoption>
|
---|
| 835 | <smbconfoption name="force group">engr</smbconfoption>
|
---|
| 836 | <smbconfoption name="read only">No</smbconfoption>
|
---|
| 837 | <smbconfoption name="create mask">0770</smbconfoption>
|
---|
| 838 |
|
---|
| 839 | <smbconfsection name="[DATA]"/>
|
---|
| 840 | <smbconfoption name="path">/data/samba/shares/DATA</smbconfoption>
|
---|
| 841 | <smbconfoption name="valid users">@engr, @receptionist, @truss, "@Domain Admins", cheri</smbconfoption>
|
---|
| 842 | <smbconfoption name="force group">engr</smbconfoption>
|
---|
| 843 | <smbconfoption name="read only">No</smbconfoption>
|
---|
| 844 | <smbconfoption name="create mask">0770</smbconfoption>
|
---|
| 845 | <smbconfoption name="copy">engr</smbconfoption>
|
---|
| 846 | </smbconfblock>
|
---|
| 847 | </example>
|
---|
| 848 |
|
---|
| 849 | <example id="ch8smbconf5">
|
---|
| 850 | <title>Samba Configuration File &smbmdash; smb.conf Part E</title>
|
---|
| 851 | <smbconfblock>
|
---|
| 852 | <smbconfsection name="[X]"/>
|
---|
| 853 | <smbconfoption name="path">/data/samba/shares/X</smbconfoption>
|
---|
| 854 | <smbconfoption name="valid users">@engr, @acct</smbconfoption>
|
---|
| 855 | <smbconfoption name="force group">engr</smbconfoption>
|
---|
| 856 | <smbconfoption name="read only">No</smbconfoption>
|
---|
| 857 | <smbconfoption name="create mask">0770</smbconfoption>
|
---|
| 858 | <smbconfoption name="copy">engr</smbconfoption>
|
---|
| 859 |
|
---|
| 860 | <smbconfsection name="[NETWORK]"/>
|
---|
| 861 | <smbconfoption name="path">/data/samba/shares/network</smbconfoption>
|
---|
| 862 | <smbconfoption name="valid users">"@Domain Users"</smbconfoption>
|
---|
| 863 | <smbconfoption name="read only">No</smbconfoption>
|
---|
| 864 | <smbconfoption name="create mask">0770</smbconfoption>
|
---|
| 865 | <smbconfoption name="guest ok">Yes</smbconfoption>
|
---|
| 866 |
|
---|
| 867 | <smbconfsection name="[UTILS]"/>
|
---|
| 868 | <smbconfoption name="path">/data/samba/shares/Utils</smbconfoption>
|
---|
| 869 | <smbconfoption name="write list">"@Domain Admins"</smbconfoption>
|
---|
| 870 |
|
---|
| 871 | <smbconfsection name="[SYS]"/>
|
---|
| 872 | <smbconfoption name="path">/data/samba/shares/SYS</smbconfoption>
|
---|
| 873 | <smbconfoption name="valid users">chad</smbconfoption>
|
---|
| 874 | <smbconfoption name="read only">No</smbconfoption>
|
---|
| 875 | <smbconfoption name="browseable">No</smbconfoption>
|
---|
| 876 | </smbconfblock>
|
---|
| 877 | </example>
|
---|
| 878 |
|
---|
| 879 | <para>
|
---|
| 880 | <indexterm><primary>Qbasic</primary></indexterm>
|
---|
| 881 | <indexterm><primary>Rbase</primary></indexterm>
|
---|
| 882 | <indexterm><primary>drive letters</primary></indexterm>
|
---|
| 883 | Most of these shares are only used by one company group, but they are required
|
---|
| 884 | because of some ancient Qbasic and Rbase applications were that written expecting
|
---|
| 885 | their own drive letters.
|
---|
| 886 | </para>
|
---|
| 887 |
|
---|
| 888 | <para>
|
---|
| 889 | <indexterm><primary>rsync</primary></indexterm>
|
---|
| 890 | <indexterm><primary>rsyncd.conf</primary></indexterm>
|
---|
| 891 | <indexterm><primary>synchronize</primary></indexterm>
|
---|
| 892 | Note: During the process of building the new server, I kept data files
|
---|
| 893 | up to date with the Novell server via use of <command>rsync</command>.
|
---|
| 894 | On a separate system (my workstation in fact), which could be rebooted
|
---|
| 895 | whenever necessary, I set up a mount point to the Novell server via
|
---|
| 896 | <command>ncpmount</command>. I then created a
|
---|
| 897 | <filename>rsyncd.conf</filename> to share that mount point out to my
|
---|
| 898 | new server, and synchronized once an hour. The script I used to synchronize
|
---|
| 899 | is shown in <link linkend="sbersync"/>. The files exclusion list I used
|
---|
| 900 | is shown in <link linkend="sbexcld"/>. The reason I had to have the
|
---|
| 901 | <command>rsync</command> daemon running on a system that could be
|
---|
| 902 | rebooted frequently is because <constant>ncpfs</constant>
|
---|
| 903 | (part of the MARS NetWare Emulation package) has a nasty habit of creating stale
|
---|
| 904 | mount points that cannot be recovered without a reboot. The reason for hourly
|
---|
| 905 | synchronization is because some part of the chain was very slow and
|
---|
| 906 | performance-heavy (whether <command>rsync</command> itself, the network,
|
---|
| 907 | or the Novell server, I am not sure, but it was probably the Novell server).
|
---|
| 908 | </para>
|
---|
| 909 |
|
---|
| 910 | <example id="sbersync">
|
---|
| 911 | <title>Rsync Script</title>
|
---|
| 912 | <screen>
|
---|
| 913 | #!/bin/bash
|
---|
| 914 | # Part 1 - rsync the Novell directories to the new server
|
---|
| 915 | echo "#############################################"
|
---|
| 916 | echo "New sync operation starting at `date`"
|
---|
| 917 | if ! pgrep -fl '^rsync\> ; then
|
---|
| 918 | echo "Good, no rsync is running!"
|
---|
| 919 | echo "Synchronizing oink to BHPRO"
|
---|
| 920 | rsync -av --exclude-from=/root/excludes.txt
|
---|
| 921 | baa.corp:/BHPRO/SYS1/ /data/samba/shares/SYS1
|
---|
| 922 | retval=$?
|
---|
| 923 | [ ${retval} = 0 ] && echo "Sync operation completed at `date`"
|
---|
| 924 | echo "Fixing permissions"
|
---|
| 925 | # I had a whole lot more permission-fixing stuff here. It got
|
---|
| 926 | # pared down as groups got moved over. The problem
|
---|
| 927 | # was that the way I was mounting the directory, everything
|
---|
| 928 | # was owned by the Novell administrator which translated to
|
---|
| 929 | # Root. This is also why I could only do one-way sync because
|
---|
| 930 | # I could not fix the ACLs on the Novell side.
|
---|
| 931 | find /data/samba/shares/Engr/ -perm +770 -exec chmod 770 {} \;
|
---|
| 932 | find /data/samba/shares/Engr/ ! -group engr -exec chgrp engr {} \;
|
---|
| 933 | else
|
---|
| 934 | # This rsync took ages and ages -- I had it set to run every hour but
|
---|
| 935 | # I needed a way to prevent it running into itself.
|
---|
| 936 | echo "Oh no, rsync is already running!"
|
---|
| 937 | echo "#############################################"
|
---|
| 938 | fi
|
---|
| 939 | </screen>
|
---|
| 940 | </example>
|
---|
| 941 |
|
---|
| 942 | <example id="sbexcld">
|
---|
| 943 | <title>Rsync Files Exclusion List &smbmdash; <filename>/root/excludes.txt</filename></title>
|
---|
| 944 | <screen>
|
---|
| 945 | /Acct/
|
---|
| 946 | /Apps/
|
---|
| 947 | /DATA/
|
---|
| 948 | /Engr/*.pc3
|
---|
| 949 | /Engr/plotter
|
---|
| 950 | /Engr/APPOLO/
|
---|
| 951 | /Engr/LIBRARY/
|
---|
| 952 | /Home/Accounting/
|
---|
| 953 | /Home/Angie/
|
---|
| 954 | /Home/AngieY/
|
---|
| 955 | /Home/Brandon/
|
---|
| 956 | /Home/Carl/
|
---|
| 957 | </screen>
|
---|
| 958 | </example>
|
---|
| 959 |
|
---|
| 960 | <para>
|
---|
| 961 | After Samba was configured, I initialized the LDAP database. The first
|
---|
| 962 | thing I had to do was store the LDAP password in the Samba configuration by
|
---|
| 963 | issuing the command (as root):
|
---|
| 964 | <screen>
|
---|
| 965 | &rootprompt; smbpasswd -w verysecret
|
---|
| 966 | </screen>
|
---|
| 967 | where <quote>verysecret</quote> is replaced by the LDAP bind password.
|
---|
| 968 | </para>
|
---|
| 969 |
|
---|
| 970 | <note><para>
|
---|
| 971 | The Idealx smbldap-tools package can be configured using a script called
|
---|
| 972 | <command>configure.pl</command> that is provided as part of the tool. See <link linkend="happy"/>
|
---|
| 973 | for an example of its use. Many administrators, like Misty, choose to do this manually
|
---|
| 974 | so as to maintain greater awareness of how the tool-chain works and possibly to avoid
|
---|
| 975 | undesirable actions from occurring unnoticed.
|
---|
| 976 | </para></note>
|
---|
| 977 |
|
---|
| 978 | <para>
|
---|
| 979 | Now Samba was ready for use and it was time to configure the smbldap-tools. There are two
|
---|
| 980 | relevant files, which are usually put into the directory
|
---|
| 981 | <filename>/etc/smbldap-tools</filename>. The main file,
|
---|
| 982 | <filename>smbldap.conf</filename> is shown in <link linkend="ch8ideal"/>.
|
---|
| 983 | </para>
|
---|
| 984 |
|
---|
| 985 | <example id="ch8ideal">
|
---|
| 986 | <title>Idealx smbldap-tools Control File &smbmdash; Part A</title>
|
---|
| 987 | <screen>
|
---|
| 988 | #########
|
---|
| 989 | #
|
---|
| 990 | # located in /etc/smbldap-tools/smbldap.conf
|
---|
| 991 | #
|
---|
| 992 | ######################################################################
|
---|
| 993 | #
|
---|
| 994 | # General Configuration
|
---|
| 995 | #
|
---|
| 996 | ######################################################################
|
---|
| 997 |
|
---|
| 998 | # Put your own SID
|
---|
| 999 | # to obtain this number do: net getlocalsid
|
---|
| 1000 | SID="S-1-5-21-725326080-1709766072-2910717368"
|
---|
| 1001 |
|
---|
| 1002 | ######################################################################
|
---|
| 1003 | #
|
---|
| 1004 | # LDAP Configuration
|
---|
| 1005 | #
|
---|
| 1006 | ######################################################################
|
---|
| 1007 |
|
---|
| 1008 | # Notes: to use to dual ldap servers backend for Samba, you must patch
|
---|
| 1009 | # Samba with the dual-head patch from IDEALX. If not using this patch
|
---|
| 1010 | # just use the same server for slaveLDAP and masterLDAP.
|
---|
| 1011 | # Those two servers declarations can also be used when you have
|
---|
| 1012 | # . one master LDAP server where all writing operations must be done
|
---|
| 1013 | # . one slave LDAP server where all reading operations must be done
|
---|
| 1014 | # (typically a replication directory)
|
---|
| 1015 |
|
---|
| 1016 | # Ex: slaveLDAP=127.0.0.1
|
---|
| 1017 | slaveLDAP="127.0.0.1"
|
---|
| 1018 | slavePort="389"
|
---|
| 1019 |
|
---|
| 1020 | # Master LDAP : needed for write operations
|
---|
| 1021 | # Ex: masterLDAP=127.0.0.1
|
---|
| 1022 | masterLDAP="127.0.0.1"
|
---|
| 1023 | masterPort="389"
|
---|
| 1024 |
|
---|
| 1025 | # Use TLS for LDAP
|
---|
| 1026 | # If set to 1, this option will use start_tls for connection
|
---|
| 1027 | # (you should also used the port 389)
|
---|
| 1028 | ldapTLS="0"
|
---|
| 1029 |
|
---|
| 1030 | # How to verify the server's certificate (none, optional or require)
|
---|
| 1031 | # see "man Net::LDAP" in start_tls section for more details
|
---|
| 1032 | verify=""
|
---|
| 1033 | </screen>
|
---|
| 1034 | </example>
|
---|
| 1035 |
|
---|
| 1036 | <example id="ch8ideal2">
|
---|
| 1037 | <title>Idealx smbldap-tools Control File &smbmdash; Part B</title>
|
---|
| 1038 | <screen>
|
---|
| 1039 | # CA certificate
|
---|
| 1040 | # see "man Net::LDAP" in start_tls section for more details
|
---|
| 1041 | cafile=""
|
---|
| 1042 | certificate to use to connect to the ldap server
|
---|
| 1043 | # see "man Net::LDAP" in start_tls section for more details
|
---|
| 1044 | clientcert=""
|
---|
| 1045 |
|
---|
| 1046 | # key certificate to use to connect to the ldap server
|
---|
| 1047 | # see "man Net::LDAP" in start_tls section for more details
|
---|
| 1048 | clientkey=""
|
---|
| 1049 |
|
---|
| 1050 | # LDAP Suffix
|
---|
| 1051 | # Ex: suffix=dc=IDEALX,dc=ORG
|
---|
| 1052 | suffix="ou=MEGANET2,dc=abmas,dc=biz"
|
---|
| 1053 |
|
---|
| 1054 | # Where are stored Users
|
---|
| 1055 | # Ex: usersdn="ou=Users,dc=IDEALX,dc=ORG"
|
---|
| 1056 | usersdn="ou=People,${suffix}"
|
---|
| 1057 |
|
---|
| 1058 | # Where are stored Computers
|
---|
| 1059 | # Ex: computersdn="ou=Computers,dc=IDEALX,dc=ORG"
|
---|
| 1060 | computersdn="ou=People,${suffix}"
|
---|
| 1061 |
|
---|
| 1062 | # Where are stored Groups
|
---|
| 1063 | # Ex groupsdn="ou=Groups,dc=IDEALX,dc=ORG"
|
---|
| 1064 | groupsdn="ou=Groups,${suffix}"
|
---|
| 1065 |
|
---|
| 1066 | # Where are stored Idmap entries
|
---|
| 1067 | # (used if samba is a domain member server)
|
---|
| 1068 | # Ex groupsdn="ou=Idmap,dc=IDEALX,dc=ORG"
|
---|
| 1069 | idmapdn="ou=Idmap,${suffix}"
|
---|
| 1070 |
|
---|
| 1071 | # Where to store next uidNumber and gidNumber available
|
---|
| 1072 | sambaUnixIdPooldn="sambaDomainName=MEGANET2,${suffix}"
|
---|
| 1073 |
|
---|
| 1074 | # Default scope Used
|
---|
| 1075 | scope="sub"
|
---|
| 1076 | </screen>
|
---|
| 1077 | </example>
|
---|
| 1078 |
|
---|
| 1079 | <example id="ch8ideal3">
|
---|
| 1080 | <title>Idealx smbldap-tools Control File &smbmdash; Part C</title>
|
---|
| 1081 | <screen>
|
---|
| 1082 | # Unix password encryption (CRYPT, MD5, SMD5, SSHA, SHA)
|
---|
| 1083 | hash_encrypt="MD5"
|
---|
| 1084 |
|
---|
| 1085 | # if hash_encrypt is set to CRYPT, you may set a salt format.
|
---|
| 1086 | # default is "%s", but many systems will generate MD5 hashed
|
---|
| 1087 | # passwords if you use "$1$%.8s". This parameter is optional!
|
---|
| 1088 | crypt_salt_format="%s"
|
---|
| 1089 |
|
---|
| 1090 | ######################################################################
|
---|
| 1091 | #
|
---|
| 1092 | # Unix Accounts Configuration
|
---|
| 1093 | #
|
---|
| 1094 | ######################################################################
|
---|
| 1095 |
|
---|
| 1096 | # Login defs
|
---|
| 1097 | # Default Login Shell
|
---|
| 1098 | # Ex: userLoginShell="/bin/bash"
|
---|
| 1099 | userLoginShell="/bin/false"
|
---|
| 1100 |
|
---|
| 1101 | # Home directory
|
---|
| 1102 | # Ex: userHome="/home/%U"
|
---|
| 1103 | userHome="/home/%U"
|
---|
| 1104 |
|
---|
| 1105 | # Gecos
|
---|
| 1106 | userGecos="Samba User"
|
---|
| 1107 |
|
---|
| 1108 | # Default User (POSIX and Samba) GID
|
---|
| 1109 | defaultUserGid="513"
|
---|
| 1110 |
|
---|
| 1111 | # Default Computer (Samba) GID
|
---|
| 1112 | defaultComputerGid="515"
|
---|
| 1113 |
|
---|
| 1114 | # Skel dir
|
---|
| 1115 | skeletonDir="/etc/skel"
|
---|
| 1116 |
|
---|
| 1117 | # Default password validation time (time in days) Comment the next
|
---|
| 1118 | # line if you don't want password to be enable for
|
---|
| 1119 | # defaultMaxPasswordAge days (be careful to the sambaPwdMustChange
|
---|
| 1120 | # attribute's value)
|
---|
| 1121 | defaultMaxPasswordAge="45"
|
---|
| 1122 | </screen>
|
---|
| 1123 | </example>
|
---|
| 1124 |
|
---|
| 1125 | <example id="ch8ideal4">
|
---|
| 1126 | <title>Idealx smbldap-tools Control File &smbmdash; Part D</title>
|
---|
| 1127 | <screen>
|
---|
| 1128 | ######################################################################
|
---|
| 1129 | #
|
---|
| 1130 | # SAMBA Configuration
|
---|
| 1131 | #
|
---|
| 1132 | ######################################################################
|
---|
| 1133 |
|
---|
| 1134 | # The UNC path to home drives location (%U username substitution)
|
---|
| 1135 | # Ex: \\My-PDC-netbios-name\homes\%U
|
---|
| 1136 | # Just set it to a null string if you want to use the smb.conf
|
---|
| 1137 | # 'logon home' directive and/or disable roaming profiles
|
---|
| 1138 | userSmbHome=""
|
---|
| 1139 |
|
---|
| 1140 | # The UNC path to profiles locations (%U username substitution)
|
---|
| 1141 | # Ex: \\My-PDC-netbios-name\profiles\%U
|
---|
| 1142 | # Just set it to a null string if you want to use the smb.conf
|
---|
| 1143 | # 'logon path' directive and/or disable roaming profiles
|
---|
| 1144 | userProfile=""
|
---|
| 1145 |
|
---|
| 1146 | # The default Home Drive Letter mapping
|
---|
| 1147 | # (will be automatically mapped at logon time if home directory exist)
|
---|
| 1148 | # Ex: H: for H:
|
---|
| 1149 | userHomeDrive=""
|
---|
| 1150 |
|
---|
| 1151 | # The default user netlogon script name (%U username substitution)
|
---|
| 1152 | # if not used, will be automatically username.cmd
|
---|
| 1153 | # make sure script file is edited under DOS
|
---|
| 1154 | # Ex: %U.cmd
|
---|
| 1155 | # userScript="startup.cmd" # make sure script file is edited under DOS
|
---|
| 1156 | userScript=""
|
---|
| 1157 |
|
---|
| 1158 | # Domain appended to the users "mail"-attribute
|
---|
| 1159 | # when smbldap-useradd -M is used
|
---|
| 1160 | mailDomain="abmas.org"
|
---|
| 1161 |
|
---|
| 1162 | ######################################################################
|
---|
| 1163 | #
|
---|
| 1164 | # SMBLDAP-TOOLS Configuration (default are ok for a RedHat)
|
---|
| 1165 | #
|
---|
| 1166 | ######################################################################
|
---|
| 1167 | # Allows not to use smbpasswd
|
---|
| 1168 | # (if with_smbpasswd == 0 in smbldap_conf.pm) but
|
---|
| 1169 | # prefer Crypt::SmbHash library
|
---|
| 1170 | with_smbpasswd="0"
|
---|
| 1171 | smbpasswd="/usr/bin/smbpasswd"
|
---|
| 1172 | </screen>
|
---|
| 1173 | </example>
|
---|
| 1174 |
|
---|
| 1175 | <para>
|
---|
| 1176 | <indexterm><primary>TLS</primary></indexterm>
|
---|
| 1177 | Note: I chose not to take advantage of the TLS capability of this.
|
---|
| 1178 | Eventually I may go back and tweak it. Also, I chose not to take advantage
|
---|
| 1179 | of the master/slave configuration as I heard horror stories that it was
|
---|
| 1180 | unstable. My slave servers are replicas only.
|
---|
| 1181 | </para>
|
---|
| 1182 |
|
---|
| 1183 | <para>
|
---|
| 1184 | The <filename>/etc/smbldap-tools/smbldap_bind.conf</filename> file is shown here:
|
---|
| 1185 | <screen>
|
---|
| 1186 | # smbldap_bind.conf
|
---|
| 1187 | #
|
---|
| 1188 | # This file simply tells smbldap-tools how to bind to your LDAP server.
|
---|
| 1189 | # It has to be a DN with full write access to the Samba portion of
|
---|
| 1190 | # the database.
|
---|
| 1191 |
|
---|
| 1192 | ############################
|
---|
| 1193 | # Credential Configuration #
|
---|
| 1194 | ############################
|
---|
| 1195 | # Notes: you can specify two different configurations if you use a
|
---|
| 1196 | # master ldap for writing access and a slave ldap server for reading access
|
---|
| 1197 | # By default, we will use the same DN (so it will work for standard Samba
|
---|
| 1198 | # release)
|
---|
| 1199 | slaveDN="cn=Manager,dc=abmas,dc=biz"
|
---|
| 1200 | slavePw="verysecret"
|
---|
| 1201 | masterDN="cn=Manager,dc=abmas,dc=biz"
|
---|
| 1202 | masterPw="verysecret"
|
---|
| 1203 | </screen>
|
---|
| 1204 | </para>
|
---|
| 1205 |
|
---|
| 1206 | <para>
|
---|
| 1207 | The next step was to run the <command>smbldap-populate</command> command, which populates
|
---|
| 1208 | the LDAP tree with the appropriate default users, groups, and UID and GID pools.
|
---|
| 1209 | It creates a user called Administrator with UID=0 and GID=0 matching the
|
---|
| 1210 | Domain Admins group. This is fine because you can still log on as root to a Windows system,
|
---|
| 1211 | but it will break cached credentials if you need to log on as the administrator
|
---|
| 1212 | to a system that is not on the network.
|
---|
| 1213 | </para>
|
---|
| 1214 |
|
---|
| 1215 | <para>
|
---|
| 1216 | After the LDAP database has been preloaded, it is prudent to validate that the
|
---|
| 1217 | information needed is in the LDAP directory. This can be done done by restarting
|
---|
| 1218 | the LDAP server, then performing an LDAP search by executing:
|
---|
| 1219 | <screen>
|
---|
| 1220 | &rootprompt; ldapsearch -W -x -b "dc=abmas,dc=biz"\
|
---|
| 1221 | -D "cn=Manager,dc=abmas,dc=biz" \
|
---|
| 1222 | "(Objectclass=*)"
|
---|
| 1223 | Enter LDAP Password:
|
---|
| 1224 | # extended LDIF
|
---|
| 1225 | #
|
---|
| 1226 | # LDAPv3
|
---|
| 1227 | # base <dc=abmas,dc=biz> with scope sub
|
---|
| 1228 | # filter: (ObjectClass=*)
|
---|
| 1229 | # requesting: ALL
|
---|
| 1230 | #
|
---|
| 1231 |
|
---|
| 1232 | # abmas.biz
|
---|
| 1233 | dn: dc=abmas,dc=biz
|
---|
| 1234 | objectClass: dcObject
|
---|
| 1235 | objectClass: organization
|
---|
| 1236 | o: abmas
|
---|
| 1237 | dc: abmas
|
---|
| 1238 |
|
---|
| 1239 | # People, abmas.biz
|
---|
| 1240 | dn: ou=People,dc=abmas,dc=biz
|
---|
| 1241 | objectClass: organizationalUnit
|
---|
| 1242 | ou: People
|
---|
| 1243 |
|
---|
| 1244 | # Groups, abmas.biz
|
---|
| 1245 | dn: ou=Groups,dc=abmas,dc=biz
|
---|
| 1246 | objectClass: organizationalUnit
|
---|
| 1247 | ou: Groups
|
---|
| 1248 |
|
---|
| 1249 | # Idmap, abmas.biz
|
---|
| 1250 | dn: ou=Idmap,dc=abmas,dc=biz
|
---|
| 1251 | objectClass: organizationalUnit
|
---|
| 1252 | ou: Idmap
|
---|
| 1253 | ...
|
---|
| 1254 | </screen>
|
---|
| 1255 | </para>
|
---|
| 1256 |
|
---|
| 1257 | <para>
|
---|
| 1258 | <indexterm><primary>Windows</primary></indexterm>
|
---|
| 1259 | <indexterm><primary>POSIX</primary></indexterm>
|
---|
| 1260 | <indexterm><primary>smbldap-groupadd</primary></indexterm>
|
---|
| 1261 | <indexterm><primary>RID</primary></indexterm>
|
---|
| 1262 | <indexterm><primary>sambaGroupMapping</primary></indexterm>
|
---|
| 1263 | With the LDAP directory now initialized, it was time to create the Windows and POSIX
|
---|
| 1264 | (UNIX) group accounts as well as the mappings from Windows groups to UNIX groups.
|
---|
| 1265 | The easiest way to do this was to use <command>smbldap-groupadd</command> command.
|
---|
| 1266 | It creates the group with the posixGroup and sambaGroupMapping attributes, a
|
---|
| 1267 | unique GID, and an automatically determined RID. I learned the hard way not to
|
---|
| 1268 | try to do this by hand.
|
---|
| 1269 | </para>
|
---|
| 1270 |
|
---|
| 1271 | <para>
|
---|
| 1272 | <indexterm><primary>group mapping</primary></indexterm>
|
---|
| 1273 | <indexterm><primary>smbldap-groupmod</primary></indexterm>
|
---|
| 1274 | <indexterm><primary>memberUID</primary></indexterm>
|
---|
| 1275 | After I had my group mappings in place, I added users to the groups (the users
|
---|
| 1276 | don't really have to exist yet). I used the <command>smbldap-groupmod</command>
|
---|
| 1277 | command to accomplish this. It can also be done manually by adding memberUID
|
---|
| 1278 | attributes to the group entries in LDAP.
|
---|
| 1279 | </para>
|
---|
| 1280 |
|
---|
| 1281 | <para>
|
---|
| 1282 | <indexterm><primary>sambaSamAccount</primary></indexterm>
|
---|
| 1283 | <indexterm><primary>posixAccount</primary></indexterm>
|
---|
| 1284 | <indexterm><primary>smbldap-usermod</primary></indexterm>
|
---|
| 1285 | The most monumental task of all was adding the sambaSamAccount information to each
|
---|
| 1286 | already existent posixAccount entry. I did it one at a time as I moved people onto
|
---|
| 1287 | the new server, by issuing the command:
|
---|
| 1288 | <screen>
|
---|
| 1289 | &rootprompt; smbldap-usermod -a -P username
|
---|
| 1290 | </screen>
|
---|
| 1291 | <indexterm><primary>NetWare</primary></indexterm>
|
---|
| 1292 | <indexterm><primary>LDIF</primary></indexterm>
|
---|
| 1293 | <indexterm><primary>slapcat</primary></indexterm>
|
---|
| 1294 | I completed that step for every user after asking the person what his or her current
|
---|
| 1295 | NetWare password was. The wiser way to have done it would probably have been to dump the
|
---|
| 1296 | entire database to an LDIF file. This can be done by executing:
|
---|
| 1297 | <screen>
|
---|
| 1298 | &rootprompt; slapcat > somefile.ldif
|
---|
| 1299 | </screen>
|
---|
| 1300 | <indexterm><primary>Perl</primary></indexterm>
|
---|
| 1301 | <indexterm><primary>objectClass</primary></indexterm>
|
---|
| 1302 | Then update the LDIF file created by using a Perl script to parse and add the
|
---|
| 1303 | appropriate attributes and objectClasses to each entry, followed by re-importing
|
---|
| 1304 | the entire database into the LDAP directory.
|
---|
| 1305 | </para>
|
---|
| 1306 |
|
---|
| 1307 | <para>
|
---|
| 1308 | Rebuilding of the LDAP directory can be done as follows:
|
---|
| 1309 | <screen>
|
---|
| 1310 | &rootprompt; rcldap stop
|
---|
| 1311 | &rootprompt; cd /data/ldap
|
---|
| 1312 | &rootprompt; rm *bdb _* log*
|
---|
| 1313 | &rootprompt; su - ldap -c "slapadd -l somefile.ldif"
|
---|
| 1314 | &rootprompt; rcldap start
|
---|
| 1315 | </screen>
|
---|
| 1316 | This can be done at any time and for any reason, with no harm to the database.
|
---|
| 1317 | </para>
|
---|
| 1318 |
|
---|
| 1319 | <para>
|
---|
| 1320 | I first added a test user, of course. The LDIF for this test user looks like
|
---|
| 1321 | this, to give you an idea:
|
---|
| 1322 | <screen>
|
---|
| 1323 | # Entry 1: cn=Test User,ou=people,ou=corp,dc=abmas,dc=biz
|
---|
| 1324 | dn:cn=Test User,ou=people,ou=corp,dc=abmas,dc=biz
|
---|
| 1325 | cn: Test User
|
---|
| 1326 | gecos: Test User
|
---|
| 1327 | gidNumber: 513
|
---|
| 1328 | givenName: Test
|
---|
| 1329 | homeDirectory: /home/test.user
|
---|
| 1330 | homePhone: 555
|
---|
| 1331 | l: Somewhere
|
---|
| 1332 | l: ST
|
---|
| 1333 | mail: test.user
|
---|
| 1334 | o: Corp
|
---|
| 1335 | objectClass: top
|
---|
| 1336 | objectClass: inetOrgPerson
|
---|
| 1337 | objectClass: posixAccount
|
---|
| 1338 | objectClass: sambaSamAccount
|
---|
| 1339 | postalCode: 12345
|
---|
| 1340 | sn: User
|
---|
| 1341 | street: 10 Some St.
|
---|
| 1342 | uid: test.user
|
---|
| 1343 | uidNumber: 1074
|
---|
| 1344 | sambaLogonTime: 0
|
---|
| 1345 | sambaLogoffTime: 2147483647
|
---|
| 1346 | sambaKickoffTime: 2147483647
|
---|
| 1347 | sambaPwdCanChange: 0
|
---|
| 1348 | displayName: Samba User
|
---|
| 1349 | sambaSID: S-1-5-21-725326080-1709766072-2910717368-3148
|
---|
| 1350 | sambaLMPassword: 9D29C287C58448F9AAD3B435B51404EE
|
---|
| 1351 | sambaAcctFlags: [U]
|
---|
| 1352 | sambaNTPassword: D062088E99C95E37D7702287BB35E770
|
---|
| 1353 | sambaPwdLastSet: 1102537694
|
---|
| 1354 | sambaPwdMustChange: 1106425694
|
---|
| 1355 | userPassword: {SSHA}UzFZ2VxRGdwUueLnTGtsTBtnsvMO1oj8
|
---|
| 1356 | loginShell: /bin/false
|
---|
| 1357 | </screen>
|
---|
| 1358 | </para>
|
---|
| 1359 |
|
---|
| 1360 | <para>
|
---|
| 1361 | Then I went over to a spare Windows NT machine and joined it to the MEGANET2 domain.
|
---|
| 1362 | It worked, and the machine's account entry under ou=Computers looks like this:
|
---|
| 1363 | <screen>
|
---|
| 1364 | dn:uid=w2kengrspare$,ou=Computers,ou=MEGANET2,dc=abmas,dc=biz
|
---|
| 1365 | objectClass: top
|
---|
| 1366 | objectClass: inetOrgPerson
|
---|
| 1367 | objectClass: posixAccount
|
---|
| 1368 | objectClass: sambaSamAccount
|
---|
| 1369 | cn: w2kengrspare$
|
---|
| 1370 | sn: w2kengrspare$
|
---|
| 1371 | uid: w2kengrspare$
|
---|
| 1372 | uidNumber: 1104
|
---|
| 1373 | gidNumber: 515
|
---|
| 1374 | homeDirectory: /dev/null
|
---|
| 1375 | loginShell: /bin/false
|
---|
| 1376 | description: Computer
|
---|
| 1377 | gecos: Computer
|
---|
| 1378 | sambaSID: S-1-5-21-725326080-1709766072-2910717368-3208
|
---|
| 1379 | sambaPrimaryGroupSID: S-1-5-21-725326080-1709766072-2910717368-2031
|
---|
| 1380 | displayName: W2KENGRSPARE$
|
---|
| 1381 | sambaPwdCanChange: 1103149236
|
---|
| 1382 | sambaPwdMustChange: 2147483647
|
---|
| 1383 | sambaNTPassword: CA199C45CB6737035DB6D9D9F6CD1834
|
---|
| 1384 | sambaPwdLastSet: 1103149236
|
---|
| 1385 | sambaAcctFlags: [W ]
|
---|
| 1386 | </screen>
|
---|
| 1387 | </para>
|
---|
| 1388 |
|
---|
| 1389 | <para>
|
---|
| 1390 | <indexterm><primary>netlogon</primary></indexterm>
|
---|
| 1391 | So now I could log on with a test user from the machine w2kengrspare. It was all well and
|
---|
| 1392 | good, but that user was in no groups yet and so had pretty boring access. I fixed that
|
---|
| 1393 | by writing the login script! To write the login script, I used
|
---|
| 1394 | <ulink url="http://www.kixtart.org">Kixtart</ulink> because it will work
|
---|
| 1395 | with every architecture of Windows, has an active and helpful user base, and was both
|
---|
| 1396 | easier to learn and more powerful than the standard netlogon scripts I have seen.
|
---|
| 1397 | I also did not have to do a logon script per user or per group.
|
---|
| 1398 | </para>
|
---|
| 1399 |
|
---|
| 1400 | <para>
|
---|
| 1401 | <indexterm><primary>Kixtart</primary></indexterm>
|
---|
| 1402 | I downloaded Kixtart and put the following files in my netlogon share:
|
---|
| 1403 | <screen>
|
---|
| 1404 | KIX32.EXE
|
---|
| 1405 | KX32.dll
|
---|
| 1406 | KX95.dll <-- Not needed unless you are running Win9x clients.
|
---|
| 1407 | kx16.dll <-- Probably not needed unless you are running DOS clients.
|
---|
| 1408 | kxrpc.exe <-- Probably useless as it has to run on the server and can
|
---|
| 1409 | only be run on NT. It's for Windows 95 to become group-aware.
|
---|
| 1410 | We can get around the need.
|
---|
| 1411 | </screen>
|
---|
| 1412 | </para>
|
---|
| 1413 |
|
---|
| 1414 | <para>
|
---|
| 1415 | <indexterm><primary>logon.kix</primary></indexterm>
|
---|
| 1416 | I then wrote the <filename>logon.kix</filename> file that is shown in
|
---|
| 1417 | <link linkend="ch8kix"/>. I chose to keep it all in one file, but it
|
---|
| 1418 | can be split up and linked via include directives.
|
---|
| 1419 | </para>
|
---|
| 1420 |
|
---|
| 1421 | <example id="ch8kix">
|
---|
| 1422 | <title>Kixtart Control File &smbmdash; File: logon.kix</title>
|
---|
| 1423 | <screen>
|
---|
| 1424 | ; This script just calls the other scripts.
|
---|
| 1425 |
|
---|
| 1426 | ; First we want to get things done for everyone.
|
---|
| 1427 |
|
---|
| 1428 | ; Second, we do first-time login stuff.
|
---|
| 1429 |
|
---|
| 1430 | ; Third, we go through the group-oriented scripts one at a time.
|
---|
| 1431 |
|
---|
| 1432 |
|
---|
| 1433 | ; We want to check for group membership here to avoid the overhead of running
|
---|
| 1434 | ; scripts which don't apply.
|
---|
| 1435 | call "\\massive\netlogon\scripts\main.kix"
|
---|
| 1436 | call "\\massive\netlogon\scripts\setup.kix"
|
---|
| 1437 | IF INGROUP("MEGANET2\ACCT")
|
---|
| 1438 | call "scripts\acct.kix"
|
---|
| 1439 | ENDIF
|
---|
| 1440 | IF INGROUP("MEGANET2\ENGR","MEGANET2\RECEPTIONIST")
|
---|
| 1441 | call "\\massive\netlogon\scripts\engr.kix"
|
---|
| 1442 | ENDIF
|
---|
| 1443 | IF INGROUP("MEGANET2\FURN")
|
---|
| 1444 | call "\\massive\netlogon\scripts\furn.kix"
|
---|
| 1445 | ENDIF
|
---|
| 1446 | IF INGROUP("MEGANET2\TRUSS")
|
---|
| 1447 | call "\\massive\netlogon\scripts\truss.kix"
|
---|
| 1448 | ENDIF
|
---|
| 1449 | </screen>
|
---|
| 1450 | </example>
|
---|
| 1451 |
|
---|
| 1452 | <example id="ch8kix2">
|
---|
| 1453 | <title>Kixtart Control File &smbmdash; File: main.kix</title>
|
---|
| 1454 | <screen>
|
---|
| 1455 | break on
|
---|
| 1456 |
|
---|
| 1457 | ; Choose whether to hide the login window or not
|
---|
| 1458 | IF INGROUP("MEGANET2\Domain Admins")
|
---|
| 1459 | USE Z: \\massive\everything
|
---|
| 1460 | SETCONSOLE("show")
|
---|
| 1461 | ELSE
|
---|
| 1462 | ; Nobody cares about seeing the login script except admins
|
---|
| 1463 | SETCONSOLE("hide")
|
---|
| 1464 | ENDIF
|
---|
| 1465 |
|
---|
| 1466 | ; Delete all previously connected shares
|
---|
| 1467 | USE * /delete
|
---|
| 1468 |
|
---|
| 1469 | SETTITLE("Logging on @USERID to @LDOMAIN at @TIME")
|
---|
| 1470 |
|
---|
| 1471 | ; Set the time on the workstation
|
---|
| 1472 | $Timeserver = "\\massive"
|
---|
| 1473 | Settime $TimeServer
|
---|
| 1474 |
|
---|
| 1475 | ; Map the home directory
|
---|
| 1476 | USE H: @HOMESHR ; connect to user's home share
|
---|
| 1477 | IF @ERROR = 0
|
---|
| 1478 |
|
---|
| 1479 | H:
|
---|
| 1480 | CD @HOMEDIR ; change directory to user's home directory
|
---|
| 1481 | ENDIF
|
---|
| 1482 |
|
---|
| 1483 | ; Everyone gets the N drive
|
---|
| 1484 | USE N: \\massive\network
|
---|
| 1485 | </screen>
|
---|
| 1486 | </example>
|
---|
| 1487 |
|
---|
| 1488 | <example id="ch8kix3">
|
---|
| 1489 | <title>Kixtart Control File &smbmdash; File: setup.kix, Part A</title>
|
---|
| 1490 | <screen>
|
---|
| 1491 | ; My setup.kix is where all of the redirection stuff happens. Note that with
|
---|
| 1492 | ; the use of registry keys, this only happens the first time they log in ,or if
|
---|
| 1493 | ; I delete the pertinent registry keys which triggers it to happen again:
|
---|
| 1494 |
|
---|
| 1495 | ; Check to see if we have written the abmas sub-key before
|
---|
| 1496 | $RETURNCODE = EXISTKEY("HKEY_CURRENT_USER\abmas")
|
---|
| 1497 | IF NOT $RETURNCODE = 0
|
---|
| 1498 | ; Add key for abmas-specific things on the first login
|
---|
| 1499 | ADDKEY("HKEY_CURRENT_USER\abmas")
|
---|
| 1500 | ; The following key gets deleted at the end of the first login
|
---|
| 1501 | ADDKEY("HKEY_CURRENT_USER\abmas\FIRST_LOGIN")
|
---|
| 1502 | ENDIF
|
---|
| 1503 |
|
---|
| 1504 | ; People with laptops need My Documents to be in their profile. People with
|
---|
| 1505 | ; desktops can have My Documents redirected to their home directory to avoid
|
---|
| 1506 | ; long delays with logging out and out-of-sync files.
|
---|
| 1507 |
|
---|
| 1508 | ; Check to see if this is the first login -- doesn't make sense to do this
|
---|
| 1509 | ; at the very first login
|
---|
| 1510 |
|
---|
| 1511 | $RETURNCODE = EXISTKEY("HKEY_CURRENT_USER\abmas\FIRST_LOGIN")
|
---|
| 1512 | IF NOT $RETURNCODE = 0
|
---|
| 1513 |
|
---|
| 1514 | ; We don't want to do this stuff for people with laptops or people in the FURN
|
---|
| 1515 | ; group. (They store their profiles in a different server)
|
---|
| 1516 |
|
---|
| 1517 | IF NOT INGROUP("MASSIVE\Laptop","MASSIVE\FURN")
|
---|
| 1518 | $RETURNCODE=EXISTKEY("HKEY_CURRENT_USER\abmas\profile_copied")
|
---|
| 1519 |
|
---|
| 1520 | ; A crude way to tell what OS our profile is for and copy the "My Documents"
|
---|
| 1521 | ; to the redirected folder on the server. It works because the profiles
|
---|
| 1522 | ; are stored as \\server\profiles\user\architecture
|
---|
| 1523 | IF NOT $RETURNCODE = 0
|
---|
| 1524 | IF EXIST("\\massive\profiles\@userID\WinXP")
|
---|
| 1525 | copy "\\massive\profiles\@userID\WinXP\My Documents\*"
|
---|
| 1526 | "\\massive\@userID\"
|
---|
| 1527 | ENDIF
|
---|
| 1528 | IF EXIST("\\massive\profiles\@userID\Win2K")
|
---|
| 1529 | copy "\\massive\profiles\@userID\Win2K\My Documents\*"
|
---|
| 1530 | "\\massive\@userID\"
|
---|
| 1531 | ENDIF
|
---|
| 1532 | IF EXIST("\\massive\profiles\@userID\WinNT")
|
---|
| 1533 | copy "\\massive\profiles\@userID\WinNT\My Documents\*"
|
---|
| 1534 | "\\massive\@userID\"
|
---|
| 1535 | ENDIF
|
---|
| 1536 | </screen>
|
---|
| 1537 | </example>
|
---|
| 1538 |
|
---|
| 1539 | <example id="ch8kix3b">
|
---|
| 1540 | <title>Kixtart Control File &smbmdash; File: setup.kix, Part B</title>
|
---|
| 1541 | <screen>
|
---|
| 1542 | ; Now we will write the registry values to redirect the locations of "My
|
---|
| 1543 | Documents"
|
---|
| 1544 | ; and other folders.
|
---|
| 1545 | ADDKEY("HKEY_CURRENT_USER\abmas\profile_copied")
|
---|
| 1546 | WRITEVALUE("HKEY_CURRENT_USER\Software\Microsoft\
|
---|
| 1547 | Windows\CurrentVersion\Explorer\User
|
---|
| 1548 | Shell Folders", "Personal","\\massive\@userID","REG_SZ")
|
---|
| 1549 | WRITEVALUE("HKEY_CURRENT_USER\Software\Microsoft\
|
---|
| 1550 | Windows\CurrentVersion\Explorer\User
|
---|
| 1551 | Shell Folders", "My Pictures", "\\massive\@userID\My Pictures", "REG_SZ")
|
---|
| 1552 | IF @PRODUCTTYPE="Windows 2000 Professional" or @PRODUCTTYPE="Windows XP
|
---|
| 1553 | Professional"
|
---|
| 1554 | WRITEVALUE("HKEY_CURRENT_USER\Software\Microsoft\
|
---|
| 1555 | Windows\CurrentVersion\Explorer\User
|
---|
| 1556 | Shell Folders", "My Videos", "\\massive\@userID\My Videos", "REG_SZ")
|
---|
| 1557 | WRITEVALUE("HKEY_CURRENT_USER\Software\Microsoft\
|
---|
| 1558 | Windows\CurrentVersion\Explorer\User
|
---|
| 1559 | Shell Folders", "My Music", "\\massive\@userID\My Music", "REG_SZ")
|
---|
| 1560 | WRITEVALUE("HKEY_CURRENT_USER\Software\Microsoft\
|
---|
| 1561 | Windows\CurrentVersion\Explorer\User
|
---|
| 1562 | Shell Folders", "My eBooks", "\\massive\@userID\My eBooks", "REG_SZ")
|
---|
| 1563 | ENDIF
|
---|
| 1564 | ENDIF
|
---|
| 1565 | ENDIF
|
---|
| 1566 |
|
---|
| 1567 | ; Now we will delete the FIRST_LOGIN sub-key that we made before.
|
---|
| 1568 | ; Note - to run this script again you will want to delete the HKCU\abmas
|
---|
| 1569 | ; sub-key, log out, and log back in.
|
---|
| 1570 | $RETURNVALUE = EXISTKEY("HKEY_CURRENT_USER\abmas\FIRST_LOGIN")
|
---|
| 1571 | IF $RETURNVALUE = 0
|
---|
| 1572 | DELKEY("HKEY_CURRENT_USER\abmas\FIRST_LOGIN")
|
---|
| 1573 | ENDIF
|
---|
| 1574 | </screen>
|
---|
| 1575 | </example>
|
---|
| 1576 |
|
---|
| 1577 | <example id="ch8kix4">
|
---|
| 1578 | <title>Kixtart Control File &smbmdash; File: acct.kix</title>
|
---|
| 1579 | <screen>
|
---|
| 1580 | ; And here is one group-oriented script to show what can be
|
---|
| 1581 | ; done that way: acct.kix:
|
---|
| 1582 |
|
---|
| 1583 | IF INGROUP("MASSIVE\Acct_Admin","MASSIVE\HR")
|
---|
| 1584 | USE I: \\MEGANET2\HR_PR
|
---|
| 1585 | ENDIF
|
---|
| 1586 |
|
---|
| 1587 | ; Set up printer
|
---|
| 1588 | $RETURNVALUE = existkey("HKEY_CURRENT_USER\Printers\,,massive,acct_hp8500")
|
---|
| 1589 | IF NOT $RETURNVALUE = 0
|
---|
| 1590 | ADDPRINTERCONNECTION("\\massive\acct_hp8500")
|
---|
| 1591 | SETDEFAULTPRINTER("\\massive\acct_hp8500")
|
---|
| 1592 | ENDIF
|
---|
| 1593 | ; Set up drive mappings
|
---|
| 1594 | USE M: \\massive\ACCT
|
---|
| 1595 | IF INGROUP("MEGANET2\ABRA")
|
---|
| 1596 | USE T: \\trussrv\abra
|
---|
| 1597 | ENDIF
|
---|
| 1598 | </screen>
|
---|
| 1599 | </example>
|
---|
| 1600 |
|
---|
| 1601 | <para>
|
---|
| 1602 | As you can see in the script, I redirected the My Documents to the user's home
|
---|
| 1603 | share if he or she were not in the Laptop group. I also added printers on a
|
---|
| 1604 | group-by-group basis, and if applicable I set the group printer. For this to
|
---|
| 1605 | be effective, the print drivers must be installed on the Samba server in the
|
---|
| 1606 | <filename>[print$]</filename> share. Ample documentation exists about how to
|
---|
| 1607 | do that, so it is not covered here.
|
---|
| 1608 | </para>
|
---|
| 1609 |
|
---|
| 1610 | <para>
|
---|
| 1611 | I call this script via the logon.bat script in the [netlogon] directory:
|
---|
| 1612 | <screen>
|
---|
| 1613 | \\corpsrv\netlogon\kix32 \\corpsrv\netlogon\logon.kix /f
|
---|
| 1614 | </screen>
|
---|
| 1615 | I only had to fully qualify the paths for Windows 9x, as Windows NT and
|
---|
| 1616 | greater automatically add [NETLOGON] to the path.
|
---|
| 1617 | </para>
|
---|
| 1618 |
|
---|
| 1619 | <para>
|
---|
| 1620 | Also of note for Win9x is that the drive mappings and printer setup will not
|
---|
| 1621 | work because they rely on RPC. You merely have to put the appropriate settings
|
---|
| 1622 | into the <filename>c:\autoexec.bat</filename> file or map the drives manually.
|
---|
| 1623 | One option is to check the OS as part of the Kixtart script, and if it
|
---|
| 1624 | is Win9x and is the first login, copy a premade
|
---|
| 1625 | <filename>autoexec.bat</filename> to the <filename>C:</filename> drive. I
|
---|
| 1626 | have only three such machines, and one is going away in the very near future,
|
---|
| 1627 | so it was easier to do it by hand.
|
---|
| 1628 | </para>
|
---|
| 1629 |
|
---|
| 1630 | <para>
|
---|
| 1631 | <indexterm><primary>upgrade</primary></indexterm>
|
---|
| 1632 | At this point I was able to add the users. This is the part that really falls
|
---|
| 1633 | into upgrade. I moved the users over one group at a time, starting with the
|
---|
| 1634 | people who used the least amount of resources on the network. With each group
|
---|
| 1635 | that I moved, I first logged on as a standard user in that group and took
|
---|
| 1636 | careful note of the environment, mainly the printers he or she used, the PATH,
|
---|
| 1637 | and what network resources he or she had access to (most importantly, which ones
|
---|
| 1638 | the user actually needed access to).
|
---|
| 1639 | </para>
|
---|
| 1640 |
|
---|
| 1641 | <para>
|
---|
| 1642 | I then added the user's SambaSamAccount information as mentioned earlier,
|
---|
| 1643 | and join the computer to the domain. The very first thing I had to do was to
|
---|
| 1644 | copy the user's profile to the new server. This was very important, and I really
|
---|
| 1645 | struggled with the most effective way to do it. Here is the method that worked
|
---|
| 1646 | for every one of my users on Windows NT, 2000, and XP:
|
---|
| 1647 | </para>
|
---|
| 1648 |
|
---|
| 1649 | <procedure>
|
---|
| 1650 | <step><para>
|
---|
| 1651 | Log in as the user on the domain. This creates the local copy
|
---|
| 1652 | of the user's profile and copies it to the server as he or she logs out.
|
---|
| 1653 | </para></step>
|
---|
| 1654 |
|
---|
| 1655 | <step><para>
|
---|
| 1656 | Reboot the computer and log in as the local machine administrator.
|
---|
| 1657 | </para></step>
|
---|
| 1658 |
|
---|
| 1659 | <step><para>
|
---|
| 1660 | Right-click My Computer, click Properties, and navigate to the
|
---|
| 1661 | user profiles tab (varies per version of Windows).
|
---|
| 1662 | </para></step>
|
---|
| 1663 |
|
---|
| 1664 | <step><para>
|
---|
| 1665 | Select the user's local profile <constant>(COMPUTERNAME\username)</constant>,
|
---|
| 1666 | and click the <command>Copy To</command> button.
|
---|
| 1667 | </para></step>
|
---|
| 1668 |
|
---|
| 1669 | <step><para>
|
---|
| 1670 | In the next dialog, copy it directly to the profiles share on the
|
---|
| 1671 | Samba server (in my case \\PDCname\profiles\user\<architecture>.
|
---|
| 1672 | You will have had to make a connection to the share as that
|
---|
| 1673 | user (e.g., Windows Explorer type \\PDCname\profiles\username).
|
---|
| 1674 | </para></step>
|
---|
| 1675 |
|
---|
| 1676 | <step><para>
|
---|
| 1677 | When the copy is complete (it can take a while) log out, and log back in
|
---|
| 1678 | as the user. All of his or her settings and all contents of My Documents,
|
---|
| 1679 | Favorites, and the registry should have been copied successfully.
|
---|
| 1680 | </para></step>
|
---|
| 1681 |
|
---|
| 1682 | <step><para>
|
---|
| 1683 | If it doesn't look right (the dead giveaway is the desktop background),
|
---|
| 1684 | shut down the computer without logging out (power cycle) and try logging
|
---|
| 1685 | in as the user again. If it still doesn't work, repeat the steps above.
|
---|
| 1686 | I only had to ever repeat it once.
|
---|
| 1687 | </para></step>
|
---|
| 1688 |
|
---|
| 1689 | </procedure>
|
---|
| 1690 |
|
---|
| 1691 | <para>
|
---|
| 1692 | Words to the Wise:
|
---|
| 1693 | </para>
|
---|
| 1694 |
|
---|
| 1695 | <itemizedlist>
|
---|
| 1696 | <listitem><para>
|
---|
| 1697 | If the user was anything other than a standard user on his or her system
|
---|
| 1698 | before, you will save yourself some headaches by giving him or her identical
|
---|
| 1699 | permissions (on the local machine) as his or her domain account <emphasis>before</emphasis>
|
---|
| 1700 | copying the profile over. Do this through the User Administrator
|
---|
| 1701 | in the Control Panel, after joining the computer to the domain and
|
---|
| 1702 | before logging on as that user for the first time. Otherwise the user will
|
---|
| 1703 | have trouble with permissions on his or her registry keys.
|
---|
| 1704 | </para></listitem>
|
---|
| 1705 |
|
---|
| 1706 | <listitem><para>
|
---|
| 1707 | If any application was installed for the user only, rather than for
|
---|
| 1708 | the entire system, it will probably not work without being reinstalled.
|
---|
| 1709 | </para></listitem>
|
---|
| 1710 | </itemizedlist>
|
---|
| 1711 |
|
---|
| 1712 | <para>
|
---|
| 1713 | After all these steps are accomplished, only cleanup details are left. Make sure user's
|
---|
| 1714 | shortcuts and Network Places point to the appropriate place on the new server, check
|
---|
| 1715 | the important applications to be sure they work as expected and troubleshoot any problems
|
---|
| 1716 | that might arise, and check to be sure the user's printers are present and working. By the
|
---|
| 1717 | way, if there are any network printers installed as system printers (the Novell way),
|
---|
| 1718 | you will need to log in as a local administrator and delete them.
|
---|
| 1719 | </para>
|
---|
| 1720 |
|
---|
| 1721 | <para>
|
---|
| 1722 | For my non-laptop systems, I would then log in and out a couple times as the user
|
---|
| 1723 | to be sure that his or her registry settings were modified, and then I was finished.
|
---|
| 1724 | </para>
|
---|
| 1725 |
|
---|
| 1726 | <para>
|
---|
| 1727 | Some compatibility issues that cropped up included the following:
|
---|
| 1728 | </para>
|
---|
| 1729 |
|
---|
| 1730 | <para>
|
---|
| 1731 | Blackberry client: It did not like having its registry settings moved around
|
---|
| 1732 | and so had to be reinstalled. Also, it needed write permissions to a portion of
|
---|
| 1733 | the hard drive, and I had to give it those manually on the one system where
|
---|
| 1734 | this was an issue.
|
---|
| 1735 | </para>
|
---|
| 1736 |
|
---|
| 1737 | <para>
|
---|
| 1738 | CAMedia: Digital camera software for Canon cameras caused all kinds of trouble
|
---|
| 1739 | with the registry. I had to use the Run as service to open the registry of
|
---|
| 1740 | the local user while logged in as the domain user, and give the domain user
|
---|
| 1741 | the appropriate permissions to some registry keys, then export that portion
|
---|
| 1742 | of the registry to a file. Then, as the domain user, I had to import that file
|
---|
| 1743 | into the registry.
|
---|
| 1744 | </para>
|
---|
| 1745 |
|
---|
| 1746 | <para>
|
---|
| 1747 | Crystal Reports version 7: More registry problems that were solved by recopying
|
---|
| 1748 | the user's profile.
|
---|
| 1749 | </para>
|
---|
| 1750 |
|
---|
| 1751 | <para>
|
---|
| 1752 | Printing from legacy applications: I found out that Novell sends its jobs to
|
---|
| 1753 | the printer in a raw format. CUPS sends them in PostScript by default. I had
|
---|
| 1754 | to make a second printer definition for one printer and tell CUPS specifically
|
---|
| 1755 | to send raw data to the printer, then assign this printer to the LPT port with
|
---|
| 1756 | Kixtart's version of the net use command.
|
---|
| 1757 | </para>
|
---|
| 1758 |
|
---|
| 1759 | <para>
|
---|
| 1760 | These were all eventually solved by elbow grease, queries to the Samba mailing
|
---|
| 1761 | list and others, and diligence. The complete migration took about 5 weeks.
|
---|
| 1762 | My userbase is relatively small but includes multiple versions of Windows,
|
---|
| 1763 | multiple Linux member servers, a mechanized saw, a pen plotter, and legacy
|
---|
| 1764 | applications written in Qbasic and R:Base, just to name a few. I actually
|
---|
| 1765 | ended up making some of these applications work better (or work again, as
|
---|
| 1766 | some of them had stopped functioning on the old server) because as part of
|
---|
| 1767 | the process I had to find out how things were supposed to work.
|
---|
| 1768 | </para>
|
---|
| 1769 |
|
---|
| 1770 | <para>
|
---|
| 1771 | The one thing I have not been able to get working is a very old database that
|
---|
| 1772 | we had around for reference purposes; it uses Novell's Btrieve engine.
|
---|
| 1773 | </para>
|
---|
| 1774 |
|
---|
| 1775 | <para>
|
---|
| 1776 | As the resources compare, I went from 95 percent disk usage to just around 10 percent.
|
---|
| 1777 | I went from a very high load on the server to an average load of between one
|
---|
| 1778 | and two runnable processes on the server. I have improved the security and
|
---|
| 1779 | robustness of the system. I have also implemented
|
---|
| 1780 | <ulink url="http://www.clamav.net">ClamAV</ulink> antivirus software,
|
---|
| 1781 | which scans the entire Samba server for viruses every 2 hours and
|
---|
| 1782 | quarantines them. I have found it much less problematic than our ancient
|
---|
| 1783 | version of Norton Antivirus Corporate Edition, and much more up-to-date.
|
---|
| 1784 | </para>
|
---|
| 1785 |
|
---|
| 1786 | <para>
|
---|
| 1787 | In short, my users are much happier now that the new server is running, and that
|
---|
| 1788 | is what is important to me.
|
---|
| 1789 | </para>
|
---|
| 1790 |
|
---|
| 1791 | </sect3>
|
---|
| 1792 |
|
---|
| 1793 | </sect2>
|
---|
| 1794 |
|
---|
| 1795 | </sect1>
|
---|
| 1796 |
|
---|
| 1797 | </chapter>
|
---|
| 1798 |
|
---|