12:29
16/1/2015

Steam to platforma doskonale znana graczom. Bez instalacji tego oprogramowania praktycznie nie da się aktualizować gier i grać w trybie multiplayer. Steam jest dostępny na wszystkie systemy operacyjne, ale jak się okazuje, wersja linuksowa ma pewien poważny błąd… zamiast instalować i zarządzać grami, może w niektórych przypadkach skasować graczom zawartość dysku twardego.

Steam skasował mi katalog domowy i podmontowany dysk z backupami

Jeden z graczy, keyvin, tak opisuje na Githubie to co go właśnie spotkało.

“Nie wiem co sie stało. Przeniosłem katalog ~/.local/share/steam na dysk podmontowany w /media/user/ i zsymlinkowałem /home/user/.local/steam do tej nowej lokalizacji. Po uruchomieniu Steama pojawiły się problemy — nie mógł znaleźć plików, ale zaoferował mi ich wskazanie na dysku. To jednak nie pomogło i w końcu Steam się zrestartował i zainstalował od nowa. Wszystko zaczęło działać… ale okazało się, że podczas instalacji Steam skasował rekursywnie wszystko od nadrzędnego katalogu zaczynając, w tym usunął zawartość podmontowanego pod /media mojego 3TB dysku, na który robiłem backupy… Moje najważniejsze dane miałem w chmuerze, więc nie ma katastrofy, choć odczuwam ogromną niedogodność.”

keyvin kończy swój wpis radą do programistów Steama, aby rozważyli ostrzeżenie użytkownika, że przeniesienie katalogu w inne miejsce spowoduje skasowanie wszystkiego (od tego miejsca w dół struktury katalogów na dysku).

db6201e6-9cd9-11e4-96a3-db266db6637c

Możecie się pewnie zastanawiać, po co w ogóle keyvin przenosił instalację Steama w inne miejsce — ano dlatego, że Steam na Linuksie nie oferuje podczas instalacji możliwości wybrania katalogu w którym zostaną umieszczone pliki, więc jeśli ktoś chce zwolnić miejsce na partycji systemowej, z reguły myśli o przerzuceniu Steama w inne miejsce.

To nie wszystkie problemy Steama

Co ciekawe, pod wpisem keyvina pojawiły się komentarze innych użytkowników, którym Steam skasował dane. W przypadku gracza doofy “wektor ataku” był inny… Okazuje się, że domowy katalog można stracić po zwykłym uruchomieniu skryptu instalacyjnego Steama start steam w trybie debug (z STEAM_DEBUG=1):

Także na Windowsie może być problem

Ciekawe ostrzeżenie znajduje się na stronach supportu Steama — ale jest ono skierowane do użytkowników Windows:

Musisz czytać mały druczek podczas instalacji, koleżko, aby się odwiedzieć, że jak zainstalujesz nas w katalogu obok czegoś istotnego, to po odinstalowaniu Steama zabierzemy ze sobą także inne Twoje dane ;)

Musisz czytać mały druczek podczas instalacji, koleżko, aby się odwiedzieć, że jak zainstalujesz nas w katalogu obok czegoś istotnego, to po odinstalowaniu Steama zabierzemy ze sobą także inne Twoje dane ;)

Co jest powodem błędu?

Gracze przypuszczają, że powodem problemów z kasowaniem danych jest linijka 468, która wywołuje siłowe czyszczenie katalogu Steama, jeśli coś pójdzie nie tak.

Line 468: rm -rf "$STEAMROOT/"*

Jeśli zastanawiacie się jak wygląda ustawianie tej zmiennej, to odpowiedzią jest linia 19 skryptu:

