wwwshell.php to skrypt napisany w php, pozwalający obejść część ograniczeń związanych z brakiem shella na hostingu. Jako że w home.pl takowego nie ma, musiałem jakiś czas temu ratować się takim wynalazkiem ;)

Założeniem które przyświecało od początku jego istnienia była kompaktowość (wszystko w jednym pliku), używalność, wygoda. Wydaje mi się że jak na razie spełnia wszystkie wymienione ;) Ograniczeniami są PHP >= 4.3.0 i nie zablokowane wykonywanie funkcji proc_open () i proc_close ().

Zalety (z mojego punku widzenia ;) ):

  • wszystko w jednym pliku (biblioteki jQuery pobierane są bezpośrednio z serwera jQuery.com
  • obsługa aliasów
  • prostota użytkowania
  • historia poleceń

Wady:

  • no cóż, to jednak nie prawdziwy shell…
  • brak uzupełniania
  • uprzyjemniacze typu historia wymagają połączenia z netem lub modyfikacji skryptu i używania lokalnych kopii bibioteki jQuery

Znane błędy:

  • nie zapamiętuje ustawionego rozmiaru czcionki w okienku wyjścia
  • czasem z jakiegoś powodu historia nie działa, trzeba np. otworzyć okienko konsoli w ff i je zamknąć, wtedy jest ok :/

Nie sprawdzałem też (ani nawet nie zamierzam jak na razie) sprawdzać jak wygląda i działa pod IE. Może się coś sypać :)

Jeśli ktoś jest zainteresowany tą zabawką, to zapraszam do pobierania na GoogleCode, i komentowania/krytykowania pod tą notką ;)


Mały update do SBLAM! Blacklist Update: jako że czasem (jak obecnie) pojawiają się błędy w generowanej black liście, do naszego .htaccess dodawane są tylko poprawne linie zawierające adres IP, oraz komentarze. Wszystko inne jest ignorowane, i nie spowoduje problemu w działaniu naszego serwisu :)

Skrypt jak ciągle dostępny do pobrania z adresu: urzenia.net/wp-content/sblam_blacklist_update.txt.

Podziękowania dla Elusia za zwrócenie uwagi :)


Przeniosłem na razie bloga (i w sumie nie tylko) z Dreamhosta, z którego radośnie rezygnuję, na home.pl. Przenosiny odbyły się z problemami, konkretnie dwoma:

  1. nie mogłem się zalogować do panelu administracyjnego WordPressa
  2. spi… się kodowanie

Problemy naprawione, a dla potomności:

Problem pierwszy: problem z zalogowaniem się. Problemu by nie było, gdybym zostawił dokładnie taki sam prefix tabel jaki był na dreamhoście. Niestety, wpadłem na pomysł zmiany prefiksu, i tu się wszystko rozjechało. Trzeba było poza aktualizacją pliku wp-config.php (która była oczywista) zaktualizować także zawartośc tabel PREFIX_options i PREFIX_users, zmieniając nazwom opcji prefiksy ze starego (u mnie np wp_opcja) na nowy (w moim przypadku byłoby to coś na kształt urzeniawp_opcja). Bez tego wyświetla się w kółko komunikat że nie mam uprawnień do zobaczenia żadnej strony w panelu…

Problem drugi: kodowanie. Nie udało mi się tutaj zrobić żadnej sztuczki, żadnego prostego zabiegu, nic. W końcu po prostu na dumpie z bazy danych wykonałem szereg operacji podstawiania ‘krzaczków’ na odpowiadające im litery. Zmienionego dumpa wrzuciłem z powrotem do bazy, do tego dodałem opcję (mój plik konfiguracyjny ma kilka lat) DB_CHARSET do pliku konfiguracyjnego, i zaczęło działać poprawnie. Porażka troszkę, ale cóż robić :(

Na tą chwilę wszystko powinno już działać OK, i to zdecydowanie szybciej – Dreamhost do demonów szybkości raczej nie należy ;) Liczę też że dużo bardziej niezawodnie ;)

Jeszcze tylko dopowiem, że przy całej walce z Wordpressem na home, gdzie nie ma shella, wydatnie pomogła mi moja kolejna zabawka: wwwshell.php. Wbrew moim obawom, działa to całkiem nieźle, i gdyby nie brak historii i reakcji na enter po komendzie (tak, wiem, łatwo to naprawić zmieniając typ pola na <input type="text" />), to prawie nie byłoby różnicy ze zwykłym shellem ;)


Jako, że zbliża się koniec ważności mojego konta na DreamHost, a przedłużać go zamiaru nawet namniejszego nie mam, zaczęłem się przygotowywać do migracji. Jeszcze nie wiem gdzie pójdę sobie, ale pójdę na pewno :)

Jedną z rzeczy z tym związanych jest usunięcie mojego repo (repo.urzenia.net). Cała jego zawartość znajdzie się niedługo jako konkretne projekty na code.google.com. W sumie już wszystko przeniosłem, poza BlipApi.php, które też się tam niedługo znajdzie. Nowe adresy projektów to:

mPack
zestaw bibliotek pomocnych przy tworzeniu serwisów w PHP: m-pack.googlecode.com.
useless-scripts
kilka skryptów które wykorzystuje w mojej codziennej pracy na komputerze: useless-scripts.googlecode.com. Tutaj też dostał się mój ostatni “produkt” killer.pl.
WP Blip!
Plugin do WordPressa, wyświetlający na nim ostatnie wpisy z serwisu Blip!: wp-blip.googlecode.com.

Przed chwilą dokonałem jednej korekty w skrypcie: jako że czasem nie mogę się połączyć i pobrać blacklisty, stworzyłem możliwość 5-okrotnej (domyślnie – ustala to zmienna TRIES) próby pobrania blacklisty SBLAM!. Dopiero po pięciu próbach skrypt zakończy działalność. Każda kolejna próba jest opóźniona o domyślnie 5 (zmienna DELAY) sekund, przy czym każda kolejna próba dodaje do wartości samą siebie, czyli po drugim niepowodzeniu DELAY ustawi się na wartość 2*DELAY. Przykład:

  • pierwsza próba – z marszu
  • druga próba – po pięciu sekundach
  • trzecia próba – po dziesięciu sekundach
  • czwarta próba – po dwudziestu sekundach
  • piąta próba – po czterdziestu sekundach

Dodatkowym “fiuczerem” jest wywalenie stamtąd wszystkich polskich znaków – coś mi się wysypywał skrypt przez nie, a nie mam teraz czasu na debugowanie dlaczego.

Skrypt do pobrania z adresu: urzenia.net/wp-content/sblam_blacklist_update.txt.


porneL jakiś czas temu zaczął publikować czarną listę spamerów. Uznałem to za świetny pomysł z jego strony, wart wykorzystania. Chwilę później napisałem skrypcik, który pobiera aktualną blacklistę, i dodaje ją do pliku .htaccess na serwerze, blokującym odwiedzającym z tego adresu IP na dostanie się do naszej witryny. Oczywiście mowa tylko o spamerach :)

Skrypt jest bardzo prosty – pobiera blacklistę, dopisuje ją do .htaccess, robiąc wcześniej kopię zapasową, i kończy pracę. Równie prosta jest jego konfiguracja wewnątrz:

HTACCESS
wskazuje na plik .htaccess który będziemy uaktualniać. W przykładowym skrypcie jest ona generowana, jednak nie widzę przeszkód aby wpisać ją na sztywno, np: HTACCESS = '/home/user/public_html/.htaccess'.
BKPDIR
Katalog w którym zostanie utworzona kopia zapasowa .htaccess. Jeśli puste, przyjmuje że kopia zapasowa będzie tworzona w katalogu macierzystym obecnego .htaccess.
BLACKLIST
url do pliku z blacklistą
DEBUG
Jeśli przyjmie wartość prawdy logicznej (np, True, 1) to na stderr będzie wypisywać komunikaty z pracy skryptu.

Skrypt (jego już druga wersja) jest na licencji GPL v.2. Ja nie biorę odczywiście odpowiedzialności za jego nieprawidłowe działanie :) Ale wszelkie błędy i raporty można zgłaszać do mnie, a ja będę starał się je poprawiać :) Do pobrania stąd: urzenia.net/wp-content/sblam_blacklist_update.txt (warto zmienić rozszerzenie pliku na .py).

Jeszcze słówko o najlepszym użyciu:

Ja osobiście wstawiłem sobie do crona linijkę:

12 6 * * * /home/mysz/bin/sblam_blacklist_update.py

Dzięki czemu o godzinie 6.12 każdego dnia mam uaktualnianą blacklistę spamerów :)


dzieki sponsoringowi (;) ) sadu, uaktualnilem, a wrecz przepisalem skrypta perms. z nowych rzeczy: przelaczniki ‘-d’ i ‘-f’ mozna stosowac oddzielnie. jesli ktorys z nich nie zostanie podany, to prawa dla danej rzeczy nie zostana zmienione.
dodalem tez przelaczniki ‘-o’, ‘-a’, ‘-g’, ‘-b’, ktore odpowiadaja za zmiane wlasciciela i grupy pliku/katalogu. mozna tez ustalac, czy np. zmiana wlasciciela ma byc tylko dla plikow, tylko dla katalogow czy tez i dla plikow i dla katalogow.

dokladniejszy opis

na ta chwile wyszlo mi z tego fajne narzadko (imo of koz ;) ). dziala ladnie i sprawnie, ale oczywiscie wymaga jeszcze przetestowania w wiekszych warunkach bojowych ;) w czasie moich testow sprawdzalo sie ok.

najbardziej zadowolony jestem z tego, ze napisalem go zupelnie na sucho – tj. bez mozliwosci sprawdzania w trakcie czy dziala. w sadzie mam tylko windowsa, gdzie zmiana praw i wlasciciela niespecjalnie dziala. przetestowalem dopiero po powrocie do domu ;) i poza dwoma banalami (w sumie nie wiedzialem wczesniej, ze sys.exc_info()[1] zwraca obiekt, a nie tresc wyjatku). wiec styklo dodac str() i poszlo :) jestem z siebie dumny :P