Jako PHP programátor na volné noze často řeším problém s kolísající koncentrací na práci během dne. Znáte to, chcete si na chvilku odpočinout od programování, tak se podívate na Facebook, mrknete, co nového na Twitteru, přečtete si aktuální zprávy...minuty pomalu letí a než se nadějete, zjistíte, že jste prosurfovali dvě hodiny. Abych se tohoto pokušení vyvaroval, napsal jsem si jednoduchý PHP skript, který mě v pracovní době brouzdat po webu jednoduše nenechá. Princip je jednoduchý - skript se jednou za čas automaticky spustí, zkontroluje aktuální čas a podle toho upraví soubor /etc/hosts, který mapuje domény na IP adresy. Například tak, že veškeré "rušivé" domény přesměruje na localhost (127.0.0.1). Nejprve je potřeba vytvořit používané varianty souboru /etc/hosts - pro pracovní dobu a pro zbytek dne. Moje varianta pro pracovní dobu /etc/hosts_workinghours vypadá zhruba následovně: 127.0.0.1 localhost 127.0.0.1 aktualne.centrum.cz 127.0.0.1 cs.facebook.com 127.0.0.1 ihned.cz 127.0.0.1 idnes.cz 127.0.0.1 lidovky.cz 127.0.0.1 novinky.cz 127.0.0.1 reflex.cz 127.0.0.1 tyden.cz 127.0.0.1 twitter.cz 127.0.0.1 www.facebook.com # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters ff02::3 ip6-allhosts K nastavení pro zbytek dne stačí jako root zkopírovat aktuálně používaný /etc/hosts. cp /etc/hosts /etc/hosts_original Další činností na řadě je samotné napsaní obslužného skriptu, který se postará o přepis souboru /etc/hosts a tím i o blokování nežádoucích domén v definované pracovní době. Ten je skutečně jednoduchý: #!/usr/bin/php <?php $worktime = array('9:00', '18:00'); $current_time = time(); $day = date('w'); $is_working_day = $day >= 1 && $day <= 5; list($hour, $min) = explode(':', $worktime[0]); $worktime_from = mktime($hour, $min); list($hour, $min) = explode(':', $worktime[1]); $worktime_to = mktime($hour, $min); if ($is_working_day && $current_time > $worktime_from && $current_time < $worktime_to) { exec('cp -f /etc/hosts_workinghours /etc/hosts'); } else { exec('cp -f /etc/hosts_original /etc/hosts'); } ?> Dále je potřeba vyřešit otázku přístupových práv - protože k modifkaci souboru /etc/hosts nemá běžný uživatel oprávnění, chceme, aby se skript spouštěl pod privilegovaným účtem. Proto nastavíme jako vlastníka souboru uživatele root chown root:root /cesta/ke/skriptu chmod 4755 /cesta/ke/skriptu Nakonec skript přidáme do cronu pro automatické spouštění v určenou dobu- jako root spustíme crontab -e 0 * * * * /cesta/ke/skriptu Tím je vše hotovo a práce na aktuálních projektech je zase o něco radostnější (-: Čistším (a komplikovanějším) řešením by bylo zprovoznit si na počítači lokální proxy server a nastavit pravidla přístupu (např. Squid + Squidguard). Pro běžně použití ale výše uvedený postup bohatě stačí. UPDATE: V původní verzi článku byla kontrola přístupu zajištěna pomocí sudo, toto řešení ale vyvolávalo potencionální bezpečnostní riziko. |
|||

Re: PHP skript pro zákaz surfování během pracovní doby
Neco podobneho se snazim udelat uz dlouhou dobu, jen chci proste, abych neco spustil a presel do pracovniho provozu, ale tohle je nepouzitelne, potrebuji wildcards v hosts (mam win, nevim jestli je to jine v lin), abych mohl zakazat treba *.twitter.com - protoze mame (www/m/api).twwitter.com, atd. a to se neda vypsat uplne vse... treba u facebooku, pokud jsou nejaky remindery, tak to je bez sanci... nejaky tip?
Re: PHP skript pro zákaz surfování během pracovní doby
Wildcards nejsou v /etc/hosts podporované ani na Linuxu. Asi to budete muset řešit přes proxy server nebo firewall, jiná možnost mě nenapadá.
Re: PHP skript pro zákaz surfování během pracovní doby
Bežné nastavení v Ubuntu je se zadáním hesla. Stejně tak myslím i v jiných distrech.
%sudo ALL=(ALL) ALL
Re: PHP skript pro zákaz surfování během pracovní doby
Máte pravdu. A rozhodně je to tak lepší, než mnou uvedené nastavení - tím vzniká poměrně vysoké bezpečnostní riziko. Ještě o tom popřemýšlím, každopádně díky za nakopnutí!
Re: PHP skript pro zákaz surfování během pracovní doby
Už jsem to vyřešil a článek aktualizoval - místo použití sudo skriptu přiřazuji SUID bit.
Re: PHP skript pro zákaz surfování během pracovní doby
A nestačil by tedy v tomto případě extension LeechBlock (https://addons.mozilla.org/en-US/firefox/addon/4476)? Přijde mi, že přes tuto extension je řešení mnohem precisnější.
Nebo modifikace hosts je pro případ, že by si chtěl otevřít jiný prohlížeč, než FF?:-).
Poslat nový komentář