Назад | Перейти на главную страницу

Linux: настройка удаленного системного администратора

Время от времени я получаю странные просьбы об удаленной поддержке, устранении неполадок и / или настройке производительности в системах Linux.

В крупных компаниях часто уже есть хорошо отработанные процедуры по предоставлению удаленного доступа продавцам / поставщикам, и мне нужно только их соблюдать. (Лучше или хуже.)

С другой стороны, небольшие компании и частные лица неизменно обращаются ко мне, чтобы проинструктировать их о том, что им нужно сделать, чтобы создать меня. Обычно их серверы напрямую подключены к Интернету, и существующие меры безопасности состоят из значений по умолчанию для любого их дистрибутива Linux.

Почти всегда мне понадобится доступ на корневом уровне, и тот, кто будет настраивать доступ для меня, не является опытным системным администратором. Мне не нужен их пароль root, и я уверен мои действия не будет злонамеренным, но какие достаточно простые инструкции я должен дать:

(И да, я знаю и всегда предупреждаю этих клиентов, что, если у меня есть доступ администратора, скрытие любых вредоносных действий является тривиальным делом, но давайте предположим, что мне нечего скрывать, и я активно участвую в создании контрольного журнала.)

Что можно улучшить с помощью приведенных ниже шагов?


Мой текущий набор инструкций:

создать учетную запись и безопасно обмениваться учетными данными

Я предоставляю хэш пароля и прошу, чтобы моя учетная запись была настроена с этим зашифрованным паролем, поэтому нам не нужно будет передавать пароль в виде открытого текста, я буду единственным, кто знает пароль, и мы не начинаем с предсказуемый слабый пароль.

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.1). 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

Единственное, что приходит в голову, это добавить --expiredate к adduser вызов.
При этом клиент знает, что ваш доступ автоматически истечет в установленную дату.

Ему по-прежнему нужно доверять вам, поскольку у вас есть root-доступ и вы все еще можете удалить флаг истечения срока действия.

Вы можете записывать свои сеансы с помощью сценарий (1) утилита.

$ script session.log
Script started, file is session.log
$ ls
file1  session.log
exit
Script done, file is session.log

затем все находится в session.log.

Поскольку вы уже входите в систему с открытым ключом SSH, это немного усложнит ситуацию, если вы не предоставите хэш пароля; вместо этого скажите им использовать adduser --disabled-password (эквивалентно, useradd -p '!', Я думаю), что фактически эквивалентно PasswordAuthentication no для этой учетной записи, плюс нет никаких шансов, что кто-то, отслеживающий вашу электронную почту, может подобрать хэш пароля и войти в систему как вы.

Зачем вообще указывать пароль, когда собираешься использовать публичные / приватные ключи.

Открытые ключи предназначены для совместного использования, поэтому это то, что вы должны использовать для безопасного обмена учетными данными, а не хешированные пароли.

sudo useradd --disabled-password hbruijn

При отправке открытого ключа проверьте отпечаток пальца по второму каналу, например по телефону, чтобы вы знали, что никто не изменил его по пути.

Поскольку теперь у вас не будет пароля для использования sudo, вам также необходимо изменить свою строку в файле sudoers на

hbruijn ALL=(ALL) NOPASSWD:ALL

Если вас не устраивает отсутствие пароля для sudo и вы действительно хотите пароль, вам все равно не нужно отправлять хешированный пароль, пусть учетная запись будет создана без пароля, установите свой открытый ключ, и как только ваша учетная запись будет настроить, вы можете войти в систему через ssh и запустить passwd чтобы установить свой собственный пароль.