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 |
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.
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ä.
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.
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-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 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
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-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
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!
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!
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.
Yksinkertaisin ja toimivin menetelmin voidaan hallita Linux-toimialuetta!
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#
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.
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.
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:
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
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:~#
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
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.
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.
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.
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
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ä.
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
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.
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
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!
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.
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>
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.
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.