JA290 - Linux Server - Toimialue

Näkymät
Syotec Wiki
Loikkaa: valikkoon, hakuun
Huom! Tämä ohje on tietyiltä osin vanhentunut, eikä vastaa kaikilta osin sitä, mitä tunneilla käydään läpi!
Syy tähän on yllätys, yllätys aikataululliset, sillä Ubuntusta on julkaistu uusi versio, jossa tätä asiaa koskevat muutokset ovat olleet merkittäviä!
Lisäksi lähiopetuspäivillä käydään läpi OpenSUSEa, jossa Windows-toimialueisiin liittyvät asiat ovat taas erilaiset kuin Ubuntussa!

Sisällysluettelo

Linux toimialueissa

Linuxin rooli toimialueissa on kiistämättä merkittävä. Lähes jokaisessa organisaatiossa Linux näyttelee tiettyä roolia, mutta tuttuun tapaan ylläpidon helppouden ja huolettomuuden vuoksi ei pidä turhaa meteliä itsestään. Tyypillisiä Linuxin käyttökohteita ovat nimi-, dhcp-, sähköposti- ja WWW-palvelut sekä tiedostojen jakamisiin littyvät palvelut. Edellisissä moduleissa muita olemme jo käsitelleetkin, mutta tiedostojen jakaminen on vielä avaamatta. Toisekseen luomamme palvelut ovat yleisesti käyttäneet Linuxin tilejä, joten integroitavuus yleisesti käytettyihin käyttäjähallintapalveluihin, kuten esimerkiksi AD, on jäännyt tähän moduliin.

Perinteinen toimialue

Yllä olevassa kuvassa on esitelty tyypillinen toimialue, jossa keskeisessä roolissa ovat Windows-järjestelmällä varustetut työasemat ja palvelimet. Toimialuetta hallitsee Domain controller-palvelin, joka tunnetaan "Windows-ammattilaisten" piirissä nimellä DC. DC:n keskeisin rooli on pitää kirjaa käyttäjistä ja koneista. Kun DC:lle on määritelty konetili, kyseinen kone voi käyttää toimialueen palveluita. Vastaavasti, kun DC:lle on määritelty käyttäjätili, käyttäjä voi kirjautua toimialueella ja käyttää sen palveluita. Käyttäjän ottaessa yhteys toimialueen palveluun, niin yhteydenottohetkellä palveluntarjoaja ottaa yhteyden DC:lle ja varmistaa, että kyseisellä käyttäjällä on tarvittavat oikeudet. Alla olevassa kuvassa on hahmoteltu tyypillistä autenkintointitilannetta Windows-ympäristössä. Sama malli on käytössä monessa muussakin vastaavassa järjestelmssä.


Autentikointi toimialueessa


DC-palvelin on siis paikka, josta käyttäjät ja palveluntarjoajat saavat käyttöönsä erilaisia tietoja. Nämä tiedot ovat saatavissa verkon yli, mutta samaa logiikkaa käytetään lähes aina paikallisissakin koneissa. Se, että puhutaanko rekistereistä tai tiedostoista, ei ole merkitystä. Käyttäjätiedot ovat aina jossain, johon käyttäjän antamaa syötettä verrataan.

Linuxissa käyttäjätietojan hallinta on suhteellisen helppoa. Käyttäjän tullessa sisäänkirjautumiseen hän antaa tunnuksen ja salasanan. Tunnusta verrataan käyttäjätietoihin tarkoituksena selvittää, että onko käyttäjätiliä olemassa. Jos on, jatketaan salasanan vertailuun. Jos annettu salasana oikea salasana oikealla protokollalla hajautettuna täsmää käyttäjän tiedoissa olevaan, todetaan käyttäjä oikeaksi ja päästetään se eteenpäin järjestelmään. Sen jälkeen tutkitaan käyttäjätiedoista esimerkiksi kotikansio ja ohjataan käyttäjä sinne. Yksinkertainen logiikka siis. Tarvitaan vain käyttäjän syöte, jota verrataan järjestelmässä olevaan.

Käyttäjähallinta Linuxissa

Linux käyttää oletuksena käyttäjätietojen hallintaan kahta tiedostoa, joiden roolit ovat seuraavat

FILES
       /etc/passwd
           User account information. 

       /etc/shadow
           Secure user account information.

       /etc/group
           Defines the groups to which users belong.

Kansiossa etc sijaitsee tiedosto nimeltään passwd. Tämä tiedosto pitää sisällään esimerkiksi käyttäjien tunnukset, uid:t ja gid:t. Oleellisin ero Linux- ja Windows-maailmojen välillä on se, että Linuxissa lähes jokaiselle palvelulle tehdään oma käyttäjä ja sille oma ryhmä. Tämä käyttäjä käynnistää tietyn palvelun tai tietty palvelu varataan tietylle käyttäjälle. Tällä varmistetaan se, että jos palvelussa on haavoittuvuus ja hakkeri saa palvelun haltuunsa, jäävät tuhot pieniksi prosessin käynnistäneen käyttäjän oikeuksien vuoksi. Alla esimerkki kyseisestä tiedostosta.

ville@ville-laptop:~$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
.....
www-data:x:33:33:www-data:/var/www:/bin/sh
.....
gdm:x:106:114:Gnome Display Manager:/var/lib/gdm:/bin/false
pulse:x:107:116:PulseAudio daemon,,,:/var/run/pulse:/bin/false
messagebus:x:108:119::/var/run/dbus:/bin/false
avahi:x:109:120:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/bin/false
polkituser:x:110:122:PolicyKit,,,:/var/run/PolicyKit:/bin/false
haldaemon:x:111:123:Hardware abstraction layer,,,:/var/run/hald:/bin/false
ville:x:1000:1000:Ville Heikkiniemi,,,:/home/ville:/bin/bash
mysql:x:112:124:MySQL Server,,,:/var/lib/mysql:/bin/false
sshd:x:113:65534::/var/run/sshd:/usr/sbin/nologin
dhcpd:x:114:125::/nonexistent:/bin/false
bind:x:115:126::/var/cache/bind:/bin/false
ntp:x:116:127::/home/ntp:/bin/false
ftp:x:118:65534::/home/ftp:/bin/false
smbguest:x:1002:1002:Samba guest account:/dev/null:/dev/null
snmp:x:117:65534::/var/lib/snmp:/bin/false
openldap:x:119:130:OpenLDAP Server Account,,,:/var/lib/ldap:/bin/false
radvd:x:120:65534::/var/run/radvd:/bin/false
dovecot:x:121:131:Dovecot mail server,,,:/usr/lib/dovecot:/bin/false
postfix:x:122:132::/var/spool/postfix:/bin/false
freerad:x:123:134::/etc/freeradius:/bin/false
testi:x:1003:1004:testi,,,,:/home/testi:/bin/bash
teppo:x:1004:1005:teppo,,,,:/home/teppo:/bin/bash
dnsmasq:x:124:65534:dnsmasq,,,:/var/lib/misc:/bin/false

Tiedosto shadow sisältää käyttäjien salasanat ja muita niihin liittyviä tietoja. Salasanat on kryptattu tietyllä hajautusfunktiolla, joista yleisesti käytetty on MD5. Alla esimerkki tiedostosta. Kannattaa huomata, että kyseistä tiedostoa pääsee lukemaan vain pääkäyttäjä.

ville@ville-laptop:~$ cat /etc/shadow
cat: /etc/shadow: Permission denied
ville@ville-laptop:~$ sudo cat /etc/shadow
[sudo] password for ville: 
root:!:14095:0:99999:7:::
daemon:*:13991:0:99999:7:::
.....
www-data:*:13991:0:99999:7:::
.....
gdm:*:13991:0:99999:7:::
pulse:*:13991:0:99999:7:::
messagebus:*:13991:0:99999:7:::
avahi:*:13991:0:99999:7:::
polkituser:*:13991:0:99999:7:::
haldaemon:*:13991:0:99999:7:::
ville:$1$WQE1HRvZ$fNJtyQ4EyzST4GjzFCwNW/:14095:0:99999:7:::
mysql:!:14106:0:99999:7:::
sshd:*:14116:0:99999:7:::
dhcpd:*:14117:0:99999:7:::
bind:*:14117:0:99999:7:::
ntp:*:14117:0:99999:7:::
ftp:*:14120:0:99999:7:::
smbguest:!:14120:0:99999:7:::
snmp:*:14136:0:99999:7:::
openldap:!:14161:0:99999:7:::
radvd:*:14178:0:99999:7:::
dovecot:*:14192:0:99999:7:::
postfix:*:14193:0:99999:7:::
freerad:*:14209:0:99999:7:::
testi:$1$fywNg$cy00mi06tuJlg5Ky/s2AN/:14231:0:99999:7:::
teppo:$1$7NXxr$.b6BE5qriB6FPxWz6nj6E.:14231:0:99999:7:::
dnsmasq:*:14251:0:99999:7:::

Käyttäjätietoja voidaan hallita monellakin tapaa. Yksi vaihtoehto on komentorivi ja sen tarjoamat komennot. Alla lisätty uusi käyttäjä ja annettu sille salasana.

root@ville-laptop:~# useradd -m -s /bin/bash matti
root@ville-laptop:~# cat /etc/passwd
.....
matti:x:1005:1006::/home/matti:/bin/bash
root@ville-laptop:~# cat /etc/shadow
.....
matti:!:14280:0:99999:7:::
root@ville-laptop:~# passwd matti
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully
root@ville-laptop:~# cat /etc/shadow
.....
matti:$1$dVeRKaui$CNAt1fE6rBHC5iM1IzSJ5/:14280:0:99999:7:::

Yllä olevien toimenpiteiden käyttäjä matti pääsee kirjautumaan järjestelmään salasanalla Sala1234.

NSS

NSS-palvelulla järjestelmä saa käyttöönsä tilitiedot. Oletuksena ohjataan edellä mainittuihin kahteen tiedostoon. Tämän palvelun tarkoituksena on muun muassa tarjota muidenkin kuin paikallisissa tiedostoissa olevien käyttäjien yhdistäminen järjestelmään. Siis, muissa palveluissa olevia käyttäjien kohdellaan kuin ne olisivat koneen tilejä! Tämä palvelun toimivuus voidaan todeta esimerkiksi seuraavalla tavalla komentoriviltä:

