Internet to wspaniały wynalazek, ale jednocześnie wiele rzeczy znajdujących się w nim może nas odciągać od zadań, które powinniśmy wykonać. Na rynku są dostępne narzędzia typu wtyczka do przeglądarki BlockSite, która umożliwia ustawienie ograniczenia czasowego dostępu do stron, ale te rozwiązania mają jedną wadę- są płatne. A jak mówi mądrość ludowa: jedynie darmo to uczciwa cena.
Zablokowanie dostępu do stron
Najprostszym sposobem na ograniczenie dostępu do strony w Linuksie jest modyfikacja pliku /etc/hosts. Aby ograniczyć dostęp do adresu twojastrona.pl należy do /etc/hosts dodać takie linijki:
127.0.1.1 twojastrona.pl
127.0.1.1 www.twojastrona.pl
127.0.1.1 http://twojastrona.pl
127.0.1.1 https://twojastrona.pl
127.0.1.1 http://www.twojastrona.pl
127.0.1.1 https://www.twojastrona.pl
Reszta pliku pozostaje niezmodyfikowana. W ten sposób można zablokować nieograniczoną ilość stron. Robimy aż 6 wpisów aby mieć pewność, że adres będzie rozwinięty do adresu wskazującego na komputer lokalny.
Czasowe ograniczenie dostępu
Wiemy jak zablokować strony na stałe, ale teraz jawi się pytanie jak utworzyć ograniczenie czasowe? Po pierwsze potrzebujemy dwóch plików /etc/hosts– jeden z listą stron, które chcemy blokować w danym czasie oraz drugi bez tych stron(czyli prawdopodobnie oryginalny /etc/hosts). Możemy je odpowiednio nazwać /etc/hosts.block oraz /etc/hosts.unblock.
Drugim elementem jest skrypt pythonowy, który będzie nadpisywać plik /etc/hosts jedną z wcześniej utworzonych kopii. W tym przykładzie założyłem, że strony są blokowane w godzinach pracy czyli od poniedziałku do piątku do godziny 15:00. Kod jest bardzo krótki i wygląda tak:
#!/usr/bin/python3
import datetime
import shutil
now = datetime.datetime.now()
if now.weekday() >= 0 and now.weekday() < 5:
if now.hour < 15:
shutil.copyfile("/etc/hosts.block", "/etc/hosts")
elif now.hour >= 15:
shutil.copyfile("/etc/hosts.unblock", "/etc/hosts")
else:
shutil.copyfile("/etc/hosts.unblock", "/etc/hosts")
Zwróć uwagę, że wskazuję interpreter w pierwszej linii skryptu, jest to istotne ponieważ skrypt ten będzie używany przez systemd. Skrypt umieść w katalogu /etc i nadaj mu prawa wykonywania.
Teraz musimy tak skonfigurować systemd aby skrypt uruchamiał się w trakcie startowania systemu. Aby to zrobić utwórz plik website_scheduler.service o zawartości:
[Unit]
Description=Website scheduler
[Service]
ExecStart=/etc/website_scheduler.py
[Install]
WantedBy=multi-user.target
Umieść ten plik w katalogu /etc/systemd/system.
Teraz możemy aktywować nasz serwis za pomocą komendy:
# Wykonaj jako sudo lub root
systemctl enable website_scheduler.service
Niektórzy mogą zadać słuszne pytanie- “Ale co jeśli włącze komputer o 14:59? Wtedy podczas startu systemu skopiuje się z poblokowanymi stronami”. Jest to jak najbardziej słuszny zarzut. Aby obejść ten problem wykorzystamy crontaba.
Wywołaj komendę:
crontab -e
Jeśli pierwszy raz uruchamiasz crontaba zostaniesz zapytany o swój ulubionu konsolowy edytor tekstu, wybierz jakikolwiek Ci pasuje. W edytorze dodaj taką oto linijkę:
0 15 * * 1-5 /etc/website_scheduler.py
Ta linijka oznacza, że od poniedziałku do piątku o godzinie 15:00 będzie wywoływany nasz skrypt.
I to tyle. Skrypt można dostosować do swoich potrzeb aby odpowiadał godzinom, w których pracujesz. Być może warto pokusić się o dodanie obsługi pliku konfiguracyjnego.
I na koniec jedno spostrzeżenie- mając dostęp do użytkownika root to to ten ogranicznik jest oczywiście łatwy do obejścia. Zresztą jak każde inne narzędzie tego typu.