Время от времени я получаю странный запрос на предоставление удаленной поддержки, устранения неполадок и / или настройки производительности в системах 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
, поэтому в крайних случаях ваш клиент может смотреть в прямом эфире, что вы делаете.Ответы:
Единственное, что приходит на ум, это добавить
--expiredate
кadduser
звонку.При этом клиент знает, что ваш доступ автоматически истекает в фиксированную дату.
Он по-прежнему должен доверять вам, поскольку у вас есть root-доступ, и он все еще может удалить флаг истечения срока действия.
источник
Вы можете записывать свои сессии с помощью утилиты script (1) .
тогда все в session.log.
источник
Поскольку вы уже входите в систему с открытым ключом SSH, это немного усложнит ситуацию, если вы не предоставите хэш пароля; вместо этого попросите их использовать
adduser --disabled-password
(что,useradd -p '!'
я думаю, эквивалентно), что фактически эквивалентно тому,PasswordAuthentication no
что используется для этой учетной записи, плюс нет шансов, что кто-то, отслеживающий вашу электронную почту, мог бы взломать пароль и войти в систему как вы.источник
Match user hbruijn \n PasswordAuthentication no
к sshd_config должно препятствовать тому, чтобы кто-либо входил в систему удаленно с моим расшифрованным паролем (потенциально локальные пользователи могли бы использовать егоsu - hbruijn
), но, насколько я знаю, мне все еще нужен действительный пароль дляsudo
целей. Может мне просто сбросить пароль после входа в систему?--disabled-password
состоянии получить пароль при запускеpasswd
из этой учетной записи.hbruijn ALL=(ALL) NOPASSWD: /usr/bin/passwd hbruijn
?Зачем вообще вводить пароль, если вы собираетесь использовать открытые / закрытые ключи.
Открытые ключи предназначены для совместного использования, поэтому это то, что вы должны использовать для безопасного обмена учетными данными, а не хэшированными паролями.
sudo useradd --disabled-password hbruijn
При отправке вашего открытого ключа проверьте отпечаток по второму каналу, например по телефону, чтобы вы знали, что никто не изменил его при входе.
Поскольку у вас сейчас не будет пароля для использования sudo, вам также нужно изменить свою строку в файле sudoers на
hbruijn ALL=(ALL) NOPASSWD:ALL
Если вас не устраивает отсутствие пароля для sudo и вы действительно хотите пароль, вам все равно не нужно отправлять свой хешированный пароль, разрешать создание учетной записи без пароля, устанавливать свой открытый ключ, и как только ваша учетная запись станет настроить вы можете войти через ssh и запустить,
passwd
чтобы установить свой собственный пароль.источник