Linux: Administrator dziś i kiedyś.
16.07.2010 21:26
Na wortalu dobreprogramy.pl w wielu komentarzach osoby zamieszczają sugestię, że to właściwie root jest administratorem w Linuksie i porównują go do administratora w Windows. Nie pokuszę się nawet o przytoczenie tego definicji tego terminu, gdyż za wikipedią właśnie root jest administratorem.
Ponieważ jednak muszę się na czymś oprzeć, to napiszmy, że administrator jest użytkownikiem, który może uruchamiać dowolne programy - również te, które ingerują w system. Nie jest przy tym powiedziane, jak taka procedura miałaby wyglądać: jeżeli ktoś uzyskałby taką możliwość w nieautoryzowany sposób, to nie będzie administratorem.
Oczywistym jest, że root ma prawo do ingerencji wszędzie w domyślnych ustawieniach wielu dystrybucji(na pewno nie tych do celów wojskowych). Jeżeli komuś to nie odpowiada, to może użyć SeLinux. Możliwe jest więc ograniczenie praw root-a, pewne systemy są projektowane w ten sposób, jednak większość desktopów nie.
W przeciwieństwie do wielu Uniksów, to w Linuksie(prócz Ubuntu i może paru innych systemów) root ma prawo się zalogować. Jest to jeden z powodów nie zrozumienia zagadnienia. Jednak w prawie każdej dystrybucji root nie ma prawa się zalogować graficznie, by nie przeglądał internetu na swoim koncie.
Trzeba to ująć tak, że w tym aspekcie Ubuntu jest znacznie lepiej zabezpieczone od wielu innych dystrybucji.
Co w takim razie z graficzną administracją systemem? Otóż, to należy powrócić do dawnych czasów. Kiedyś nie było mechanizmu o wdźwięcznej nazwie sudo. Wtedy wykorzystywano tzw. suid bit‑y, co powodowało, że użytkownik posiadający(np. z grupy wheel) odpowiednie prawa mógł uruchomić taki program, a on już pracował w roli root-a. Reszta programów uruchomionych przez użytkownika działało z jego uprawnieniami. Miało to jednak swoje wady: ponoć każde oprogramowanie ma swoje błędy, więc takie podejście było zbyt huraoptymistyczne - wirus mógłby wykorzystać błędy w programie do wyrządzenia szkód.
Nawet bardzo dawno wydzielono już konto dla administratora, który miał prawa uruchamiać programy na uprawnieniach root-a.
W końcu narodził się sudo. Program sudo pozwala, lecz w bardzo ograniczonych możliwościach, ograniczyć listę możliwych parametrów do przekazania poleceniu. Różni się od op tym, że w przypadku op administrator definiuje skrypty-owijki, co wywołują prawdziwe polecenia, a w przypadku sudo można jedynie ograniczyć parametry(lub podać pełny wiersz polecenia).
W Ubuntu korzysta się z sudo nadmiernie. Tylko użytkonicy z grupy admin, w tym użytkiwnik utworzony, jako pierwszy, mają prawo do wykonywania poleceń z użyciem sudo. Charakteryzuje się to dodatkowo tym, że muszą podać swoje własne hasło, a nie hasło sepcjalnego użytkownika do którego w wielu dystrybucjach Linuksa jakimś cudem można się zalogować. Pod Ubuntu natomiast nie zalogujemy się, jako root. W przypadku innych dystrybucji Linuksa instalator wymusza na nas utworzenia konta dla administratora, które jednak nie posiada praw root-a.
Administrator w systemach Unikso-podobnych to dziś nie to samo, co root. Kiedyś było inaczej, lecz te czasy odeszły dawno temu. Można to porównać do administratora w Windows XP i nowszych. Tyle tylko, że te wszystkie wymienione mechanizmy(poza wspomnianym SeLinux) zaczeły powstawać zanim powstał Linux czy jakikolwiek Windows. Dodatkowo, to w Windows XP możliwa jest zmiana jednego klucza w rejestrze, by administrator w Windows XP przypominał bardziej Linuksowego root-a. Możliwe jest wtedy nawet zabicie procesu system, jak root może zabić init. W przeciwieństwie do Linuksa, to nie ma żadnej kontroli dostępu do tego klucza(ma do niego dostęp adminstrator, lecz dowolny program może go sobie zmienić). W Linuksie przynajmniej dostanie się na root-a wymaga podania hasła.
Chciałem udowodnić, że administratorem w Linuksie dziś nie jest korzeń. Ktoś kiedyś wpadł na dziwny pomysł, by można było się zalogować, jako korzeń(ang. root), jednak nie znaczy to, że tak należy postępować i takie założenia bezpieczeństwa mieli twórcy wszystkich dystrybucji. Należy też nadmienić, że Windowsowy admin przeradza się powoli w tego Linuksowego - już w Windows XP były widoczne zmian, a Vista i 7 podążyły tym.
Jako administrator(pierwszy utworzony użytkownik w systemie), bez użycia sudo i innych narzędzi nie możesz: * Przeglądać plików i zasobów innych użytkowników * Ingerować w zasoby innych użytkowników * Kasować pliki, które nie należą do Ciebie * Modyfikować pliki, które nie należą do Ciebie * Do administratora należą tylko pliki z jego katalogu domowego, które mają go za właściciela(takie rozumienie dwóch powyższych należy przyjąć) * Tworzyć nowych pseudourządeń * Dodawać/usuwać użytkowników w systemie czy grup * Zmieniać uprawnienia do plików * Mnóstwa innych * Właściwie, to jako admninstrator wolno Ci jedynie wszystko to, co wolno użytkownikowi, a poza tym użyć sudo * Od powyższego punktu są jednak odstępstwa, np. poprzez użycie PolicyKit - można dzięki temu ustawić, by użytkownicy z grupy admin, wheel lub konkretny użytkownk przy pomocy dowlnego lub wskazanego programu mogli np. montować wewnętrzne napędy, zmieniać priorytety procesów systemowych, zabijać procesy systemowe, itd.
Tak więc można napisać, że root jest odpowiednikiem administratora w Windows XP, w którym wystarczy ustawić jeden klucz w rejestrze, by stać się adminem. Natomiast root nie pełni tej samej roli, co administrator w Windows XP. Tę samą rolę pełni użytkownik stworzony, jako pierwszy w naszym systemie, a także może nim być każdy inny użytkownik. W nowszych Windowsach(dzięki m.in UAC) odpowiednikiem Administratora w Linuksie na pewno już nie będzie root, a jakiś użytkownik z grupy wheel lub admin.
Warto nadmienić, że właśnie root ma większe prawa niż administrator, ale taki administrator z krwii i kości, to jakiś inny użytkownik. Nie chciałem zepchnąć root-a poniżej adminsitratora czy pisać, że nie jest admniistratorem(może i jest, ale takim dziwnym, bo ani nie jest programem, ani istotą materialną).