Linux: настроить для удаленного сисадмина

51

Время от времени я получаю странный запрос на предоставление удаленной поддержки, устранения неполадок и / или настройки производительности в системах 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
HBruijn
источник
8
Вы можете войти (легко изменить после факта) и даже обмениваться сессиями screen, поэтому в крайних случаях ваш клиент может смотреть в прямом эфире, что вы делаете.
Свен
Если вы хотите добавить лучший контрольный журнал, вы должны дать им указание включить удаленную регистрацию, если у них есть такая возможность
Fredi

Ответы:

24

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

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

обманщик
источник
15

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

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

тогда все в session.log.

user9517 поддерживает GoFundMonica
источник
Вы бы порекомендовали запустить его на своем собственном хосте, прежде чем запускать ssh-сеанс с удаленной системой, или включить его как часть моего профиля в удаленной системе?
HBruijn
1
Полагаю, вы могли бы сделать и то и другое - я использовал его только один раз, в основном людям это безразлично.
user9517 поддерживает GoFundMonica
7

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

zwol
источник
3
Добавление Match user hbruijn \n PasswordAuthentication noк sshd_config должно препятствовать тому, чтобы кто-либо входил в систему удаленно с моим расшифрованным паролем (потенциально локальные пользователи могли бы использовать его su - hbruijn), но, насколько я знаю, мне все еще нужен действительный пароль для sudoцелей. Может мне просто сбросить пароль после входа в систему?
HBruijn
О, хорошая мысль о судо. Я не уверен, может ли учетная запись в --disabled-passwordсостоянии получить пароль при запуске passwdиз этой учетной записи.
Звол
Кроме того, что мешает кому-либо прослушивать пароль, который вы предоставляете? Эта часть является слабой ссылкой, которая подрывает использование ключей ssh, где не имеет значения, перехвачен ли ваш открытый ключ.
Джеймс Райан
3
Может ли эта слабая ссылка быть устранена, если клиент также добавит строку в файл sudoers, как hbruijn ALL=(ALL) NOPASSWD: /usr/bin/passwd hbruijn?
Dezza
2

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

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

sudo useradd --disabled-password hbruijn

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

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

hbruijn ALL=(ALL) NOPASSWD:ALL

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

Дженс Тиммерман
источник