ville@ville-laptop:~$ getent passwd
root:x:0:0:root:/root:/bin/bash
.....
teppo:x:1004:1005:teppo,,,,:/home/teppo:/bin/bash
dnsmasq:x:124:65534:dnsmasq,,,:/var/lib/misc:/bin/false
matti:x:1005:1006::/home/matti:/bin/bash
ville@ville-laptop:~$ getent group
root:x:0:
.....
teemu:x:1001:
testi:x:1004:
teppo:x:1005:
matti:x:1006:
ville@ville-laptop:~$ getent shadow
ville@ville-laptop:~$ sudo getent shadow
[sudo] password for ville: 
root:!:14095:0:99999:7:::
.....
testi:$1$fywNg$cy00mi06tuJlg5Ky/s2AN/:14231:0:99999:7:::
teppo:$1$7NXxr$.b6BE5qriB6FPxWz6nj6E.:14231:0:99999:7:::
dnsmasq:*:14251:0:99999:7:::
matti:$1$dVeRKaui$CNAt1fE6rBHC5iM1IzSJ5/:14280:0:99999:7:::

Tätä palvelua muutetaan muokkaamalla tiedostoa nsswitch.conf kansiossa etc.

gedit /etc/nsswitch.conf

# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file. 

passwd:         compat
group:          compat
shadow:         compat 

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4
networks:       files
.....

PAM

PAM on oleellinen osa käyttäjän kirjautumista. NSS-palvelulla kerrottiin järjestelmälle käyttäjätiedot. PAM toimii rajapintana sovelluksen ja käyttäjätietojen välillä. Tälläisia sovelluksia voivat olla esimerkiksi ssh, ftp ja gdm. GDM, eli graafinen käyttöliittymä, on autentikoinnin kannalta kuin mikä tahansa muu sovellus!

PAM-palvelua hallinnoidaan yleisesti kansiossa /etc/pam.d, jossa on aina vähintään neljä oleellista tiedostoa. Näistä tiedoista esimerkit alla:

ville@ville-laptop:/etc/pam.d$ cat common-account 
#
# /etc/pam.d/common-account - authorization settings common to all services
#
# This file is included from other service-specific PAM config files,
# and should contain a list of the authorization modules that define
# the central access policy for use on the system.  The default is to
# only deny service to users whose accounts are expired in /etc/shadow.

ville@ville-laptop:/etc/pam.d$ cat common-auth 
#
# /etc/pam.d/common-auth - authentication settings common to all services
#
# This file is included from other service-specific PAM config files,
# and should contain a list of the authentication modules that define
# the central authentication scheme for use on the system
# (e.g., /etc/shadow, LDAP, Kerberos, etc.).  The default is to use the
# traditional Unix authentication mechanisms.

ville@ville-laptop:/etc/pam.d$ cat common-session 
#
# /etc/pam.d/common-session - session-related modules common to all services
#
# This file is included from other service-specific PAM config files,
# and should contain a list of modules that define tasks to be performed
# at the start and end of sessions of *any* kind (both interactive and
# non-interactive).  The default is pam_unix.

ville@ville-laptop:/etc/pam.d$ cat common-password 
#
# /etc/pam.d/common-password - password-related modules common to all services
#
# This file is included from other service-specific PAM config files,
# and should contain a list of modules that define the services to be
# used to change user passwords.  The default is pam_unix.

# Explanation of pam_unix options:
#
# The "nullok" option allows users to change an empty password, else
# empty passwords are treated as locked accounts.
#
# The "md5" option enables MD5 passwords.  Without this option, the
# default is Unix crypt.
#
# The "obscure" option replaces the old `OBSCURE_CHECKS_ENAB' option in
# login.defs.
#
# You can also use the "min" option to enforce the length of the new
# password.
#
# See the pam_unix manpage for other options.

Jos halutaan loggautua Linuxiin käyttäen komennon getent tilejä, tulee jokaisella sovellukselle määrätä PAM-profiili. Alla esimerkiksi ohjelman FreeRADIUS profiilitiedostosta. FreeRADIUS-ohjelma on yleisesti käytössä oleva verkkolaitteiden pääsynhallintasovellus. Käytännössä siis, meillä on esimerkiksi langaton verkko, jonka tunnuksina toimii getent-komennolla saadut tilit.

ville@ville-laptop:/etc/pam.d$ cat radiusd 
#
# /etc/pam.d/radiusd - PAM configuration for FreeRADIUS
#

# We fall back to the system default in /etc/pam.d/common-*
# 

@include common-auth
@include common-account
@include common-password
@include common-session

SKEL

Linuxille tehdyille käyttäjäjille luodaan kotikansio, joiden sisältö saadaan oletuksena kansiosta /etc/skel. Sijoittamalla kyseiseen kansioon esimerkiksi sähköpostikansion pohjat, varmistutaan kaikkien käyttäjien kotikansioiden samanlaisuudesta. Erittäin kätevä esimerkiksi graafisen työpöydän tapauksessa, jossa sama näkymä ja ja valikkorakenne voidaan monistaa kaikille. Alla esimerkki oletussisällöstä.

root@ville-laptop:/etc/skel# ls -lah
total 28K
drwxr-xr-x   2 root root 4.0K 2009-03-05 07:53 .
drwxr-xr-x 145 root root  12K 2009-03-05 07:43 ..
-rw-r--r--   1 root root  220 2008-04-15 06:36 .bash_logout
-rw-r--r--   1 root root 2.9K 2008-05-12 21:33 .bashrc
lrwxrwxrwx   1 root root   26 2008-08-05 00:04 Examples -> /usr/share/example-content
-rw-r--r--   1 root root  586 2008-04-15 06:36 .profile

Adduser.conf

adduser.conf-tiedostossa on määritelty muun muassa käyttäjän kotikansion sijaintiin ja kansion oikeuksiin liittyviä asioita. Alla oletustiedosto, jossa on määrätty esimerkiksi käyttäjä- ja ryhmänumeroihin (UID, GID) liittyviä asioita.

# FIRST_SYSTEM_[GU]ID to LAST_SYSTEM_[GU]ID inclusive is the range for UIDs
# for dynamically allocated administrative and system accounts/groups.
# Please note that system software, such as the users allocated by the base-passwd
# package, may assume that UIDs less than 100 are unallocated.
FIRST_SYSTEM_UID=100
LAST_SYSTEM_UID=999

FIRST_SYSTEM_GID=100
LAST_SYSTEM_GID=999

# FIRST_[GU]ID to LAST_[GU]ID inclusive is the range of UIDs of dynamically
# allocated user accounts/groups.
FIRST_UID=1000
LAST_UID=29999

FIRST_GID=1000
LAST_GID=29999

# The USERGROUPS variable can be either "yes" or "no".  If "yes" each
# created user will be given their own group to use as a default.  If
# "no", each created user will be placed in the group whose gid is
# USERS_GID (see below).
USERGROUPS=yes

# If USERGROUPS is "no", then USERS_GID should be the GID of the group
# `users' (or the equivalent group) on your system.
USERS_GID=100

# If DIR_MODE is set, directories will be created with the specified
# mode. Otherwise the default mode 0755 will be used.
DIR_MODE=0755

Sisällysluetteloon


Hakemistopalvelu (LDAP) Linux-ympäristössä

LDAP on ratkaisu, johon lähes jokainen keskitetty käyttäjähallintajärjestelmä perustuu. LDAP:lla voidaan toteuttaa monenlaisia hakemistopuita, joissa toimialueen käyttäjät sijaitsevat. Seuraavassa tullaan toteuttamaan mahdollisimman yksinkertainen keskitetty käyttäjähallinta Linux-ympäristössä. Järjestelmä rakentuu Linuxiin asennettavaan OpenLDAP-ohjelmaan, jonka tietokantaan tullaan esimerkiksi käyttäjät määrittelemään. Ohjelman asennus tapahtuu seuraavasti

ldap:~# apt-get install slapd
Luetaan pakettiluetteloita... Valmis
Muodostetaan riippuvuussuhteiden puu       
Luetaan tilatiedot... Valmis        
----
Setting up slapd (2.4.11-1) ...
  Creating new user openldap... done.
  Creating initial slapd configuration... done.
  Creating initial LDAP directory... done.
Starting OpenLDAP: slapd.
ldap:~#

Käyttöönotossa tarvittavat työkalut asennetaan seuraavasti

ldap:~# apt-get install ldap-utils
Luetaan pakettiluetteloita... Valmis
Muodostetaan riippuvuussuhteiden puu       
Luetaan tilatiedot... Valmis        
Seuraavat UUDET paketit asennetaan:
  ldap-utils
0 päivitetty, 1 uutta asennusta, 0 poistettavaa ja 8 päivittämätöntä.
Noudettavaa arkistoa 245kt.
Toiminnon jälkeen käytetään 492k t lisää levytilaa.
Nouda:1 http://ftp.fi.debian.org lenny/main ldap-utils 2.4.11-1 [245kB]
Noudettiin 245kt ajassa 0s (298kt/s)
Selecting previously deselected package ldap-utils.
(Reading database ... 21017 files and directories currently installed.)
Unpacking ldap-utils (from .../ldap-utils_2.4.11-1_i386.deb) ...
Processing triggers for man-db ...
Setting up ldap-utils (2.4.11-1) ...
ldap:~# 

Ohjelman hallinnan kannalta tärkeässä roolissa on sen konfiguraatiotiedosto slapd.conf, joka löytyy kansiosta /etc/ldap. Asennusvaiheessa sinne luodaan tietokanta, joka saadaan järjestelmän DNS-päätteestä. Tietokantaa käytetään LDAP-komennoilla, joista alla muutama esimerkki. Sisällön vienti tietokantoihin tapahtuu, joko komennoilla tai LDIF-tiedostoilla.

Objektin haku
ldap:~# ldapsearch -H ldap://localhost -D cn=admin,dc=testiverkko,dc=info -x -w Sala1234 -b "dc=testiverkko,dc=info"
# extended LDIF
#
# LDAPv3
# base <dc=testiverkko,dc=info> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# search result
search: 2
result: 32 No such object

# numResponses: 1
ldap:~# cat test.ldif 
#Organisaatio, testiverkko.info
dn: dc=testiverkko, dc=info
objectclass: dcObject
objectclass: organization
o: Testiverkko
dc: Testiverkko

# Kayttajat, testiverkko.info
dn: ou=Kayttajat,dc=testiverkko,dc=info
ou: Kayttajat
objectClass: top
objectClass: organizationalUnit
description: Toimialueen kayttajat

