Dlaczego nie ma uprawnień takich jak Android lub iOS?

26

Kiedy instaluję program taki jak GIMP lub LibreOffice w systemie Linux, nigdy nie pytam o uprawnienia. Czy instalując program w systemie Ubuntu, wyraźnie udzielam temu programowi pełnego uprawnienia do odczytu / zapisu w dowolnym miejscu na dysku i pełnego dostępu do Internetu?

Teoretycznie, czy GIMP może odczytać lub usunąć dowolny katalog z mojego dysku, nie wymagając hasła typu sudo?

Jestem ciekawy tylko, czy jest to technicznie możliwe, a nie to, czy jest prawdopodobne, czy nie. Oczywiście wiem, że to mało prawdopodobne.

stackinator
źródło
26
Obowiązkowe XKCD: xkcd.com/1200
Andrea Lazzarotto
10
Ponieważ model bezpieczeństwa Linuksa pochodzi z czasów, zanim ktokolwiek pomyślał o tym. W rzeczywistości pochodzi z czasów sprzed Internetu - kiedy największym zagrożeniem były inne osoby korzystające z tego samego komputera.
user253751
2
Po części dlatego, że wiele osób korzystających z * nix nie „instaluje” programów, albo kompiluje je ze źródła, albo samodzielnie pisze. Wyobraź sobie, że musiałbyś przejść przez moduł „uprawnień” dla każdego prostego skryptu powłoki, który napisałeś: czy nie byłoby to ogromną stratą czasu?
jamesqf
4
Nie kupuję jednak tego rozumowania: „kod jest open source, możesz go przejrzeć i sam skompilować!”. Wszystkie te stwierdzenia są prawdziwe, ale to nie znaczy, że będę w stanie przejrzeć każdą linię kodu, którą uruchomię, a nawet jeśli to zrobiłem, lub zespół ludzi, lub cały świat zrobił, to w żaden sposób nie oznacza zauważysz złośliwy lub zły kod, który negatywnie wpłynie na twój komputer. Ale dzięki za wkład, widzę, jak to może stać się poważnym bólem i odkryłem sposoby na obejście tego teraz.
stackinator

Odpowiedzi:

31

Są tutaj dwie rzeczy:

  • gdy instalujesz program w standardowy sposób (instalator systemu, taki jak apt / apt-get na Ubuntu), zwykle instaluje się go w katalogu, w którym jest dostępny dla wszystkich użytkowników (/ usr / bin ...). Ten katalog wymaga zapisania uprawnień, więc potrzebujesz specjalnych uprawnień podczas instalacji.

  • kiedy używasz programu, działa on z twoim identyfikatorem użytkownika i może tylko odczytywać lub zapisywać, w których programy wykonane z twoim identyfikatorem mogą czytać lub pisać. W przypadku Gimp odkryjesz na przykład, że nie możesz edytować standardowych zasobów, takich jak pędzle, ponieważ są one udostępnione /usr/share/gimp/i że musisz je najpierw skopiować. Pokazuje to również, Edit>Preferences>Foldersgdzie większość folderów występuje w parach, systemowy tylko do odczytu i użytkownika, do którego można pisać.

