Moje rozumienie UID jest takie, że jest to unikalna dodatnia liczba całkowita przypisywana przez system operacyjny podobny do Uniksa każdemu użytkownikowi. Każdy użytkownik jest identyfikowany w systemie za pomocą identyfikatora UID, a nazwy użytkowników są zwykle używane tylko jako interfejs dla ludzi.
W jaki sposób dwóch użytkowników może mieć ten sam identyfikator UID, czy nie jest to konflikt dla mojego systemu i pakietów?
root@kdc:~# id test12
uid=1005(test10) gid=1000(server) groups=1005(test10)
root@kdc:~# id test13
uid=1005(test10) gid=1000(server) groups=1005(test10)
root@kdc:~#
Dodałem dwóch użytkowników o tym samym UID i GID: test12
i test13
Dane wyjściowe /etc/passwd
:
client@kdc:~$ cat /etc/passwd | grep test12
test12:x:1005:1000::/home/test12:/bin/sh
client@kdc:~$ cat /etc/passwd | grep test13
test13:x:1005:1000::/home/test13:/bin/sh
Dodałem użytkowników przez useradd -ou 1005 -g1000 username.
Zdezorientowałem się, jaki jest tego cel i czy może to wpłynąć na uprawnienia i dzienniki użytkowników itp. Więc teraz, jeśli użytkownik zostanie dodany uid=0
i gid=0
będzie miał uprawnienia jak konto root?
Odpowiedzi:
Odpowiedź brzmi: Linux nie chroni cię przed sobą.
Jeśli naprawdę chcesz
su root
przejść do plików / etc i dać wszystkim użytkownikom ten sam UID, możesz. To tylko plik tekstowy.Ale tak naprawdę nie powinieneś i będzie to miało niezamierzone konsekwencje.
źródło
useradd -o
rozpoznajesz, że jesteś poza normąadduser
. Jak wspomniano @psusi, tworzy dwa loginy wskazujące na ten sam identyfikator w zakresie uprawnień do plików itp. Prawdopodobnie stwarza również problemy, ponieważ nie jest to normalny przypadek użycia i bez wątpienia nie jest testowany z dużą ilością pakietów.Istnieją właściwie uzasadnione powody. Na przykład pracowałem w laboratorium, w którym każdy z nas miał własny komputer, ale
$HOME
znajdowaliśmy się na dysku udostępnionym eksportowanym przez serwer. Tak$HOME
byłoPonieważ
/users
folder nie był w rzeczywistości na moim komputerze lokalnym, ale został wyeksportowany przez NFS, do każdej analizy, która była bardzo obciążona na I / O, użyłbym danych przechowywanych na lokalnych dyskach twardych, aby nie obciążać sieci laboratorium. W tym celu ja i wszyscy inni mieliśmy dwóch użytkowników: jednego ogólnosystemowego i jednego lokalnego dla danej maszyny. Dom użytkownika lokalnego byłJednak musiałem mieć pełny dostęp do moich plików, czy byłem zalogowany jako
terdon
lub jaklocaluser
i sposób, w jaki nasz administrator wprowadziły że był dając zarównolocaluser
iterdon
takie same UID. W ten sposób mogłem swobodnie manipulować plikami lokalnymi, niezależnie od tego, jakiego użytkownika jestem aktualnie zalogowany.źródło
chmod 666
miałby takich samych efektów?Dwóch użytkowników może mieć ten sam identyfikator UID, ponieważ jest to tylko liczba w pliku tekstowym, dzięki czemu można ustawić dowolną wartość, w tym wartość, która jest już używana. Jak widzieliście, robienie tego nie jest dobrym pomysłem.
źródło
W rzeczywistości dość powszechne jest posiadanie dwóch użytkowników o tym samym identyfikatorze. We FreeBSD zwykle jest dwóch użytkowników z UID 0: root i toor. Root korzysta z wbudowanej powłoki / bin / sh, a toor używa innej powłoki, zwykle bash.
źródło
Systemy Unix i Linux zasadniczo nie robią nic, aby zabronić duplikatów w
/etc/passwd
pliku. Celem tego pliku jest powiązanie identyfikatora UID z nazwą fizyczną, która może być wyświetlana za pomocą narzędzi wiersza poleceń, na przykładls
gdy użytkownik wymienia pliki.Innym zamierzonym celem tego pliku jest określenie, jaką powłokę otrzyma użytkownik po zalogowaniu.
Typowym wektorem ataku na systemy typu Unix jest dodawanie takich wierszy do
/etc/passwd
pliku systemowego :Rola
/etc/passwd
pliku NIE ma na celu wyłącznie śledzenia kont użytkowników. Rolą śledzenia nazwy użytkownika i hasła jest/etc/shadow
plik. Pliki takie jak/etc/passwd
i/etc/group
mają naprawdę nadać czytelną dla człowieka nazwę, gdy system wyświetla pliki z dysków.Pamiętaj, że twoje pliki są zapisywane na dysk przy użyciu nie rzeczywistych nazw UID / GID.
Zwróć uwagę na
Uid:
iGid:
, liczby są faktycznie zapisane na dysku!źródło
W systemie Linux wszyscy użytkownicy i grupy są w rzeczywistości tylko liczbami. Tak
id
pokazuje wynik opublikowanego polecenia./etc/passwd
Plik mapy użytkownika nazwy do użytkownika identyfikatory (numery) i na przykład trzeba zapewnić, ty po prostu dwie nazwy użytkownika odwzorowywane do tego samego identyfikatora użytkownika.W efekcie utworzyłeś jednego użytkownika,
test12
ID 1005, który ma także drugą nazwę użytkownikatest13
. Jednak system odwzoruje UID 1005 na pierwszą znalezioną nazwę użytkownika, która byłabytest12
Linux „pozwala” to zrobić, ponieważ nie ma systemu, który by to uniemożliwił.
/etc/passwd
jest tylko plikiem tekstowym, nazwy użytkowników są mapowane na identyfikator UID znaleziony dla ich wpisu w tym pliku, identyfikatory UID są mapowane na pierwszą nazwę użytkownika znalezioną w tym pliku.Ale to, co stworzyłeś, jest mylącą sytuacją dla innych administratorów systamów; unikaj go, zmieniając identyfikator UID
test13
źródło
/etc/passwd
pliku. Ale nie ma żadnych środków, które mogłyby temu zapobiec . Czy to ma sens?Powodem tego jest dziś to, że system tego nie zapobiega.
Gdyby to się zmieniło, spowodowałoby to awarię systemów, w których administratorzy używali tej funkcji (patrz przykład Terdona). Więc to nigdy nie zostało zmienione i nie sądzę, że to się kiedykolwiek zmieni.
Pierwotnie były tylko pliki passwd i pliki grupowe i spełniały swoje zadanie. nie było komendy adduser , żadnej addgroup , pliki były edytowane przez root przy pomocy vi lub ed.
Było kilka dziwactw!
W celu zapamiętania następnego identyfikatora użytkownika, administratorzy często mieli specjalnego użytkownika jako ostatni wiersz, który miał nazwę użytkownika
!
(ponieważ!
była to niepoprawna nazwa użytkownika) i ten wpis był używany do przechowywania następnego identyfikator użytkownika. Przyznaję, surowy, ale zadziałało! Po co więc rozwalać jelito, co czyni je bardziej skomplikowanym, podobnie jak dzisiaj zwinny rozwój.Były znane wady. Najważniejsze jest to, że musi on być czytelny na całym świecie, aby narzędzia takie
ls
mogły mapowaćuser-id => name
. Oznaczało to, że każdy mógł zobaczyć zaszyfrowane hasło wszystkich użytkowników oraz wszystkich użytkowników i identyfikatorów w systemie.Niektóre systemy uniksowe zaczęły wprowadzać kilka skryptów powłoki
adduser
addgroup
, często były one ignorowane, ponieważ były niespójne między Uniksami, więc większość ludzi kontynuowała ręczną edycję.Zanim
shadow
wymyślono plik haseł , minęło kilka lat, co zapewniło nieco większe bezpieczeństwo, ukrywając zaszyfrowane hasła. Ponownie dodano wystarczającą złożoność, ale wciąż była dość prymitywna i prosta. Narzędziauseradd
igroupadd
zostały wprowadzone, które były utrzymywaneshadow
ishadow-
aktualizowane. Na początek były to często proste opakowania skryptów powłoki wokół zastrzeżonych narzędzi adduser / addgroup dostawców . Znów wystarczyło, by iść dalej.Sieci komputerów rosły, ludzie pracowali nad kilkoma na raz, aby wykonać zadania, więc administrator
passwd/group
plików stał się koszmarem, szczególnie z NFS, więc przychodzi Yellow Pages znany również jako NIS, aby zmniejszyć obciążenie.Stało się już oczywiste, że potrzeba czegoś bardziej elastycznego i wynaleziono PAM. Więc jeśli byłeś naprawdę wyrafinowany i chciałeś scentralizowanego, bezpiecznego, unikalnego systemu uwierzytelniania z wszystkimi dzwonkami i gwizdkami, wezwałbyś do centralnego serwera w celu uwierzytelnienia, może to być serwer Radius, serwer LDAP lub Active Directory.
Świat urósł. Ale pliki passwd / group / shadow wciąż pozostały dla nas mniejszych użytkowników / programistów / laboratoriów. Wciąż nie wymagaliśmy wszystkich dzwonków i gwizdków. Wydaje mi się, że filozofia zmieniła się już trochę: „Jeśli chcesz to poprawić, wcale byś jej nie użył” , więc nie martw się.
Dlatego nie sądzę, aby prosty plik passwd kiedykolwiek się zmienił. Nie ma już sensu i jest po prostu świetny dla tych Raspberry Pi za 30 £ z 2, może 3 temperaturami monitorowania użytkownika i twitterowymi kanałami. OK, musisz być ostrożny z identyfikatorami użytkowników, jeśli chcesz, aby były unikalne, i nic nie stoi na przeszkodzie, aby entuzjasta zawinął userdd w skrypcie, który najpierw wybiera następny unikalny identyfikator z bazy danych (pliku), aby ustawić unikalny identyfikator, jeśli tego właśnie chcesz. W końcu jest to oprogramowanie typu open source.
źródło
/etc/passwd
Plik mapy tylko symboliczne nazwy użytkowników do realnej identyfikator użytkownika. Jeśli celowo utworzysz dwie symboliczne nazwy, które będą mapowane na jeden identyfikator użytkownika, pozwoli ci to.To nie znaczy, że warto to zrobić. Niektóre osoby mogły znaleźć bardzo konkretne przypadki użycia, w których mogą skorzystać z tej funkcji, ale ogólnie nie powinieneś tego robić.
Linux (i inne systemy UNIX) uważają, że administrator wie, co robią. Jeśli powiesz mu, żeby zrobiło coś głupiego, to twoja wina, podobnie jak jeśli powiesz swojemu samochodowi, żeby przejechał klif, nie możesz udać się do producentów i zapytać, dlaczego samochód ci na to pozwolił.
źródło
Istnieją identyfikatory, których system operacyjny spodziewa się, że będą unikalne, ale służą one do śledzenia sprzętu. Świadomość, że konkretny unikatowy identyfikator uniwersalny odpowiada dyskowi twardemu zawierającemu pliki systemowe, może pomóc mu kontynuować pracę w przypadku zmiany konfiguracji sprzętu. Microsoft nazywa te globalnie unikalne identyfikatory i używa ich do śledzenia całego oprogramowania Windows. Jak na ironię, te akronimy zostały źle wybrane.
Z punktu widzenia systemu operacyjnego większość zmian identyfikatorów użytkowników i grup sprowadza się do zmiany interfejsu zewnętrznego. Może działać normalnie pomimo kolizji; przede wszystkim od użytkowników i grup systemu wymaga się, aby istnieli. Nie może wiedzieć, czego wymagają użytkownicy. W takich sytuacjach filozofia uniksowa mówi, że system operacyjny powinien zakładać, że administratorzy wiedzą, co robią, i powinien im pomóc to zrobić szybko.
źródło
Znalazłem dowody potwierdzające odpowiedź @ andybalholm.
Od APUE , pkt 8.15:
Przy okazji chciałbym wiedzieć, czy można się przełączyć na inną powłokę podczas logowania.
źródło