# Ville Heikkiniemi, Kayttajat, testiverkko.info
dn: cn=Ville Heikkiniemi,ou=Kayttajat,dc=testiverkko,dc=info
cn: Ville Heikkiniemi
cn: villeh
objectClass: posixAccount
objectClass: shadowAccount
objectClass: inetOrgPerson
sn: User
uid: villeh
uidNumber: 2000
gidNumber: 2000
homeDirectory: /home/villeh
userPassword:: e2NyeXB0fVM4eXF6bWVTNTRCT2c=
Objektin lisäys
ldap:~# ldapadd -D  cn=admin,dc=testiverkko,dc=info -x -W -f test.ldif
Enter LDAP Password: 
adding new entry "dc=testiverkko, dc=info"

adding new entry "ou=Kayttajat,dc=testiverkko,dc=info" 

adding new entry "cn=Ville Heikkiniemi,ou=Kayttajat,dc=testiverkko,dc=info"

ldap:~# ldapsearch -H ldap://localhost -D cn=admin,dc=testiverkko,dc=info -x -w Sala1234 -b "dc=testiverkko,dc=info"
# extended LDIF
#
# LDAPv3
# base <dc=testiverkko,dc=info> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# testiverkko.info
dn: dc=testiverkko,dc=info
objectClass: dcObject
objectClass: organization
o: Testiverkko
dc: Testiverkko 

# Kayttajat, testiverkko.info
dn: ou=Kayttajat,dc=testiverkko,dc=info
ou: Kayttajat
objectClass: top
objectClass: organizationalUnit
description: Toimialueen kayttajat

# Ville Heikkiniemi, Kayttajat, testiverkko.info
dn: cn=Ville Heikkiniemi,ou=Kayttajat,dc=testiverkko,dc=info
cn: Ville Heikkiniemi
cn: villeh
objectClass: posixAccount
objectClass: shadowAccount
objectClass: inetOrgPerson
sn: User
uid: villeh
uidNumber: 2000
gidNumber: 2000
homeDirectory: /home/villeh
userPassword:: e2NyeXB0fVM4eXF6bWVTNTRCT2c=

# search result
search: 2
result: 0 Success

# numResponses: 4
# numEntries: 3
Objektin poisto
ldap:~# ldapdelete -D cn=admin,dc=testiverkko,dc=info -x -W "cn=Ville Heikkiniemi,ou=Kayttajat,dc=testiverkko,dc=info"
Enter LDAP Password: 
ldap:~# ldapsearch -H ldap://localhost -D cn=admin,dc=testiverkko,dc=info -x -w Sala1234 -b "dc=testiverkko,dc=info"
# extended LDIF
#
# LDAPv3
# base <dc=testiverkko,dc=info> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# testiverkko.info
dn: dc=testiverkko,dc=info
objectClass: dcObject
objectClass: organization
o: Testiverkko
dc: Testiverkko

# Kayttajat, testiverkko.info
dn: ou=Kayttajat,dc=testiverkko,dc=info
ou: Kayttajat
objectClass: top
objectClass: organizationalUnit
description: Toimialueen kayttajat

# search result
search: 2
result: 0 Success

# numResponses: 3
# numEntries: 2
Käyttäjän salasanan vaihto
ldap:~# ldappasswd -H ldap://localhost -D cn=admin,dc=testiverkko,dc=info -x -w Sala1234 "cn=Ville Heikkiniemi,ou=Kayttajat,dc=testiverkko,dc=info"
New password: buHd0eDx

LDAP perustuu siihen hakemistopuuhun, puun hallintaan ja puuhun liittyviin kyselyihin. Idea on siinä, että tämä kaikki voi tapahtua verkon kautta, jolloin järjestelmälle ei tule minkäänlaisia maantieteellisiä rajoja.

LDAP on käytössä lähes jokaisessa hallintajärjestelmässä! Erittäin kätevä ja toimiva moneen muuhunkin tarkoitukseen!

Tietokannan määrittely

Alla oleva tiedosto ajetaan tietokannan sisällöksi esimerkin mukaisesti

# testiverkko.info
dn: dc=testiverkko,dc=info
objectClass: dcObject
objectClass: organization
o: Testiverkko
dc: Testiverkko 

--------------------------------------
Tästä alaspäin tiedostoon, jos asennus meni ongelmitta
--------------------------------------
 
# Kayttajat, testiverkko.info
dn: ou=Kayttajat,dc=testiverkko,dc=info
ou: Kayttajat
objectClass: top
objectClass: organizationalUnit
description: Toimialueen kayttajat

# Teemu Testaaja, kayttajat, testiverkko.info
dn: cn=Teemu Testaaja,ou=Kayttajat,dc=testiverkko,dc=info
cn: Teemu Testaaja
cn: teemut
objectClass: posixAccount
objectClass: shadowAccount
objectClass: inetOrgPerson
sn: User
uid: teemut
mail: teemutestaaja@testiverkko.info
telephonenumber: 0404103411
uidNumber: 10000
gidNumber: 10000
homeDirectory: /home/testiverkko.info/teemut
loginShell: /bin/bash
userPassword:: e2NyeXB0fVM4eXF6bWVTNTRCT2c=

# Ryhmat, testiverkko.info
dn: ou=Ryhmat,dc=testiverkko,dc=info
ou: Ryhmat
objectClass: top
objectClass: organizationalUnit
description: Toimialueen ryhmat

# kayttajat, Ryhmat, testiverkko.info
dn: cn=kayttajat,ou=Ryhmat,dc=testiverkko,dc=info
cn: kayttajat
objectClass: posixGroup
gidNumber: 10000

ldap:/etc/ldap# pico testi.ldif
----
ldap:/etc/ldap# ldapadd -D  cn=admin,dc=testiverkko,dc=info -x -W -f testi.ldif
Enter LDAP Password: 
adding new entry "ou=Kayttajat,dc=testiverkko,dc=info"

adding new entry "cn=Teemu Testaaja,ou=Kayttajat,dc=testiverkko,dc=info"

adding new entry "ou=Ryhmat,dc=testiverkko,dc=info"

adding new entry "cn=kayttajat,ou=Ryhmat,dc=testiverkko,dc=info"

ldap:/etc/ldap# ldapsearch -H ldap://localhost -D cn=admin,dc=testiverkko,dc=info -x -W -b "dc=testiverkko,dc=info"
Enter LDAP Password: 
# extended LDIF
#
# LDAPv3
# base <dc=testiverkko,dc=info> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# testiverkko.info
dn: dc=testiverkko,dc=info
objectClass: top
objectClass: dcObject
objectClass: organization
o: testiverkko.info
dc: testiverkko

# admin, testiverkko.info
dn: cn=admin,dc=testiverkko,dc=info
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword:: e2NyeXB0fVM4eXF6bWVTNTRCT2c= 

# Kayttajat, testiverkko.info
dn: ou=Kayttajat,dc=testiverkko,dc=info
ou: Kayttajat
objectClass: top
objectClass: organizationalUnit
description: Toimialueen kayttajat

# Teemu Testaaja, Kayttajat, testiverkko.info
dn: cn=Teemu Testaaja,ou=Kayttajat,dc=testiverkko,dc=info
cn: Teemu Testaaja
cn: teemut
objectClass: posixAccount
objectClass: shadowAccount
objectClass: inetOrgPerson
sn: User
uid: teemut
mail: teemutestaaja@testiverkko.info
telephoneNumber: 0404103411
uidNumber: 10000
gidNumber: 10000
homeDirectory: /home/testiverkko.info/teemut
loginShell: /bin/bash
userPassword:: e2NyeXB0fVM4eXF6bWVTNTRCT2c=

# Ryhmat, testiverkko.info
dn: ou=Ryhmat,dc=testiverkko,dc=info
ou: Ryhmat
objectClass: top
objectClass: organizationalUnit
description: Toimialueen ryhmat

# kayttajat, Ryhmat, testiverkko.info
dn: cn=kayttajat,ou=Ryhmat,dc=testiverkko,dc=info
cn: kayttajat
objectClass: posixGroup
gidNumber: 10000

# search result
search: 2
result: 0 Success

# numResponses: 7
# numEntries: 6
ldap:/etc/ldap# 

Muutetaan tiedostoa /etc/ldap/slapd.conf

Lisätty loppuun
index cn                    pres,sub,eq
index sn                    pres,sub,eq
index uid                   pres,sub,eq
index displayName           pres,sub,eq
index uidNumber             eq
index gidNumber             eq
index memberUID             eq
index uniqueMember          eq
Sammutetaan ohjelma
/etc/init.d/slapd stop
Tietokannan uudelleen indeksointi
sudo -u openldap slapindex
Käynnistetään ohjelma
/etc/init.d/slapd start


Nyt LDAP-tietokanta on kunnossa ja valmiina käyttöön.

LDAP-palvelinohjelma ja sen tietokanta ovat kaikki kaikessa keskitetyssä hallinnassa!

Linux-työasemalle tehtävät muutokset

Seuraavan kappaleen yhteydessä käydään yksityiskohtaisesti läpi jokainen vaihe ja niiden tarkoitus. Seuraavassa on vain menty kohta kohdalta eteenpäin!

Ensimmäisenä pitää asentaa LDAP-autentikointia varten tarvittavat ohjelmat. Asennusvaiheessa kysytään muutamia asioita, joihin vastaamaalla saadaan järjestelmä heti toimivaksi. Jos näin ei käy, muutetaan asetuksia tiedostosta /etc/ldap.conf.

linux@linux-laptop:~$ sudo apt-get install libnss-ldap
[sudo] password for linux: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  auth-client-config ldap-auth-client ldap-auth-config libpam-ldap
Suggested packages:
  libpam-cracklib nscd
The following NEW packages will be installed:
  auth-client-config ldap-auth-client ldap-auth-config libnss-ldap libpam-ldap
0 upgraded, 5 newly installed, 0 to remove and 0 not upgraded.
Need to get 149kB of archives.
After this operation, 803kB of additional disk space will be used.
Do you want to continue [Y/n]? y
Get:1 http://fi.archive.ubuntu.com jaunty/main auth-client-config 0.9 [15.3k]
----
Unpacking ldap-auth-config (from .../ldap-auth-config_0.5.2_all.deb) ...
Setting up ldap-auth-client (0.5.2) ...
Setting up ldap-auth-config (0.5.2) ...

Setting up libpam-ldap (184-4.2ubuntu2) ...

Setting up libnss-ldap (261-2.1ubuntu1) ...

linux@linux-laptop:~$

Seuraavaksi muokataan vielä muutamia tiedostoja, jotta päästään haluttuun lopputulokseen.

/etc/nsswitch.conf
----
passwd:         files ldap
group:          files ldap
shadow:         files ldap

Alla oleva on pakko tehdä, jos käyttäjillä ei ole valmiiksi määriteltyjä kotikansioita.

/etc/pam.d/common-session
----
Heti kommenttien jälkeen!
session	required	pam_mkhomedir.so umask=0022 skel=/etc/skel

Seuraava muutos ei ole pakollinen, mutta suositeltava. Tiedoston /etc/pam.d/common-password muokkaus mahdollistaa salasanan muuttamisen käyttäjän toimesta. Oletusasetuksilla tämä ei toimi Ubuntussa.

#
# /etc/pam.d/common-password - password-related modules common to all services
#
# This file is included from other service-specific PAM config files,
# and should contain a list of modules that define the services to be
# used to change user passwords.  The default is pam_unix.

password	sufficient	pam_ldap.so
password	sufficient	pam_unix.so nullok obscure min=4 max=8 sha512
password	requisite	pam_deny.so
password	required	pam_permit.so

Lopputulos nähdään seuraavassa kuvassa, josta nähdään, että käyttäjä ja sen ryhmä tunnetaan.

Linux LDAP-autentikoinnilla
Yksinkertaisin ja toimivin menetelmin voidaan hallita Linux-toimialuetta!

Kotikansioiden keskittäminen

Seuraavaksi olisi tarkoitus keskittää kotikansiot yhdelle palvelimelle. Tämä voidaan tehdä monella tapaa, joista seuraavassa on valittu NFS.

Kotikansioidan keskittäminen mahdollistaa sujuvamman liikkuvuuden toimialueen sisällä!
Keskittämisellä yksinkertaistetaan varmuuskopiointi huomattavasti!

Valmistellaan ensimmäiseksi NFS-palvelin

Asennetaan NFS-palvelinohjelma
ldap:/etc/ldap# apt-get install nfs-kernel-server
Luetaan pakettiluetteloita... Valmis
Muodostetaan riippuvuussuhteiden puu
Luetaan tilatiedot... Valmis
Seuraavat ylimääräiset paketit on merkitty asennettaviksi:
  libevent1 libgssglue1 libnfsidmap2 librpcsecgss3 nfs-common
Seuraavat UUDET paketit asennetaan:
  libevent1 libgssglue1 libnfsidmap2 librpcsecgss3 nfs-common nfs-kernel-server
0 päivitetty, 6 uutta asennusta, 0 poistettavaa ja 0 päivittämätöntä.
Noudettavaa arkistoa 459kt.
Toiminnon jälkeen käytetään 1044k t lisää levytilaa.
Haluatko jatkaa [K/e]? k
----------
Setting up librpcsecgss3 (0.18-1) ...
Setting up nfs-common (1:1.1.2-6lenny1) ...

Creating config file /etc/idmapd.conf with new version