ksenoid
źródło
17
Po zainstalowaniu programu sposób jego instalacji staje się nieistotny. Jedyną rzeczą, która się liczy, to w ramach którego id_uzytkownika działa ((innymi słowy, kto używa go), to zakłada te same prawa dostępu jak wszystkie inne programy prowadzone przez tego samego użytkownika..
xenoid
3
@xenoid Chyba że program jest zainstalowany jako root i ma ustawiony bit setuid. W takim przypadku program działa jako root, mimo że jest używany przez kogoś innego.
Monty Harder
2
Tak, wszystkie 18 z nich: mount / umount / ping / sudo ...
xenoid
2
@ xenoid, myślę, że ważną kwestią jest to, że instalacja pakietu nie pyta wprost o pozwolenie na instalację pliku binarnego setuid. Zamiast tego instalowane jest wszystko, co jest w pakiecie, a ty musisz tylko „wiedzieć” w inny sposób, czy w grę wchodzą programy uprzywilejowane. Jesteś całkowicie zależny od packagera, aby upewnić się, że pakiet pasuje do dokumentacji i jest w inny sposób bezpieczny itp., Narzędzie do zarządzania pakietami nic nie pomoże.
ilkkachu
3
Tak, więc nic nowego, dlatego istnieją repozytoria ... Nawet bez setuid i zainstalowanego oprogramowania można zrobić wiele innych paskudnych rzeczy, takich jak rm -rf ~/. Jeśli instalujesz z innych źródeł, musisz zachować ostrożność (lub instalować ze źródła, po sprawdzeniu kodu).
ksenoid
23

Czy instalując program w systemie Ubuntu, wyraźnie udzielam temu programowi pełnego uprawnienia do odczytu / zapisu w dowolnym miejscu na dysku i pełnego dostępu do Internetu?

Tak, jeśli używasz sudolub ekwiwalentu, dajesz instalatorowi pełne uprawnienia do odczytu / zapisu w dowolnym miejscu na dysku. To w większości to samo. Istnieje również flaga, którą może ustawić instalator, zwana setuid, która spowoduje, że program będzie miał pełne uprawnienia także po instalacji.

Nawet jeśli zignorujemy instalator i jeśli program nie jest setuid (bardzo rzadko programy używają setuid), po uruchomieniu program ma pełny dostęp do wszystkiego, do czego twoje konto ma dostęp. Na przykład, jeśli jesteś zalogowany do swojej bankowości internetowej, może ona hipotetycznie wysłać wszystkie twoje środki do Nigerii.

Dlaczego nie ma uprawnień takich jak Android lub iOS?

Model bezpieczeństwa - czyli sposób zaprojektowania systemu bezpieczeństwa - w Linuksie jest bardzo stary. Został odziedziczony po Uniksie z lat 60. Wtedy nie było Internetu, a większość ludzi w dziale korzystała z tego samego komputera. Większość twoich programów pochodzi od zaufanych dużych firm. Dlatego system bezpieczeństwa został zaprojektowany w celu ochrony użytkowników przed sobą, a nie w celu ochrony użytkowników przed uruchomionymi programami.

Obecnie jest dość przestarzały. Android oparty jest na Linuksie, ale działa, tworząc osobne „konto użytkownika” dla każdej aplikacji, zamiast dla każdego użytkownika. Nie wiem, czego używa iOS. Wysiłki takie jak Flatpak próbują obecnie przenieść to samo na pulpit Linuksa.

użytkownik253751
źródło
2
Jest to w rzeczywistości jeden argument przemawiający za uruchomieniem potencjalnie możliwego do wykorzystania kodu jako osobny nieuprzywilejowany użytkownik i mając nadzieję, że w systemie operacyjnym nie występuje luka w zabezpieczeniach związana z eskalacją uprawnień. Lub Docker.
Willtech
@immibis Android używa jądra Linux i ext FS. Nie dzieli żadnych innych podobieństw. Nie łączcie Linux-a i UNIX-a (lub GNU / Linuksa). (Przynajmniej nie
nazwałeś
1
@ wizzwizz4 Linux to jądro, Android używa jądra o nazwie Linux, nie jestem pewien, o co ci chodzi.
user253751
@Willtech Technicznie działa jako środek bezpieczeństwa, ale jest dość niewygodny. W końcu chcesz, aby aplikacje miały dostęp do twoich plików. Ale tylko pliki, do których kazałeś im uzyskać dostęp.
user253751
@immibis Uprawnienia nie są zaimplementowane w jądrze, więc mylące jest sugerowanie, że Android jest oparty na systemie zawierającym model uprawnień. (Jądro jądra egzekwuje niektóre uprawnienia ...)
wizzwizz4
9

To, czego chcesz, zapewnia aplikacje Flatpack. Są to w dużej mierze odpowiedniki aplikacji na iOS, Androida lub Windows Store.

Nie korzystałem z nich, więc nie wiem, czy zaimplementowali GUI, aby zobaczyć uprawnienia wymagane przez każdą aplikację, gdy jest ona zainstalowana.

https://blogs.gnome.org/alexl/2017/01/20/the-flatpak-security-model-part-2-who-needs-sandboxing-anyway/

Każda aplikacja flatpak zawiera manifest, zwany metadanymi. Ten plik opisuje szczegóły aplikacji, takie jak jej tożsamość (app-id) i używane środowisko wykonawcze. Zawiera także listę uprawnień wymaganych przez aplikację.

Domyślnie po zainstalowaniu aplikacja otrzymuje wszystkie wymagane uprawnienia. Możesz jednak zastąpić uprawnienia za każdym razem, gdy wywołasz uruchamianie flatpak lub globalnie dla poszczególnych aplikacji, używając przesłonięcia flatpak (szczegółowe informacje można znaleźć na stronach podręcznika dla uruchamiania Flatpak i Flatpak-override). Obsługa uprawnień aplikacji jest obecnie nieco ukryta w interfejsie, ale długoterminowym planem jest pokazanie uprawnień podczas instalacji i ułatwienie ich zastąpienia.

Nie użyłem również alternatywy Ubuntu, Snappy, aby wiedzieć, czy zapewnia ona taką funkcję widoczną w GUI.

sourcejedi
źródło
Czy flatpaks ma uprawnienia do odczytu / zapisu w moim katalogu domowym w Ubuntu?
stackinator
1
Po odczytaniu linku wygląda to tak: a) mają na myśli eleganckie rozwiązanie, w którym aplikacje uzyskują dostęp tylko do plików, które użytkownik wybrał w oknie otwierania / zapisywania pliku itp., B) domyślnie udzielono pełnego dostępu do katalogu domowego .
sourcejedi
2
Aplikacje internetowe są znacznie bardziej standardowym rozwiązaniem tego problemu, choć w wielu przypadkach irytująco nieefektywnym. Każda popularna przeglądarka to wszechstronny i dokładnie przetestowany piaskownica.
sudo
6

