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:

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: