Сегодня я расскажу как настроить двухэтапную аутентификацию для пользователя root на вашем сервере по временному одноразовому паролю, что будет генерировать приложение на телефоне или же простая консоль. Смысл в том, что при переходе в суперпользователя на вашем сервере вначале будет запрошен временный (одноразовый) пароль и только затем — пароль рута. Это поможет вам более качественно защитить ваш сервер от несанкционированного доступа.
Начнём с установки OATH Toolkit что уже есть в репозитории Debian.
apt-get install oathtool libpam-oath
Далее нам потребуется сгенерировать случайную строку (секретную фразу) на основе которой и будут генерироваться случайные временные одноразовые ключи. Поэтому стоит держать эту строку в секрете.
head -c 4096 /dev/urandom | md5sum | awk '{print $1}'
6819c89679c56508fec770362e312c4e
В данном примере секретная фраза это 6819c89679c56508fec770362e312c4e.
Теперь нам необходимо создать файл (/etc/users.oath
) с описанием алгоритмов работы, пользователя и его секретной фразы.
echo "HOTP/T30 root - 6819c89679c56508fec770362e312c4e" > /etc/users.oath
chown root:root /etc/users.oath
chmod 600 /etc/users.oath
Далее – редактирование файла /etc/pam.d/su
.
Вам необходимо дописать после
auth sufficient pam_rootok.so
строку
auth requisite pam_oath.so usersfile=/etc/users.oath window=10 digits=6
Где
usersfile
– путь к файлу с описанием пользователей и их секретных фраз,
window
– размер “окна”. Поскольку временный одноразовый ключ создаётся относительно времени, то окно – это расхождение серверного времени от времени клиента/приложения. Одно “окно” – 30 секунд. Т.е. мы задали максимальное расхождение ключей в 5 минут.
digits
– необходимое количество цифр во временном одноразовом ключе.
Теперь пробуем получить одноразовый временный пароль с нашей секретной фразой:
oathtool --verbose --totp 6819c89679c56508fec770362e312c4e
На что получим что-то следующее:
Hex secret: 6819c89679c56508fec770362e312c4e
Base32 secret: NAM4RFTZYVSQR7WHOA3C4MJMJY======
Digits: 6
Window size: 0
Step size (seconds): 30
Start time: 1970-01-01 00:00:00 UTC (0)
Current time: 2014-04-15 05:36:28 UTC (1397540188)
Counter: 0x2C6D360 (46584672)
385762
385762 – это и есть наш одноразовый временный пароль, а вот строку Base32 secret мы будем использовать когда будем настраивать приложение для телефона (только вводить мы будем этот код без знаков “=”, т.е. как NAM4RFTZYVSQR7WHOA3C4MJMJY).
У Google есть отличная программа для генерирования временных (одноразовых) ключей – Google Authenticator
На официальной странице детально расписано как установить это приложение для телефонов на базе Android, iOS, Blackberry и т.п. поэтому на этом шаге я останавливаться не буду.
И наконец тестируем!
Подключаемся к серверу другим соединением (на всякий случай не закрывайте сессию root!) и пробуем сделать su
Система должна нас вначале спросить одноразовый временный пароль.
$ su
One-time password (OATH) for `root':
Генерируем одноразовый временный пароль либо через консоль с помощью команды oathtool
, либо через приложение на вашем телефоне и вводим его.
Если вы всё сделали правильно, то после ввода временного пароля система вам предложит ввести пароль рута.
Это всё. Удачи!
- Категорія: Адміністрування
- Теги: debian, linux, OATH, pam, root, ssh, su, ubuntu, авторизация, аутентификация, безопасность, защита, линукс, сервер
Иногда необходимо постоянно (или довольно долго) держать соединение с сервером по SSH. Но это наталкивает на проблему разрыва соединения с сервером из-за длительной неактивности клиента. Существует 2 варианта решения этой проблемы.
Способ №1.
Если у вас есть root-доступ к серверу, то вы можете просто установить значение в файле конфигурации SSH /etc/ssh/sshd_config
ClientAliveInterval 60
Эта строчка устанавливает интервал времени ожидания в секундах, после которого демон SSH sshd
отправит клиенту NULL-пакет для поддержания соединения.
По умолчанию, значение этой переменной 0
, что означает что сервер не будет поддерживать соединение с клиентом и разорвёт его после длительного отсутствия активности.
Не забудьте перезапустить sshd
на сервере после сохранения файла.
Способ №2.
Второй способ проще и его можно применить ко всем вашим SSH-подключениям сразу.
Просто добавьте эти строчки в файл ~/.ssh/config
на вашей локальной машине:
Host *
ServerAliveInterval 60
Если у вас не было этого файла, тогда создайте его, установив ему права 600
:
chmod 600 ~/.ssh/config
Эти строчки заставляют отправлять ваш ssh-клиент каждые 60
секунд KeepAlive сообщения для всех серверов к которым вы будете подключаться, тем самым поддерживая с ними постоянное соединение.
Это всё.
Иногда необходимо подключится к удаленному серверу по протоколу SSH через существующий SOCKS 5 прокси, что может быть создан как из SSH-подключения к другому серверу, так и другими способами.
Сегодня я расскажу об этом.
В этой статье я уже писал как создать SOCKS 5 прокси на сервере имея SSH-доступ к нему. Для примера сделаем SOCKS 5 на одном сервере и подключимся через него к второму.
На сервере с SOCKS 5 прокси (если он создаётся через SSH, а не другими способами) в файле настроек SSH /etc/ssh/sshd_config
должна быть строчка разрешающая пересылку TCP-пакетов:
AllowTcpForwarding yes
Без неё у вас врядли что-то получится.
Итак, используя шаблон
ssh -f -C2qTnN -D <порт> <удаленный_пользователь>@<удаленный_сервер>
запустим прокси на порту 1080
для сервера 8.8.8.8
например так
ssh -f -C2qTnN -D 1080 [email protected]
Теперь сама строчка подключения к второму удаленному серверу по протоколу SSH через SOCKS 5 прокси:
ssh -o ProxyCommand="nc -x 127.0.0.1:1080 %h %p" [email protected]
Где
127.0.0.1:1080
– IP и порт SOCKS 5 прокси
roman
– это ваш логин на сервер
8.8.4.4
– адрес вашего сервера
Это всё.
Удачи!
Cоздать SOCKS 5 прокси довольно просто. Достаточно выполнить команду по следующей схеме:
ssh -f -C2qTnN -D <порт> <удаленный_пользователь>@<удаленный_сервер>
Где
-f
Запросит ssh перейти в фоновый режим только перед выполнением команды.
-C
Включит сжатие всех данных (включая stdin, stdout, stderr и данные для перенаправленных Х11 и TCP/IP соединений).
-2
Принуждает ssh использовать только протокол версии 2.
-q
Тихий режим. Подавляет все предупреждения и диагностические сообщения. Будут отображены только фатальные ошибки.
-T
Отменить переназначение терминала.
-n
Перенаправляет стандартный ввод из /dev/null (фактически, предотвращает чтение из стандартного ввода).
-N
Не выполнять удаленную команду.
-D
[локальный IP : ] порт
Читати далі…
По-умолчанию в Ubuntu включены компоненты платного мониторинга системы Landscape, они в основном и тормозят загрузку (до 2-3 секунд).
Это дело лежит в motd. Если он вам вообще не нужен — берём напильник и выпиливаем:
Перезапускаем sshd
и готово! Теперь логин в систему у нас мгновенный!
Ещё стоит упомянуть о DNSе. При использовании тормознутых DNSов логин в систему может занимать до 30 секунд.
Поэтому в файле /etc/ssh/sshd_config
ещё стоит установить UseDNS no
.
Если хотите, чтобы вообще ничего не выводилось при логине, то можно ещё отключить строчку с датой и IP последнего входа в систему (сообщение “Last Login”).
Для этого необходимо в файле /etc/ssh/sshd_config
установить значение PrintLastLog no
, но я бы не рекомендовал.