Jest to technicznie możliwe i rozwiązań należą apparmor, selinuxi firejaillub nawet pełne pojemniki podoba LXClub pełną maszynę wirtualną (np VirtualBox, kvmlub vmware). W przypadku sieci istnieje opensnitchklon littlesnitchprogramu z OSX.

Powodem, dla którego nie ma powszechnego modelu bezpieczeństwa z uprawnieniami nadanymi przez użytkownika, jest to, że tradycyjnie zachowujesz ostrożność podczas uruchamiania na komputerze. 90% tego, co znajduje się w aplikacjach systemów mobilnych, byłoby uważane za szkodliwe oprogramowanie na PC.

Istnieją skanery w poszukiwaniu adware (tj. Adaware lub Spybot D&D), które klasyfikowałyby zachowania takie jak łączenie Facebooka, Google Analytics i sieci reklamowych jako szkodliwe oprogramowanie na PC. Jeśli chodzi o te rzeczy, ekosystem mobilny przypomina zrestartowanie komputera. Każdy dołącza adware tylko dlatego, że jest to łatwe i dodaje analizy, tylko dlatego, że jest ciekawy. Skutkami ubocznymi są zmniejszona prywatność i bezpieczeństwo. Część bezpieczeństwa jest uwzględniona w modelu piaskownicy, część prywatności jest nadal otwartym problemem.

Innym powodem, dla którego nie ma się tego długo na komputerze, jest złożoność piaskownicy, co oznacza, że ​​oba mogą być zbyt wolne dla starszych komputerów i wymagały więcej inżynierii w celu uzyskania czegoś, co wtedy miało niewielką przewagę.

Dzisiaj widzimy próby użycia piaskownicy w nowych formatach pakietów, takich jak snap i flatpak, a przeglądarki używają go również do swoich rozszerzeń. Chromium używa modelu uprawnień od samego początku, a Firefox używa go do wszystkich rozszerzeń internetowych (od 57 jedynych rozszerzeń, które można zainstalować). Jest to całkiem rozsądne, ponieważ ludzie instalują rozszerzenia przeglądarki od nieznanych autorów, podobnie jak aplikacje osób, o których nigdy nie słyszeli, sądząc, że nie są bardziej niebezpieczne niż odwiedzana witryna, co jest fatalnym błędem, gdy nie ma piaskownicy, która by ich chroniła.

allo
źródło
4

Android wykorzystuje model bezpieczeństwa „marketplace”: różne aplikacje pochodzą od różnych (częściowo zaufanych) dostawców i powinny być odizolowane od chronionych zasobów i od siebie nawzajem. Większość aplikacji jest dystrybuowana dla zysku: są sprzedawane (payware), wyświetlają płatne reklamy lub „zarabiają” na swoich użytkownikach, sprzedając swoje dane stronom trzecim. Istnieje silna motywacja do angażowania się w nielegalny dostęp do danych, nawet jeśli zostaną złapani.

Większość aplikacji w Debianie, Red Hacie i podobnych „klasycznych” dystrybucjach Linuksa jest dystrybuowana w formie źródłowej: gdy aplikacje open source uzyskają wystarczającą przyczepność, są ręcznie wybierane do włączenia przez opiekunów dystrybucji. Motywacja do uzyskania nielegalnego dostępu do danych jest niewielka - potencjalne korzyści nie uzasadniają wysiłków.

Warto zauważyć, że zaawansowany model bezpieczeństwa Androida jest jednym z powodów, dla których zyskał tak dużą przyczepność, łatwo pokonując iOS na rynkach mobilnych. Nowoczesne dystrybucje Linuksa na komputery stacjonarne nie są po prostu „inne”, - w rzeczywistości są znacznie opóźnione pod względem modeli bezpieczeństwa i dystrybucji.

Niektóre dystrybucje Linuksa oferują ulepszenia systemu dystrybucji oprogramowania: scentralizowane repozytoria oprogramowania stron trzecich (AUR), specjalistyczne formaty pakietów do dystrybucji oprogramowania firm trzecich (AppImage, Snappy, Flatpack), systemy repozytoriów wtórnych (Docker). Niestety te ulepszenia zyskują z czasem bardzo małą przyczepność: AppImage został wynaleziony w 2004 r., Pierwsza wersja AUR została wydana w 2005 r., Ale żadna z nowoczesnych dystrybucji Linuksa oficjalnie nie przyjęła swoich funkcji po> 10 latach.

użytkownik1643723
źródło
3

Kiedy instaluję program taki jak GIMP lub LibreOffice w systemie Linux, nigdy nie pytam o uprawnienia.

Aplikacje te są instalowane w uprzywilejowanej części systemu plików, do której Ty i większość użytkowników zwykle nie masz dostępu.

W dystrybucjach głównego nurtu skonfigurowanych do użytku na komputerze, pojedynczy użytkownik początkowo skonfigurowany podczas instalacji zwykle ma uprawnienia administratora. Zwykle będą proszeni o podanie własnego hasła logowania do instalacji oprogramowania, i nie zawsze.

Po zainstalowaniu oprogramowanie będzie domyślnie skonfigurowane do wykonywania przez zwykłych użytkowników i umożliwi odczyt plików danych. To wszystko, czego potrzeba.

Czy instalując program w systemie Ubuntu, wyraźnie udzielam temu programowi pełnego uprawnienia do odczytu / zapisu w dowolnym miejscu na dysku i pełnego dostępu do Internetu?

