Co by się stało, gdybym utworzył konto o nazwie „root”?


30

Gdybym utworzył konto użytkownika w Ubuntu o nazwie root, czy automatycznie miałoby ono uprawnienia root? Zepsuć system? Powoduje usterkę w matrycy? Co by się stało?


25
Istnieje już konto o nazwie root.
mikewhthing

Odpowiedzi:


46

Nazwy użytkowników muszą być unikalne, więc, jak wspomniano w odpowiedzi Owena Hinesa , nie będzie można utworzyć tego użytkownika. Jednak kluczową kwestią jest to, że uprawnienia administratora (wszystkie możliwe uprawnienia) nie są udzielane przez nazwę użytkownika root, ale przez UID.

Użytkownik o UID 0 jest superużytkownikiem.

Tak więc, jeśli użytkownik o identyfikatorze UID 0 miał inną nazwę, a użytkownik utworzył użytkownika o nazwie root, nie miałby żadnego specjalnego statusu.

Odsyłam cię do wiki tagu !


Czy możesz zmienić nazwę istniejącego konta głównego, a następnie utworzyć zwykłego użytkownika root?
emory

Na marginesie wydaje się, że możliwa jest (choć nie próbowałem) zmiana nazwy użytkownika UID 0 na coś innego, więc superużytkownik nie jest wywoływany root. Nie jest to świetny pomysł, ale możliwy. Można więc na przykład założyć konto superużytkownika o nazwie goduid 0, a zwykły użytkownik o nazwie rootuid 1000lub innym numerze.
Ian D. Scott,

15

Nie pozwoliłoby ci to, ponieważ byłby już rootużytkownik.

Ale, jak powiedział Florian Diesch w komentarzach:

Niektóre narzędzia będą narzekać, ale zawsze możesz edytować /etc/passwdi etc/shadowręcznie, aby utworzyć drugiego użytkownika o nazwie root.


2
A jeśli to zrobisz, co się stanie chown root file?
fkraiem

1
@fkraiem, hmm .. dobre pytanie, nie znam odpowiedzi na to.
TheOdd

3
To, co kiedyś się zdarzało, wygrywa jako pierwsze w pliku. Nie wiem teraz.
Joshua

5

Po pierwsze, jak stwierdzili inni, zmieniasz użytkownika z UID 0 na coś innego. Następnie możesz utworzyć normalnego użytkownika o nazwie root i identyfikatorze UID wyższym niż 1000. Będzie to działać „dobrze”. Wszystkie uprawnienia i podstawowe funkcje systemu używają UID, a nie nazwy użytkownika. W rzeczywistości jest to dobry pierwszy krok do wzmocnienia systemu Linux. (znacznie lepiej wyłączyć root, ale przed sudo to robiliśmy).

Teraz, co się stanie.

Przez większość czasu nic. Wszystkie wywołania systemowe związane z autoryzacją lub uwierzytelnieniem używają identyfikatora UID (o czym wiem). Tak było już od jakiegoś czasu. Twój system będzie działał jak zwykle. Narzędzia systemowe będą odzwierciedlać nową nazwę użytkownika, ale nadal będą działać normalnie. Innymi słowy „korzeń” w konwencji i nie osadzony w kamieniu.

To powiedziawszy, jestem pewien, że niektóre narzędzia i programy są źle napisane. Programy sprawdzające zmienną środowiskową $ USER mogą działać niepoprawnie. Zwykle są to skrypty i małe projekty, ale możesz poświęcić trochę czasu na prześledzenie tego jednego złego zatwierdzenia, 6 lat temu w fdisk, który ciągle powoduje ból głowy.

To było coś, co robiłem cały czas. Był to łatwy krok i podlega zasadzie „nieprzewidywalnych nazw użytkowników”. Istnieją jednak O wiele lepsze sposoby osiągnięcia tych samych celów dzisiaj.


mam na myśli UID, myślę
Zanna,

1

Jak wyjaśnili inni, to UID = 0 daje użytkownikowi „supermoce”, a nie nazwę użytkownika „root”. Jeśli więc udało Ci się stworzyć innego użytkownika o nazwie „root” (po zmianie nazwy / skasowaniu oryginalnego) - nadrzędny status użytkownika zależałby od podanego przez Ciebie identyfikatora UID.

