Co jakiś czas pojawia się dziwne żądanie zdalnego wsparcia, rozwiązywania problemów i / lub dostrajania wydajności w systemach Linux.
Większe firmy często mają już dobrze ustalone procedury zapewniające zdalny dostęp do dostawców / dostawców, a ja muszę tylko je przestrzegać. (Na dobre i na złe.)
Z drugiej strony małe firmy i osoby niezmiennie zwracają się do mnie z instrukcją, co muszą zrobić, aby mnie skonfigurować. Zazwyczaj ich serwery są bezpośrednio podłączone do Internetu, a istniejące środki bezpieczeństwa obejmują wartości domyślne dla dowolnej dystrybucji Linuksa.
Prawie zawsze będę potrzebować dostępu na poziomie administratora, a ktokolwiek będzie dla mnie konfigurował dostęp, nie jest ekspertem administracyjnym. Nie chcę ich hasła roota i jestem również pewien, że moje działania nie będą złośliwe, ale jakie rozsądnie proste instrukcje powinienem przekazać:
- załóż konto i bezpiecznie wymień dane uwierzytelniające
- skonfiguruj dostęp do roota (sudo)
- ogranicz dostęp do mojego konta
- zapewnić ścieżkę audytu
(I tak, jestem świadomy i zawsze ostrzegam tych klientów, że kiedy już mam dostęp administratora, ukrywanie złośliwych działań jest banalne, ale załóżmy, że nie mam nic do ukrycia i aktywnie uczestniczę w tworzeniu ścieżki audytu.)
Co można poprawić, wykonując poniższe kroki?
Mój aktualny zestaw instrukcji:
załóż konto i bezpiecznie wymień dane uwierzytelniające
Podaję skrót hasła i proszę o skonfigurowanie mojego konta z tym zaszyfrowanym hasłem, więc nie będziemy musieli przesyłać hasła w postaci zwykłego tekstu, będę jedynym, który zna hasło i nie zaczynamy od przewidywalne słabe hasło.
sudo useradd -p '$1$********' hbruijn
Podaję klucz publiczny SSH (konkretna para kluczy na klienta) i pytam, czy skonfigurowali moje konto z tym kluczem:
sudo su - hbruijn
mkdir -p ~/.ssh
chmod 0700 ~/.ssh
echo 'from="10.80.0.0/14,192.168.1.2" ssh-rsa AAAAB3NzaC1y***...***== hbruijn@serverfault' >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys
skonfiguruj dostęp do roota (sudo)
Proszę klienta, aby skonfigurował dla mnie sudo za pomocą sudo sudoedit
lub za pomocą swojego ulubionego edytora i dołączył /etc/sudoers
:
hbruijn ALL=(ALL) ALL
ogranicz dostęp do mojego konta
Zazwyczaj klient nadal zezwala na logowanie oparte na hasłach i proszę o dodanie następujących dwóch linii, aby /etc/ssh/sshd_config
przynajmniej ograniczyć moje konto tylko do kluczy SSH:
Match user hbruijn
PasswordAuthentication no
W zależności od klienta przekieruję cały mój dostęp SSH przez jednego hosta bastionu, aby zawsze zapewniał pojedynczy statyczny adres IP (na przykład 192.168.1.2) i / lub podawał zakres adresów IP, z których korzysta mój dostawca usług internetowych (na przykład 10.80. 0,0 / 14). Klient może potrzebować dodać je do białej listy zapory, jeśli dostęp SSH jest ograniczony (najczęściej ssh nie jest jednak filtrowany).
Widziałeś już te adresy IP jako from=
ograniczenie w ~.ssh/authorized_keys
pliku, które ogranicza hosty, z których mój klucz może być używany do uzyskiwania dostępu do ich systemów.
zapewnić ścieżkę audytu
Do tej pory żaden klient mnie o to nie prosił i nie zrobiłem nic konkretnego poza następującymi czynnościami:
Staram się konsekwentnie używać sudo
z poszczególnymi poleceniami i staram się zapobiegać używaniu sudo -i
lub sudo su -
. Staram się nie używać, sudo vim /path/to/file
ale sudoedit
zamiast tego używam .
Domyślnie wszystkie akcje uprzywilejowane zostaną następnie zarejestrowane w syslog (i /var/log/secure
):
Sep 26 11:00:03 hostname sudo: hbruijn : TTY=pts/0 ; PWD=/home/hbruijn ; USER=jboss ; COMMAND=sudoedit /usr/share/jbossas/domain/configuration/domain.xml
Sep 26 11:00:34 hostname sudo: hbruijn : TTY=pts/0 ; PWD=/home/hbruijn ; USER=root ; COMMAND=/usr/bin/tail -n 5 /var/log/messages
W większości rezygnuję z dostosowywania środowiska pracy, jedyne, co naprawdę robię, to ustawianie następujących elementów w mojej ~/.bash_profile
historii bashów i dołączanie znaczników czasu:
export HISTSIZE=99999999999
export HISTFILESIZE=99999999999
export HISTIGNORE="w:ls:ls -lart:dmesg:history:fg"
export HISTTIMEFORMAT='%F %H:%M:%S '
shopt -s histappend
screen
, więc w skrajnych przypadkach klient może oglądać na żywo to, co robisz.