Nie program. Zdarza się, że konto użytkownika należy do różnych grup, a różne grupy zapewniają dostęp do różnych zasobów.

Model bezpieczeństwa w systemie Linux polega na tym, że twoje konto użytkownika ma określone prawa, a grupy, do których należy twoje konto, mają określone prawa. Prawo do dowolnej części systemu plików wymaga uprawnień roota, które zwykle nie są przyznawane użytkownikom. Nawet jeśli korzystasz z sudo , nie zyskujesz wszystkich praw.

Zwykłe konta użytkowników mają zazwyczaj dostęp do zasobów, których będą potrzebować, takich jak Internet.

Teoretycznie, czy GIMP może odczytać lub usunąć dowolny katalog z mojego dysku, nie wymagając hasła typu sudo?

Dostęp do dowolnego katalogu lub pliku, do którego masz prawa dostępu, można uzyskać z uruchomionej aplikacji, ponieważ zazwyczaj dziedziczy ona Twoje prawa. Zwykle zalogowany użytkownik domyślnie nie ma prawa zmieniać większości krytycznych plików systemowych lub plików udostępnionych.

Jestem ciekawy tylko, czy jest to technicznie możliwe, a nie to, czy jest prawdopodobne, czy nie. Oczywiście wiem, że to mało prawdopodobne.

Należy pamiętać, że większość użytkowników zazwyczaj instaluje aplikacje z repozytoriów, które są dobrze nadzorowane, a ryzyko wrogiego kodu jest niskie.

Prawdopodobnie zasugerowałbym dodatkowe lektury, aby poznać uprawnienia systemu Linux.

Model bezpieczeństwa systemu Android ewoluuje w celu zaspokojenia potrzeb użytkowników, którzy nie tylko ogólnie nie rozumieją nic o podstawowym modelu bezpieczeństwa systemu operacyjnego, ale prawie nic nie rozumieją o komputerach.

Model Linuksa (który szczerze bardziej lubię bardziej) został zaprojektowany, aby umożliwić użytkownikom (w szczególności administratorom) większą kontrolę nad bezpieczeństwem w systemie (w granicach, jeśli ich uprawnienia są dozwolone).

Myślę, że z punktu widzenia użytkownika najlepiej to opisać jako różnicę między sterowaniem w pełni automatycznym a półautomatycznym lub ręcznym. Współcześni konsumenci chcą pełnej automatyki. Linux ma tryb półautomatyczny i manualny. Większość użytkowników Linuksa nigdy nie musi wiedzieć o modelu bezpieczeństwa, ale kontrola jest dostępna, jeśli potrzebujesz lub chcesz.

StephenG
źródło
2

Po zainstalowaniu niektórych programów możesz je zainstalować we własnej przestrzeni użytkownika (tj. Samodzielnie w katalogu domowym), a nie w całym systemie. W związku z tym nie jesteś proszony o uprawnienia administratora, ponieważ nie potrzebujesz ich do instalowania programu na własny użytek. Tak zainstalowany program rzeczywiście nie byłby w stanie uzyskać dostępu do plików, którym nie udzielono uprawnienia „członkowie niebędący właścicielami, którzy nie są grupą, mogą odczytać to uprawnienie” bez eskalacji uprawnień.

DopeGhoti
źródło
Jeśli program jest zainstalowany w moim katalogu domowym, czy może czytać i pisać w dowolnym miejscu w katalogu domowym?
stackinator
2
Działa z twoimi uprawnieniami, dzięki czemu może uzyskać dostęp do wszystkiego, co możesz uzyskać.
DopeGhoti
1
Na komputerze jednego użytkownika dostęp tylko dla użytkownika nie jest dużo bezpieczniejszy niż dostęp do konta root. Tak czy inaczej, wszystko, co ważne, jest prawdopodobnie dostępne dla użytkownika.
sudo