Co prowadzi również do innego interesującego pomysłu: jest całkiem możliwe, aby mieć wielu użytkowników z tym samym UID (co czyni ich zasadniczo tymi samymi użytkownikami z punktu widzenia uprawnień systemu plików, ale pozwalają mieć inną, powiedzmy, powłokę i katalog domowy). W rzeczywistości niektóre systemy typu UNIX mają inne konto administratora o nazwie toor (root do tyłu), co pozwala na posiadanie dwóch kont superużytkowników z różnymi ustawieniami.


1

Jak utworzyć drugi „root”:

Tak, teoretycznie nie może być dwóch użytkowników o tej samej nazwie użytkownika lub identycznych identyfikatorach. Standardowe narzędzia są niezawodne i nie zapewnią takich użytkowników dla Ciebie. Ale zawsze możesz edytować / etc / passwd ręcznie.

Na przykład:

$ sudo adduser root2 # created ordinary user
$ sudo vim /etc/passwd # edit last line, change 'root2' to 'root'. 
$ sudo -u '#1002' id # 1002 is UID of new user, it's in last line of /etc/passwd
uid=1002(root) gid=1002(root2) группы=1002(root2)

Jak widzisz, jesteśmy teraz rootami! Tak, to nie jest prawdziwy root (nie uid = 0), ale to te same cztery litery. Imponujące i bezużyteczne.

Jak stworzyć lepszy drugi „root”:

Możesz także dokonać innych modyfikacji. Pozostaw nazwę użytkownika taką, jaka jest (nazwa użytkownika lub root2), ale zmień identyfikator użytkownika.

$ tail -n 1 /etc/passwd
root2:x:0:0:,,,:/home/root2:/bin/bash

(patrz, pola UID i GID są zerami) Teraz masz zwykłego użytkownika (użytkownika innego niż root), z prawie nie podejrzaną nazwą użytkownika (lub możesz zmienić nazwę użytkownika na „johndoe” dla lepszego efektu), ale w rzeczywistości ten użytkownik ma supermoce!

$ fdisk /dev/sda
fdisk: unable to open /dev/sda: Permission denied
$ sudo -u root2 fdisk /dev/sda

Command (m for help):

Jak widzisz, zwykły użytkownik nie może używać fdisk na / dev / sda, ale root2 może zrobić wszystko!

Ta prosta sztuczka czasami używana po zhakowaniu systemu w celu zapewnienia backdoora. Nawet jeśli prawdziwy root zmieni swoje klucze / hasła, haker nadal będzie miał pełną kontrolę nad systemem za pośrednictwem innego użytkownika o identyfikatorze uid = 0.

Jak działa matryca

W rzeczywistości ani nazwa użytkownika „root”, ani uid = 0 nie są same w sobie magiczne. To tylko kwestia konwencji. I to nie zawsze jest prawdą. (patrz to pytanie: czy konto root ma zawsze UID / GID 0? ) Kod jądra jest magiczny. Właściwie sam kod przestrzeni użytkownika - nie może zrobić nic, co root może zrobić. Nawet jeśli działa jako root! Moc root jest w jądrze. np. jeśli wykonasz polecenie „cat / etc / shadow” (tylko root może to zrobić), program / bin / cat wywołuje funkcję libc open (), która wciąż jest kodem przestrzeni użytkownika, a ta funkcja open () wykonuje wywołanie systemowe do jądra. Następnie samo jądro decyduje, co zrobić. Na przykład jądro może pozwolić na pewne operacje, jeśli efektywny użytkownik ma id == 0.

Teoretycznie, jeśli zmienisz jakiś kod w jądrze i będziesz obsługiwał użytkownika „www-data” inaczej - niektóre operacje mogą być dozwolone tylko dla użytkownika „www-data” (a nawet nie rootować).


0

Większość narzędzi „przyjaznych dla użytkownika” sprawdzi to i nie pozwoli ci utworzyć konta z już zapisaną nazwą użytkownika.

Jeśli pominiesz to i ręcznie dodasz drugie konto root do twojego / etc / passwd i / etc / shadow, to które z nich zostanie użyte, myślę, że będzie zależeć, jeśli umieścisz je przed lub po oryginalnym. Podobnie jak wszystkie konta użytkowników w systemie unix, będzie również miał dostęp administratora, tylko jeśli jego identyfikator UID wynosi zero, niezależnie od nazwy.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.