When setting up user authentication for a small isolated LAN (10-20 machines), we need to balance simplicity with security. The key requirements are:
- Centralized user account management
- Support for Debian-based systems (Kubuntu 12.04)
- Minimal maintenance overhead
- Secure enough for internal use
NIS (Network Information Service) remains a viable option for small LANs due to its simplicity. Here's a basic setup on Debian:
# On the NIS server:
sudo apt-get install nis
sudo dpkg-reconfigure nis
# Set NIS domain name and master server
# On clients:
sudo apt-get install nis
sudo auth-client-config -t nis -a lacreates=nis
Pros of NIS:
- Extremely simple to configure
- Lightweight
- Works well with legacy systems
For better security and scalability, LDAP is the modern choice. Here's a minimal OpenLDAP setup:
# On the LDAP server:
sudo apt-get install slapd ldap-utils
sudo dpkg-reconfigure slapd
# Follow prompts to set up base DN and admin password
# Create basic LDIF file (users.ldif):
dn: ou=People,dc=example,dc=com
objectClass: organizationalUnit
ou: People
dn: uid=user1,ou=People,dc=example,dc=com
objectClass: inetOrgPerson
sn: Smith
givenName: John
uid: user1
Configure PAM and NSS to use LDAP:
sudo apt-get install libnss-ldap libpam-ldap ldap-utils
sudo auth-client-config -t nss -p lac_ldap
Edit /etc/nsswitch.conf to include ldap for passwd, group, and shadow.
For LDAP, consider adding TLS:
sudo apt-get install gnutls-bin
sudo certtool --generate-privkey --bits 2048 --outfile /etc/ssl/private/ldap_slapd_key.pem
sudo certtool --generate-self-signed --load-privkey /etc/ssl/private/ldap_slapd_key.pem --outfile /etc/ssl/certs/ldap_slapd_cert.pem
Feature | NIS | LDAP |
---|---|---|
Setup Time | 15 minutes | 1-2 hours |
Security | Basic | Enterprise-grade |
Maintenance | Simple | Moderate |
Scalability | Up to 50 users | Thousands |
If starting with NIS, here's how to migrate to LDAP later:
# Convert NIS maps to LDIF:
ypcat passwd | awk -F: '{print "dn: uid="$1",ou=People,dc=example,dc=com" "\n" "objectClass: inetOrgPerson" "\n" "sn: "$5 "\n" "uid: "$1 "\n"}' > nis_to_ldap.ldif
For small LANs where security isn't critical and you need quick setup, NIS works fine. For more robust solutions or if you anticipate growth, invest time in LDAP from the start.
When setting up a small isolated LAN (typically 10-50 machines), administrators face the challenge of implementing centralized authentication without excessive overhead. While pushing /etc/passwd via configuration management tools like Puppet works technically, it's not the most elegant solution for environments where users occasionally need to access multiple machines.
Network Information Service (NIS) remains relevant for simple deployments:
# Install NIS server on Debian/Ubuntu
sudo apt-get install nis
# Configure NIS master server
sudo dpkg-reconfigure nis
# Typical /etc/yp.conf on clients:
domain example.com server nisserver.example.com
Advantages:
- Extremely simple to set up
- Minimal configuration
- Lightweight protocol
Security concerns can be mitigated by:
- Restricting access via /var/yp/securenets
- Using NIS over SSH tunnels
For more robust solutions, LDAP (Lightweight Directory Access Protocol) offers better scalability:
# Install OpenLDAP on Debian
sudo apt-get install slapd ldap-utils
# Basic configuration
sudo dpkg-reconfigure slapd
# Example /etc/ldap.conf on clients:
base dc=example,dc=com
uri ldap://ldap.example.com
Implementation tips:
- Start with simple schema (inetOrgPerson)
- Use ldapscripts for easy user management
- Consider phpLDAPadmin for web management
For teams new to both technologies, consider this migration path:
1. Implement NIS for immediate needs
2. Set up test LDAP environment
3. Gradually migrate services
4. Deploy libnss-ldap for dual support
5. Phase out NIS completely
Even in isolated networks:
- Always use TLS for LDAP (even self-signed certs)
- Implement basic firewall rules
- Consider simple Kerberos integration if needed
For a 25-machine Kubuntu environment:
# Sample Puppet manifest snippet for LDAP integration:
class ldap_client {
package { ['libnss-ldap', 'libpam-ldap']:
ensure => installed,
}
file { '/etc/ldap.conf':
content => template('ldap/ldap.conf.erb'),
notify => Service['nscd'],
}
}