Creating config file /etc/default/nfs-common with new version
Adding system user `statd' (UID 106) ...
Adding new user `statd' (UID 106) with group `nogroup' ...
Not creating home directory `/var/lib/nfs'.
Starting NFS common utilities: statd.
Setting up nfs-kernel-server (1:1.1.2-6lenny1) ...

Creating config file /etc/exports with new version

Creating config file /etc/default/nfs-kernel-server with new version
Starting NFS common utilities: statd.
Exporting directories for NFS kernel daemon....
Starting NFS kernel daemon: nfsd mountd.
ldap:/etc/ldap#  

Tehdään kotikansio ja laitetaan se jakoon
ldap:~# mkdir -p /srv/nfs/testiverkko.info/home
ldap:~# cat /etc/exports
# /etc/exports: the access control list for filesystems which may be exported
#               to NFS clients.  See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes       hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4        gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes  gss/krb5i(rw,sync,no_subtree_check)
#

/srv/nfs/testiverkko.info/home  213.250.105.0/255.255.255.0(rw,sync,no_subtree_check,no_root_squash)

ldap:~# exportfs -rv
exporting 213.250.105.0/255.255.255.0:/srv/nfs/testiverkko.info/home
ldap:~#

Asiakaskoneen muutokset

Muokataan fstab-tiedosto
linux@linux-desktop:~$ cat /etc/fstab 
# /etc/fstab: static file system information.
#
# Use 'blkid -o value -s UUID' to print the universally unique identifier
# for a device; this may be used with UUID= as a more robust way to name
# devices that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    defaults        0       0
# / was on /dev/sda1 during installation
UUID=1f151938-2f61-4fcd-b0e7-e38fca1cb3d9 /               ext4    errors=remount-ro 0       1
# swap was on /dev/sda5 during installation
UUID=07517d6e-2654-4154-9003-3edba6f31802 none            swap    sw              0       0
/dev/scd0       /media/cdrom0   udf,iso9660 user,noauto,exec,utf8 0       0
/dev/fd0        /media/floppy0  auto    rw,user,noauto,exec,utf8 0       0

ldap:/srv/nfs/testiverkko.info/home	/home/testiverkko.info	nfs	defaults	0	0
linux@linux-desktop:~$ 

Linuxin NFS-tuki löytyy yleensä nfs-common-paketista. Debianissa ja Ubuntussa asentaminen tapahtuu seuraavalla komennolla
Debian => apt-get install nfs-common
Ubuntu => sudo apt-get install nfs-common

Kirjaudutaan LDAP-palvelimella olevalla tunnuksella koneelle ja varmistetaan, että tiedostot on NFS-palvelimella
ldap:/srv/nfs/testiverkko.info/home/teemut# ls
Asiakirjat  examples.desktop  Julkinen  Kuvat  Lataukset  Mallit  Musiikki  Työpöytä  Videot
ldap:/srv/nfs/testiverkko.info/home/teemut#



Sisällysluetteloon


Linux-työasema + AD

Ensimmäisenä esimerkkinä Windows-Linux -integraatiosta tehdään tilanne, jossa toimialueelle liitetään työasemakäyttöön tarkoitettuja Linuxilla varustettuja koneita. Tyypillissiä kohteita ovat esimerkiksi kirjastot, koulut ja tehdasympäristöt, eli tilanteet, joissa ei ole tarvetta erikoissovelluksille, jotka vaativat toimiakseen Windowssin. Käyttäjä pääsee siis kirjautumaan samoilla tunnuksilla niin Windows- kuin Linux-työasemille.

Toimialue Linux-työasemilla


Linuxin liittäminen Windows 2003 Serverillä tehtyyn toimialueeseen on suhteellisen suoraviivaista. Liittämisestä on olemassa paljon erilaisia ohjeistuksia, joiden suurin ero on liittämisessä käytetyt työkaluohjelmat. Monissa ohjeissa liittäminen on toteutettu esimerkiksi Likewisen kaltaisella työkalulla. Ohjelmat ovat käteviä, mutta voivat aiheuttaa ongelmia, kun Linux ei ole pelkästään työaseman roolissa. Käytännössä työkaluohjelmat vain muuttavat tiettyjä tiedostoja ja tekevät linkityksiä. Näiden vastaavien asioiden tekeminen onnistuu suhteellisen helposti.

Liittämisen keskeisenä osapuolena ovat Samba, Samban osa Winbind, NSS, Kerberos ja PAM. Samban tehtävä on olla liitospinta toimialueeseen, Winbind toimii rajapinta toimialueiden käyttäjien sekä ryhmien ja Linuxin käyttäjähierarkian välillä, NSS on rajapinta koneen ja Winbindin välillä , Kerberoksella saadaan pääsytiketti Windows-verkkoon ja viimeisimpänä PAM vertaa käyttäjän antamaa tunnus/salasanaparia tietoihinsa ja päättää pääsekö käyttäjä koneelle.

Winbind ei ole ainoa tapa hakea AD:n palvelimelta käyttäjätietoja. Toinen vaihtoehto on tehdä suoraan LDAP-kyselyjä AD:n LDAP-kannasta, jolloin toiminta olisi lähes vastaava. Me emme tee näin, koska Winbind:llä toteutettu ratkaisu on hieman helpompi toteuttaa.

Käymme koulutuksessa läpi tilanteen, jossa perusasennettu Ubuntu liitetään toimialueeseen. Asia etenee lähes tämän ohjeen mukaisesti.

Verkkoasetukset

Ensimmäinen, ja samalla oleellisin asia, työaseman liittämisessä on toimiva verkkoyhteys Ad:lle. Tämä tarkoittaa, että koneiden nimitietueet, nimipalvelimet ja osoitteet ovat kunnossa. Linuxissa tämä tarkoittaa käytännössä neljän tiedoston muokkaamista. Nämä tiedostot ovat seuraavat:

  • kansio /etc, tiedosto resolv.conf => nimipalvelimet
  • kansio /etc, tiedosto hostname => koneen nimi
  • kansio /etc, tiedosto hosts => koneen sisäiset nimitietueet
  • kansio /etc/network, tiedosto interfaces => IP-osoitteet

Tässä vaiheessa kannattaa muistaa, että monessa Linux-jakelussa tulee mukana NetworkManager-hallintatyökalun kaltainen sovellus, jolla nimensä mukaisesti hallitaan verkkoyhteyksiä. Työkalut ovat hyviä, mutta sekoittavat tietyissä tapauksissa toimintaa. Käytännössä tämä tarkoittaa sitä, että esimerkiksi Ubuntu 9.04-järjestelmässä verkkoasetukset ovat käyttäjäprofiilikohtaisia. Tämä tarkoittaa sitä, että IP-asetukset latautuvat vasta käyttäjän kirjautuessa sisälle. Näin ei saa olla, koska kaikki käyttäjät ovat oletuksena samassa verkossa. Tämän työkalun poisto tapahtuu seuraavasti (sovellusta ei siis poisteta, sen käynnistyminen vain estetään).

Poistetaan NetworkManager käynnistyskansiosta

sudo update-rc.d -f NetworkManager remove

Poistetaan appletti työpöydältä

sudo mkdir -p /etc/skel/.config/autostart
sudo gedit /etc/skel/.config/autostart/nm-applet.desktop

[Desktop Entry]
Encoding=UTF-8
Name=Network Manager
Comment=Network Manager applet
Icon=nm-device-wireless
Exec=nm-applet --sm-disable
Terminal=false
Type=Application
Categories=
OnlyShowIn=GNOME;XFCE;
X-GNOME-Bugzilla-Bugzilla=GNOME
X-GNOME-Bugzilla-Product=NetworkManager
X-GNOME-Bugzilla-Component=general
X-GNOME-Autostart-enabled=false
X-Ubuntu-Gettext-Domain=nm-applet

Tarkistetaan verkkoliitäntöjen tila komennolla ifconfig ja määritellään halutuille liitännöille IP-asetukset tiedostoon interfaces. Alla on esimerkki komennosta ifconfig ja pätkä tiedostosta interfaces, jossa IP-asetukset on määritelty.

administrator@ubuntu-station:~$ ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:0a:e4:c0:ba:d1  
         inet addr:213.250.105.88  Bcast:213.250.105.127  Mask:255.255.255.128
         inet6 addr: fe80::20a:e4ff:fec0:bad1/64 Scope:Link
         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
         RX packets:112344 errors:0 dropped:0 overruns:0 frame:0
         TX packets:65429 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:1000 
         RX bytes:111196268 (106.0 MB)  TX bytes:5066034 (4.8 MB)
         Interrupt:16 

administrator@ubuntu-station:~$ cat /etc/network/interfaces
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

auto eth0:1
iface eth0:1 inet static
	address 192.168.10.100
	netmask 255.255.255.0

Muokataan seuraavaksi tiedostoa resolv.conf, jossa voidaan määrätä AD-kone nimipalvelimeksi. Tämähän tieto saadaan yleensä DHCP:llä, mutta tietyissä tilanteissa nämä voidaan joutua määräämään kiinteäksi. Avataan nimipalvelimet määräävä tiedosto

sudo gedit /etc/resolv.conf

search testiverkko.info
nameserver 192.168.10.10

Testataan nimipalvelun toiminta työkalulla nslookup. Esimerkki alla

administrator@ubuntu-station:~$ nslookup 192.168.10.10
Server:		192.168.10.10
Address:	192.168.10.10#53

10.10.168.192.in-addr.arpa	name = ad.testiverkko.info.

administrator@ubuntu-station:~$ nslookup ad.testiverkko.info
Server:		192.168.10.10
Address:	192.168.10.10#53

Name:		ad.testiverkko.info
Address: 	192.168.10.10

administrator@ubuntu-station:~$ 

Seuraavaksi määritellään koneelle nimi. Tämä tapahtuu tiedostoissa hostname ja hosts. Alla esimerkki tiedostosta hostname.

administrator@ubuntu-station:~$ cat /etc/hostname
ubuntu-station

FQDN-määrittely tapahtuu muokkaamalla hosts-tiedostoa alla olevan kaltaisesti.

pico /etc/hosts

127.0.0.1	localhost
127.0.1.1	ubuntu-station.testiverkko.info	ubuntu-station

Testataan muutos komennolla hostname ja hostname --fqdn

Kerberos

Asennetaan Kerberoksen vaatimat ohjelmat. Asennuksen yhteydessä tulee kysymys toimialueesta ja AD-palvelimesta. Kysymyksistä ei tarvitse tässä kohdassa välittää eli ei muutako enterillä eteenpäin. (Toki helpommalla pääsee, jos vastaa kysymyksiin oikein)

sudo apt-get install krb5-user

Kerberos vaatii, että AD:n ja siihen liitetyn koneen kellot ovat lähes samassa ajassa. Tämä siksi, että Kerberoksen tekemä salaus perustuu osapuolien aikaleimoihin. Kellon synkronointi voidaan tehdä useallakin tavalla, joista me käytämme kerran kymmenessä minuutissa tapahtuvaa synkronointia. Muokataan Cronia lisäämällä siihen alla oleva rivi

cd /etc/cron.d && sudo -s

echo "*/10 * * * * root ntpdate ad.testiverkko.info > /dev/null" > ntpdate-testiverkko-info

Jotta synkronointi tapahtuu tässä ja nyt, anna seuraava komento

sudo ntpdate ad.testiverkko.info

Ennen ensimmäistä testausta muokataan Kerberoksen konfiguraatiotiedostoa.

sudo pico /etc/krb5.conf

[libdefaults]
	default_realm = TESTIVERKKO.INFO
############
 
[realms]
	TESTIVERKKO.INFO = {
		kdc = ad.testiverkko.info
		admin_server = ad.testiverkko.info
	}

Testataan AD:n Kerberoksen toiminta antamalla alla oleva komento

kinit administrator

Äskeinen toimenpide näkyy Kerberoksen tikettilistassa, joka nähdään komennolla klist

root@ubuntu-station:~# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: administrator@TESTIVERKKO.INFO

Valid starting     Expires            Service principal
02/02/09 15:16:54  02/03/09 01:16:57  krbtgt/TESTIVERKKO.INFO@TESTIVERKKO.INFO
	renew until 02/03/09 15:16:54


Kerberos 4 ticket cache: /tmp/tkt0
klist: You have no tickets cached
root@ubuntu-station:~#

Samba

seuraavana on vuorossa samba ja winbind, jotka asennetaan komennolla

apt-get install samba winbind

Konfiguroidaan samba muokkaamalla sen pääkonfiguraatiotiedostoa.

pico /etc/samba/smb.conf

[global]
	use kerberos keytab = true
	security = ads
 	realm = TESTIVERKKO.INFO
	workgroup = TESTIVERKKO
	idmap uid = 15000-20000
	idmap gid = 15000-20000
	winbind enum users = Yes
	winbind enum groups = Yes
	winbind use default domain = Yes
	winbind nested groups = Yes
	domain master = no
	template shell = /bin/bash
	encrypt passwords = yes
	log level = 5
	log file = /var/log/samba/%m
	max log size = 1000

Testaan Samban komennolla testparm konfiguraatiotiedoston "karkea" virheettömyys

root@ubuntu-station:~# testparm
Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Server role: ROLE_DOMAIN_MEMBER
Press enter to see a dump of your service definitions

[global]
	workgroup = TESTIVERKKO
	realm = TESTIVERKKO.INFO
	security = ADS

Samban konfiguroinnin jälkeen käynnistetään Samba ja Winbind uudestaan komennoilla

/etc/init.d/samba restart
/etc/init.d/winbind restart

Liittäminen

Lopuksi liitetään kone toimialueeseen. Liittäminen tapahtuu alla olevalla komennolla.

root@ubuntu-station:~# net ads join -U administrator
Enter administrator's password:
Using short domain name -- TESTI
Joined 'UBUNTU-STATION' to realm 'testiverkko.info'

Edellisessä komennossa voi tulla herja DNS-tietueen päivittämisestä, mutta konetili on silti luotu. Tämä on virhe (Ei täysin Samban!), joka on korjattu Samban uudemmissa versioissa. Kone on liitetty toimialueeseen ja toimialueen tilejä voidaan tutkia komennolla wbinfo. Tämä vaatii vielä winbindin uudelleen käynnistämisen. Alla esimerkit:

/etc/init.d/winbind restart

root@ubuntu-station:~# wbinfo -u
administrator
guest
support_388945a0
krbtgt
ville
teemu
matti

root@ubuntu-station:~# wbinfo -g
helpservicesgroup
telnetclients
domain computers
domain controllers
schema admins
enterprise admins
cert publishers
domain admins
domain users
domain guests
group policy creator owners
ras and ias servers
dnsadmins
dnsupdateproxy
fspm users
adminsecure
testiryhma
henkilosto
root@ubuntu-station:~# 

Nyt siis tunnetaan toimialueen tilit, ja seuraavaksi pitää Ubuntun loggautuminen ohjata käyttämään niitä. Muokataan ensimmäiseksi NSS:n tiedostoa alla olevan mukaiseksi

pico /etc/nsswitch.conf

passwd:         files winbind
group:          files winbind

Annetaan komento, jolla varmistetaan, että järjestelmä tuntee tilien salasanat

root@ubuntu-station:~# getent passwd
......
ville:*:10004:10000:Ville Heikkiniemi:/home/TESTIVERKKO/ville:/bin/bash
teemu:*:10005:10000:Teemu Testaaja:/home/TESTIVERKKO/teemu:/bin/bash
matti:*:10006:10000:Matti Meikäläinen:/home/TESTIVERKKO/matti:/bin/bash
root@ubuntu-station:~# 

Lopuksi ohjataan sisäänkirjautumispyynnöt koneen paikallisten tilien lisäksi koskemaan myös AD:llä olevia tilejä. Tähän operaatioon kuuluu kolme tiedostoa, joihin jokaiseen liitetään heti kommenttien jälkeen alla olevat rivit.

Ensimmäisenä tiedosto, joka määritellään: /etc/pam.d/common-auth - authentication settings common to all services

pico /etc/pam.d/common-auth

auth	sufficient	pam_winbind.so krb5_auth krb5_ccache_type=FILE

Toisena tiedosto, joka määritellään: /etc/pam.d/common-account - authorization settings common to all services

pico /etc/pam.d/common-account

account	sufficient		pam_winbind.so

Kolmantena tiedosto, joka määritellään: /etc/pam.d/common-session - session-related modules common to all services

pico /etc/pam.d/common-session

session	required		pam_mkhomedir.so umask=0022 skel=/etc/skel

Muokkaamisen jälkeen käynnistetään kone uudestaan ja kirjaudutaan sisään AD-tunnuksilla.


Sisällysluetteloon


Linux työasemana toimialueissa

Edellisessä liitettiin Linux-järjestelmällä varustettu kone toimialueseen. Käyttöjärjestelmätasolla on se ja sama, mitä palvelua vasten autentikointi on tehty. Oli kysymyksessä sitten erilaiset tiedostot (passwd, shadow), hakemistopalvelut (LDAP) tai tietokannat (MySQL, PosgreSQL) ei sillä ole Linuxille merkitystä. Autentikointi tapahtuu aina käyttäen PAM-ohjelmaa ja siihen liitettyjä moduleja.

Yksinkertaisuudessaa homma toimii niin, että jokaiselle sovellukselle määritellään kansioon /etc/pam.d profiilitiedosto, jonka mukaan autentikointi tehdään. Yleensä profiilitiedostossa on viittaus edellisessä kappaleessa muokattuihin kolmeen tiedostoon, joissa on määritelty yhteiset PAM-modulit. Tästä päästäänkin tilanteeseen, että järjestelmälle on aivan sama, millä sovelluksella käyttäjä järjestelmään kirjautuu, kunhan vain kyseisen sovelluksen profiilitiedosto on olemassa. Alla on esimerkki profiilitiedostosta, jossa on määritelty graafisen sisäänkirjautumisikkunan toiminta. Käyttäjän antaessa tunnus ja salasana, alla oleva tiedosto määrittelee, että mitä syötteelle tehdään, eli hylätäänkö se vai ohjataanko käyttäjä järjestelmän määrittelemään kotikansioon.

root@ubuntu-station:~# cat /etc/pam.d/gdm
#%PAM-1.0
auth    requisite       pam_nologin.so
auth    required        pam_env.so readenv=1
auth    required        pam_env.so readenv=1 envfile=/etc/default/locale
@include common-auth
auth    optional        pam_gnome_keyring.so
@include common-account
session required        pam_limits.so
@include common-session
session optional        pam_gnome_keyring.so auto_start
@include common-password

Käyttäjän kirjautuessa millä tahansa sovelluksella (ssh, gnome, kde, ftp, imap) sisälle, ohjataan se kotikansioon. Jos kotikansiota ei ole, se luodaan. Pohjana käytetään kansion /etc/skel sisältöä. Jos halutaan käyttäjälle tietty kansiorakenne, muokataan skel-kansion sisältöä haluamaksi. Tyyppillisiä käyttäkohteita ovat sähköpostit, ftp- ja WWW-kansiot sekä käyttöliittymät. Seuraavaksi on käyty tilanteet, jossa kahden suosituimman graafisen käyttöliittymän asetuksia muokataan jokaiselle käyttäjälle sopivaksi. Nämä käyttöliittymät ovat Freedesktop-standardiin pohjautuvia, joten niihin liittyvät toimenpiteet ovat suurin piirtein samanlaisia.

Gnomen muokkaus

Gnome-liittymän asetukset jakautuu kahteen osaan. Ensimmäisellä osalla tarkoitetaan muun muassa valikkorakennetta sekä automaattisesti käynnistyviä ohjelmia, ja niiden asetukset on määritelty kansioissa /etc/xdg. Käyttöliittymän värimaailmaan, eli taustaan ja teemaan, sekä paneelien ja muiden "kilkkeiden" toimintoihin vaikuttavat asiat ovat kansiossa /usr/share/gconf.

administrator@ubuntu-station:/etc/xdg$ ls -la
yhteensä 36
drwxr-xr-x   5 root root  4096 2008-10-30 01:10 .
drwxr-xr-x 122 root root 12288 2009-03-05 08:20 ..
drwxr-xr-x   2 root root  4096 2009-03-04 15:51 autostart
drwxr-xr-x   2 root root  4096 2008-12-08 08:36 compiz
drwxr-xr-x   3 root root  4096 2008-12-08 08:36 menus
-rw-r--r--   1 root root   414 2008-10-08 17:45 user-dirs.conf
-rw-r--r--   1 root root   416 2008-10-08 17:45 user-dirs.defaults

administrator@ubuntu-station:/usr/share/gconf$ ls -la
yhteensä 44
drwxr-xr-x   4 root root  4096 2008-10-30 00:58 .
drwxr-xr-x 293 root root 12288 2008-10-31 08:23 ..
-rw-r--r--   1 root root  1412 2008-09-23 01:03 default.path
-rw-r--r--   1 root root    85 2008-09-23 01:03 default.path.md5sum
drwxr-xr-x   2 root root  4096 2008-12-31 10:19 defaults
drwxr-xr-x   2 root root 16384 2008-12-31 10:19 schemas

Edellisten kansioiden sisällöt näkyvät jokaiselle käyttäjälle seuraavalla tavalla

administrator@ubuntu-station:~/.config$ ls -la
yhteensä 32
drwxr-xr-x  5 administrator administrator 4096 2009-03-05 07:59 .
drwxr-xr-x 30 administrator administrator 4096 2009-03-05 08:20 ..
drwxr-xr-x  2 administrator administrator 4096 2009-03-05 08:12 autostart
drwxr-xr-x  2 administrator administrator 4096 2009-03-04 15:55 menus
-rw-r--r--  1 administrator administrator  482 2008-12-31 11:24 monitors.xml
drwx------  2 administrator administrator 4096 2008-10-31 08:31 tracker
-rw-------  1 administrator administrator  638 2008-10-31 08:31 user-dirs.dirs
-rw-r--r--  1 administrator administrator    5 2008-10-31 08:31 user-dirs.locale

administrator@ubuntu-station:~/.gconf$ ls -la
yhteensä 16
drwx------  4 administrator administrator 4096 2009-03-05 08:20 .
drwxr-xr-x 30 administrator administrator 4096 2009-03-05 08:20 ..
drwx------ 10 administrator administrator 4096 2009-03-04 15:56 apps
drwx------  3 administrator administrator 4096 2008-10-31 08:31 desktop

Käytännössä homma toimii niin, että Gnomen hakee käynnistyessään oletusasetukset kansioista /etc/xdg ja /usr/share/gconf. Käyttäjäkohtaisesti voidaan määritellä liittymän toiminta kansioiden .config ja .gconf sisällöillä. Näiden kansioiden sisällöt voidaan määritellä kansioon /etc/skel, jolloin voidaan uusille käyttäjille määritellä halutut asetukset. Nykyisten käyttäjien asetukset määritellään käyttäjäkohtaisesti työkaluilla Alacarte ja Gconf-editor. Jos taas halutaan vaikuttaa kaikkien käyttäjien toimintaa keskitetysti, muokataan kansioiden /etc/xdg ja /usr/share/gconf sisältöjä.

Otetaan esimerkki sovelluksesta update-notifier, joka ilmoittaa uusista päivityksistä oikeaan yläkulmaan avautuvalla ikkunalla. Luonnollinen tilanne on se, ettei jokaiselle käyttäjä ikkunaa näytetä, koska eivät he asialle voi kuitenkaan mitään tehdä. Järjestelmän päivittäminen vaatii pääkäyttäjän oikeudet. Katsotaan kansiota /etc/xdg/autostart ja siellä olevaa tiedostoa update-notifier.desktop. Tiedostossa määritellään, että oletuksena jokaiselle käyttäjälle kyseinen ohjelma käynnistetään.

administrator@ubuntu-station:/etc/xdg/autostart$ cat update-notifier.desktop 
[Desktop Entry]
Encoding=UTF-8
Name=Update Notifier
Comment=Update notification daemon
Icon=update-notifier
Exec=update-notifier
Terminal=false
Type=Application
Categories=
OnlyShowIn=GNOME;XFCE;
X-Ubuntu-Gettext-Domain=update-notifier

Tämä voidaan poistaa käyttäjäkohtaisesti luomalla kotikansiossa olevan kansioon .config/autostart tiedosto, jolla käynnistyminen estetään.

administrator@ubuntu-station:~/.config/autostart$ cat update-notifier.desktop 
[Desktop Entry]
Encoding=UTF-8
Name=Update Notifier
Comment=Update notification daemon
Icon=update-notifier
Exec=update-notifier
Terminal=false
Type=Application
Categories=
OnlyShowIn=GNOME;XFCE;
X-Ubuntu-Gettext-Domain=update-notifier
Name[fi_FI]=Update Notifier
Comment[fi_FI]=Update notification daemon
X-GNOME-Autostart-enabled=false

Tai sitten estetään käynnistyminen jokaiselta käyttäjältä muokkaamalla kansiossa /etc/xdg/autostart olevaa tiedostoa alla olevan kaltaiseksi

administrator@ubuntu-station:/etc/xdg/autostart$ cat update-notifier.desktop 
[Desktop Entry]
Encoding=UTF-8
Name=Update Notifier
Comment=Update notification daemon
Icon=update-notifier
Exec=update-notifier
Terminal=false
Type=Application
Categories=
OnlyShowIn=GNOME;XFCE;
X-Ubuntu-Gettext-Domain=update-notifier
X-GNOME-Autostart-enabled=false

Värimaailman muokkaaminen on hieman hankalampaa, sillä kaikki asiat perustuvat niin sanottuihin skeemoihin. Otetaan esimerkiksi kaikki käyttäjien oletusteema, joka löytyy kansiosta /usr/share/gconf/schemas ja sieltä tiedostosta desktop_gnome_interface.schemas. Kyseisessä tiedostossa on kaikkiaan yli 10000 riviä, joten sen muokkaaminen on saattaa olla haastavaa.

administrator@ubuntu-station:/usr/share/gconf/schemas$ cat desktop_gnome_interface.schemas | grep -A 3 gtk_theme
      <key>/schemas/desktop/gnome/interface/gtk_theme</key>
      <applyto>/desktop/gnome/interface/gtk_theme</applyto>
      <owner>gnome</owner>
      <type>string</type>
      <default>Clearlooks</default>

Kokemuksesta valikkojen muokkaaminen on suhteellisen helppoa, mutta skeemojen muokkaaminen välttämättä ei.

KDEn muokkaus

KDE on ulkonäöltään ja toiminnaltaan täysin erilainen kuin Gnome. KDE on kaiken kaikkiaan huomattavasti lähempänä Windows-ympäristöä kuin Gnome, minkä vuoksi on hyvin paljon käytetty. KDE:n sisältö on kansion /etc/xdg osalta lähes samanlainen kuin Gnome:ssa, mutta muuten rakenne poikkeaa täysin.

administrator@kubuntu-desktop:/etc/xdg$ ls -la
yhteensä 24
drwxr-xr-x   4 root root 4096 2008-10-30 00:09 .
drwxr-xr-x 116 root root 4096 2009-03-05 11:15 ..
drwxr-xr-x   2 root root 4096 2009-03-05 10:22 autostart
drwxr-xr-x   2 root root 4096 2008-10-30 00:09 menus
-rw-r--r--   1 root root  414 2008-10-08 17:45 user-dirs.conf
-rw-r--r--   1 root root  416 2008-10-08 17:45 user-dirs.defaults

autostart-kansiossa olevien tiedostojen merkitys on sama mikä edellä. Sisältö on hieman toinen, josta esimerkki alla

administrator@kubuntu-desktop:/etc/xdg/autostart$ cat update-notifier-kde.desktop
[Desktop Entry]
Encoding=UTF-8
Exec=update-notifier-kde
Name=Update Notifier
Comment=Update notification daemon
X-KDE-autostart-after=panel
X-KDE-autostart-condition=adept_notifierrc:General:Autostart:true
OnlyShowIn=KDE;
X-Ubuntu-Gettext-Domain=update-notifier

Ne asetukset, jotka edellä olivat kansiossa /usr/share/gconf, on nyt kansiossa /usr/share/kde4. KDE:ssä ei käytetä skeemoja, vaan määritykset tehdään yksittäisiin tiedostoihin.

administrator@kubuntu-desktop:/usr/share/kde4$ ls -la
yhteensä 44
drwxr-xr-x   7 root root  4096 2008-10-30 00:06 .
drwxr-xr-x 203 root root  4096 2009-03-05 11:14 ..
drwxr-xr-x 128 root root  4096 2009-03-05 11:05 apps
drwxr-xr-x   4 root root  4096 2008-10-30 00:07 config
drwxr-xr-x   2 root root  4096 2008-10-30 00:07 config.kcfg
drwxr-xr-x  16 root root 20480 2008-10-30 00:08 services
drwxr-xr-x   2 root root  4096 2008-10-30 00:07 servicetypes

Sisällysluetteloon


Linux tiedostonjakopalvelimena

Edellä todettiin, että Linux toimii loistavasti työasemana toimialueella. Keveys, huolettomuus, toimivuus ja ilmaisuus luovat edellytykset sille, että Linux on varteenotettava vaihtoehto Windows-koneiden rinnalle organisaatioihin, joissa AD on pääroolissa. Muokattavuuden ansiosta Linux pystyy tarjoamaan valtavan määrän erilaisia palveluita, kuten esimerkiksi tiedostonjakoja ja WWW-palveluja, toimialueiden käyttöön. Seuraavassa on esitelty, miten toteutetaan alla olevan kuvan kaltainen tiedostonjakopalvelin Samballa. Kannattaa huomata, että palvelin kannattaa tehdä palvelinkäyttöön tarkoitetulla Linux-jakelulla. Näitä jakeluversioita on paljon, joista esimerkkinä Red Hat, Suse ja Debian. Näin siksi, että tyypillisesti näihin jakeluihin tulee päivityksiä huomattavasti vähemmän kuin työasemajakeluihin, jolloin vältyvään monista järjestelmistä tutulta uudelleenkäynnistys rumbalta. Me käytämme harjoituksessa Debianin uusinta julkaisua Lennyä.

Perinteinen toimialue

Asennuksen ensimmäisessä vaiheessa liitetään Lenny toimialueeseen. Tämä on käyty läpi edellä, joten sieltä löytyy vinkkejä tähän. Liittämisen vaiheet ovat seuraavat

* Verkkoasetukset => Tiedostot resolv.conf, hosts, hostname, interfaces
* Kerberos => Asennetaan paketit ntpdate ja krb5-user, Säädetään kello synkkaamaan AD-koneen kanssa, kinit
* Samban säätö => Muokataan konffista smb.conf => konffis alempana
* Tehdään jakokansiot ja muokataan oikeudet => materiaalissa myöhemmin
* Mahdollistetaan ACL-ominaisuus => asennetaan paketti acl, tiedoston fstab muokkaus
* Käynnistys ja testaus

Alla on esimerkki Samban konfiguraatiotiedostosta smb.conf. Suurin muutos edelliseen konffikseen on se, että nyt Samballe on määritelty jakoja. Tämä tarkoittaa sitä, että kone liitetään toimialueella samoin kuin edellä, mutta tarjotaan toimialueen tunnukset omaaville käyttäjille sisältöä. Tässä tapauksessa sisällöt ovat kansioita, joita käyttäjät voivat pitää tietovarastoina. Eräs erittäin hieno asia näin toteutetulla ratkaisulla on se, että kansioiden varmistaminen on helppoa lukuisien eri rajapintojen kautta. Tällaisia rajapintoja ovat esimerkiksi NFS, AoE ja iSCSI.

Kopioidaan alla oleva konffis tiedostoksi smb.conf. Tämähän tapahtuu ennen toimialueelle liittämistä, joten tätä edeltäneet toimet ovat verkkoasetuksien muokkaus, ntp ja kerberos.

[global]
	use kerberos keytab = true
	server string = Linux Server
	security = ads
	encrypt passwords = yes
	log level = 5
	log file = /var/log/samba/%m
	max log size = 500
 	realm = TESTIVERKKO.INFO
	workgroup = TESTIVERKKO
	idmap uid = 15000-20000
	idmap gid = 15000-20000
	winbind enum users = Yes
	winbind enum groups = Yes
	winbind use default domain = Yes
	winbind nested groups = Yes
	domain master = no
	template shell = /bin/bash
	socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
 
[julkinen]
	comment = Yleinen Jako
	path = /srv/samba/public
	available = yes
	public = yes
	writable = yes
	force create mode = 0666
	force directory mode = 0666
	guest ok = yes
 
[kotikansio]
	comment = Kotikansio
	path = /home/%D/%U
	available = yes
	public = no
	writable = yes
	force create mode = 0600
	force directory mode = 0700
	guest ok = no
 
[kayttajat]
	path = /srv/samba/kayttajat
	read only = no
	valid users = @TESTIVERKKO.INFO\"Domain Users"
	force group = "Domain Users"
	create mask = 0770
	force create mode = 0060
	force directory mode = 0070
 
	map acl inherit = yes
	inherit acls = yes
	inherit permissions = yes
	inherit owner = yes 
 
[henkilosto]
	path = /srv/samba/henkilosto
	read only = no
	valid users = @TESTIVERKKO.INFO\henkilosto
	force group = henkilosto
	create mask = 0770
	force create mode = 0060
	force directory mode = 0070
 
	map acl inherit = yes
	inherit acls = yes
	inherit permissions = yes
	inherit owner = yes

Liitetään kone domainiin ja ja tehdään tarvittavat muutokset tiedostoon nsswitch.conf ja kansioon pam.d. Muutoksien jälkeen täytyy vielä muistaa käynnistää Samba ja Winbind uudestaan. Käynnistämisen jälkeen esimerkiksi komentojen wbinfo -u, wbinfo -g, getent pass, getent group pitää toimia oikein.

Seuraavaksi luodaan jakojen kansiot ja muokataan niiden oikeudet asiaan sopiviksi. Kannattaa huomioida, että käyttäjien kotikansiot luodaan vasta, kun käyttäjä on jollain sovelluksella koneelle kirjautunut. Hyvä vaihtoehto on SSH, jolla otetaan yhteys Samba-koneelle käyttäjätunnuksen luonnin yhteydessä. Esimerkiksi komento ssh teemu@samba.testi.syo ottaa yhteyden koneelle ja luo kirjautumisen jälkeen kotikansio. Ongelmaksi tässä kohti tulee salasana, koska ssh-yhteydessä tarvitsee se tietää. SSH-palvelinohjelma asennetaan komennolla apt-get install openssh-server. Huom! Oletuksena tässä on, että käytössä on kaksi kovalevy', joista toinen on mountattu kansioksi /srv/samba.

mkdir -p /srv/samba/{public,kayttajat,testiryhma,henkilosto}
chmod a+rwx /srv/samba/public
chmod g+rwx,o-rwx /srv/samba/kayttajat
chown root:"Domain Users" /srv/samba/kayttajat
chmod g+rwx,o-rwx /srv/samba/henkilosto
chown root:henkilosto /srv/samba/henkilosto

Kansioiden luonnin jälkeen asennetaan ja otetaan käyttöön ACL-tuki. Tällä tekniikalla saadaan määriteltyä kansioille ja tiedostoille useampia omistajia sekä ryhmiä, ja muokata niiden oikeuksia. ACL otetaan käyttöön asentamalla paketti komennolla

apt-get install acl

Ominaisuus ei ole heti käyttövalmis, vaan se pitää mahdollistaa vielä tiettyyn levyosioon. Tämä tapahtuu muokkaamalla tiedostoa /etc/fstab ja muokataan siellä riviä, jossa mounttaus-määrittely annetaan.

gedit /etc/fstab

# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    defaults        0       0
/dev/hda1       /               ext3    errors=remount-ro 0       1
/dev/hda5       none            swap    sw              0       0
/dev/hdc        /media/cdrom0   udf,iso9660 user,noauto     0       0
/dev/fd0        /media/floppy0  auto    rw,user,noauto  0       0
/dev/hdb1       /srv/samba      ext3    acl,defaults    0       0


Käynnistä kone uudestaan ja testaa järjestelmää seuraavilla komennoilla

smbclient -L localhost -U TESTIVERKKO.INFO\teemu
smbclient //localhost/henkilosto -U TESTIVERKKO.INFO\teemu

Jos yllä olevat komennot menevät läpi ilman virheitä, yritä yhteydenottoa Windows koneella


Sisällysluetteloon


AD => Apache

Laajennetaan Linuxin käyttömahdollisuuksia Windows-toimialueissa lisäämällä alueeseen WWW-palvelu. Käytetään palvelinohjelmana tunnettua Apachea. Suurin ero edellisiin on se, että nyt autentikointi tehdään käyttäen LDAP-protokollaa. Edellisissä tämän rajapinnan hoiti Samba, mutta nyt ei olla sen kanssa missään tekemisissä. Itse asiassa konetta ei tarvitse liittää edes toimialueelle. Tämän asennuksen jälkeen homma näyttää siis alla olevan kuvan kaltaiselta.

Ad ja Apache

Aloitetaan homma asentamalla kaksi pakettia. Ensimmäinen paketti on Apache2, joka on itse WWW-palvelinohjelma. Toisena on työkalut, joilla testataan koneiden välistä LDAP-yhteyttä. Asennnus tapahtuu komennolla

apt-get install apache2 ldap-utils

Tehdään ensimmäinen kysely AD-koneen kannasta

debian-lenny:~# ldapsearch -x -h ad.testi.syo -D "teemu@testi.syo" -W -b "cn=users,dc=testi,dc=syo"
Enter LDAP Password: 
....
# Teemu Testaaja, Users, testi.syo
dn: CN=Teemu Testaaja,CN=Users,DC=testi,DC=syo
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: user
cn: Teemu Testaaja
sn: Testaaja
givenName: Teemu
distinguishedName: CN=Teemu Testaaja,CN=Users,DC=testi,DC=syo
instanceType: 4
whenCreated: 20090306080404.0Z
whenChanged: 20090306080431.0Z
displayName: Teemu Testaaja
uSNCreated: 12776
memberOf: CN=henkilosto,CN=Users,DC=testi,DC=syo
uSNChanged: 12786
name: Teemu Testaaja
objectGUID:: fjbL9WU6H0OAaq8pIM9tnA==
userAccountControl: 512
badPwdCount: 0
codePage: 0
countryCode: 0
badPasswordTime: 0
lastLogoff: 0
lastLogon: 128808003791679984
pwdLastSet: 128808002449959504
primaryGroupID: 513
objectSid:: AQUAAAAAAAUVAAAAm1i4EYSY8OHavht5UgQAAA==
accountExpires: 9223372036854775807
logonCount: 2
sAMAccountName: teemu
sAMAccountType: 805306368
userPrincipalName: teemu@testi.syo
objectCategory: CN=Person,CN=Schema,CN=Configuration,DC=testi,DC=syo
dSCorePropagationData: 16010101000000.0Z
lastLogonTimestamp: 128808002714436816
....

Yhteys on siis kunnossa. Lisäkyselyjä voi tehdä asian valaisemiseksi vaikkapa seuraavilla komennoilla

ldapsearch -x -LLL -E pr=200/noprompt -h ad.testi.syo -D "teemu@testi.syo" -w Sala1234 -b "cn=users,dc=testi,dc=syo"
ldapsearch -x -LLL -E pr=200/noprompt -h ad.testi.syo -D "teemu@testi.syo" -w Sala1234 -b "cn=users,dc=testi,dc=syo" -s sub "(cn=*)" cn mail sn
ldapsearch -x -h ad.testi.syo -D "teemu@testi.syo" -b "cn=users,dc=testi,dc=syo" -s sub "(cn=*)" givenname userPrincipalName

Kun kysely-yhteys toimii, voidaan siirtyä seuraavaan vaiheeseen. Seuraavana konfiguroimme WWW-palvelinohjelman toimivaksi. Tehdään ensimmäisenä kansio, johon tullaan pääsyä rajoittamaan.

mkdir /var/www/ad

Otetaan Apachen LDAP-moduli käyttöön. Tällä modulilla Apache tekee LDAP-kyselyjä AD-koneelle.

a2enmod authnz_ldap

Muokataan Apachen oletustiedostoa sellaiseksi, että tiettyihin kansioihin menevät kyselyt autentikoidaan AD-tunnuksilla. Oletustiedosto löytyy kansiosta /etc/apache2/sites-available ja sieltä tiedosto default. Tiedosto loppuu riviin </VirtualHost>, joten kannattaa liittää seuraavassa oleva teksti tiedoston loppuun. Pitää kuitenkin varoa, ettei </VirtualHost> tule kahteen kertaan.

gedit /etc/apache2/sites-available/default

	<Directory "/var/www/ad">
		AuthBasicProvider ldap
		AuthType Basic
		AuthzLDAPAuthoritative off
		AuthName "AD Intra"
		AuthLDAPURL "ldap://ad.testi.syo/DC=testi,DC=syo?sAMAccountName?sub?(objectClass=user)" NONE
		AuthLDAPBindDN "apache@testi.syo"
		AuthLDAPBindPassword "Testi1234"
		require ldap-attribute objectClass=user
	</Directory>
</VirtualHost>

LDAP-kyselyissä haetaan tiettyjä asetuksia tiedostosta /etc/ldap/ldap.conf. Toisekseen tiedostossa voidaan määrätä kaikki LDAP-kyselyt käyttämään tiettyjä arvoja. Tässä tapauksessa siihen pitää alla oleva rivi. Tämän rivin merkitys löytyy esimerkiksi tästä materiaalista.

gedit /etc/ldap/ldap.conf

referrals	no

Apachen uudelleenkäynnistämisen jälkeen asennus on valmis. Luodaan AD:lle käyttäjä apache salasanalla Testi1234. Kannattaa laittaa tilin asetukset sellaiseksi, että salasana on aina voimassa, eikä sitä voi muuttaa. Apachen käynnistäminen tapahtuu esimerkiksi komennolla

/etc/init.d/apace2 restart

Lighttpd

nas:/etc/lighttpd# lighty-enable-mod
Available modules: auth cgi fastcgi proxy rrdtool simple-vhost ssi ssl status userdir
Already enabled modules: auth status
Enable module:
Run /etc/init.d/lighttpd force-reload to enable changes
nas:/etc/lighttpd# cat lighttpd.conf                                       
----------
# ldap authentication
auth.backend                    = "ldap"
auth.backend.ldap.hostname      = "192.168.1.103"
auth.backend.ldap.base-dn       = "dc=testiverkko,dc=info"
auth.backend.ldap.filter        = "(&(objectClass=user)(sAMAccountName=$))"

auth.backend.ldap.bind-dn       = "testi@testiverkko.info"
auth.backend.ldap.bind-pw       = "Sala1234"

auth.require                    = ( "/server-status" =>
                                        (
                                                "method"  => "basic",
                                                "realm"   => "Admin only page",
                                                "require" => "valid-user"
                                        )
                                )
nas:/etc/lighttpd# 

Ja testaamaan!            

Sisällysluetteloon


AD => FTP

FTP on tiedonsiirtoon tarkoitettu protokolla. Vaikka sen juuret ovat kymmenien vuosien päässä, on se silti eräs parhaimmista ja tehokkaimmista tiedonsiirtoprotokollista. FTP-protokollaa ollaan syytetty tietoturvan heikkoudesta, mikä pitää pitkälti paikkaansakin. Tämä heikkous tulee salasanan käsittelystä, sillä palvelimen ja asiakasohjelman välinen kättely tehdään oletuksena selväkielisenä. Parannuksena tähän on otettu käyttöön TLS-salaus, jolla voidaan salata pelkästään kättely tai vaikka koko tiedonsiirto. Salauksien yhteydessä täytyy tehdä kuitenkin aina kompromisseja, sillä salaus rasittaa aina valtavasti prosessoria. Meidän tapauksessa emme käytä salausta, sillä se ei ole olennainen asia tässä harjoituksessa.

Ympäristömme tulee olemaan alla olevan kuvan kaltainen. Jutun juoni on siis se, että meillä on tietovarasto, johon pyrimme siirtämään isoja tietomääriä mahdollisimman tehokkaasti. Käytämme AD:n tunnuksia, joten niitä hallitaan keskitetysti.

AD ja FTP

Debianille on saatavana on monta valmista FTP-palvelinohjelmaa, joista me käytämme ohjelmaa nimeltä Pure-ftpd. Pure-ftpd on siitä hyvä ohjelma, että se käyttää oletuksena PAM:a, joten se saadaan pienin muutoksin käyttämään AD:n tilejä. Ennen käyttöönottoa meidän täytyy konfiguroida kahta tiedostoa, jotka ovat kansiossa /etc/default oleva pure-ftpd-common ja kansiossa /etc/pam.d tiedosto pure-ftpd.

Asennus aloitetaan seuraavalla komennolla

apt-get install pure-ftpd

Tämän jälkeen muokataan tiedostoa pure-ftpd-common alla olevan kaltaiseksi

gedit /etc/default/pure-ftpd-common 

# STANDALONE_OR_INETD
# valid values are "standalone" and "inetd".
# Any change here overrides the setting in debconf.
STANDALONE_OR_INETD=standalone

Ennen uudelleenkäynnistystä muokataan PAM-profiilitiedostoa niin, että se näyttää seuraavalta

gedit /etc/pam.d/pure-ftpd

# PAM config for pure-ftpd
@include common-auth
@include common-account
@include common-session
gedit /etc/inetd.conf

#:STANDARD: These are standard services.
#ftp    stream  tcp     nowait  root    /usr/sbin/tcpd /usr/sbin/pure-ftpd-wrapper

Käynnistetään palvelu uudestaan ja loggaudutaan sopivalla ftp-ohjelmalla sisään palveluun

/etc/init.d/pure-ftpd

Alla esimerkki yhteydenotosta

ville@debian-lenny:~$ ftp debian-lenny
Connected to debian-lenny.testi.syo.
220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
220-You are user number 1 of 50 allowed.
220-Local time is now 16:09. Server port: 21.
220-This is a private system - No anonymous login
220-IPv6 connections are also welcome on this server.
220 You will be disconnected after 15 minutes of inactivity.
Name (debian-lenny:ville): 
331 User ville OK. Password required
Password:
230-User ville has group access to:  testiryh domain u
230 OK. Current directory is /home/TESTI/ville
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> 

Sisällysluetteloon


AD => WebDAV

WebDAV on erittäin kätevä protokolla jakaa tiedostoja verkon yli. WebDAV on yksinkertainen sekä tehokas, ja tarvittaessa turvallisuutta voidaan parantaa hyvinkin "keveillä" toimenpiteillä. Ongelmana on käyttäjätunnuksien liittäminen hakemistorakenteeseen.


AD ja WebDAV


Tehdään ensimmäisenä kansio, johon tullaan pääsyä rajoittamaan.

mkdir /var/www/webdav

Otetaan Apachen WebDAV-moduli käyttöön.

a2enmod dav dav_fs

Muokataan Apachen oletustiedostoa sellaiseksi, että webdav-kansioon menevät kyselyt autentikoidaan AD-tunnuksilla. Oletustiedosto löytyy kansiosta /etc/apache2/sites-available ja sieltä tiedosto default. Tiedosto loppuu riviin </VirtualHost>, joten kannattaa liittää seuraavassa oleva teksti tiedoston loppuun. Pitää kuitenkin varoa, ettei </VirtualHost> tule kahteen kertaan.

gedit /etc/apache2/sites-available/default

	<Directory "/var/www/webdav">
		DAV On
		AuthBasicProvider ldap
		AuthType Basic
		AuthzLDAPAuthoritative off
		AuthName "AD Intra"
		AuthLDAPURL "ldap://ad.testi.syo/DC=testi,DC=syo?sAMAccountName?sub?(objectClass=user)" NONE
		AuthLDAPBindDN "apache@testi.syo"
		AuthLDAPBindPassword "Testi1234"
		require ldap-attribute objectClass=user
	</Directory>
</VirtualHost>

Käynnistetään Apache uudestaan, ja testataan toimintaa sopivalla asiakasohjelmalla.


Sisällysluetteloon


Henkilökohtaiset työkalut