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).
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 ;)
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!
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…
Yyyy… Ten skrypt (linia 19, 468) to pisał jakiś gimnazjalista? LOL…
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.
Hmm, aż się nostalgia budzi :P
http://i.imgur.com/Ar0Zv.gif
Podwójnie śmieszne jak to sobie przeczytasz głosem GLaDOS ;)
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.
“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.
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.
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 :)
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.
Wykonaj to polecenie jako zwykły użytkownik, prosze, prosze, prosze :)
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.
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.”
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 :-).
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.
Dziwne nie muszę robić symlinków czy jak to tam tylko ustawiam w steamie gdzie chcę mieć zainstalowane gry.
hadouken: jasne, ze wygoda jest wazna, ale wystarczyloby, ze skrypt backupowy montowalby dysk, robil co trzeba, odmontowywal.
hm. Czy nie lepiej mieć innego usera do grania?
adduser steam
su – steam
export DISPLAY=:0
./steam (…)
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
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ą :)
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 :)
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
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..
[…] Warto tu wspomnieć, że niedawno podobne problemy miał Steam. […]