W naszym zespole mamy trzech doświadczonych administratorów Linuksa, którzy muszą administrować kilkadziesiąt serwerami Debiana. Wcześniej wszyscy pracowaliśmy jako root przy użyciu uwierzytelniania klucza publicznego SSH. Ale rozmawialiśmy o tym, jaka jest najlepsza praktyka dla tego scenariusza i nie mogliśmy się na nic zgodzić.
Każdy klucz publiczny SSH jest umieszczony w katalogu ~ root / .ssh / Author_keys2
- Zaleta: łatwy w użyciu, przekazywanie agentów SSH działa łatwo, niewielki narzut
- Wada: brak kontroli (nigdy nie wiadomo, który „root” dokonał zmiany), wypadki są bardziej prawdopodobne
Korzystanie ze spersonalizowanych kont i sudo
W ten sposób logujemy się za pomocą spersonalizowanych kont przy użyciu kluczy publicznych SSH i używamy sudo do wykonywania pojedynczych zadań z uprawnieniami roota . Ponadto moglibyśmy dać sobie grupę „adm”, która pozwala nam przeglądać pliki dziennika.
- Zaleta: dobry audyt, sudo zbyt łatwo powstrzymuje nas od robienia idiotycznych rzeczy
- Wada: przekazywanie agenta SSH psuje się, jest to kłopot, ponieważ prawie nic nie można zrobić jako użytkownik inny niż root
Korzystanie z wielu użytkowników UID 0
Jest to bardzo unikalna propozycja jednego z sysadminów. Sugeruje utworzenie trzech użytkowników w / etc / passwd, mających UID 0, ale inne nazwy logowania. Twierdzi, że tak naprawdę nie jest to zabronione i pozwala wszystkim być UID 0, ale nadal może kontrolować.
- Zaleta: Przekazywanie agenta SSH działa, kontrola może działać (niesprawdzona), bez problemów sudo
- Wada: jest dość brudna - nie można jej nigdzie udokumentować jako dozwolonego sposobu
Co byś zasugerował?
-o
flagę nauseradd
stronie podręcznika. Ta flaga umożliwia wielu użytkownikom współużytkowanie tego samego identyfikatora użytkownika.Odpowiedzi:
Druga opcja jest najlepsza IMHO. Konta osobiste, dostęp sudo. Całkowicie wyłącz dostęp roota przez SSH. Mamy kilkaset serwerów i pół tuzina administratorów systemu, tak to robimy.
Jak dokładnie działa przekazywanie agentów?
Ponadto, jeśli jest to problem z użyciem
sudo
każdego zadania, możesz wywołać powłokę sudo za pomocąsudo -s
lub przełączyć się na powłokę root za pomocąsudo su -
źródło
sudo -s
. Czy słusznie rozumiem, żesudo -i
nie ma różnicy w używaniusu -
lub zasadniczo logowaniu się jako root oprócz dodatkowego wpisu dziennika w porównaniu do zwykłego logowania root? Jeśli to prawda, w jaki sposób i dlaczego jest to lepsze niż zwykły login root?Jeśli chodzi o trzecią sugerowaną strategię, inną niż
useradd -o -u userXXX
przejrzenie opcji zalecanych przez @jlliagre, nie jestem zaznajomiony z obsługą wielu użytkowników jako tego samego identyfikatora użytkownika. (dlatego jeśli to zrobisz, byłbym zainteresowany, gdybyś mógł zaktualizować post o pojawiające się problemy (lub sukcesy) ...)Wydaje mi się, że moje pierwsze spostrzeżenie dotyczące pierwszej opcji „Klucz publiczny SSH dla każdego jest umieszczony w katalogu ~ root / .ssh / author_keys2”, jest taki, że chyba, że absolutnie nigdy nie będziesz pracować na żadnym innym systemie;
sudo
Drugim spostrzeżeniem byłoby to, że jeśli pracujesz na systemach, które aspirują do HIPAA, zgodności z PCI-DSS lub takich rzeczy jak CAPP i EAL, będziesz musiał obejść problemy sudo, ponieważ;
Więc; Korzystanie ze spersonalizowanych kont i sudo
To niefortunne, że jako administrator systemu prawie wszystko, co musisz zrobić na zdalnej maszynie, będzie wymagało pewnych podwyższonych uprawnień, jednak denerwujące jest to, że większość narzędzi i narzędzi opartych na SSH została zablokowana, gdy jesteś w
sudo
Dlatego mogę przekazać pewne sztuczki, których używam, aby obejść irytujące
sudo
wspomnienia, o których wspomniałeś. Pierwszy problem polega na tym, że jeśli logowanie użytkownika root jest zablokowane za pomocąPermitRootLogin=no
lub nie masz konta root za pomocą klucza ssh, to powoduje, że pliki SCP są czymś w rodzaju PITA.Problem 1 : Chcesz scpować pliki ze strony zdalnej, ale wymagają one dostępu do konta root, jednak nie możesz zalogować się do zdalnej skrzynki jako root.
Nudne rozwiązanie : skopiuj pliki do katalogu domowego, zmień i scp w dół.
ssh userXXX@remotesystem
,sudo su -
itp.,cp /etc/somefiles
do/home/userXXX/somefiles
,chown -R userXXX /home/userXXX/somefiles
użyj scp do pobrania plików ze zdalnego.Rzeczywiście bardzo nudne.
Mniej nudne rozwiązanie : sftp obsługuje
-s sftp_server
flagę, dlatego możesz wykonać następujące czynności (jeśli skonfigurowałeś sudo bez hasła/etc/sudoers
);(możesz również użyć tego hack-around z sshfs, ale nie jestem pewien, czy jest to zalecane ... ;-)
Jeśli nie masz praw do hasła sudo bez hasła lub z jakiegoś skonfigurowanego powodu powyższa metoda jest zepsuta, mogę zasugerować jeszcze jedną nudną metodę przesyłania plików, aby uzyskać dostęp do zdalnych plików root.
Metoda Port Forward Ninja :
Zaloguj się do zdalnego hosta, ale określ, że zdalny port 3022 (może być dowolny wolny i niezastrzeżony dla administratorów, tj.> 1024) ma być przekierowany z powrotem do portu 22 po stronie lokalnej.
Zrootuj się w normalny sposób ...
Teraz możesz scpować pliki w innym kierunku, unikając nudnego, nudnego kroku tworzenia pośredniej kopii plików;
Problem 2: Przekazywanie agenta SSH : Jeśli załadujesz profil główny, np. Poprzez określenie powłoki logowania, niezbędne zmienne środowiskowe dla przekazywania agenta SSH, takie jak
SSH_AUTH_SOCK
są resetowane, dlatego przekazywanie agenta SSH jest „zepsute”sudo su -
.Połowa upieczonej odpowiedzi :
Wszystko, co poprawnie ładuje powłokę roota, słusznie zresetuje środowisko, jednak istnieje pewne obejście, którego możesz użyć, gdy potrzebujesz OBOWIĄZKOWEGO uprawnienia roota I możliwości korzystania z agenta SSH, W TYM SAMYM CZASIE
Osiąga to rodzaj profilu chimery, którego tak naprawdę nie należy używać, ponieważ jest to paskudny hack , ale jest użyteczny, gdy trzeba przesyłać pliki SCP ze zdalnego hosta jako root do innego zdalnego hosta.
W każdym razie możesz włączyć możliwość zachowania przez użytkownika zmiennych ENV, ustawiając następujące opcje w sudoers;
pozwala to na tworzenie nieprzyjemnych hybrydowych środowisk logowania;
zaloguj się jak zwykle;
utwórz powłokę bash, która działa
/root/.profile
i/root/.bashrc
. ale zachowujeSSH_AUTH_SOCK
Ta powłoka ma uprawnienia roota i root
$PATH
(ale zepsuty katalog domowy ...)Ale możesz użyć tego wywołania, aby wykonać czynności wymagające zdalnego rootowania sudo, ale także dostępu agenta SSH;
źródło
Trzecia opcja wygląda idealnie - ale czy rzeczywiście wypróbowałeś ją, aby zobaczyć, co się dzieje? Podczas może wyświetlić dodatkowe nazwy użytkowników na etapie uwierzytelniania, każdy wstecznego ma zamiar powrócić tą samą wartość.
Zezwolenie na bezpośredni dostęp do roota ssh to zły pomysł, nawet jeśli twoje maszyny nie są podłączone do Internetu / używają silnych haseł.
Zwykle używam „su” zamiast sudo w celu uzyskania dostępu do roota.
źródło
root
użytkownika, jeśliroot
użytkownik jest pierwszy/etc/passwd
z UID 0. Zwykle zgadzam się z jlliagre. Jedynym minusem, jaki widzę, jest to, że każdy użytkownik jestroot
użytkownikiem, a czasem może być mylące, aby zrozumieć, kto co zrobił.Używam (1), ale zdarzyło mi się pisać
w jeden niefortunny dzień. Mogę być wystarczająco zły, jeśli masz więcej niż garstkę administratorów.
(2) Jest prawdopodobnie bardziej zaawansowany - i możesz stać się pełnoprawnym rootem poprzez sudo su -. Wypadki są jednak nadal możliwe.
(3) Nie dotknąłbym barką. Użyłem go w Suns, aby mieć konto roota bez systemu operacyjnego (jeśli dobrze pamiętam), ale nigdy nie było solidne - i wątpię, czy byłoby to bardzo kontrolowane.
źródło
Zdecydowanie odpowiedz 2.
Oznacza, że zezwalasz na dostęp SSH jako
root
. Jeśli ta maszyna jest w jakikolwiek sposób publicznie dostępna, jest to po prostu okropny pomysł; kiedy uruchomiłem SSH na porcie 22, mój VPS co godzinę podejmował wiele prób uwierzytelnienia jako root. Miałem podstawową konfigurację IDS, aby rejestrować i blokować adresy IP, które podejmowały wiele nieudanych prób, ale wciąż przychodziły. Na szczęście wyłączyłem dostęp SSH jako użytkownik root, gdy tylko skonfigurowałem własne konto i sudo. Ponadto nie ma praktycznie żadnej ścieżki audytu.Zapewnia dostęp do katalogu głównego, gdy jest potrzebny. Tak, ledwo masz jakieś uprawnienia jako zwykły użytkownik, ale jest to dokładnie to, czego chcesz; jeśli konto zostanie przejęte, chcesz, aby jego możliwości były ograniczone. Chcesz, aby każdy dostęp superużytkownika wymagał ponownego wprowadzenia hasła. Dodatkowo, dostęp do sudo może być kontrolowany przez grupy użytkowników i ograniczony do konkretnych poleceń, jeśli chcesz, dając ci większą kontrolę nad tym, kto ma dostęp do czego. Ponadto polecenia są uruchamiane, ponieważ sudo może być rejestrowane, więc zapewnia znacznie lepszą ścieżkę audytu, jeśli coś pójdzie nie tak. Och, i nie uruchamiaj po prostu „sudo su -”, jak tylko się zalogujesz. To okropna, okropna praktyka.
Pomysł twojego administratora jest zły. I powinien się czuć źle. Nie, maszyny * nix prawdopodobnie nie powstrzymają cię przed zrobieniem tego, ale zarówno twój system plików, jak i praktycznie każda aplikacja oczekuje od każdego użytkownika unikalnego identyfikatora UID. Jeśli zaczniesz iść tą drogą, mogę zagwarantować, że napotkasz problemy. Może nie od razu, ale w końcu. Na przykład, pomimo wyświetlania miłych przyjaznych nazw, pliki i katalogi używają numerów UID do oznaczenia swoich właścicieli; jeśli natrafisz na program, który ma problem ze zduplikowanymi identyfikatorami UID, nie możesz później zmienić identyfikatora UID w pliku passwd bez konieczności poważnego ręcznego czyszczenia systemu plików.
sudo
jest droga naprzód. Może to powodować dodatkowe problemy z uruchamianiem poleceń jako root, ale zapewnia bardziej bezpieczne okno, zarówno pod względem dostępu, jak i inspekcji.źródło
Zdecydowanie opcja 2, ale używaj grup, aby dać każdemu użytkownikowi jak najwięcej kontroli, bez konieczności używania sudo. sudo przed każdym poleceniem traci połowę korzyści, ponieważ zawsze znajdujesz się w strefie zagrożenia. Jeśli uczynisz odpowiednie katalogi zapisywalnymi przez sysadmins bez sudo, zwrócisz sudo do wyjątku, który sprawia, że wszyscy czują się bezpieczniej.
źródło
W dawnych czasach sudo nie istniało. W konsekwencji posiadanie wielu użytkowników UID 0 było jedyną dostępną alternatywą. Ale nadal nie jest tak dobrze, zwłaszcza w przypadku logowania na podstawie identyfikatora UID w celu uzyskania nazwy użytkownika.
W dzisiejszych czasach sudo jest jedynym właściwym rozwiązaniem. Zapomnij o czymkolwiek innym.
źródło
Jest to udokumentowane faktem. Jednorożce z BSD od dawna mają swoje konta na toor, a użytkownicy bashroot są zwykle akceptowaną praktyką w systemach, w których csh jest standardem (akceptowane nadużycia;)
źródło
Być może jestem dziwny, ale metoda (3) właśnie pojawiła się w mojej głowie. Plusy: będziesz mieć nazwę każdego użytkownika w logach i będziesz wiedział, kto zrobił co jako root. Minusy: każdy z nich będzie cały czas rootowany, więc błędy mogą być katastrofalne.
Chciałbym zapytać, dlaczego wszyscy administratorzy mają dostęp do konta root. Wszystkie 3 zaproponowane przez Ciebie metody mają jedną wyraźną wadę: gdy administrator uruchomi taką
sudo bash -l
lub inną funkcjęsudo su -
, tracisz zdolność do śledzenia, kto co robi, a potem błąd może być katastrofalny. Co więcej, w przypadku możliwego niewłaściwego zachowania może to nawet skończyć się znacznie gorzej.Zamiast tego możesz rozważyć pójście inną drogą:
W ten sposób martin będzie w stanie bezpiecznie obsłużyć postfiks, aw przypadku pomyłki lub niewłaściwego zachowania utracisz tylko swój system postfiksów, a nie cały serwer.
Tę samą logikę można zastosować do dowolnego innego podsystemu, takiego jak apache, mysql itp.
Oczywiście jest to w tym momencie czysto teoretyczne i może być trudne do skonfigurowania. To wygląda na lepszy sposób. Przynajmniej dla mnie. Jeśli ktoś spróbuje tego, daj mi znać, jak poszło.
źródło