Difference between revisions of "Doména FJFI"
(→Samba) |
(→FnspeCmdService) |
||
Line 408: | Line 408: | ||
===FnspeCmdService=== | ===FnspeCmdService=== | ||
− | Toto je služba, která poslouchá na definovaném portu a umožňuje spustit lokání skript s parametry, které přijdou ze sítě. V tuto chvíli slouží k | + | Toto je služba, která poslouchá na definovaném portu a umožňuje spustit lokání skript s parametry, které přijdou ze sítě. V tuto chvíli slouží k vytváření uživatelských mailboxů při [https://nms.fjfi.cvut.cz/user/konto.php aktivaci konta] a nastavení přesměrování FJFI www stránek. Aktuální verzi je možné stáhnout na: |
svn co https://comp.fjfi.cvut.cz/repos/cmd_service cmd_service | svn co https://comp.fjfi.cvut.cz/repos/cmd_service cmd_service | ||
Line 418: | Line 418: | ||
# installutil.exe /u "c:\cesta\k\binarce\FnspeCmdService.exe" | # installutil.exe /u "c:\cesta\k\binarce\FnspeCmdService.exe" | ||
− | Poté je možné tuto službu spouštět/zastavovat standardním souborem přes mmc. Po prvním spuštění vytvoří v registrech klíč s konfigurací, kterou je pak možné upravit: | + | Poté je možné tuto službu spouštět/zastavovat standardním souborem přes mmc (je potřeba nastavit, aby se spouštěla automaticky při startu systému). Na firewallu je nutné povolit přístup na port, na kterém bude služba poslouchat. Z hlediska bezpečnosti je vhodné povolit přístup pouze z IP adres, které tuto službu nezbytně potřebují. |
+ | |||
+ | Po prvním spuštění vytvoří v registrech klíč s konfigurací, kterou je pak možné upravit: | ||
HKEY_LOCAL_MACHINE\SOFTWARE\FnspeCmdService | HKEY_LOCAL_MACHINE\SOFTWARE\FnspeCmdService | ||
port - číslo portu, kde služba poslouchá (3210) | port - číslo portu, kde služba poslouchá (3210) | ||
script - skript, který má spustít (cmd.vbs) | script - skript, který má spustít (cmd.vbs) | ||
+ | |||
+ | HKEY_LOCAL_MACHINE\SOFTWARE\FnspeCmdService\config | ||
+ | # mapování předaných dat na parametry příkazové rádky | ||
+ | # key ..... příkaz cmd_service | ||
+ | # value ... parametry výše uvedeného skriptu | ||
+ | |||
+ | Příklad záznamů v registrech: | ||
+ | |||
+ | [HKEY_LOCAL_MACHINE\SOFTWARE\FnspeCmdService] | ||
+ | "port"=dword:00000c8a | ||
+ | "script"="c:\\scripts\\umapsync\\umapsync.vbs" | ||
+ | "timeout"=dword:00007530 | ||
+ | |||
+ | [HKEY_LOCAL_MACHINE\SOFTWARE\FnspeCmdService\config] | ||
+ | "mail"="mailbox create" | ||
+ | "web"="web redirect" | ||
Otestovat se dá nejlépe nějakým rozumným telnet klientem (ten ve woknech nepatří mezi ty rozumné) | Otestovat se dá nejlépe nějakým rozumným telnet klientem (ten ve woknech nepatří mezi ty rozumné) | ||
telnet jmeno.stroje.s.bezici.sluzbou port | telnet jmeno.stroje.s.bezici.sluzbou port | ||
− | + | mail username | |
+ | OK/FAIL | ||
+ | |||
+ | telnet jmeno.stroje.s.bezici.sluzbou port | ||
+ | web username http://nejaka.domena.cz/adresa | ||
OK/FAIL | OK/FAIL | ||
− | Návratová hodnota OK/FAIL je nastavena podle toho, jestli byl skript uspěšně vykonán a skončil s exit kódem 0. Je-li navrácena chybová hodnota FAIL, bude v application event logu poznamenáno, kde nastala chyba. | + | Návratová hodnota OK/FAIL je nastavena podle toho, jestli byl skript uspěšně vykonán a skončil s exit kódem 0. Je-li navrácena chybová hodnota FAIL, bude v application event logu poznamenáno, kde nastala chyba. Pokud došlo k chybě při vykonávání skriptu, budou podrobnosti v log souborech vykonávaného skriptu. |
==Uživatelská jména== | ==Uživatelská jména== |
Revision as of 22:18, 27 January 2009
Servery / Služby |
Přístupné komukoliv |
Omezený/individuální účet |
Služby |
backup · DHCP · DNS · doména FJFI · eduroam · fileserver · IdM · forum · gitlab · lists · moodle · indico · mailgw · K4 · mailserver · NMS · openvpn · skolniftp · ssh · videokonference · VoIP · video · VPN · wififjfi · wiki · www |
Učebny |
e-sklipek · KFE unixlab · KFE pclab · PD1 · KM 105 · KM 115 |
Ostatní |
Network · Blokované porty |
[edit] · [view] |
Contents
- 1 Servery
- 2 Firewall
- 3 Konfigurace DNS
- 4 NTP - synchronizace času
- 5 Rozšíření schemat Active Directory
- 6 Uživatelské účty
- 7 Diskové služby
- 8 Kerberos
- 9 LDAP
- 10 Certifikáty
- 11 Exchange
- 12 Konfigurace Linuxu/Unixu
Servery
jméno (aliasy) | umístění | funkce / poznámka |
---|---|---|
breh1 | Břehová | DC, LDAP, Backup Exchange |
breh2 | Břehová | DC, fileserver |
trk | Trojanova | hlavní DC, LDAP, Exchange, IT info website |
frk | Trojanova | DC, LDAP, fileserver, printserver, uživatelský IIS, webdav |
kmk | Trojanova | DC, Tereza services, admin IIS, NOD32 update server |
troja1 | Trója | DC, fileserver |
Kromě těchto doménových jmen bude na každý server směřovat několik aliasů pro zjednodušení a zobecnění konfigurace dalších služeb (Kerberos, LDAP, ...). Konfigurace ostatních strojů tak bude nezávislá na konkrétním jméně DC a v případě vypadku/zrušení některého DC se pouze alias nasměruje na některý funkční DC.
- Servery - aliasy pro doménové kontrolery (hlavní wc), wc1, wc2, ...
- Kerberos - aliasy krb (musí na něm běžet krb-admin), krb1, krb2, krb3, ...
- LDAP - aliasy ldap (alias na vždy dostupný LDAP server), ldap1, ldap2, ldap3, ...
- NTP - alias ntp (nutné zajistit, aby zde vždy běžel synchronizovaný NTP server)
- Webmail - alias webmail, mail
Firewall
protokol | port | rozsah |
---|---|---|
echo | ICMP | 147.32.0.0/16 (resp. rozsah FJFI), pro servery s veřejnými službami by bylo vhodné 0.0.0.0/0 |
SMTP | 25 TCP | 147.32.5.45, 147.32.9.3 (mailgw) - pouze pro exchange servery |
|
|
|
LDAP | 389 TCP+UDP | 0.0.0.0/0 |
LDAPs | 636 TCP | 0.0.0.0/0 |
LDAP GC | 3268 TCP | ?.?.?.? (global catalog) |
Kerberos | 88 TCP+UDP | 0.0.0.0/0 |
Kerberos kpasswd | 464 TCP+UDP | 0.0.0.0/0 |
|
|
|
NTP Time Service | 123 TCP+UDP | 0.0.0.0/0 |
SNMP | 161 TCP+UDP | pro management stroje (nms.fjfi.cvut.cz) |
Samba | 137,138,139,445 TCP+UDP | minimálně rozsah FJFI (ČVUT?) |
RPC | 135 TCP | rozsah FJFI(?) (ČVUT?) - nutné pro připojení počítače do domény |
RPC(?) | 2235 TCP | mezi doménovými kontrolery(?) - nutné WMI(?) |
Konfigurace DNS
Primární DNS server pro doménu FJFI běží stále na ISC Bind. Je to jak z bezpečnostních důvodů (oddělení služeb/uživatelů Windows Serverů od správy DNS) tak i s ohledem na jednodušší rozšiřitelnost (v roce 2008 bude pravděpodobně zprovozněn DNSSEC). Pro potřeby doménových kontrolerů je potřeba zavést některé specielní záznamy. Detaily lze nalézt v dokumentu Configuring Non-Windows 2000 DNS Servers to Support Active Directory nebo také v DNS & Bind Cookbook.
Microsoft si bohužel pro DDNS update vytvořil vlastní zabezpečený protokol GSS-TSIG, který je podporován až v ISC BIND 9.5 (jejich DNS server totiž původně vychází z ISC BIND 4, ale neimplementovaly RFC standardy pro zabězpečení). V konfiguraci named.conf je potřeba přidat:
options { ... tkey-gssapi-credential "DNS/ns.fjfi.cvut.cz"; tkey-domain "FJFI.CVUT.CZ"; ... } ... zone "fjfi.cvut.cz" { type master; file "data/test.fjfi.cvut.cz.zone"; check-names ignore; ... update-policy { // grant dcX$@fjfi.cvut.cz self fjfi.cvut.cz. ANY grant dcX$@fjfi.cvut.cz name dcX.fjfi.cvut.cz. ANY; grant dcX$@fjfi.cvut.cz subdomain _tcp.fjfi.cvut.cz. ANY; grant dcX$@fjfi.cvut.cz subdomain _udp.fjfi.cvut.cz. ANY; grant dcX$@fjfi.cvut.cz subdomain _msdcs.fjfi.cvut.cz. ANY; grant dcX$@fjfi.cvut.cz subdomain _sites.fjfi.cvut.cz. ANY; grant dcX$@fjfi.cvut.cz subdomain DomainDnsZones.fjfi.cvut.cz. ANY; grant dcX$@fjfi.cvut.cz subdomain ForestDnsZones.fjfi.cvut.cz. ANY; }; }; ...
Dále je potřeba vygenerovat pro DNS server příslušný keytab, ktery bude sloužit k zabězpečení DDNS mezi ISC BIND a Windows DNS klientem právě pomocí GSS-TSIG. Pokud se bind spouští v chrootu, musí být správný krb5.conf a named.keytab v konfiguračním adresáři /var/named/chroot/etc. K vygenerování keytabu na windows lze použít příkaz (nezapomenout, že uvedené doménové jméno musí být na linuxovém stroji uvedeno v /etc/hosts, jinak nefunguje kerberos autentizace)
ktpass -ptype KRB5_NT_PRINCIPAL -princ DNS/ns.fjfi.cvut.cz@FJFI.CVUT.CZ -mapuser FJFI\krb-ns-dns -pass account_password -out named.keytab
Upozornění: v současné implementaci je nutné použít principal přesně ve tvaru DNS/ns.fjfi.cvut.cz@FJFI.CVUT.CZ (včetně velkých písmen v nazvu služby "DNS"). Odpovídající text musí být vyplněn i v named.conf ve položkách tkey-gssapi-credential a tkey-domain. Pokud nejsou tyto hodnoty správně vyplněny, pak daemon buď vůbec nenastartuje (s nepříliš srozumitelnou chybovou hláškou) a nebo není schopen "navázat kerberizované spojení".
Windows DNS klient je standardně nakonfigurován tak, že se nejprve pokouší o DDNS update bez zabezpečení a teprve v případě chyby zkusí GSS-TSIG zabezpečení. Toto chování se dá upravit nastavením registrů.
Pro naše potřeby bylo nejvhodnější přídat doménovým kontrolerům práva na správu specielních záznamů, ale nepovolit jim změny přímo v doméně fjfi.cvut.cz. Uvedené nastavení je dostatečné pro bezproblémový provoz Windows Domény bez nutnosti manuálnich zásahů do DNS v případě rekonfigurace domény (např. přidání/odebrání/přejmenování domain kontroleru). Všechny(?) doménové kontrolery mohou provádět změny v následujících zónách:
_tcp.fjfi.cvut.cz _udp.fjfi.cvut.cz _msdcs.fjfi.cvut.cz _sites.fjfi.cvut.cz DomainDnsZones.fjfi.cvut.cz ForestDnsZones.fjfi.cvut.cz
Pokud je potřeba znovu provést DDNS update těchto specielních záznamů na primárním DNS serveru, je potřeba provést následující příkazy:
net stop netlogon ipconfig /flushdns [restart DNS server] net start netlogon ipconfig /registerdns dcdiag/netdig # to check the server.
Vzhledem k významu DNS záznamů pro tyto delegované zóny je nutné zajistit jejich replikaci na sekundární DNS (tyto záznamy se totiž nereplikují na ns.cvut.cz). Zatím zprovozněno na mailgw1/2.
NTP - synchronizace času
Pro správnou funkci Kerbera je nutná synchronizace času mezi autentizovaným systémem a KDC serverem. Z tohoto důvodu je nutné zajistit, aby se Windows Servery synchronizovali proti nějakému spolehlivému zdroji času a navíc poskytovali NTP službu pro klienty. Aktuální NTP server musí být dostupný na adrese ntp.fjfi.cvut.cz. Ve standardní konfiguraci w2k3 serveru je tolerance v nastavení času mezi serverem a klientem 5 minut. Pokud nebude čas správně synchronizován, pak přestane fungovat nejen přímá autentizace uživatelů, ale i ověřování služeb. Přesný čas na serverech (i klientech) je tedy kritický a je tedy nutné zajistit jeho monitorování (TODO).
Rozšíření schemat Active Directory
Aby mohli být v Active Directory uloženy všechny informace pro každého uživatele je potřeba rozšířit schémata o potřebné třídy a atributy. Většinu operací se schématy není možné vrátit zpět a proto je potřeba se nad tím pořadně zamyslet. Jedinnou možností je v podstatě přeinstalovaní celé domény (možná by to mohlo jit z ntbackupu???).
Active Directory umožňuje přidavat vlastní atributy, ale není možné je v budoucnu odstranit ani není možné měnit některé jejich parametry (např. datový typ). Také lze přidávat vlastní třídy všech typů, ale opět se jich už nikdy nezbavíme. Je také možné přidávat atributy do již existujících tříd, opět neexistuje možnost jejich odstranění.
Nejrozumnější způsob jak přidat vlastní atributy k existujícím objektům je vytvoření vlastní auxiliary class s požadovanými položkami. Pokud je totiž doména i forest nastaven v nativním windows 2003 módu, potom lze používat "dynamic linked auxiliary classes". To znamené, ze k libovolnému objektu lze tuto třídu přidat, ale lze ji také v budoucnu odebrat, pokud by nastaly nějaké problémy s kompatibilitou.
Všechny názvy přidaných atributů a tříd musí mít takový nazev, aby nebyl v konfliktu s existujícími (a to i v budoucnu). Z toho důvodu budou mít jedinečný přefix (ctu resp. fnspe resp. amavis). Kazdý objekt navíc můsí mit jedinečný identifikátor OID z rozsahu přileného VIC ČVUT.
V současnosti je pořeba do Active Directory potřeba přidat následující schemata:
- fnspeAccount - uživatelské informace (osobní číslo, Eduroam účet, zpracování mailů, ...) - FIXME: toto není finální verze!, ale pro testování synchronizací je plně dostačující
- amavisAccount - nastavení filtrování spamů/virů/... na mailgw
Property Sets GUIDs
Slouží k definování standardních přístupových práv na skupiny atributů. Ve schématu tomu odpovídá atribut attributeSecurityGUID. Více infromací zde, zde, zde a zde
General-Information: 59ba2f42-79a2-11d0-9020-00c04fc2d3cf Public-Information: e48d0154-bcf8-11d1-8702-00c04fb96050 Private-Information: 91e647de-d96f-4b70-9557-d63ff4f3ccd8 Personal-Information: 77b5b886-944a-11d1-aebd-0000f80367c1 Email-Information: e45795b2-9455-11d1-aebd-0000f80367c1 Web-Information: e45795b3-9455-11d1-aebd-0000f80367c1 Membership: bc0ac240-79a9-11d0-9020-00c04fc2d4cf User-Logon: 5f202010-79a5-11d0-9020-00c04fc2d4cf User-Account-Restrictions: 4c164200-20c0-11d0-a768-00aa006e0529
Prop.Set | SELF | AUTH |
---|---|---|
General | r | |
Public | r | |
Private | ||
Personal | rw | r |
rw | ||
Web | rw | r |
Membership | ||
User-Logon | ||
User-Account |
Bohužel všechny objekty dědí navíc read práva na všechny atributy od kořene domény přes uživatele Everyone - opravdu netuším, co tímhle nastavením v Microsoftu sledují...
Pro naše učely bude nejvhodnějsí přidat všechny atributy ze třídy amavisAccount do Public-Information property setu (logicky by asi patřili spíš mezi Email-Information, ale proxyAddresses a targetAddress jsou také součástí toho Public setu). Atributy z třídy fnspeAccount vesměs do Public-Information property setu, protože ho uživatel nemá právo přímo modifikovat (možná by bylo vhodnější pro některé atributy použít property set Private-Information, ale ten je až standardní součástí Windows 2008 serveru - backport tohoto property setu bych raději neriskoval s ohledem na nejasný upgrade domény). Je také dobré mít na paměti, že některé aplikace mohou (při instalaci) přesunout atributy do jeného přoperty setu, na který nebudou nastavany správně "naše" přístupová práva (např. Exchange 2007 přesouvá svoje atřibuty z Public-Information do Exchange-Information property setu)
Některé atributy fnspeAccount nejen, že nesmí být možné měnit, ale ani je číst. Týká se to hlavně hesel (fnspeEduroamPassword, fnspeWifiPassword). Pro ty je asi nejvhodnější použít vlastnosti LDAP schematu "Confidentiality Bit" (více zde, zde. Takto označený atribut nemají právo číst žádní uživatelé s vyjímkou administrátorů.
Uživatelské účty
- veškeré organizační jednotky s běžnými uživatelskými účty budou pod ou=People,dc=fjfi,dc=cvut,dc=cz - nesmí zde být vytvářeni uživatelé s nějakou formou admin práv (kvůli zabezpečení)
- ou=Auto - automaticky synchronizované učty proti stavu v Usermapu (vytváření i rušení)
- ou=Trash - automaticky rušené účty - sem budou přesunuty účty z ou=Auto a budou zde čekat na potvrzení zrušení (tyto účty budou zablokované)
- ou="Department"? - manuálně spravované učty (převážně zaměstnanci)
- stačila by jedna organizační jednotka pro zaměstnance, ale z důvodu přehlednosti je lepší mít zvlášť "každou" katedru
- příslušnost ke katedře je relace 1:N a bude dána zařazením uživatele do odpovídajících skupin (zařazení do nějaké OU "domovské" katedry je nepovinné/nezávislé)
- jména budou obsahovat zkratky kateder (Dekanat, KDAIZ, KF, KFE, KIPL, KJ, KJCH, KJR, KM, KMAT, KSE, Tereza)
- ou=Guest - povinná doba expirace
- zvláštní postavení bude mít skupina ou=Specials pro učty se specálními přístupovými právy - ta musí být přímo pod dc=fjfi,dc=cvut,dc=cz (z hlediska bezpečnosti)
Práva v Active Directory
U uživatelů (ou=People,dc=fjfi,dc=cvut,dc=cz) zachovat standardní nastavení s následujícími vyjímkami:
- nesmí mít přístup k atributům ve třídě fnspeAccount, amavisAccount u ostatních uživatelů
- nesmí mít právo read/search ani vlastní atribut fnspeEduroamPassword, fnspeWifiPassword
- vlastník má právo nastavovat fnspeEduroamPassword, fnspeWifiPassword (tohle není nezbytně nutné)
- vlastník si může libovolně měnit atributy amavisAccount (tohle není nezbytně nutné)
- ani vlastník nemá právo nastavovat žádné další ctu*, fnspe* atributy
- shrnuto - jestli je to jednodušší pro realizaci, tak bych (zatím) první bod rozšířil i na samotného vlastníka
Nastavit práva specielním účtům podle níže uvedené tabulky. Uvedeno je jen kam a na co má mít daný účet přístup - to znamená, že k ostatním položkám nesmí mít přístup.
jméno | využití a práva |
---|---|
proxy_posix | pro ou=People - read/search pro posixAccount atributy; omezení na IP rozsah FJFI (ČVUT?) |
proxy_wifi | pro ou=People - read/search pro sAMAccountName, fnspeEduroam*, fnspeWifi*; omezení na IP Radius serverů a NMS |
proxy_mailgw | pro ou=People - read/search pro proxyAddresses, targetAddress, amavis*; omezení na IP mailgw serverů a NMS |
proxy_nms | pro ou=People - read/search/write konfigurace účtu fnspe*, amavis*, targetAddress, read/search proxyAddress, write(reset) unicodePwd; omezení na IP NMS write práva na "Reset Password" pro objekty User, inetOrgPerson; write práva na atribut pwdLastSet pro objekty User, inetOrgPerson (atribut je součástí property setu User-Account-Restrictions); write práva na Public-Information property set pro objekty User, inetOrgPerson; |
proxy_usermap | pro ou=People - read/search mail, read/search ctuPersonaId; omezení na IP ČVUT(?) |
proxy_host proxy_service |
účet pro Kerberos host/service ticket host/hostname@FJFI.CVUT.CZ resp. service/hostname@FJFI.CVUT.CZ, více informací na #Host/Service Kerberos Key a v KB 324144 |
proxy_bind | testovací uživatelský účet monitoring LDAP, nulová práva krom autentizovaného LDAP bind |
|
|
Typy účtů
- konto (objectClass=user)
- kontakt (objectClass=contact)
- unix (objectClass=posixAccount)
eduroam (objectClass=fnspeEduroamAccount)fnspeAccount (objectClass=fnspeAccount)- fjfi konto (objectClass=fnspeAccount)
- amavis (objectClass=amavisAccount)
Mohou existovat následující kombinace (v závorce volitelné položky)
- konto+unix+fnspeAccount[+amavisAccount]] - klasické uživatelské konto
kontakt+[fnspeAccount+amavisAccount] - mail kontakt nebo samotné eduroam konto
FIXME: promyslet využití jedné nebo více tříd pro informace v AD (fnspeAccount x fnspeAccount+fnspeEduroamAccount+...) - zatím použít jednu třídu fnspeAccount pro vše + amavisAccount
FIXME: funkce pro konverzi konto<->kontakt? funkce pro přidání/odebrání učtu např. eduroam ke kontaktu, fnspeAccount ke kontu, ... - tohle zatim neřešit
Synchronizace s Userermapem
Usermap slouží jako primární zdroj pro automatické zakládání a rušení účtů. Každému studentovi/zaměstnaneci/spolupracovníkovi FJFI se automaticky vytvoří účet v ou=Auto se standardními přístupovými právy. Pokud bude uživatel potřebovat nějaké individuální nastavení účtu v AD, měl by být přesunut do příslušné organizační jednotky. Účty v ou=Auto budou také automaticky rušeny resp. přesunuty od ou=Trash a zablokovány (podle stavu účtu v Usermapu). Po jednom roce od přesunu do ou=Trash budou účty automaticky odstraněny včetně uživatelských dat (domovské adresáře, maily, databáze, ...) - vytvořit rozhraní pro volání externích skriptů. Pokud se změní stav v Usermapu na zombie (oUser.status - viz. dále) nebo učet z Usermapu úplně zmizí, potom se lokální stav nastaví "kill". V tomto stavu účet setrvá konfigurovatelnou dobu (jeden měsíc?, kdy si uživatel bude moci stáhnout svoje data nebo zařidit si přesunutí do organizační jednotky, kde nebude jeho účet automaticky rušen) než přejde i na FJFI do stavu "zombie". Takový účet bude zablokován a přesunut do ou=Trash. O přechodu účtu do stavu "kill" bude uživatel informován mailem. Stav bude uchováván v atributech fnspeStatus, fnspeStatusTimestamp.
životní cyklus uživatelského účtu
- vznik na základě synchronizace učtů s Usermapem nebo commandline
- automaticky synchronizován dle informaci v Usermapu (spojeno přes uživatelské osobní číslo)
- účty v ou=Auto automaticky rušeny pokud zmizí z Usermapu nebo oUser.status bude zombie
- nastavit lokální status "kill" a poznamenat si timestamp
- poslat info uživateli o rušení jeho účtu
- za měsíc učet přesunout do ou=Trash a zablokovat
- účty v ou=Trash automaticky rušit po uplynutí jednoho roku
Atributy
- z důvodů lepší kompatibility a podpory FJFI specifických atributů je potřeba do objectClass přidat následující auxiliary classes: inetOrgPerson, posixAccount, fnspeAccount, amavisAccount - poslední dvě (tři) jen pokud jsou aktuálně potřeba (amavisAccount bude potřeba až když uživatel provede vlastní konfiguraci spamového filtru)
- vytvořit speciální účet v AD s minimálními právy a možnosti nastavovat atributy z fnspeAccount a amavisAccount
- uživatel nesmí mít právo měnit (některé) svoje atributy (např. ctuPersonalId, fnspeEduroamDisabled, ...)
- objekt oUser se odkazuje na objekt ze skriptu pro import dat z Usermapu viz. [1]
atribut | typ | popis |
---|---|---|
Uživatelské jméno | ||
sAMAccountName | C | uživatelské jméno - pro studenty Usermap username, pro zaměstnance příjmení(?); pro případ konfliktu mít algoritmus pro automatické řešení - musí brát v úvahu již existující jména, mailové adresy (musí existovat možnost vytvořit adresu "sAMAccountName"@fjfi.cvut.cz), |
cn | C | nastavit na stejnou hodnotu jako sAMAccountName |
uid | C | nastavit na stejnou hodnotu jako sAMAccountName |
msSFU30Name | C | nastavit na stejnou hodnotu jako sAMAccountName |
posixAccount | ||
uidNumber | C | vyplnit jen při vytváření účtu, jedinečné číslo v intervalu <1000,30000), pro první import použít informace z dokumentu o migraci uživatelských účtů |
gidNumber | C | vyplnit jen při vytváření účtu číslem 1000 |
homeDirectory | C | vyplnit jen při vytváření účtu stringem /home/"sAMAccountName" |
loginShell | C | vyplnit jen při vytváření účtu stringem /bin/bash |
gecos | A | synchronizovat vždy stringem vytvořeným z "givenName sn", bez diakritiky |
| ||
A | pro zaměstnance Jméno.Příjmení@fjfi.cvut.cz pro studenty "sAMAccountName"@fjfi.cvut.cz (pozor na jména/příjmení, které se skládají z více části oddělených mezerami), pro první import použít informace z dokumentu o migraci uživatelských účtů; v případě konfliktu zaměstnanecké adresy Jméno.Příjmení@fjfi.cvut.cz tuto adresu nevytvářet, ale poslat mail správci | |
proxyAddresses | AA | pro všechny "sAMAccountName"@fjfi.cvut.cz, zaměstnanci navíc Jméno.Příjmení@fjfi.cvut.cz (v případě konfliktu informovat správce mailem nebo lépe rozmyslet algoritmus pro automatické řešení těchto případů), nastavit defaultni adresu na tu "nejhezčí" (pokud existuje např. Jméno.Přijmení@fjfi.cvut.cz) - prefix SMTP:, ostatní mají prefix smtp: |
|
|
|
uživatelské informace | ||
displayName | A | kvůli hledání synchronizovat plně jméno (včetně titulů) s diakritikou a bez diakritiky (do atributů displayName, displayName;lang-cs, displayName;lang-en), displayName vyplnit prozatím bez diakritiky, |
name | A | to samé co do displayName (?) - nyní jen jméno bez diakritiky a bez titulů |
wWWHomePage | A | synchronizovat oUser.privateWeb |
facsimileTelephoneNumber | A | synchronizovat oUser.fax |
telephoneNumber | A | synchronizovat oUser.phone |
mobile | A | synchronizvat oUser.mobilePhone |
otherPhone | A | synchronizovat oUser.privatePhone |
??? | A | synchronizovat oUser.privateMail (existuje nějaký vhodný standardní atribut? pokud ano, tak ho použít. |
department | A | synchronizovat vše z oUser.departmentName |
departmentNumber | A | synchronizovat vše z oUser.departmentNumber |
fnspeStatus | A | synchronizovat oUser.status ("new", "active", "kill", "zombie", "dead", "unknown") |
fnspeStatusTimestamp | ? | časová značka změny fnspeStatus, měnit pouze v případě, že se mění také fnspeStatus |
c | C | nastavit při vytváření na "CZ" |
co | C | nastavit při vytváření na "Czech Republic" |
l | A | synchronizovat oUser.address(0).city |
street | A | synchronizovat oUser.address(0).street |
postalCode | A | synchronizovat oUser.address(0).zip |
title | C | nastavit na "CTU FNSPE" |
další zajímavé atributy | ||
memberOf | AP | podle skupin existujících v AD a v oUser.groups, podrobné vysvětlení dále u popisu skupin |
profilePath | C | vybrat server podle místa katedry phd studenta či zaměstnance |
scriptPath | ? | |
userAccountControl | ? | pro blokování účtu(?) |
Legenda:
- C - vyplnit při vytváření nového účtu
- A - synchronizovat vždy podle aktuálních údajů (z Usermapu)
- AA - pouze přidávat aktuální údaje (zachovat všechny stávající hodnoty atributu)
- AP - zachovat "neznámé" hodnoty a synchronizovat ostatní dle definovaného seznamu
Konfigurace synchronizace
Synchronizační skript si bude načítat externí soubor s konfiguracemi. Zde budou uloženy informace potřebné pro přístup k informačním systémům (jména/hesla) a také seznam cvutPersonalId, které se nemájí importovat z Usermapu. Také zde bude seznam uživatelských jmen, které nelze použít pro hodnotu atributu sAMAccountName (např. root, abuse, mail, ...)
API synchronizačního skriptu
FIXME: tohle není finální verze, je potřeba detailně promyslet - no snad už to je trošku kompletní
Synchronizační skript by měl poskytnout přehledné API k následujícím operacím:
- fnspeSync()
- synchronizuj s Usermapem - smaž/přesuň/updatuj/vytvoř účty (vrátí mailem informace o konfliktech, nekonzistencích, ...)
- fnspeSync(cvutPersonalId)
- synchronizuj jednoho konkrétního uživatele
- fnspeCreateUser(type, cvutPersonalId, username, ou, dictionary)
- vytvoř uživatele - obecná funkce (nebude volána přímo, ale přes specializovanější fce), parametry nemusí mít nastavenou hodnotu, je-li nastaveno
- type - typ účtu ("user", "mail") - asi udělat jako bitovou mapu
- user - standardní účet
- mail - vytvořit také mailstore
- cvutPersonalId, dotáhne informace z Usermapu
- username - je preferováno před tím případně dotaženým z Usermapu
- ou - vytvoří uživatele v příslušné ou (jinak standardně v ou=Auto)
- dictionary - vše se zkopíruje do hodnot atributů vytvářeného uživatele
- fnspeCreateUsermapUser(...)
- stejné parametry jako předchozí fce mimo typu, který bude nastaven na "user"+"mail", cvutPersonalId je povinný
- fnspeCreateFnspeUser(...)
- stejné parametry jako předchozí fce mimo typu a cvutPersonalId (nastaveno automaticky na "user"+"mail" resp. prázdná hodnota), username je povinný
- fnspeCreateGuestUser(...)
- stejné jako createFnspeUser, ale typ jen "user" (tj. vytvořit bez mailstore), před username přidá prefix "guest_", založí v ou=Guest
- fnspeTrashUser(dn)
- přesune uživatele s DN do ou=Trash a disabluje přístup
- fnspeRemoveUser(dn)
- úplně odstraní uživatele s DN včetně mailstore a dat(?)
změň charakter účtu - povinné parametry: operace (add|remove), charakter (user|contact|mail|eduroam|fnspe|...)samostatná konfigurace způsobu synchronizace pro všechny atributy (full|add|add+remove_list|one_time|...) - FIXME: promyslet
- fnspeCreateOfficialAddresses(dn)
- pokud je vyplněn atribut targetAddress nebo homeMDB (prostě má nastaven forward nebo existuje účet na Exchange) tak přidá do atributů proxyAddresses adresu username@fjfi.cvut.cz a pro zaměstnance navíc jméno.příjmení@fjfi.cvut.cz (zas v případě konfliktu s existující adresou ji nepřidá a pošle mail správci), nastaví atribut mail na jméno.příjmení@fjfi.cvut.cz - pro ty, co tuto adresu mají - pro ostatní na username@fjfi.cvut.cz
- fnspeCreateMailstore(dn)
- vytvoří mail účet na Exchange
- fnspeRemoveMailstore(dn)
- zruší účet na Exchange
Motivace je pro poslední tři funkce je taková, že se při synchronizaci _nebude_ automaticky vytvářet účet na Exchange (kvůli externím spolupracovníkům, kteří by ji stejně nepoužívali - pár se mi jich totiž teď ozvalo) a vytvoří se až v okamžiku, kdy si uživatel bude "aktivovat účet" (bude si nastavovat heslo) - v tom okamžiku budeme potřebovat funkci, která pro daného uživatele založí mail účet na správném Exchange serverů a pak přidá správné mailove adresy (formulář pro "aktivaci účtu" si tu vytvoříme sami).
- bylo by dobré, aby existoval nějaký "verbose" mód, který by na stdout nebo stderr vypisoval hlášky o průběhu synchronizace
- bylo by dobré mít nějaké jednoduché commandline rozhraní k uvedeným funkcím
Synchronizační skripty
svn co https://comp.fjfi.cvut.cz/repos/umapsync umapsync
FnspeCmdService
Toto je služba, která poslouchá na definovaném portu a umožňuje spustit lokání skript s parametry, které přijdou ze sítě. V tuto chvíli slouží k vytváření uživatelských mailboxů při aktivaci konta a nastavení přesměrování FJFI www stránek. Aktuální verzi je možné stáhnout na:
svn co https://comp.fjfi.cvut.cz/repos/cmd_service cmd_service
Instaluje/registruje se příkazem (z .NET frameworku, měl by být někde v c:\windows\Microsoft.NET\Framework):
installutil.exe "c:\cesta\k\binarce\FnspeCmdService.exe" # pro odinstalaci lze použít příkaz: # installutil.exe /u "c:\cesta\k\binarce\FnspeCmdService.exe"
Poté je možné tuto službu spouštět/zastavovat standardním souborem přes mmc (je potřeba nastavit, aby se spouštěla automaticky při startu systému). Na firewallu je nutné povolit přístup na port, na kterém bude služba poslouchat. Z hlediska bezpečnosti je vhodné povolit přístup pouze z IP adres, které tuto službu nezbytně potřebují.
Po prvním spuštění vytvoří v registrech klíč s konfigurací, kterou je pak možné upravit:
HKEY_LOCAL_MACHINE\SOFTWARE\FnspeCmdService port - číslo portu, kde služba poslouchá (3210) script - skript, který má spustít (cmd.vbs) HKEY_LOCAL_MACHINE\SOFTWARE\FnspeCmdService\config # mapování předaných dat na parametry příkazové rádky # key ..... příkaz cmd_service # value ... parametry výše uvedeného skriptu
Příklad záznamů v registrech:
[HKEY_LOCAL_MACHINE\SOFTWARE\FnspeCmdService] "port"=dword:00000c8a "script"="c:\\scripts\\umapsync\\umapsync.vbs" "timeout"=dword:00007530 [HKEY_LOCAL_MACHINE\SOFTWARE\FnspeCmdService\config] "mail"="mailbox create" "web"="web redirect"
Otestovat se dá nejlépe nějakým rozumným telnet klientem (ten ve woknech nepatří mezi ty rozumné)
telnet jmeno.stroje.s.bezici.sluzbou port mail username OK/FAIL telnet jmeno.stroje.s.bezici.sluzbou port web username http://nejaka.domena.cz/adresa OK/FAIL
Návratová hodnota OK/FAIL je nastavena podle toho, jestli byl skript uspěšně vykonán a skončil s exit kódem 0. Je-li navrácena chybová hodnota FAIL, bude v application event logu poznamenáno, kde nastala chyba. Pokud došlo k chybě při vykonávání skriptu, budou podrobnosti v log souborech vykonávaného skriptu.
Uživatelská jména
Pro studenty standardně ve formatů KOS/Usermap jména. Toto jméno je rezervováno po celou dobu působení na ČVUT + 1 rok a pak může být recyklováno (narozdíl od osobního čísla, které by mělo být jedno pro danou osobu navěky). VIC také umožňuje změny uživatelských jmen, což ale na FJFI nebude podporováno viz. dále.
V případě, že uživatel nebude mít jméno z KOS/Usermapu, nesmí toto jméno být v konfliktu s některým již existujícím účtem. Z toho důvodu je žádoucí vytvářet "lokální" jména jiným způsobem než to dělají na VICu (5 písmen ze jména, 3 z příjmení které v případě konfliktu nahrazují čísly) - nejvhodnější jsou pravděpodobně jména kratší než 8 znaků nebo zavedení určitého prefixu (např. guest_username). Doporuční osmi maximální délky osm znaků má dva důvody, historické (některé systémy nemusí podporovat dlouhá uživatelská jména) a praktické (např. formátování výstupů v unixových systémech).
Uživatelské jméno nesmí obsahovat mezery a musí se skládat z malých písmen, číslic, pomlčky a podtržítka ([a-z0-9_-]). Využití podtržítka je navíc limitováno na předem definované speciální prefixy (např. guest_, ???).
Nesmí existovat žádné univerzální účty (ani pro hosty!), každý musí být jednoznačně svázán s jedním uživatelem (vyjímku mohou tvořit maximálně specielní účty v ou=Special, které mají omezená práva).
Změna uživatelského jména
FIXME: a co s případem, že vytvořím uživateli účet dříve než bude v Usermapu a tím pádem se mi po jeho zavedení vytvoří účet druhý? Když mu budu chtít zachovat jméno, které jsem mu ručně přiřadil, tak je to prakticky ekvivalentní změně uživatelského jména.
Vzhledem k návaznostem na další systémy není změna jména podporována. Správce ho v žádném případě nesmí změnit. Jedinnou možností jak dosáhnout změny jména je odstranění uživatelského účtu z Windows AD, dále je nutno počkat až se tato změna projeví ve všech navazujících systémech (FIXME: minimálně týden?) a poté založit nového uživatele (je tedy potřeba také zabránit automatickému vytvoření příslušného účtu podle údajů z Usermapu). I v tomto případě je však nutné upozornít všechny ostatní správce a to nejlépe mailem do "comp" konference.
FIXME: co s doručováním mailu pro uživatele, kterému "měním" jméno?
Rezervovaná jména
Bude existovat centrálně spravovaný seznam rezervovaných jmen, které nesmí být použity jako název účtu v AD (např. root, ...). Tento seznam musí být brán v úvahu při automatickém zakládání účtů.
Jména se speciálními právy
Normální uživatel by neměl mít žádná administrátorská práva. Pokud je potřebuje, měl by k tomu sloužit jiný účet, který bude mít tvar username-admin. Takový účet ale nesmí být založen v ou=People,dc=fjfi,dc=cvut,dc=cz, protože by zde mohla vzniknout možnost privilege escalation některého ze speciálních účtů.
Eduroam jméno
Jméno pro Eduroam se musí skládat z uživatelského jména a realm, který slouží jako identifikátor domovské instituce. Vlasní autentizace uživatele tak může být delegována na domácí RADIUS servery. Uživatelské jméno na FJFI bude mít tvar "sAMAccountName"@fjfi.cvut.cz. Bylo by dobré, aby toto jméno bylo zároveň platnou mailovou adresou uživatele. Pomocí eduroam atributů v AD bude možné zablokovat samostatně přístup k Eduroam účtu bez blokace vlastního AD účtu.
FIXME: zajištění přístupu hostů k WiFi bude tedy na správcích Windows
Mailové adresy
Všichni uživatelé budou mít adresu ve tvaru "sAMAccountName"@fjfi.cvut.cz (tedy stejnou jako "Eduroam jméno"), zaměstnancům bude navíc automaticky generována adresa ve tvaru Jméno.Příjmení@fjfi.cvut.cz. V případě konfliktu nebude adresa automaticky vytvořena, ale o vzniklé situaci bude ihned informován správce mailem. Uživatelům Terezy může být ručně přidána ještě adresa ve tvaru Jméno.Příjmení@tereza.fjfi.cvut.cz.
Historické oficiální adresy user@km1.fjfi.cvut.cz a user@troja.fjfi.cvut.cz budou zachovány jen na požádání (stejně jako tomu bylo/je pro user@br.fjfi.cvut.cz). Příjem bude zajištěn přímo na Exchange, nebude docházet k žádnému přepisování příchozích ani odchozích neoficiálních adres. Adresy user@kmk.km.fjfi.cvut.cz budou zrušeny, jelikož existovali jen z důvodu interního směrování mailů.
U nově automaticky vytvářených adres je potřeba zkontrolovat, jestli obsahují jen povolené znaky [a-zA-Z0-9_.-] (hlavně při generování adres Jméno.Příjmení@fjfi.cvut.cz, protože to občas obsahuje speciální jinde neošetřené znaky). Pokud nová adresa nesplňuje tyto požadavky, bude o tom správce informován mailem.
Heslo
Uživatelská hesla musí mít definovanou minimální složitost, aby se zabránilo slovníkovým útokům. Heslo musí být minimálně 8 znaků dlouhé a musí obsahovat alespoň dvě skupiny znaků (písmena malá/velká, číslice, speciální znaky). FIXME: Je potřeba každé heslo zkontrolovat proti slovníku. Pro host/service kerberos účty mohou být hesla úplně neznámé náhodně generované znaky. Je potřebné/vhodné mít různé reálné účty pro různé hosty?
Platnost hesla není omezena, ale pokud to bude situace v budoucnu vyžadovat, může být zavedena povinnost pravidelné změny hesla.
Pro přihlašování je nutné vždy používat zabezpečené spojení (TLS/SSL nebo nějaký ekvivalent). Služby u nichž nelze zajistit vyzrazení hesla po nezabezpečeném kanále nesmí být vůbec provozovány (např. IMAP, HTTP, ...). U ostatních musí dojít k odmítnutí spojení před vlastním přenosem hesla.
Skupiny
Skupiny by měli obsahovat stejně jako uživatelská jména znaky [a-z0-9_-] (malá písmena, číslice, podtržítko a pomlčka). Dále je vhodné, aby délka názvu skupiny nepřevyšovala 8 znaků. Důvodem je maximální možná kompatibilita s Unix systémy. Kvůli unixovým resp. POSIX compatible systémům musí každá skupina obsahovat posixGroup třídu. Skupinové ID třídy musí být jedinečné >= 1000.
Každý uživatel bude dle informací v Usermapu automaticky zařazen do skupin zaměstnanec/doktorand na příslušné katedře (existence všech skupin není povinná, neexistence těchto skupin nebude brána jako chyba při synchronizaci účtů). Navíc bude možné ručně přidat každého uživatele do skupiny vyhrazené každé katedře. Poslední možností je přidaní nazvu skupiny do atributu fnspeForceGroup a to při synchronizaci způsobí, že uživatel bude přidán jako memberOf odpovídající skupiny. Mohou existovat následující standardní skupiny:
název | GID | využití |
---|---|---|
1000-1099 | vyhrazeno pro potřeby fakulty (1000-1010 vyhrazeno pro automaticky spravované skupiny) | |
users | 1000 | standardní skupina pro všechny uživatelské účty |
1001 | unassigned | |
emp | 1002 | skupina pro všechny zaměstnance |
phd | 1003 | skupina pro všechny phd studenty |
stu | 1004 | skupina pro všechny studenty (mimo PhD) |
staff | 1005 | skupina pro všechny učitele |
ext | 1010 | skupina pro externisty |
1X00-1X99 | vyhrazeno pro potřeby katedry (1X00-1X10 vyhrazeno pro standardní automaticky spravované skupiny) | |
"depName" | 1X00 | ručně spravovaný seznam lidí na dané katedře |
"depName"_all | 1X01 | "depName"+"depName"_emp+"depName"_phd |
"depName"_emp | 1X02 | zaměstnanec katedry (automaticky synchronizováno dle Usermapu) |
"depName"_phd | 1X03 | phd student katedry (automaticky synchronizováno dle Usermapu) |
"depName"_stu | 1X04 | student katedry, mimo PhD (zatím používá KMAT, ruční zadávání) |
"depName"_staff | 1X05 | učitel na katedře (automaticky synchronizováno dle Usermapu) |
Pokud bude nějaká katedra (organizační jednotka) potřebovat další skupiny pro svoji vlastní potřebu, potom by měli mít jako prefix název katedry, aby se jména skupin nemohli v budoucnu dostat do konfliktu mezi různými katedrami. Skupinové GID si katedra bude volit z přiděleného rozsahu.
skupina | rozsahy GID |
---|---|
users | 1000 |
km | 1100-1199 |
kf | 1200-1299 |
kj | 1300-1399 |
kipl | 1400-1499 |
kfe | 1500-1599 |
kmat | 1600-1699 |
kjch | 1700-1799 |
kdaiz | 1800-1899 |
kjr | 1900-1999 |
kse | 2000-2099 |
dekanat | 2100-2199 |
tereza | 2200-2299 |
crrc | 2300-2399 |
Diskové služby
tohle nikdo neaktualizoval...
písmeno | funkce / poznámka |
---|---|
A-L | vyhrazeno pro lokální zařízení (disky, cdrom, uživatelské síťové disky, ...) |
M-P | vyhrazeno pro potřeby fakulty |
M: | sdílená složka v rámci katedry |
N: | síťový domovský adresář |
O: | síťový adresář s aplikacemi (replikovaný mezi všemi fileservery?) |
P: | veřejně přístupná složka (FIXME: práva rozdělená na adresáře po katedrách?) |
Q-Z | vyhrazeno pro potřeby administrátorů (globální, v rámci kateder, ...) - informace o využití těchto písmen je nutné uvést do této tabulky! |
?-? | |
?: | |
?: | |
FIXME: odkud budou exportovány sdílené disky (Břehovka x Trojanka x Trója)
FIXME: využití DFS? využití replikace?
Kerberos
Nastavit následující konfigurace:
Maximum lifetime for user ticket: 26 hours
LDAP
Je potřeba upravit limity pro přístup k datům v Active Directory přes standardní LDAP rozhraní. Vcelku zajímavé informace jsou v KB 315071
- MaxPageSize "musí" být nastaveno minimálně na počet uživatelů+skupin - tedy 5000(?)
Certifikáty
Naimportovat do domény kořenový certifikát a CRL CESNET CA
Exchange
Je nutné zrušit automatické generovaní emailových adres pomocí RUS (Recipient Update Service). Zkonfigurovat to lze přes Exchange System Manager -> Recipients -> Recipient Update Service. U všeho je potřeba nastavit update interval na "Never run".
Je nutné zkonfigurovat generovaní emailových adres pomocí RUS (Recipient Update Service) přes Exchange System Manager -> Recipients -> Recipient Update Service. Pro správné fungovaní všech požadovaných mailových adres nezavisle na vytvoření / zrušení mailstore na Exchange je potřeba zrušit přidávání a odstraňování "internetových" mailových adres (ty co jsou v atributu proxyAddresses s prefixem "smtp:" resp. "SMTP:".
Také je potřeba nastavit (při změnách je občas nutné restartovat příslušnou službu):
- zabránit příjmu mailů z jiných adres než je mailgw (nebo IP rozsah FJFI / ČVUT?) - nastavit přímo na firewallu
- limity na velikost přijímaných / odesílaných mailů kompatibilní s mailgw Exchange System Manager -> Global Settings -> Message Delivery -> Properties -> Recipient Filtering
- odmítání pošty pro neexistující uživatele Exchange System Manager -> Global Settings -> Message Delivery -> Properties -> Defaults a dále je potřeba nastavit Exchange System Manager -> Servers -> jméno serveru -> Protocols -> SMTP -> Default -> Properties -> General -> Advanced -> Filter Enabled
- nastavit odesílání pošty přes mailgw Exchange System Manager -> Servers -> jméno serveru -> Protocols -> SMTP -> Default -> Properties -> Delivery -> Advanced Delivery -> Smart host
Konfigurace Linuxu/Unixu
Pro jednoduchost není dobré vytvářet více domén. Uživatelé by pak museli používat jméno včetně jména domény, což by bylo dost nepohodlné a některé aplikace by asi špatně rozdýchávali uživatelská jména ve tvaru DOMAIN\username.
Různé možnosti integrace Windows s Unixy jsou docela podrobně popsány v dokumentu Windows Security and Directory Services for UNIX v1.0. Dále bude popsán jen jeden ze způsobu, který je vhodné použít u nás.
Konfigurace účtu v AD
Pro rozumnou funkci AD pro unixová prostředí je potřeba mit doménu a forest nastaven na nativní windows 2003 mód, protože jinak AD nemá podporu po "dynamic linked auxiliary classes". Vzhledem ke kopatibilitě je vhodné k uživatelskému účtu v AD přidat následující auxiliary classes: inetOrgPerson, posixAccount. Dále je potřeba udržovat některé atributy synchronizované, protože různé aplikace mohou využívat buď jeden nebo druhý: uid = msSFU30Name = sAMAccountName
Uživatel musí mít vyplněny následující atributy posixAccountu:
- uid = msSFU30Name = sAMAccountName
- uidNumber - jedinečné číslo z intervalu [1000-30000)
- gidNumber - zatím jedna skupina "users" s gidNumber = 1000
- loginShell - /bin/bash
- unixHomeDirectory - /home/"sAMAccountName"
- gecos - ASCII "givenName sn"
Synchronizace času
Pro správnou funkci Kerbera je nutná synchronizace času mezi autentizovaným systémem a KDC serverem (tolerance 5 minut). Je potřeba, aby se klienti synchronizovali proti nějakému přesnému časovému zdroji. Pro tyto účely zde běží NTP server na adrese ntp.fjfi.cvut.cz (spuštěno hlavně pro účely monitoringu správného času na serverech, uživatelé by měli používat nějaké spolehlivé NTP servery, viz. dále). Pokud nebude čas správně synchronizován, pak přestane fungovat nejen přímá autentizace uživatelů, ale také další služby jako např. adresáře sdílené přes sambu.
Pro synchronizaci času lze využít oficiální servery CESNETu:
tik.cesnet.cz tak.cesnet.cz
Uživatelské informace
Získávají se pomocí NSS a v případě Windows AD domény k nim lze přistupovat několika různými způsoby (export do "passwd", LDAP, winbind). Kvůli zachování stejných UID na všech stanicích nelze (jednoduše) použít winbind. LDAP přístup je asi "nejčistší" řešení, ale bude se muset vyzkoušet jestli je výkonostně přijatelný (jinak lze provádět exporty z LDAP do standardních souborů jako tomu je/bylo u Novell NDS). V případě problémů s výkonem LDAPu by stálo za zvážení použít nscd daemona pro cachování získaných informací (potřeba otestovat, protože před pár lety docela zlobil při použití proti Novell LDAP).
Pro přístup přes LDAP rozhraní k Windows AD je potřeba na firewallu povolit porty 389 TCP, 389 UDP, 636 TCP (z celého internetu). Pro zabezpečený přístup přes LDAP se používají x509 certifikáty. Klient musí důvěřovat certifikační autoritě, která podepsala certifikáty používané pro zabezpečenou LDAP komunikaci. Z tohoto důvodu je nutné, aby všechny Windows AD stroje měli platné certifikáty vydané Cesnet CA nebo SureServer EDU.
LDAP
Pro zpřístupnění informací přes LDAP je potřeba nainstalovat "nss_ldap" a upravit konfigurace /etc/nsswitch.conf a /etc/ldap.conf (pro práci s LDAP nástroji je ještě vhodné upravit /etc/openldap/ldap.conf).
- /etc/nsswitch.conf
... passwd: files ldap shadow: files ldap group: files ldap hosts: files dns wins ...
- /etc/ldap.conf
host ldap1.fjfi.cvut.cz ldap2.fjfi.cvut.cz ldap3.fjfi.cvut.cz base dc=fjfi,dc=cvut,dc=cz ldap_version 3 # In case AD doesn't allow anonymous binds # binddn cn=proxy nss,ou=special,dc=fjfi,dc=cvut,dc=cz # bindpw secret pam_min_uid 1000 # RFC 2307 (AD) mappings nss_map_objectclass posixAccount user nss_map_objectclass shadowAccount user nss_map_attribute uid sAMAccountName nss_map_attribute homeDirectory unixHomeDirectory nss_map_attribute shadowLastChange pwdLastSet nss_map_objectclass posixGroup group nss_map_attribute uniqueMember member pam_login_attribute sAMAccountName pam_filter objectclass=User pam_password ad # Disable SASL security layers. This is needed for AD. sasl_secprops maxssf=0
- /etc/openldap/ldap.conf
BASE dc=fjfi,dc=cvut,dc=cz URI ldaps://ldap1.fjfi.cvut.cz ldaps://ldap2.fjfi.cvut.cz ldaps://ldap3.fjfi.cvut.cz TLS_CACERTDIR /etc/openldap/cacerts
Soubory
Aby fungovaní unixu/linuxu nebylo v neustále závislé na korektní funkci LDAP serveru, je možná vhodnější exportovat (v pravidelných intervalech) aktuální informace do standardních souborů. K tomu slouží následující skript napsaný v pythonu (nutné doplnit správné heslo pro proxy_posix účet případně upravit některé cesty dle lokálních potřeb):
svn co https://comp.fjfi.cvut.cz/repos/scripts/LdapAccount.py
Autentizace
Existuje více způsobů jak autentizovat uživatele z Windows AD (Kerberos, LDAP, winbind, RADIUS, ...). Nejrozumnější vlastnosti má Kerberos, který je přímo navržen pro bezpečnou autentizaci uživatelů. Navíc uživatel získá Kerberos ticket, který může dále používat pro autentizaci k dalším službám (SSO).
Na linuxu je potřeba naintalovat balík "krb5-workstation" a "pam_krb5", je potřeba mít povolen přístup na KDC (Key Distribution Center) na portech 88 TCP, 88 UDP, 749 TCP (z celého internetu). Konfigurační soubor /etc/krb5.conf by mít např. následující obsah
... [libdefaults] default_realm = FJFI.CVUT.CZ dns_lookup_realm = false dns_lookup_kdc = false ticket_lifetime = 24h renew_lifetime = 14d forwardable = yes [realms] FJFI.CVUT.CZ = { kdc = krb1.fjfi.cvut.cz:88 kdc = krb2.fjfi.cvut.cz:88 kdc = krb3.fjfi.cvut.cz:88 admin_server = krb.fjfi.cvut.cz:749 default_domain = fjfi.cvut.cz } [domain_realm] .fjfi.cvut.cz = FJFI.CVUT.CZ fjfi.cvut.cz = FJFI.CVUT.CZ ...
Pro otestování kerberos autentizace, vypsání a zrušení získaného ticketu lze použít následující příkazy:
kinit username klist kdestroy
Pro autentizaci na stanici je potřeba ještě zkonfigurovat PAM moduly. Na RedHatu (RHEL5) stačí upravit soubor /etc/pam.d/system-auth
#%PAM-1.0 auth required pam_env.so auth sufficient pam_unix.so nullok try_first_pass auth requisite pam_succeed_if.so uid >= 1000 quiet auth [authinfo_unavail=ignore success=1 default=2] pam_krb5.so minimum_uid=1000 use_first_pass auth [default=done] pam_ccreds.so action=validate use_first_pass auth [default=done] pam_ccreds.so action=store auth [default=bad] pam_ccreds.so action=update auth required pam_deny.so account required pam_unix.so broken_shadow #account sufficient pam_localuser.so account sufficient pam_succeed_if.so uid < 1000 quiet account [authinfo_unavail=ignore default=done] pam_krb5.so minimum_uid=1000 account required pam_permit.so password requisite pam_cracklib.so try_first_pass retry=3 password sufficient pam_unix.so md5 shadow nullok try_first_pass use_authtok password sufficient pam_krb5.so minimum_uid=1000 use_authtok password required pam_deny.so #session optional pam_mkhomedir.so skel=/etc/skel/ umask=0022 session optional pam_keyinit.so revoke session required pam_limits.so session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid session required pam_unix.so session optional pam_krb5.so minimum_uid=1000
Tato konfigurace PAMu je napsána s ohledem na to, že uživatelé budou v /etc/passwd. Při použití přímého přístupu k informacím v LDAP přes nss_ldap by bylo vhodné tam udělat ještě pár drobných ůprav s ohledem na možnou (ne)dostupnost LDAP (v podstatě jde o přidání user_unknown=ignore k řádkům, kde je authinfo_unavail=ignore) - více informcí.
Také je na zvážení (z hlediska bezpečnosti/dostupnosti), jestli použvat pam_ccred. To se uvidí časem a bude to záviset na(ne)fungovaní nových windows serverů.
Host/Service Kerberos Key
Pokud bude mít systém/služba vlastní Kerberos klíč, potom je možné s platným uživatelským Kerberos ticketem přistupovat na tyto systémy/služby bez dalšího zadávání hesla. Základní informace lze nalézt v KB 324144. Mapování služby na uživatelský učet je N:1 (tj. pro každou službu musí existovat samostatný uživatelský účet v AD), všechny host/service uživatelské účty budou vytvořeny v ou=Specials,dc=fjfi,dc=cvut,dc=cz a budou mít formát krb-hostname-service např. pro doménové jméno kmlinux.fjfi.cvut.cz a účet počítače bude existovat krb-kmlinux-host pro službu ftp bude existovat krb-kmlinux-ftp, .... Asi bude nejvhodnější přidávat tyto účty k "objektu počítače", které vznikají přídáním stroje do AD a mají tvar jméno$ (tyto účty by měli být automaticky na globalním ČVUT IdM blacklistu). Přidání stroje do AD lze z linuxu provést pomocí programu net, který je součástí samby.
Vytvoření keytabu ve windows
K vytvoření kerberos keytabu je potřeba použít příkaz
C:> ktpass -ptype KRB5_NT_PRINCIPAL -princ host/hostname@FJFI.CVUT.CZ -mapuser krb-hostname-host -pass +rndPass -out krb-hostname-host.keytab [ -mapOp set -kvno 1 ] resp. pro službu ftp ... C:> ktpass -ptype KRB5_NT_PRINCIPAL -princ ftp/hostname@FJFI.CVUT.CZ -mapuser krb-hostname-ftp -pass +rndPass -out krb-hostname-ftp.keytab [ -mapOp set -kvno 1 ]
Z neznámého důvodu mě na linuxu nefungovalo získávání ticketu pres kinit -k -t file.keytab, když jsem v ktpass použil -crypto DES-CBC-MD5. Nejsem si také jist jaký je rozdíl ve vygenerovaném souboru pri použití různých ptype (KRB5_NT_PRINCIPAL, KRB5_NT_SRV_HST, KRB5_NT_SRV_INST).
Vytvoření keytabu v linuxu
Na linuxu je potreba nainstalovat msktutil, který umožňuje přidání computer account do Active Direcotry, manipulaci s hesly a získání keytabu pro daného hosta resp. službu. Je potřeba mít korektně vytvořený konfigurační soubor Kerbera /etc/krb5.conf a platný ticket administrátora AD. Dále je potřeba mít na paměti, že msktutil pracuje pouze s "default realm" z konfiguračního souboru a v některých případech záleží na pořadí v němž jsou uvedeny parametry na příkazovém řadku. Pokud dojde k nějakým problémum, potom je vhodné použít parametr --verbose. Příkaz se používá následujícím způsobem:
# vytvoř computer account v AD pro aktuálního hosta a přidej do /etc/krb5.conf msktutil -c # to samé, ale výsledek uloží do souboru my.keytab msktutil -c -k my.keytab # to samé, ale pro stoj se jménem test msktutil -h test -c -k my.keytab # přidej službu ldap k computer accountu test a exportuj do my.keytab msktutil -h test -s ldap -k my.keytab
Je také potřeba si uvědomit, že kerberos ticket je platný jen pro správné (doménové) jméno. Pokud chceme, aby bez problémů fungoval přístup jak k test.fjfi.cvut.cz tak i test, potom bude nutné vytvořit pro každou variantu jeden záznam.
Import dat z keytabu
# Vytvořený keytab se importuje např. ktutil ktutil: rkt krb-hostname-host.keytab ktutil: rkt krb-hostname-ftp.keytab ktutil: l ktutil: wkt /etc/krb5.keytab ktutil: q # Ověření funkčnosti lze povést příkazem kinit kinit -k [ -t /etc/krb5.keytab ] # zjištění informací z keytabu klist -e -k [ -t /etc/krb5.keytab ]
Je také možné vytvářet tyto klíče přímo na unix systémech, jak je popsáno na Interoperability with Microsoft Windows 2000 Active Directory and Kerberos Services.
Samba
Samba 3.x umožňuje uživatelům Windows používat vysdílené disky včetně všech přístupových práv. Aby to fungovalo, je potřeba zkonfigurovat /etc/samba/smb.conf a zaregistrovat daný systém v AD. Podrobnější dokumentace je na wiki stránkách gentoo
workgroup = FJFI # nebo název katedry server string = Samba Server %h (%v) security = ADS realm = FJFI.CVUT.CZ use kerberos keytab = Yes preferred master = no # tohle není (asi) potřeba, když se nepoužívá winbind #winbind enum users = Yes #winbind enum groups = Yes #winbind use default domain = Yes #idmap uid = 10000-20000 #idmap gid = 10000-20000
Registrace se provádí příkazem (musí fungovat překlad přidělené hostname <-> IP, jinak nebylo možné úspěsně donkončit registraci):
net ads join -UAdministrator%password # pro zařazení počítače do příslušné OU net ads join -UAdministrator%password createcomputer=Computers/Servers/Unix # vytvoření záznamu pro jiný server net ads join -UAdministrator%password -Sjmeno
Opět je nutné povolit na firewallu Windows Serveru porty 137 TCP/UDP, 138 TCP/UDP, 139 TCP/UDP, 445 TCP/UDP, 389 TCP/UDP, 636 TCP. Vzhledem k použítí Kerbera pro autentizaci je nutné mít synchronizovaný čas.