Время от времени я получаю странный запрос на предоставление удаленной поддержки, устранения неполадок и / или настройки производительности в системах Linux.
Более крупные компании часто уже имеют хорошо разработанные процедуры для предоставления удаленного доступа поставщикам / поставщикам, и мне нужно только соблюдать их. (Лучше или хуже.)
С другой стороны, небольшие компании и частные лица неизменно обращаются ко мне, чтобы объяснить им, что им нужно сделать, чтобы настроить меня. Обычно их серверы напрямую подключены к Интернету, и существующие меры безопасности состоят из значений по умолчанию для любого дистрибутива Linux.
Почти всегда мне нужен доступ на уровне root, и тот, кто будет настраивать доступ для меня, не является системным администратором. Мне не нужен их пароль root, и я также уверен, что мои действия не будут вредоносными, но какие достаточно простые инструкции я должен дать:
- создать учетную запись и безопасно обмениваться учетными данными
- настроить 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
вместо этого.
По умолчанию все привилегированные действия будут зарегистрированы в системном журнале (и /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
увеличении истории bash и включаю метки времени:
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
, поэтому в крайних случаях ваш клиент может смотреть в прямом эфире, что вы делаете.