Раз у раз я отримую дивний запит на надання віддаленої підтримки, усунення несправностей та / або налаштування продуктивності в системах Linux.
Більші компанії часто вже мають чітко встановлені процедури надання віддаленого доступу постачальникам / постачальникам, і мені потрібно лише їх виконувати. (На краще або на гірше.)
З іншого боку, маленькі компанії та приватні особи незмінно звертаються до мене, щоб проінструктувати їх, що їм потрібно зробити, щоб створити мене. Зазвичай їхні сервери підключені безпосередньо до Інтернету, і існуючі заходи безпеки складаються із стандартних параметрів, незалежно від їх розподілу Linux.
Майже завжди мені знадобиться доступ до кореневого рівня, і той, хто буде налаштовувати доступ для мене, не є експертом-систематиком. Я не хочу їх кореневого пароля, і я також впевнений, що мої дії не будуть зловмисними, але які досить прості інструкції слід дати:
- налаштувати рахунок та надійно обмінятись обліковими записами
- встановити root (sudo) доступ
- обмежити доступ до мого облікового запису
- забезпечити аудиторський слід
(І так, я знаю і завжди попереджаю тих клієнтів, що коли я маю доступ адміністратора, приховуючи будь-які шкідливі дії, це тривіально, але припустимо, що мені нічого не приховувати та брати активну участь у створенні аудиту.)
Що можна покращити на наведених нижче кроках?
Мій поточний набір інструкцій:
налаштувати рахунок та надійно обмінятись обліковими записами
Я надаю хеш паролів і прошу, щоб мій обліковий запис був налаштований із зашифрованим паролем, тому нам не потрібно буде передавати чіткий текстовий пароль, я єдиний, хто знає пароль, і ми не починаємо з передбачуваний слабкий пароль.
sudo useradd -p '$1$********' hbruijn
Я надаю SSH відкритого ключа (конкретна пара ключів на клієнта) і прошу, щоб він налаштував мій обліковий запис за допомогою цього ключа:
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
встановити root (sudo) доступ
Я прошу клієнта встановити для мене sudo за допомогою sudo sudoedit
або за допомогою їх улюбленого редактора та додати /etc/sudoers
:
hbruijn ALL=(ALL) ALL
обмежити доступ до мого облікового запису
Зазвичай клієнт все ще дозволяє входи на основі пароля, і я прошу їх додати наступні два рядки, щоб /etc/ssh/sshd_config
принаймні обмежити мій обліковий запис лише ключами SSH:
Match user hbruijn
PasswordAuthentication no
Залежно від клієнта, я пройду весь мій доступ SSH через єдиний хост бастіону, щоб завжди надавати єдину статичну IP-адресу (наприклад, 192.168.1.2) та / або надавати діапазон IP-адрес, який використовує мій провайдер (наприклад, 10.80. 0,0 / 14). Клієнту, можливо, доведеться додати їх до списку брандмауера, якщо доступ до SSH обмежений (хоча частіше за все ssh нефільтрується).
Ви вже бачили ці ip-адреси як from=
обмеження у ~.ssh/authorized_keys
файлі, що обмежує хости, з яких мій ключ може використовуватися для доступу до їх систем.
забезпечити аудиторський слід
До цих пір жоден клієнт не просив мене про це, і я не робив нічого конкретного, крім наступного:
Я намагаюся послідовно використовувати sudo
окремі команди і намагаюся запобігти використанню sudo -i
або sudo su -
. Я намагаюся не використовувати, sudo vim /path/to/file
а використовувати sudoedit
замість цього.
За замовчуванням всі привілейовані дії потім будуть реєструватися в syslog (і /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
Я здебільшого відмовляюся від налаштування своїх робочих умов, єдине, що я дійсно роблю, це встановити наступне в моєму ~/.bash_profile
збільшенні історії башів та включити часові позначки:
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
, тож у крайньому випадку ваш клієнт може дивитись наживо, що ви робите.