RSS Feed

‘linux’ Category

  1. Windows update, błąd 80244018 i jak go naprawić

    Czerwiec 22, 2012 by 0verlord

    Problem okazał się dość trywialny. Po tym, jak nie zadziałały wszystkie sugestie, które w tym temacie ma internet (włączyć inteligentny transfer w tle, włączyć windows update, opuścić zaporę, uruchomić MS Fixit’a), poszukałem głębiej.

    Windows update i jego inteligentny transfer w tle, to nic innego jak pobieranie cabów z aktualizacjami po http.
    A ten numer błędu oznacza, że zamiast otrzymać odpowiedź 200 OK, system dostał 403 Permission Idź Precz.

    Tylko skąd to się wzięło i dlaczego np. Windows XP, który stoi zaraz obok, aktualizuje się bez problemów?
    Po drodze mam Squida, więc zajrzałem w logi, a tam np. takie coś:

    1340345769.540 0 ipek TCP_DENIED/403 361 HEAD http://download.windowsupdate.com/msdownload/update/software/updt/2011/04/windows6.1-kb2506928-v2-x64-express_23d6b471222697d7fba8e25c305ab6d661dd4324.cab - NONE/- text/html
    1340345769.628 0 ipek TCP_DENIED/403 361 HEAD http://download.windowsupdate.com/msdownload/update/software/updt/2011/04/windows6.1-kb982018-v3-x64-express_6daea780a222e001dc64d67b979af052bce270c3.cab - NONE/- text/html
    1340345769.712 0 ipek TCP_DENIED/403 361 HEAD http://download.windowsupdate.com/msdownload/update/software/secu/2012/04/graph-x-none_5df373440beed2576fe78d0ef0ebc6b90db3fc8c.cab - NONE/- text/html
    1340345769.783 0 ipek TCP_DENIED/403 361 HEAD http://download.windowsupdate.com/msdownload/update/software/secu/2012/04/excel-x-none_efe9948d82dfd419d0cf40aa4c0d1912104a50e8.cab - NONE/- text/html
    1340345769.876 0 ipek TCP_DENIED/403 361 HEAD http://download.windowsupdate.com/msdownload/update/software/secu/2012/04/vviewer-x-none_0dbaa8870c042c1a99faa4c5425d311252c34984.cab - NONE/- text/html
    1340345770.029 0 ipek TCP_DENIED/403 361 HEAD http://download.windowsupdate.com/msdownload/update/software/crup/2011/11/proof-en-us_47e02b746959bae289bf3061847380074a801d52.cab - NONE/- text/html
    1340345770.078 0 ipek TCP_DENIED/403 361 HEAD http://download.windowsupdate.com/msdownload/update/software/crup/2011/11/proof-de-de_440d1b4f0aa94495b9dda1e1c9b4a81f0ac554b9.cab - NONE/- text/html
    1340345770.080 0 ipek TCP_DENIED/403 361 HEAD http://download.windowsupdate.com/msdownload/update/software/crup/2011/11/proof-pl-pl_d326a19a46259642c5edf4acca2e155bfc42e1dc.cab - NONE/- text/html
    1340345770.177 0 ipek TCP_DENIED/403 361 HEAD http://download.windowsupdate.com/msdownload/update/software/secu/2012/03/windows6.1-kb2653956-x64_5cfdaba5a52326088faab671f21fcd807c8b8768.cab - NONE/- text/html
    1340345770.275 0 ipek TCP_DENIED/403 361 HEAD http://download.windowsupdate.com/msdownload/update/software/secu/2012/05/windows6.1-kb2659262-x64-express_16922c62a2473b40cf0d69a45f4f9162ef5ce6d2.cab - NONE/- text/html

    Kluczowe jest tutaj, dlaczego HEAD powoduje 403? Ano dlatego, że (jak sobie już przypomniałem), kiedyś musiałem przejść przez dość wrednie napisaną witrynę, która wygaszała sesję php jak wget -m posyłał jej HEAD, żeby sprawdzić, czy już pobrał zawartość, czy nie pobrał. Regułka w Squidzie wygląda tak:

    acl Safe_method method CONNECT GET POST
    http_access deny !Safe_method

    Nie ma HEAD? Nie ma. No to deny. I w ten oto sposób pokonałem się sam. Żeby było wszystko jasne, tej regułki nie ma domyślnie w konfigu Squida, została dodana na potrzeby tamtej krzywej strony.


  2. Administracja systemem Linux i nie tylko – dobre praktyki

    Kwiecień 18, 2012 by 0verlord

    Jak „dobrze zarządzać” systemem operacyjnym, jak klikać, żeby się nie pogubić i wreszcie – jak to wszystko zrobić dobrze.
    W ogóle, chwila usprawiedliwienia – piszę o tym, bo w ramach podsumowania własnej pracy wyszło mi, że co przejmowaliśmy adminkę po kimkolwiek – skala rozwiązań i chaosu powodowała problemy takiego sortu, że powinienem sobie dodać na Linkedinie skilla Linux archeo-ninja-terminator. Już nawet nie mówię o nieaktualizowanych zabytkach typu CentOS 5.2 albo Ubuntu 8.04.

    Ogólny wniosek jest prosty – ilu administratorów, tyle najlepszych i w ogóle pomysłów. Przez chwilę zatęskniłem za Windowsem, w którym niektórych rzeczy nie da się sklikać inaczej, bo inne chore rozwiązanie na to nie pozwala. Ale za to wiadomo, gdzie szukać

    Ale miało być o tym, jak robić, a nie jak nie robić.

    Pierwsza sprawa, to porządek. Niby wszyscy to wiedzą, ale jeżeli się tego nie pilnuje od początku – po roku czy dwóch nawet dowolne distro linuxa nadaje się do przeinstalowania. Co tam jest, nie wie nikt, od czasu do czasu wybuchają różne biblioteki, nadpisane przy okazji instalacji różnego ciekawego lub w efekcie nieciekawego oprogramowania. I o ile Windowsy mają deinstalatory (gorsze lub często beznadziejne) o tyle Linuxy już nie do końca.
    Jeżeli ktoś używa tylko oprogramowania w postaci binarnej (paczki czy porty) – jest prosto. Instalacja jak potrzeba, deinstalacja jak system „przytyje” i już. Ale czy aby w każdym przypadku tak jest?

    Zatem zbierając kilka mądrości nabytych:

    • korzystaj z programów w postaci binarnej – nie słuchaj tych, którzy chcą wszystko kompilować. W dzisiejszych czasach to sztuka dla sztuki, na dodatek przy większej ilości serwerów – szkodliwa sztuka (ale o tym za chwilę).
      korzystaj z natywnych managerów oprogramowania dla danej dystrybucji (np. na Debianie jest alien – narzędzie do przetwarzania rpmów na deby, produkuje deby, i owszem, ale potrafi nadpisać kawał systemu swoimi skompilowanymi pod inne biblioteki softem, które potem trudno nawet wywalić z systemu). Binarki mają dodatkowo jeszcze jedną zaletę – nie śmiecą w systemie pozostałościami po kompilacji.
    • jeżeli już musisz cokolwiek kompilować – poznaj FHS (filesystem hierarchy standard, czyli co się gdzie w danej dystrybucji/systemie znajduje) dla lokalnego systemu (dla Debiana mamy do dyspozycji całe drzewo /*/local, /usr/local, /var/local – jeżeli cokolwiek tam wrzucamy – system tego nie nadpisze, ani my nie nadpiszemy systemu. Jeżeli nie masz bladego pojęcia o czym mówię – nie kopuj bezmyślnie z sieci przykładów. W przypadku kompilacji główny katalog najczęściej określa opcja --prefix. Nie /usr i nie /. Daj np. /opt, albo chociaż /moje. Wtedy będzie łatwiej zapanować nad różnicami pomiędzy kompilowanym narzędziem a systemem.
    • poznaj dokładnie swój system – np. dowiedz się, gdzie trzyma konfigurację np. apache. W Debianie jest to /etc/apache, w starych wersjach RedHata czy innych CentOSów było to /etc/httpd. W Debianie demon nazywa się apache2, gdzie indziej najczęściej httpd, więc warto to wiedzieć zanim make install narobi spustoszenia w podstawowym drzewie plików i katalogów)
    • jeżeli cokolwiek chcesz dodać do systemu – poczytaj jak to zrobić zgodnie z zasadami adminki tymże. W Debianie (tak, jestem wyznawcą) jest coś, co nazywa się The Debian Way, czyli sposób zrobienia tego tak, żeby ktokolwiek nie siądzie do systemu rozezna się z nim w chwilę moment – o ile także podąża Debian Way’em.
    • naucz się narzędzi administacyjnych dla właściwego systemu i używaj ich. To procentuje po jakimś czasie, szczególnie w przypadku konfiguracji, których nie dotyka się często.

    Ok, ale jakie są korzyści przestrzegania takich niewygodnych czynności? W przypadku adminki jednym system – żadne. Serio. Nie ma potrzeby męczyć się i robić coś zgodnie z którymś wariantem standardu. Pomijając oczywiście przypadku, w których szukamy pomocy – wtedy może się okazać, że nikt nie jest nam w stanie pomóc, bo nie trzymamy standardu. Znacie to? Ile wpisów na forum kończy się mniej więcej tak: „a bo u mnie było to trochę inaczej, ale już znalazłem i podmieniłem ścieżki/biblioteki/konfigi”. Albo ile wpisów okazuje się gonieniem własnego ogona z powodu którejś drobnej zmiany dawno temu w przeszłości?

    Czyli podsumowując: jeżeli jesteśmy adminem własnego systemu i ten system robi to co chcemy, to jak byśmy nie prowadzili hosta – będzie dobrze. Ale jeżeli zaczynamy przygodę z systemem – warto już robić to jak większość i standard, chociażby po to, żeby ktokolwiek mógł nam pomóc. Ludzie nie wiedzą, jak popsuliśmy własny system. Nawet nie podejrzewają zajebistości naszych rozwiązań ;-).

    Teraz o tym, dlaczego standardy są ważne w przypadku pracy z innymi ludźmi i większą ilością systemów niż jeden.
    Weźmy najprostszą sytuację do wyjaśnienia – jest sobie dwóch adminów, którzy pilnują większej ilości systemów.
    Idealnie, jeżeli są to te same dystrybucje. Jeżeli nie – nie jest źle, specjalizacja jest jak najbardziej wskazana, ale trzeba tutaj zapewnić jedną bardzo ważną rzecz. W przypadku nagłego zgonu lub innego przypadku losowego specjalisty – trzeba mieć pewność, że zanim tenże zmartwychwstanie, ktoś będzie w stanie podnieść usługę lub serwer. I że zrobi to szybko i nie popsuje bardziej niż pomógł.

    Przykład prosto z życia. Ogólnie ja się zajmuję Linuxami w firmie, a kolega klika AD. Ale wszystko mamy zrobione zgodnie ze znanymi standardami w sieci. Przykład z AD: wiem gdzie leżą skrypty do dodawania usera do domeny od razu ze wszystkimi wpisami w GPO, wiem z grubsza jak się debuguje podstawowe problemy związane z brakiem możliwości zalogowania się do domeny. Od biedy potrafiłbym nawet dodać ręcznie usera, jak by mi skrypty wybuchły. Najwyżej bym go klikał kilka godzin, szukając po kolei, która grupa odpowiada za co.

    Ale jestem w stanie to zrobić relatywnie szybko, bo grupy są tam, gdzie Internet mówi, że mają być. Nazywają się tak, że na podstawie samej nazwy kojarzę OCB – patrz SHARE_SKANY_RW (grupa mająca możliwość zapisu do share sieciowego SKANY).
    Ok, może i nie umiem dodać drukarki tak, żeby się dystrybuowała przez GPO, ale to nie jest kluczowa usługa i wytrzyma do momentu, w którym pojawi się kolega i orypie mnie, że jeszcze nie dodałem drukarki ;-). A jeżeli będzie taka potrzeba, dość szybko odnajdę pierwszy lepszy tutorial na sieci i sklikam to sam – bez szkody dla standardu.

    W przypadkach Linuxowych jest jeszcze prościej – obaj wyznajemy Debian Way. Czyli np. nowe vhosty do apache dodajemy w /etc/apache2/sites-available i potem je włączamy przy pomocy a2ensite (albo chociaż ln -s).
    Dovecot ma konfigurację w /etc/dovecot/conf.d i tam też dodajemy nowości, czy edytujemy opcje. Pewnie, można w konfigu zrobić include i dodać katalog w lokalizacji z dupy, ale szukanie tego komu innemu zajmie wieki. Jeżeli dodajemy coś do crona, to używamy katalogów /etc/cron.d, itp, itd.

    A co do przestrzegania standardu, na przykład weźmy openvpna. Jeżeli się go klika komukolwiek, robi się to na początku. Trochę pracy jest, pewnie, ale potem cisza i spokój przez dłuższy czas. Ale potem przychodzi mroczny czas po np. roku, gdzie trzeba dodać nowego usera. I teraz seria bolesnych pytań: gdzie jest CA? Jak się dodawało certyfikat i klucz dla danego klienta. Jaki był standard dodawania userów na tym serwerze. Czy jest CCD? Czy jest hasło na klucz? Jaki jest podstawowy konfig? Ratunku? Pomocy? 😉

    Pytań może być jeszcze kilka i nie mówię, że problem nie jest nieogarnialny. W końcu odnajdziemy sposób, w jaki to konfigurował ktoś przed nami. Tylko zajmie to nieporównywalnie więcej czasu niż gdybyśmy wiedzieli jak to się robi i gdzie tego szukać. No i najważniejsza rzecz w tej całej zabawie – możemy spokojnie oddelegować zadanie koledze, jeżeli akurat składamy rozsypaną macierz czy szukamy pozostałości po włamie na serwer poczty.

    A jeszcze bardziej na koniec, najlepsze do trzymania porządku są automaty. Do wyboru jest kilka rozwiązań, chef, cfengine czy inne płatne i niepłatne wynalazki. Nawet jeżeli komuś nie odpowiada żadne z rozwiązań – jeżeli się napisze swoje własne, tak czy inaczej porządek i standard zostanie wymuszony w obrębie własnego zbioru hostów do zarządzania. Automat nie zapomina, ale i nie wybacza – jeżeli zapomnimy dodać konfiga, system zrobi to za nas. Ale i nadpisze lokalne zmiany, więc trzeba się dobrze przymierzyć do takiego rozwiązania.

    A obrazek z początku posta ma symbolizować sytuację, w której się znajdziemy, jeżeli na obcym systemie będziemy szukać właściwej drogi w rozwiązaniu autorskim umysłu, który przed nami coś połatał i działało aż do chwili temu. Najkrótsza droga do celu niekoniecznie jest najlepsza ;-).


  3. Upgrade Lenny -> Squeeze i niedziałające PHP

    Marzec 30, 2012 by 0verlord

    Zaatakował mnie w sumie dość debilny, ale i szybko naprawialny problem. . Aktualizowałem jeden serwer z Lennyego na Squeeze, jako że nastąpił koniec wsparcia dla starego stabla.

    Aktualizacja przebiegła bez najmniejszych problemów, bo w sumie na tym hoście tylko wiatr wieje, a i to czasem.
    Po aktualizacji jedyna aplikacja, która tam była zamiast parsować PHP, pozwalała je pobrać. Problem niby znany – brak obsługi php w Apaczu. Ale nie do końca. Moduły były, wszystko dobrze pokonfigurowane, ale zamiast wyświetlać – ściągał. Co ciekawe, phpmyadmin działał bez zarzutów.
    Po wiązance kwiatów polskich w kierunku Boga Nieprzewidzianych Problemów, jeeeeest, znalaaazłem.

    Jest sobie plik ładujący podstawowy konfig do php, konkretnie ten:

    host:~# cat /etc/apache2/mods-available/php5.conf 
    <IfModule mod_php5.c>
        <FilesMatch "\.ph(p3?|tml)$">
    	SetHandler application/x-httpd-php
        </FilesMatch>
        <FilesMatch "\.phps$">
    	SetHandler application/x-httpd-php-source
        </FilesMatch>
        # To re-enable php in user directories comment the following lines
        # (from <IfModule ...> to </IfModule>.) Do NOT set it to On as it
        # prevents .htaccess files from disabling it.
        <IfModule mod_userdir.c>
            <Directory /home/*/public_html>
                php_admin_value engine Off
            </Directory>
        </IfModule>
    </IfModule>
    

    Co on robi? Ano wyłącza php w katalogach userów, jeżeli moduł userdir jest załadowany. U mnie był. Zmyliło mnie, że ta aplikacja miała swój własny vhost. Ale już DocumentRoot łapie się w ścieżkę z wyłączonym php. Zakomentowałem, zrestartowałem i ruszyło.

    Słowo o bezpieczeństwie takiego podejścia. Ma to sens, jeżeli mamy hosta, w którym są użytkownicy, którzy korzystają z userdir i wrzucają tam różne skrypty, które mogą być dziurawe albo z powodu nadmiaru dobrych chęci mogą przywiesić hosta, jak się zapętlą na śmierć. Jeżeli mamy tylko jedną aplikację i brak innych użytkowników, można sobie wyłączać. Jeżeli mamy userów, warto się zastanowić, zanim zakomentujemy te linijki. Z drugiej strony, skoro pod Lennym działało i nagle przestało to pewnie usernia zacznie protestować.


  4. OpenVPN i WrwrWrwrWrwrWrwr w logu oraz Need IPv6

    Marzec 6, 2012 by 0verlord

    Jeżeli przy konfiguracji OpenVPNa w logu pojawiają się długie linijki jak w temacie przy każdym ruchu sieciowym (najlepiej widać na przykładzie pinga) to należy zmniejszyć poziom debuga w konfigu. Poziom debuga „verb 2” załatwi problem.

    Need IPv6 code in mroute_extract_addr_from_packet – ten komunikat jest trochę głupszy, bo rozwiązaniem jest wyłączenie protokołu ipv6 na interfejsie tun. Problemem jest sterownik tun pod Windowsy, nie obsługuje jeszcze ipv6 wystarczająco stabilnie, żeby chłopaki puścili go do produkcji. Albo zrobi się jak w przypadku innych narzędzi opensourcowych – nowe wersje tylko dla płacących klientów. Taki los.

    Jak na razie nie musiałem pchać ipv6 po tunelach OpenVPNowych, więc nawet ciężko mi się wypowiedzieć.


  5. Samba w firmie – możliwości i zastosowania

    Luty 10, 2012 by 0verlord

    Samba ma szereg zastosowań w firmie i nie tylko. Można jej używać tylko do współdzielenia plików, można do backupu, ale z ciekawostek, można jej też używać jako serwer drukowania do różnych drukarek. Taki hub z podłączonymi drukarkami z różnych zakątków sieci firmowej. Kolejnym z zastosowań jest serwer plików pod centrum synchronizacji (ale tutaj uwaga, to potrafi się sypać, o ile się odpowiednio nie sklika samby)

    Generalnie, jeżeli się ma w dowolnej firmie więcej niż kilka drukarek poprzypinanych do różnych komputerów, prędzej czy później kupuje się drukarkę sieciową. Potem kolejną. Potem dochodzi jeszcze drukarka awaryjna, tylko dla niektórych ludzi. Potem do tej drukarki chce mieć dostęp ktoś jeszcze. A potem, chaos niepostrzeżenie zaczyna nam się przyglądać i łypać złym okiem.

    Pierwszy problem, to sterowniki, do każdej wersji windowsa, w odpowiednim języku, w odpowiednim wariancie architektury. Gdzie je trzymać, żeby zawsze były pod ręką jak są potrzebne. Ok, można zawsze dociągać z netu, ale to rozwiązanie krótkoterminowe. Mamy np. takiego pana klienta, który ma 1/0,25 mbita (brak jakichkolwiek możliwości technicznych na cokolwiek innego, nawet GSM działa tam tylko w EDGu). i teraz np. 39mb drivera do Kyocery za każdym razem dociągać, dla trzech różnych wersji windowsa? Łatwo policzyć ile czasu to wszystko zajmuje.

    Problem nr 2: najczęściej klikamy takie rzeczy zdalnie – a pan klient mówi, chciałbym tą drukarkę hp pod oknem. Rwa, teraz jaki to miało ipek, jaki to dokładnie model HPka, skoro w dokumentacji mamy 5 różnych (z czego 3 już są wyłaczone, bo pan klient nie powiedział, że się popsuły). I inne tego typu problemy, które potrafią zjeść cichaczem pół dnia i tylko irytują niepomiernie.

    Na ratunek przychodzi nam Samba z kolegami (LPD i CUPS).

    Jak już skonfigurujemy sobie taki serwer druku, dodanie drukarki do innego komputera wygląda tak: klikamy share \\serwer, pojawiają się drukarki. Wybieramy właściwą, klikamy „podłącz”. Reszta się robi sama. Czasem tylko trzeba kliknąć, że na pewno chcemy zainstalować driver z potencjalnie niebezpiecznej lokalizacji. Do tego nie trzeba nawet panu klientowi przejmować sterowania, tylko wytłumaczyć przez telefon co kliknąć.

    Do tego nie trzeba o niczym pamiętać, a jak byśmy zapomnieli – wszystko jest w jednym miejscu, w konfigu samby i cupsa. A drivery na tym samym dysku.

    To rozwiązanie jest zapewne znany wszystkim, którzy mają do dyspozycji Windowsa 2003/2008 (niekoniecznie jako kontroler domeny). Tam to już jest. Natomiast, jeżeli w firmie mamy „serwer” na Windowsie XP, bo serwer „jest niepotrzebny” albo „drogo kosztuje”, to takie rozwiązanie jest jak najbardziej do rozważenia.

    Szef kuchni poleca.


  6. SMTP AUTH w zależności od adresu nadawcy

    Styczeń 29, 2012 by 0verlord

    Autoryzacja smtp, czyli SMTP AUTH to wymóg dzisiejszych czasów. Każdy szanujący się operator pozwala wysyłać wiadomości tylko po odpowiednim przedstawieniu się przez szyfrowany kanał – SSL lub TLS.

    Niektórzy dostawcy są mniej upierdl^Wrestrykcyjni (wystarczy się zautoryzować poprawnym loginem w ramach konta, i już można wysyłać jako dowolny użytkownik).
    Niektórzy są bardziej restrykcyjni – patrz ogicom.pl. Autoryzacja pozwala ustawić adres wychodzący (mail from:) tylko dla tego konta, do którego się zautoryzowaliśmy (lub dodanego do tego konta aliasa). Sprawdzałem – pomoc techniczna mówi, że się nie da. Źle. Da się, tylko nie chcą. Różnica jest subtelna 😉 Nie zadziałał nawet tekst o tym, że skoro u innych się da, a u nich nie, to może sobie pójdę tam, gdzie się da. Na szczęście na takich upierdliw^mocno zatroskanych bezpieczeństwem maili ludzi Postfix zna sposób.

    Interesują nas kilka opcji konfiguracyjnych w main.conf:

    smtp_sender_dependent_authentication = yes
    sender_dependent_relayhost_maps = hash:/etc/postfix/hash-sender-relay
    smtp_sasl_auth_enable = yes
    smtp_sasl_password_maps = hash:/etc/postfix/hash-sasl-passwd

    Co to robi? opcja smtp_sender_dependent_authentication mówi Postfixowi, że chcemy się autoryzować na podstawie mail from: Opcja sender_dependent_relayhost_maps mówi, na który serwer się łączyć, jeżeli chcemy coś wysłać już jako konkretny email. Plik wygląda od środka np. tak:
    user1@gdziestam.pl [smtp.gdziestam.pl]:587
    user2@gdziestam.pl [smtp.gdziestam.pl]:587
    user3@gdziestam.pl [smtp.gdziestam.pl]:587
    user4@gdziestam.pl [smtp.gdziestam.pl]:587

    Oczywiście nie przeszkadza, żeby dać tam inne serwery i maile z innych domen – trzeba tylko zadbać o odpowiedni mechanizm autoryzacji . Temat autoryzacji smtp jest trochę bardziej skomplikowany, ale na sieci jest pierdyliard HOWTO’ów i innych JTZów, więc nie będę się tutaj rozwodzić.

    Opcja smtp_sasl_auth_enable każe używać smtp autha do wysyłania maili.
    I na koniec smtp_sasl_password_maps mówi, gdzie szukać usera i hasła dla konkretnego maila.

    Plik wygląda w środku tak:
    user1@gdziestam.pl nazwa_uzytkownika1:haslo1
    user2@gdziestam.pl nazwa_uzytkownika2:haslo2
    user3@gdziestam.pl nazwa_uzytkownika3:haslo2

    Na koniec tylko postmap na plikach hash-sender-relay i hash-sasl-passwd. No i reload Postfixa.


  7. LMS i odzyskiwanie z backupu

    Grudzień 2, 2011 by 0verlord

    Sytuacja jak zazwyczaj: pada mi host z lmsem, backup się zrobił i odzyskał. Trzeba po prostu odzyskać, bez upgrade i innych takich tam sztuczek. No to jadę – przenoszę bazy, ale mysql < baza.sql rzuca permission denierem i wymaganiami super usera. Dokładnie takimi erorrami rzucało: Napotkano błędy w bazie danych!
    Zapytanie: CREATE FUNCTION lms_current_user() RETURNS int(11) NO SQL
    RETURN @lms_current_user;
    Błąd: You do not have the SUPER privilege and binary logging is enabled
    (you *might* want to use the less safe log_bin_trust_function_creators
    variable)
    Zapytanie: CREATE VIEW customersview AS SELECT c.* FROM customers c
    WHERE NOT EXISTS ( SELECT 1 FROM customerassignments a JOIN
    excludedgroups e ON (a.customergroupid = e.customergroupid) WHERE
    e.userid = lms_current_user() AND a.customerid = c.id)
    Błąd: FUNCTION lms.lms_current_user does not exist

    Przywróciłem bazę z doc/lms.mysql, ale nie pomogło, dalej pluło errorami z customerviewsem.
    Wujek google skierowął mnie tu.

    W skrócie: uwaliłem viewsy, wszystkie:
    CREATE VIEW nas AS
    SELECT n.id, inet_ntoa(n.ipaddr) AS nasname, d.shortname, d.nastype AS type,
    d.clients AS ports, d.secret, d.community, d.description
    FROM nodes n
    JOIN netdevices d ON (n.netdev = d.id)
    WHERE n.nas = 1;

    CREATE VIEW vnodes_mac AS
    SELECT nodeid, GROUP_CONCAT(mac SEPARATOR ',') AS mac
    FROM macs GROUP BY nodeid;

    CREATE VIEW vnodes AS
    SELECT n.*, m.mac
    FROM nodes n
    LEFT JOIN vnodes_mac m ON (n.id = m.nodeid);

    CREATE VIEW vmacs AS
    SELECT n.*, m.mac, m.id AS macid
    FROM nodes n
    JOIN macs m ON (n.id = m.nodeid);

    CREATE VIEW customersview AS
    SELECT c.* FROM customers c
    WHERE NOT EXISTS (
    SELECT 1 FROM customerassignments a
    JOIN excludedgroups e ON (a.customergroupid = e.customergroupid)
    WHERE e.userid = lms_current_user() AND a.customerid = c.id);

    i dodałem funkcję:
    CREATE FUNCTION lms_current_user() RETURNS int(11) NO SQL RETURN @lms_current_user;.

    Wszystko oczywiście po dodaniu bazy i usera do niej.Chciałem też odpowiednio okomentować w blogu z linka przydatne informacje, a tutaj niespodzianka:

    WordPress database error: [INSERT command denied to user 'xxx'@'localhost' for table 'wp_comments']

    Życie. Więc podziękuję tu:

    Thenks meeeen, I loveeee youuuuu 😀 (i napraw sobie zapomnianego worpdressa ;-))

    EDIT: wszystkie viewsy trzeba skasować, jak leci wszystkie, tj.

    DROP VIEW IF EXISTS nas;
    DROP VIEW IF EXISTS vnodes_mac;
    DROP VIEW IF EXISTS vnodes;
    DROP VIEW IF EXISTS vmacs;
    DROP VIEW IF EXISTS customersview;

    W sumie ciekawe, dlaczego dump nie odtworzył viewsów. Ale nie chce mi się szukać.


  8. Samba i security – czyli jak nie robić fileservera w firmie

    Listopad 10, 2011 by 0verlord

    Przejęliśmy zarządzanie w jednej kopalni. Stała tam samba, która robiła za system plików. Wydawało by się, że jest ok, bo pocięta uprawnieniami. Trochę topornie, bo np. tak:
    valid users = user1, user2, user3 ... user 16

    listy tam były na prawdę długie, po kilkanaście wpisów. Trochę mało zen było w tym rozwiązaniu, ale ogólnie było skuteczne. Jak się okazało, była to masakra kra kra kra.

    Jak to w sambie się robi, jeden katalog był przeznaczony na udziały, nazwijmy go /home/samba.
    W katalogu głównym jak to w katalogu – są podkatalogi 😉 Np.
    /home/samba/blah, /home/samba/plumk itp.

    No i pojawił się problem, że jak pani zapisała do podkatalogu, to nikt inny już nie mógł tego ani skasować, ani nic w ogóle i trzeba było pana administratora, żeby naprawił. Pan administrator, jak się dowiedziałem, logował się po VNC, i klikał z Gnoma tamtejszy managier plików i naprawiał. Skoro przyszła taka prośba od pana klienta – siadłem do naprawy i przejrzałem ten konfig dokładniej, żeby dodać wpis załatwiający sprawę, tj.:
    force group = mrocznagrupa

    Ale przeglądam konfig dalej, dochodzę do share’ów i widzę tam takie coś:

    [samba]
    path = /home/samba
    writeable = yes
    browseable = no
    guest ok = yes

    HĘ?! No to klikam dalej:

    host# smbclient -U guest \\\\fileserwer\\samba
    Enter guest's password:
    Anonymous login successful
    Domain=[BLAH] OS=[Unix] Server=[Samba 3.0.xxx]
    smb: \> ls
    (tu lista katalogów z dalszej części konfiga)

    Bez komentarza.

    Niniejszym przyznaję temu panu 15 bajtów z /dev/urandom. Tam wielkie hasła, trutututut, a tutaj schowany share, wpuszczający do głównego katalogu każdego jak leci, już bez haseł.


  9. Wiele vserverów i problem ramu

    Wrzesień 19, 2011 by 0verlord

    Obiliśmy się tutaj o dość interesujący problem z vserverami. Co to są linux-vservery, można przeczytać tutaj.

    Mamy hosta, na którym stoi kilkanaście vserwerów. Każdy konfigurowany wg odrobinę przerobionego skryptu instalacyjnego, a konkretnie poszerzający /tmp do 512m. Dlaczego więcej, można np. przeczytać tu.

    Problem jest taki, że /tmp w domyślnej konfiguracji jest montowany wewnątrz vservera tak:
    none /tmp tmpfs size=512m,mode=1777 0 0

    Czyli katalog /tmp to jest tak na prawdę tmpfs, czyli tak na prawdę ram. 500 mega ramu w sumie marnujące się dość bez sensu. Jeżeli nie potrzebujemy jakiegoś specjalnie wydajnego guesta, można spokojnie zrezygnować z takiego rozwiązania kwestii /tmp’a.

    Co ma się gdzie montować, w vserverze jest zaszyte w fstabie, który z kolei siedzi w katalogu głównym z konfiguracją guestów, w Debianie tu:
    /etc/vservers/NazwaVservera/fstab

    Usuwamy linijkę z tmpfs i restartujemy vserver. Po tej operacji, vserver zacznie swoje pliki tymczasowe zapisywać normalnie w filesystemie, zwalniając ram. Mission accomplished, ram odzyskany, tadam.wav. U nas zwolniło się w ten sposób 3GB.


  10. Co robić, jeżeli system swapuje, a dużo ramu jest cały czas wolne

    Wrzesień 6, 2011 by 0verlord

    Ogólnie rzecz biorąc, swapowanie bywa pożyteczne. Jeżeli mamy mini serwerek, który ma mało ramu, a jakaś aplikacja sobie ucieknie, mamy szanse ją dobić i serwer naprawić.
    Gorzej, jeżeli mamy do dyspozycji 12GB ramu, wykorzystywane jest jakieś 6, swap jest wykorzystany na poziomie 30-40%, a procesor wisi w wa (wasted) i ogólnie mamy wrażenie, że ruch na I/O morduje performance serwera.

    Miałem taki przypadek z serwerem poczty. O ile jeszcze Thunderbird sobie z radził, to już (tfu, tfu) Outlook czytający maile po imapie, potrafił nie umieć pobrać całej wiadomości z serwera. Jak ludzie bluzgali, to już inna opowieść 😉

    W każdym razie, vmstat pokazywał sobie jakieś 20-40% procka czekającego na dysk i sama sytuacja nie wyglądała jakoś szczególnie dramatycznie. Natomiast tutaj był problem ze swapem.

    Jest taki parametr w kernelu, nazywa się vm.swappiness, dokładne info w obcym jezyku jest tutaj. Przyjmuje parametry od 0 do 100, gdzie 0 oznacza brak swapowania, jeżeli jest wolny ram, a 100, że wszystko co się da lub nie da ma iść do swapa.
    Jeżeli już na serwerze mamy zatkany swap, procedura wyczyszczenia wygląda tak:

    # gasimy swapa
    swapoff /tam/gdzie/swap
    # przestawiamy parametr
    sysctl -w vm.swappiness=0 (lub 100 w zależności od celu)
    # włączamy swap
    swapon /tam/gdzie/swap

    Jeżeli mamy dużo ramu, warto z niego korzystać. Wszystko, co wisi w ramie, będzie działało dużo szybciej, i nie będzie czekało na dysk.