aboutsummaryrefslogtreecommitdiffstats
path: root/külsős/munin
diff options
context:
space:
mode:
authorM.Gergo2018-03-18 01:23:36 +0100
committerM.Gergo2018-03-18 01:23:36 +0100
commit6b335352b719ae8871701df637cf5725692198b4 (patch)
tree21b01d3456d2d428b18102d4b118f050c0fbd926 /külsős/munin
parent925131711b22e1b7a50959921527d7692706cd88 (diff)
downloadmayor-6b335352b719ae8871701df637cf5725692198b4.tar.gz
mayor-6b335352b719ae8871701df637cf5725692198b4.zip
Nextcloud - Mayor script
Ezzen script segítségével a Mayor-naplóból tudunk felhasználókat és csoportokat importálni a Nextcloud felhőbe, létrehozva ezzel a saját, iskoali felhőszolgáltatásunkat. Ez a script lényegében annyit csinál, hogy a mysql segítségével lekérdezi a mayorból a diák-tankör-tanár összerendezéseket, és a tankörök nevei alapján létrehoz csoportokat, majd belépteti ezen csoportokba a diákokat, és tanárokat, megspórolva ezzel a kézi (egyesével történő) feltöltést, és egy csomó időt az adminisztrátornak. Támogatja a külön, illetve az egy, közös szerverre történő telepítését a mayornak és a nextcloud-nak. *(lásd: Szeparációs lehetőségek rész.) Egyelőre még csak a Nextcloud 13.x -mal tesztelt. FONTOS! Legalább "php7.0" és "Apache 2.4" kell hozzá! Beállítása az alábbiak szerint: (egy lehetséges elrendezés) -(I.) Először telepítsünk föl egy Nextcloud(13+) szervert egy Debian 9+ szerverre, szükség van e-mail küldés (smtp) szolgáltatásra is. (ez lehet külső, pl google) Bővebb leírást a telepítésről a https://docs.nextcloud.com/server/13/admin_manual/installation/index.html oldalon találunk. -(II.) Helyezzük el a "mayor-nextcloud.php"-t biztos, védett helyre,a nextcloud szerveren, akár a /etc/ mappába, akár a /root könyvtárba, ezt később "root"-ként kell majd futtatnunk, és mysql jelszó is (lehet/) van benne, ezért ennek megfelelően állítsuk be a tulajdonost, és vegyük el a jogosultságokat. (chown root; chmod 600) -(III.) A fajl elején találhatóak a konfigurációs adatok, ezeket a következőképpen módosíthatjuk: $db['host'] = "localhost"; //Ez a nextcloud alatt futó mysql elérhetősége. // (Csak localhost lehet, a scriptet a nextcloud-szerveren kell futtatnunk.) $db['port'] = "3306"; //nextcloud-mysql port $db['user'] = "root"; //nextcloud-mysql felhasználónév // HA nem a root-ot használjuk, akkor, a használt felhasználónak írási-olvasási-törlési // (insert,select,update,delete) joggal kell rendelkeznie a nextcloud adatbázis "..groups" tábláján, // valamit saját kezűleg kell lérehozni a script saját nyilvántartó adatbázisát, és a fenti jogokat beállítani rá. // Ha a Debian-on alapértelmezett root-ot használjuk, akkor mindez automatikusan történik. $db['pass'] = ""; //A nextcloud-mysql jelszó (pl a "root" felhasználónévhez tartozó) // érdemes a debian 9.x-en, a root-hoz alapértelmezett "unix_socket" bejelentkezési módot // használnunk, ez biztonságosabb, mert nem jön létre "olvasható" jelszó. $db['nxt_dbname'] = "nextcloud"; //A Nextcloud által használt adatbázis neve. $db['nxt_prefix'] = "oc_"; //A Nextcloud által használt adatbázisban a táblák prefix-je. (ha van) $db['m2n_db'] = "mayor_to_nextcloud"; //A nyilvántartó adatbázis neve. // Ennek az adatbázisnak a nextcloud-mysql szerveren kell lennie! // // Ebben az adatbázisban könyveli el a script által létrehozott felhasználókat, azért, // hogy így meg tudja különböztetni, a saját maga által létrehozottakat, az Adminisztrátor // által, külön, kézzel létrehozott felhasználóktól. $db['m2n_prefix'] = "m2n_"; //A nyilvántartó adatbázisban használt prefix, ha van. (ha nincs, akkor "üres string"-re kell állítani) //$db['mayor_host'] = ""; //Akkor használatos, ha a mayor alatti mysql szerver egy másik szerveren van. //$db['mayor_port'] = ""; // ekkor ki kell venni kommentből, és ki kell tölteni a mayor-mysql serverre érvényes adatokkal. //$db['mayor_user'] = ""; //$db['mayor_pass'] = ""; //A kiválasztott felhaználónak olvasnia (GRANT SELECT) kell tudnia a mayor-mysql serveren a(z): // intezmeny_xxx, mayor_parent, naplo_xxx_yyyy adatbázisokból. //Ha a mayor-mysql sezvere fizikailag (vagy virtuálisan) másik szerveren van, akkor érdemes egy "ssh-tunnel"-lel // áthozni a portját a nextcloud-serverre. (ez a legbiztonságossabb) $m2n['isk_rovidnev'] = "rovid"; //A mayor-ban használt "iskola rövidneve" megnevezés. $m2n['min_evfolyam'] = 10; //A minimális évfolyam, amelytől fölfelé engedélyezzük a felhő használatát a diákoknak. $m2n['csoport_prefix'] = "(tk) "; //A Nextcloud-ban ezzel az előtaggal jelennek majd meg mayor-ból importált csoportok, a jobb átláthatóság érdekében. $m2n['default_email'] = "rendszergazda@iskola.hu"; //Ha a mayor intezmeny_xxx.diak, vagy az intezmeny_xxx.tanar táblákban nincs kitöltve az // e-mail, akkor ezt használja alapértelmezetten. // (ide megy a jelszó-emlékeztető, amíg a felhasználó birtokba nem veszi a fiókját) $m2n['default_passw'] = "EHYmGktzrdfS7wxJR6DFqxjJ"; //Az induló jelszó a Nextcloud-ban a felhasználóknak. (érdemes erőset megadni, a botnet-ek miatt) $m2n['default_quota'] = "10GB"; //Az induló fájl-kvóta a Nextcloud-ban. $m2n['default_lang'] = "hu"; //Az alapértelmezett nyelv (később minden felhasználó átállíthatja magának) $m2n['mindenki_csop'] = "naplós_felhasználók"; //A Nextcloud "mindenki" csoportja // ebbe a "mindenki" csoportba minden, a script által létrehozott felhasználó bekerül. $occ_path = "/var/www/nextcloud/"; //A Nextcloud-server fájljainak elérési útja. (DocumentRoot) // Erre szükség van a nextcloud "occ" parancsának eléréséhez. $occ_user = "www-data"; //A Nextcloud-servert futtató (Apache) felhasználónév FONTOS!! A Nextcloud szerver "occ" parancsa elérhető kell legyen a script számára! Az "occ" parancs működését pl. az: (>>> sudo -u www-data php /var/www/nextcloud/occ ) kiadásával ellenőrizzük! További Információk: Lehetőség van egy-egy felhasználó letiltására, ezt a nyilvántartó adatbázisban tehetjük meg, a "register" tábla, az adott felhasználónévhez tartozó "status" mezőjének "forbidden"-re állításával. Ekkor a script nem fog foglalkozni, az adott felhasználóval a továbbiakban. Esetleg érdemes lehet a scriptet betenni a "cron"-ba (éjszakára), így naponta lefut, és követi napló változásait. A mayor által ajánlott "Vezetéknév.Keresztnév" típusú felhasználónév formátum, bár hasznos, mert könnyen megjegyezhető, viszont (sajnos) egyáltalán nem POSIX kompatibilis (amely csak az angol ABC betűit +pár kiegészítő karaktert engedélyez) így a legtöbb rendszerrel nem hozható összhangba, ezért szükség van az ékezetes karakterek lecserélésére. A karakterek cseréje az alábbi módon történik: á --> aa Á --> Aa ä --> ae Ä --> Aae é --> ee É --> Ee Például: í --> ii Í --> Ii Vezetéknév.Keresztnév --> Vezeteekneev.Keresztneev ó --> oo Ó --> Oo Bőrönd.Ödön --> Booeroend.Oedoen ö --> oe Ö --> Oe ő --> ooe Ő --> Ooe ú --> uu Ú --> Uu ü --> ue Ü --> Ue ű --> uue Ű --> Uue Ezeket a karakter cseréket maga a script végzi, futás közben, a mayor felhasználónevekből, a létrejövő Nextcloud felhasználónév már a lecserélt változat lesz. A mayor-nextcloud script működése néhány mondatban: Első lépésben lekérdezi a feltételeknek megfelelő tanköröket a mayorból, (tankör-osztály évfolyama, tankör aktív-e a dátumok apaján) majd ez alapján ellenőrzi, hogy a Nextcloud-ban már szerepelnek-e ezen tankörneveknek megfelelő csoportok. Ha új tankör van a mayorban, akkor azt a Nextcloud-ban is létrehozza, ha egy tankört töröltek a mayorból, akkor azt a csoportot Nextcloud-ból is törli. Fontos! A csoport prefix-szel, például: "(tk) "-val kezdődő csoportokat magáénak tekinti, és ha nem találja a mayorban, akkor automatikusan töröli! Második lépésben lekérdezi a felhasználókat a mayorból, (jogviszony státusz, évfolyam, kapcsolódó tankörök) csak azokat a tanárokat, illetve diákokat veszi figyelembe, akinek a státusza nem "jogviszonya lezárva", vagy nem "felvételt nyert". Ha az illető még nem rendelkezik felhasználónévvel a Nextcloud-ban, akkor létrehozza, - ha a mayorban, az "intezmeny_xxx.diak", illetve az "intezmeny_xxx.tanar" táblákon van beállított e-mail címe, akkor azt használja, ha nincs, akkor az alapértelmezettet állítja be a Nextcloud-ba, valamint ekkor állítódik be az alapértelmezett qvóta, és a felhasználó valódi neve is. (ezeket később Rendszergazdai, és Felhasználói oldalról változtatni lehet, értelemszerűen) Ha az illető már rendelkezik felhasználónévvel, de az le volt tiltva, akkor újra engedélyezi. Ezután egyezteti a tankör-csoport összerendeléseket, ha az illető új tankörbe került be, akkor belépteti a megfelelő csportba, ha kikerült egy tankörből, akkor a csoportból is kilépteti. Végül ellenőrzi a kiléptetndő felhasználókat. Ha velekinek a státusza a mayorban "jogviszonya lezárva"-ra változott, vagy a felhasználót a mayorból törölték, akkor - ha még nem lépett be soha a Nextcloudba, akkor a felhasználót fizikailag törli. - ha már használta a fiókját, akkor csak letiltja, azért, hogy a fájljai ne vesszenek el automatikusan. (Ez, utóbbi esetben a Rendszergazdának kell külön elvégezni a törlést.)
Diffstat (limited to 'külsős/munin')
-rw-r--r--külsős/munin/README98
-rwxr-xr-xkülsős/munin/mayor_munin.php122
2 files changed, 0 insertions, 220 deletions
diff --git a/külsős/munin/README b/külsős/munin/README
deleted file mode 100644
index a0ad5eb8..00000000
--- a/külsős/munin/README
+++ /dev/null
@@ -1,98 +0,0 @@
-
-Munin monitorozó plugin a mayorhoz
-
-Grafikonokat készít a "munin" program segítségével a Mayor pillanatnyi állapotáról.
-Egyelőre csak debian 9+ rendszeren tesztelt, de pár apró módosítással életrekelthető más rendszereken is.
-
-Rögzíti az:
--- Egyidejűleg (pillanatnyi) bejelentkezett felhasználók számát.
--- IP-cím alapján a lokális (192.168.*.*, 10.*.*.*, 172.16.*.*, fd**::/8) és külön a külső tartományokat.
--- Policy alapján a 'private' és/vagy 'parent' -ben belépett felhasználókat.
--- Aktivitás alapján az Xperc (pl:10perc) ideje, a 2*Xperc ideje aktív felhasználókat és a tétleneket.
-
-
-Beállítása a következő: (debian)
-
-1.lépés: >>> apt-get install munin
-2.lépés: a "/etc/munin/munin.conf" fájl szerkesztése a következő módon:
-
---(I.) először keressük meg a következő részt:
- # a simple host tree
- [localhost.localdomain]
- address 127.0.0.1
- use_node_name yes
-
--- módosítsuk a "localhost.localdomain"-t a napló-szerver gépnevének megfelelően:
- (itt az FQDN (teljes elérési út szükséges))
- [gépnév.iskolaneve.hu]
- address 127.0.0.1
- use_node_name yes
-
---(II.) ugyanitt, adjuk hozzá a következő sorokat:
- (és írjuk át a "mayor.iskolaneve.hu" címet a napló címének megfelelően)
- [mayor.iskolaneve.hu]
- address 127.0.0.1
- use_node_name no
-
-
---(III.) ezután módosítanunk kell a "mayor_munin.php" scriptben a "$set['naplo_host'] = "mayor.iskolaneve.hu";"-t
- (első sorok egyike) a saját naplónk címének megfelelően.
- Ez egy fontos beállítás, mert ezen keresztül ismeri fel a munin rendszer a mi
- monitorozó scriptünket.
-
-
---(IV.) utána másoljuk a "mayor_munin.php"-t az:
- az /usr/share/munin/plugins/ mappába vagy
- az /etc/munin/ könyvtárba vagy
- bárhova, ahonnan a munin eléri.
-
- FONTOS!!
- A "mayor_munin.php"-nak állítsuk be a "root" tulajdonost és 700-as jogokat!
- (nehogy valami kiolvassa a jelszót)
-
-
---(V.) ezután el kell helyezni egy simlink-et a /etc/munin/plugins/ könyvtárba, ami a bemásolt fájlra mutat.
- pl: ln -s /usr/share/munin/plugins/mayor_munin.php /etc/munin/plugins/munin
-
-
---(VI.) végül be kell állítanunk egy felhasználót, a mysql-ben, amivel olvasni lehet a mayor_login.session és a mayor_login.loginLog táblákat
- (például:)
- mysql> GRANT SELECT ON mayor_login.loginLog TO 'mayor-monitor'@'localhost' IDENTIFIED BY 'erőős-jelszóó!';
- mysql> GRANT SELECT ON mayor_login.session TO 'mayor-monitor'@'localhost' IDENTIFIED BY 'erőős-jelszóó!';
-
-- Lehetőség van mysql/unix_socket authentikációra is, ez nagyban növeli biztonságot, mert nem alkalmaz jelszót,
- így szinte lehetetlen próbálgatással feltörni.
- Fontos, hogy a kiválasztott felhasználónak/felhasználónévnek valósnak kell lenni, és léteznie kell a rendszerben.
- Egyszerűség kedvéért használhatjuk a "root" felhasználót, ez eredetileg is unix_socket-tel authentikál a mysql-ben,
- (hacsak a mysql telepítésénél meg nem változtattuk)
-
- vagy a "munin" nevű felhasználót, ezt adjuk hozzá a mysql-hez:
-
- mysql> GRANT SELECT ON mayor_login.session TO 'munin'@'localhost' IDENTIFIED via unix_socket;
- mysql> GRANT SELECT ON mayor_login.loginLog TO 'munin'@'localhost' IDENTIFIED via unix_socket;
-
- majd rá kell venni a munin-t, hogy a "munin" felhasználónévvel futtassa, ezt a "/etc/munin/plugin-conf.d/munin-node"
- fájlba kell beírni, a következő sorok hozzáadásával:
-
- [mayor_munin]
- user munin
-
- Fontos: ekkor a mayor_munin.php tulajdonosát a "munin"-ra kell állítani!
-
-
-
---(VII.) Finomhangolás:
- Végül írjuk be a "mayor_munin.php" elejére, a "$set['___']" tömböt módosítva, a maysql adatokat,
- illetve itt tudjuk beállítani az aktivitáshoz számolt időt percben, és a napló webcímét is.
-
-
---(VIII.) Befejezésképpen pedig indítsuk újra a munin-t az alábbi parancsokkal:
- >>> /etc/init.d/munin-node restart
- >>> /etc/init.d/munin restart
-
-
---(++) a beálítás végeztével a következő paranccsal ellenőrizhetjük, hogy mindent jól csináltunk-e:
- >>> munin-run mayor_munin
-
- Ekkor egy listát kapunk, ahol a változók nevei ("mayor_xxxx_xx.values") mellett számértékeket látunk,
- ha semmi, vagy a számok helyett egy "U" betű jelenik meg, akkor még valamit finomhangolni kell.
diff --git a/külsős/munin/mayor_munin.php b/külsős/munin/mayor_munin.php
deleted file mode 100755
index a1cb6c34..00000000
--- a/külsős/munin/mayor_munin.php
+++ /dev/null
@@ -1,122 +0,0 @@
-#!/usr/bin/env php
-<?php
-
-
-$set['db_user'] = "mayor-munin";
-$set['db_pass'] = "";
-$set['db_db'] = "mayor_login";
-$set['db_host'] = "localhost";
-$set['naplo_host'] = "mayor.iskolaneve.hu";
-$set['t_active'] = "10"; //pl: 10 perc (Az elmúlt x percben aktívak voltak)
-$ret = array();
-
-
-if (isset($argv[1]) and $argv[1] == "config"){
-
- $cf = "host_name ".$set['naplo_host']."\n";
- $cf .= "graph_title Napló rendszerterhelés (Mayor)\n";
- $cf .= "graph_args --base 1000 \n";
- $cf .= "graph_vlabel fő\n";
- $cf .= "graph_category mayor\n";
- $cf .= "graph_info Naplo users\n";
-
- $cf .= "mayor_ip_sum.label Összes\n";
- $cf .= "mayor_ip_sum.draw LINE2\n";
- $cf .= "mayor_ip_sum.info Összes\n";
-
- $cf .= "mayor_ip_b.label Belső IP\n";
- $cf .= "mayor_ip_b.draw LINE2\n";
- $cf .= "mayor_ip_b.info Belső IP\n";
-
- $cf .= "mayor_ip_k.label Kulső IP\n";
- $cf .= "mayor_ip_k.draw LINE2\n";
- $cf .= "mayor_ip_k.info Kulső IP\n";
-
- $cf .= "mayor_p_pri.label Policy pri.\n";
- $cf .= "mayor_p_pri.draw LINE1.2\n";
- $cf .= "mayor_p_pri.info Policy pri.\n";
-
- $cf .= "mayor_p_par.label Policy par.\n";
- $cf .= "mayor_p_par.draw LINE1.2\n";
- $cf .= "mayor_p_par.info Policy par.\n";
-
- $cf .= "mayor_a_t1.label Aktív: ".$set['t_active']."perc\n";
- $cf .= "mayor_a_t1.draw LINE2\n";
- $cf .= "mayor_a_t1.info Aktív: ".$set['t_active']."perc\n";
-
- $cf .= "mayor_a_t2.label Aktív: ".($set['t_active']*2)."perc\n";
- $cf .= "mayor_a_t2.draw LINE1.2\n";
- $cf .= "mayor_a_t2.info Aktív: ".($set['t_active']*2)."perc\n";
-
- $cf .= "mayor_a_tt.label Aktív: tétlen\n";
- $cf .= "mayor_a_tt.draw LINE1.2\n";
- $cf .= "mayor_a_tt.info Aktív: tétlen\n";
-
- echo iconv("UTF-8", "ISO-8859-2", $cf), PHP_EOL;
-
-} else {
-
- if (function_exists('mysqli_connect') and PHP_MAJOR_VERSION >= 7 ) { //MySQLi (Improved) és php7 kell!!!
-
- $ret['ip_b'] = 0;
- $ret['ip_k'] = 0;
- $ret['p_pri'] = 0;
- $ret['p_par'] = 0;
- $ret['a_t1'] = 0;
- $ret['a_t2'] = 0;
- $ret['a_tt'] = 0;
- $l = mysqli_connect($set['db_host'], $set['db_user'], $set['db_pass'], $set['db_db']);
- if(!$l){
-// echo "hiba\n ";
- $ret['ip_b'] = "U";
- $ret['ip_k'] = "U";
- $ret['p_pri'] = "U";
- $ret['p_par'] = "U";
- $ret['a_t1'] = "U";
- $ret['a_t2'] = "U";
- $ret['a_tt'] = "U";
-
- } else{
- mysqli_set_charset($l, "utf8");
- $r = mysqli_query($l," SELECT session.userAccount,session.policy, UNIX_TIMESTAMP(session.activity) AS activity, loginLog.ip
- FROM mayor_login.session, mayor_login.loginLog
- WHERE session.dt = loginLog.dt AND session.userAccount=loginLog.userAccount AND loginLog.flag=0; ");
-
- while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC)) {
- if($row['policy'] == "private") {
- $ret['p_pri'] ++;
- }
- if($row['policy'] == "parent") {
- $ret['p_par'] ++;
- }
-
- if( $row['activity'] >= time()-$set['t_active']*60){ //Az elmúlt x percben aktívak voltak
- $ret['a_t1']++;
- } else if( $row['activity'] >= time()-$set['t_active']*2*60){ //Az elmúlt 2*x percben aktívak voltak
- $ret['a_t2']++;
- } else {
- $ret['a_tt']++;
- }
-
- if( preg_match('/^((10\.)|(192\.168\.)|(172\.16\.)|(fd..\:)).*/', $row['ip']) ){
- $ret['ip_b']++ ;
- } else{
- $ret['ip_k']++ ;
- }
- }
- }
-
- @mysqli_free_result($r);
- @mysqli_close($l);
- echo "mayor_ip_sum.value ".($ret['ip_b']+$ret['ip_k'])."\n". "mayor_ip_b.value ".$ret['ip_b']."\n". "mayor_ip_k.value ".$ret['ip_k']."\n" ;
- echo "mayor_p_pri.value ".$ret['p_pri']."\n". "mayor_p_par.value ".$ret['p_par']."\n";
- echo "mayor_a_t1.value ".$ret['a_t1']."\n". "mayor_a_t2.value ".$ret['a_t2']."\n". "mayor_a_tt.value ".$ret['a_tt']."\n" ;
-
- } else{
- echo "mayor_ip_sum.value U\n". "mayor_ip_b.value U\n". "mayor_ip_k.value U\n" ;
- echo "mayor_p_pri.value U\n". "mayor_p_par.value U\n";
- echo "mayor_a_t1.value U\n". "mayor_a_t2.value U\n". "mayor_a_tt.value U\n";
- }
-}
-
-?> \ No newline at end of file