STEAMROOT="$(cd "${0%/*}" && echo $PWD)"
STEAMDATA="$STEAMROOT"

W pewnych przypadkach zmienna $STEAMROOT będzie pusta, a wiec wywołanie procedury czyszczenia w linii 468 będzie się sprowadzać do: rm -rf “/”*

Aż trudno się oprzeć wrażeniu, że fatalna wpadka Steama przypomina klasykę gatunku, błąd bumblebee, który ze względu na dodatkową spację w ścieżce “/usr /costamdalej” podczas instalacji kasował użytkownikom zawartość katalogu /usr :-)

A mama mówiła, czytaj książki a nie graj w gry!

Przeczytaj także:


Dowiedz się, jak zabezpieczyć swoje dane i pieniądze przed cyberprzestępcami. Wpadnij na nasz kultowy ~3 godzinny wykład pt. "Jak nie dać się zhackować?" i poznaj kilkadziesiąt praktycznych i przede wszystkim prostych do zastosowania porad, które skutecznie podniosą Twoje bezpieczeństwo i pomogą ochronić przed atakami Twoich najbliższych. Uczestnicy tego wykładu oceniają go na: 9,34/10!

Na ten wykład powinien przyjść każdy, kto korzysta z internetu na smartfonie lub komputerze, prywatnie albo służbowo. Wykład prowadzimy prostym językiem, wiec zrozumie go każdy, także osoby spoza branży IT. Dlatego na wykład możesz spokojnie przyjść ze swoimi rodzicami lub mniej technicznymih znajomych. W najbliższych tygodniach będziemy w poniższych miastach:

Zobacz pełen opis wykładu klikając tutaj lub kup bilet na wykład klikając tu.

42 komentarzy

Dodaj komentarz
  1. a tyle razy mówiłem, że steam to bardzo wyrafinowany wirus
    i kto miał rację?

    • Co nie zmienia faktu, że jest bezpieczniejszy niż wujek torrent z którego przeważnie korzystają przeciwnicy Steama.

    • @luQas

      Malware na torrentach to raczej rzadkość. Bardziej obawiałbym się eksploitacji gry, w którą gram (dziesiątki MB starego kodu w C/C++, mniam <3) albo wykradania informacji przez anticheaty.

    • @Michał

      Teoretycznie. Zauważyłeś, że praktycznie wszelkie cracki, keygeny itp są wykrywane przez rozmaite antywirusy jako szkodliwe? Nikt się tym nie przejmuje i oznacza je jako false positive. Nawet jeśli jest tam wstrzyknięty szkodliwy kod, to każdy pirat to przepuści, bo “przecież cracki zawsze uaktywniają antywirusa”.

    • cóż, a ja po prostu biorę z goga, starego pudełka albo olewam, bo i tak tam nie ma nic ciekawego
      można? można!

    • Instalka tylko jednego badziewia (okazało się, że i tak nie zadziała) zablokowała mi 10 GB na starcie i trwała 45 minut…

  2. Yyyy… Ten skrypt (linia 19, 468) to pisał jakiś gimnazjalista? LOL…

  3. To nie pierwsza wpadka volvo, polecam poszukać:

    intitle:steam site:revuln.com filetype:pdf

    Silnik Source ma (miał?) ciekawsze problemy, między innymi kilka podatności RCE.

  4. Hmm, aż się nostalgia budzi :P
    http://i.imgur.com/Ar0Zv.gif

    • Podwójnie śmieszne jak to sobie przeczytasz głosem GLaDOS ;)

  5. Też przeniosłem katalog dawno temu w inne miejsce i dałem sumlinka. Aż boję się odpalać Steam teraz.

    • Symlinka* Ech, stary jestem i nie widzę co wciskam.

  6. “W pewnych przypadkach zmienna $STEAMROOT będzie pusta, a wiec wywołanie procedury czyszczenia w linii 468 będzie się sprowadzać do: rm -rf “/”*”

    Ale kto odpala steama jako root?

    • Z tego co wiem, to nawet bez roota wyleci dość spora czesc zawartosci dysku.
      rm olewa te pliki do ktorych nie ma uprawinien i leci dalej
      Skasowalbys sobie tylko home, punkty montowania pentakow, czesc vara i usr, punkty montowania samb, punkty montowania innych partycji itp ;D

    • Zakładając, że pytasz serio:

      $ rm -rf /*

      skasuje wszystko co może – a może skasować tylko to do czego ma uprawnienia, więc skasuje dane użytkownika w imieniu którego działa. Dlatego keyvin stracił tylko swoje własne dane (/home/$user) a nie system (/)

    • W przypadku większości desktopów odtworzenie danych użytkowników jest znacznie bardziej kłopotliwe niż przywrócenie systemu operacyjnego. Wystarczy że w momencie wystąpienia awarii do komputera będzie podłączony i zamontowany zewnętrzny dysk twardy z kopiami zapasowymi.

      Oczywiście przed tym może zabezpieczyć offsite backup, ale kto wykonuje offsite backup dla *wszystkich* danych i uzupełnia go co kilka godzin?

    • No racja. Czyli wychodzi na to, że przydałoby się dla każdego programu tworzyć osobnego usera – zawsze się może taki babol przecież zdarzyć. To plus backup.

  7. Kącik praktycznych porad Wujka Basha:

    set -u # zgłasza błąd, jeśli polecenie używa nieustawionej wcześniej zmiennej
    set -e # kończy skrypt na pierwszym poleceniu, które zwróci status błędu inny od 0 (poza użyciem w instrukcjach warunkowych oczywiście)
    Łącznie set -eu, na początku skryptu.

    http://www.davidpashley.com/articles/writing-robust-shell-scripts/

    • -u zapobiega uzyciu _niezainicjalizowanej_ zmiennej. Tutaj zmienna jest inicjalizowana na pusty string.

  8. uwaga gracze? przecież to nie dotyczy graczy tylko linuksowców :)

    • Wyjdź, bo to nie strona dla ciebie. Onet jest na parterze, obok śmietnika (btw. daj mu z 2 złote bo bezdomny chłopina)

    • pisz merytorycznie oraz wróć do szkoły na lekcje kultury :)

  9. Możliwość wystąpienia problemów w wyniku odinstalowania aplikacji którą zainstalowano bezpośrednio do “c:\program files” nie jest niczym nowym w historii Windows.

  10. Wykonaj to polecenie jako zwykły użytkownik, prosze, prosze, prosze :)

  11. Niestety, Niebezpiecznik się nie popisał… W momencie publikacji niusa “pustość” zmiennej była tylko niepotwierdzoną spekulacją. Taki sam efekt miałoby przypisanie do zmiennej “/”. Dopiero dzisiaj komukolwiek (akurat pracownikowi Valve) udało się odnaleźć kroki do reprodukcji które faktycznie pokazały, że prawdopodobnym źródłem jest pusta zmienna:

    # Usuń bit wykonywalności ze skryptu steam.sh (efekt uboczny przeniesienia zawartości katalogu Steama na dysk zewnętrzny zamontowany z (nie)odpowiednimi opcjami)
    # Przejdź do katalogu gdzie znajduje się skrypt steam.sh
    # Uruchom `bash steam.sh`

    Ryzyko wystąpienia problemu w realnym środowisku raczej niewielkie, a jeżeli użytkownik czyta komunikaty zwracane przez system — zerowe.

    A tak nawiasem mówiąc to omawiane zgłoszenie błędu jest wg mnie symptomatyczne dla większości użytkowników GitHuba — emotikonki, memy, głupie żarty, obelgi, opinie o wątpliwej wartości merytorycznej. Cała dyskusja ma ponad 100 wiadomości, a na palcach dwóch rąk można policzyć uwagi, które cokolwiek wnoszą do tematu.

  12. Ekhm, dysk z backupami podmontowany na stale? Z prawami zapisu dla usera? ;)

    • Gość napisał przecież, że dane krytycznie ważne miał zbekapowane w chmurze.
      Tu pewnie bekapowal sobie jakies tymczasowe rzeczy i wyniki codziennej pracy.
      Wez prosze pod uwage, ze koniecznosc codziennego podlaczania dysku i zmiany usera to niewatpliwa upierdliwosc, ktora (oczywiscie) zwieksza bezpieczenstwo, ale obniza “automatyzacje”. Wiec w praktyce zapewne nie byloby to robione codziennie, a zatem i bezpieczenstwo by na tym ucierpialo ;).

    • Typowa reakcja na to, gdy komuś się coś nie powiedzie – próba obrócenia wszystkiego w jego winę i głupotę.

      “Backup najważniejszych danych w chmurze i dysk z backupem reszty? Co za idiota, powinien był w ogóle nigdy niczego nie instalować, a najlepiej wcale nie używać komputera. Ja tak robię i jestem w 100 % bezpieczny.”

  13. Sam Steam instaluje się w ~/.local/share/Steam, ale nie zajmuje wiele miejsca, a biblioteki na gry instalowane przez Steam można tworzyć w dowolnych miejscach na dysku.

    • Właśnie dlatego nie jarzę po co robić takie kombinacje. Uważam, że jak user coś robi, to powinien wiedzieć co. Tutaj ktoś się nie popisał i wykonał robotę, za której efekty sam ponosi odpowiedzialność…

    • Ja tej scierzki nie mam. Steam inslowalem ze 2 lata temu, nie wiem czemu jej nie ma, troche naiwnym jest zrzucac wine na usera, skoro skrypt posiada nie pokryty przypadek.

      To tak jak by przy kernel panic spowodowanym przez … odpiecie kabla usb, ktos ci powiedzial “twoja wina trzeba bylo wczesniej modul xxx wyladowac z kernela”.

      Ale steam tez nie odpalam :-).

  14. Następnym razem zainstaluje Windowsa i tam wszystko działa prawidłowo a na linuksie to wystarczy jedno polecenie wpisać żle i już cały dysk jest do wymiany

    • Zgadzam sie w 101%. Probowalem linuxa jakis czas… nie wiem do czego ma sluzyc ten system ;/ Chyba do tracenia czasu i nerwicy. Jedna usterka, albo prba instalacji sterownikow lub zle wpisana komenda i system nie wstaje i trzeba sie meczyc pol dnia. DO WIDZENIA :D.

  15. Dziwne nie muszę robić symlinków czy jak to tam tylko ustawiam w steamie gdzie chcę mieć zainstalowane gry.

  16. hadouken: jasne, ze wygoda jest wazna, ale wystarczyloby, ze skrypt backupowy montowalby dysk, robil co trzeba, odmontowywal.

  17. hm. Czy nie lepiej mieć innego usera do grania?

    adduser steam
    su – steam
    export DISPLAY=:0
    ./steam (…)

  18. mi sie cos podobnego rowniez przytrafilo, blad polegal mniej wiecej na tym, ze jak nie udalo sie odpalic steama np. z powodu niedzialajacego serwera X, albo przerwalem go podczas odpalania, to przy nastepnym starcie, podczas weryfikacji plikow, nagle steam sadzil, ze pliki ktore mam tam w jego katalogu maja po -1 bajtow i trzeba je pobrac ponownie. i w ten sposob wywalal caly swoj katalog z danymi, czyli miedzy innymi wszystkie gierki. raz sie z tego powodu zdenerwowalem, bo na laczu 1Mbps pobrac je ponownie troche czasu trwa, ale wyciagnalem nauczke:

    mount /dev/mapper/home /mnt
    btrfs subvolume snapshot /mnt/home /mnt/home-snap
    umount /mnt

    i za kazdym kolejnym razem jak steam wcial pliki:

    rm -rf ~/.local/share/Steam
    mount /dev/mapper/home /mnt
    cp –reflink -a /mnt/home-snap/$USER/.local/share/Steam /mnt/home/$USER/.local/share/Steam
    umount /mnt

    i tak, zdarzylo mi sie to z 10 razy

  19. Wobec niepewności co do Steama, utworzyłem nowe konto użytkownika z pewnymi ograniczeniami: brak wglądu poza katalog domowy i poza procesy użytkownika. Tym sposobem Steam nie jest w stanie przeglądać zawartości komputera i tym bardziej wykasować cokolwiek poza samym sobą :)

  20. Najlepiej wykomentowac linie:
    STEAMROOT=”$(cd “${0%/*}” && echo $PWD)”

    i poprawic na:
    STEAMROOT=”$(readlink -e “${0}” | sed ‘s,/[^/]*$,,’)”
    [[ -n “$STEAMROOT” ]] || {
    echo “ej cos nie halo: STEAMROOT jest puste”
    exit 1
    }

    spakowac tar.xz i będzie spokój :)

  21. moze byscie sprostowali troche temat na bardziej odpowiadajacy faktom ?

    a jak ktos nie czyta, co ma na ekranie to sorki, lepiej zeby spakowal do pudelka kompa, jesli jeszcze ma albo od razu wyrzucil na smietnik, bo i tak pozytku z tego nie bedzie mial

  22. Witam,

    niestety, nie jest to jedyny “grzech” programistów w Valve..
    Kilka miesięcy walczyłem, aby naprawili bug w systemie storage na Windows, pomimo dwukrotnego zakładania case w Supporcie, przedstawiania dowodów i debugowania niestety do dziś nie został rozwiązany, wątek:
    http://steamcommunity.com/discussions/forum/7/558756256327876338/?l=polish
    Problem z sektorem występuje nadal, wykryty mniej więcej w kwietniu 2013 (zaraz stuknie 2 lata :D).
    Fajnie by było, gdyby ktoś potwierdził (albo zanegował), że ten problem naprawdę istnieje, to może by się coś ruszyło..

  23. […] Warto tu wspomnieć, że niedawno podobne problemy miał Steam. […]

Twój komentarz

Zamieszczając komentarz akceptujesz regulamin dodawania komentarzy. Przez moderację nie przejdą: wycieczki osobiste, komentarze nie na temat, wulgaryzmy.

RSS dla komentarzy: