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

Ограничить root ssh для всех, кроме одного IP / имени хоста

Я хочу ограничить вход в систему root ssh со всех IP-адресов, кроме одного.

У меня создалось впечатление, что мне просто нужно было добавить это в /etc/pam.d/sshd:

account required pam_access.so

и это в /etc/security/access.conf:

-:root:ALL EXCEPT IPADDRESS

но, похоже, это не работает.

В / etc / ssh / sshd_config

# Disable Root login
PermitRootLogin no
#
# [ . . . ]
#
# At the end of the file, add:
#
# Allow Root Login via Key from Admin Bastion
Match Address 10.9.8.7
        PermitRootLogin without-password

Зачем вообще разрешать root-доступ по ssh? Согласно закону Мерфи, когда вам понадобится root-доступ, вы будете находиться вдали от утвержденного IP-адреса.

Это только мое мнение, но лучший подход к этому - войти в систему как обычный пользователь, а затем выполнить su как root. Чтобы получить доступ к root, кому-то понадобится ваш пароль пользователя и пароль root. Таким образом, ваша учетная запись обычного пользователя должна быть в группе администратора или колеса в зависимости от того, какой дистрибутив Linux вы используете.

РЕДАКТИРОВАТЬ: для еще более улучшенной безопасности разрешите только предварительную аутентификацию с общим ключом для подключения ssh. Это может быть палкой о двух концах, если вы не работаете на компьютере с необходимым секретным ключом.

Я предполагаю, что это RHEL 5+, и у него есть эта проблема. Те же шаги будут работать для RHEL 4. Уловка, чтобы заставить эту работу на RHEL 5, - это добавить требуемую учетную запись pam_access.so

в /etc/pam.d/sshd на 2-й или 3-й строке. Если вы просто добавите его внизу, это не сработает.

В результате /etc/pam.d/sshd будет выглядеть как ..

# cat /etc/pam.d/sshd

#% PAM-1.0

auth включает system-auth

необходим аккаунт pam_nologin.so

необходим аккаунт pam_access.so

учетная запись включает системную аутентификацию

пароль включает system-auth

сеанс необязательный pam_keyinit.so принудительно отозвать

сеанс включает системную аутентификацию

требуется сеанс pam_loginuid.so

Для создания резервных копий и т. Д. Может потребоваться строгий root-доступ, но это может быть очень опасно. К счастью, прямой root-доступ может быть немного защищен с помощью ssh-ключей и файла authorized_keys.

Прежде всего, разрешите вход root в sshd_config, но разрешите ему выполнять только предопределенный набор команд: положить PermitRootLogin forced-commands-only в / etc / ssh / sshd_config или в другое место, где хранится ваша конфигурация sshd. Это отключает аутентификацию по паролю для root, заставляет его использовать ssh-ключи и даже тогда разрешает только те команды, которые вы определили.

Затем войдите в систему своего клиента, который должен иметь этот прямой root-доступ, и создайте там новый ключ ssh: ssh-keygen -t rsa. Сделайте этот ключ беспарольным, если это необходимо для скриптов.

Затем скопируйте этот недавно созданный ключ ssh на свой сервер с помощью ssh-copy-id -i ~/.ssh/id_rsa.pub root@yourserver (если вход в систему root все еще включен), если нет, просто скопируйте содержимое ~ / .ssh / id_rsa.pub в /root/.ssh/authorized_keys файл.

Теперь предположим, что вашему клиенту нужно запустить /root/bin/startup_skynet.sh как root через ssh. Ваш существующий файл authorized_keys на этом этапе выглядит примерно так:

ssh-rsa FASBFAFfasdföjasfABGVEAGUPEGDJfsadnö2314235dfbösadköjsdfösdklf==

Измените его на

no-pty,no-X11-forwarding,no-agent-forwarding,no-port-forwarding,command="/root/bin/startup_skynet.sh" ssh-rsa FASBFAFfasdföjasfABGVEAGUPEGDJfsadnö2314235dfbösadköjsdfösdklf==

и сохраните его.

Затем попробуйте выполнить от своего клиента что-то вроде ssh root@myserver ls - это должно потерпеть неудачу. Затем продолжайте и выполняйте ssh root@myserver /root/bin/startup_skynet.sh - теперь это должно работать.

Таким образом, прямой вход в систему с правами root может быть намного более безопасным. Поскольку безопасность - это многоуровневая вещь, которую нельзя обеспечить ни одной функцией, вы все равно можете сделать больше. Если у вас есть ограниченное подмножество пользователей, которым необходимо подключиться, вы также можете использовать AllowUsers параметр в sshd_config, чтобы разрешить соединение с предопределенного набора IP-адресов, что-то вроде AllowUsers root@192.168.1.2 root@192.168.1.3 johndoe разрешил бы root от 192.168.1.2 и 192.168.1.3 и johndoe отовсюду.

ты пробовал :

-: ALL EXCEPT root:your_ip_address

?

Вы пробовали две строчки:

+:root:<your_ip>
-:root:ALL

Вы ищете AllowUsers в файл sshd_config (обычно находится в / etc / ssh /). А именно:

AllowUsers root@10.200.0.1

Это позволит только root входить в систему с IP 10.200.0.1 - настройка по умолчанию разрешена для всех пользователей со всех хостов ...

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

Это должно быть возможно в некоторой степени обойти как вариант делает разрешить использование шаблонов подстановочных знаков, согласно странице руководства:

За этим ключевым словом может следовать список шаблонов имен пользователей, разделенных пробелами. Если указано, вход в систему разрешен только для имен пользователей, соответствующих одному из шаблонов. '*' и '?' могут использоваться как подстановочные знаки в шаблонах. Действительны только имена пользователей; числовой идентификатор пользователя не распознается. По умолчанию вход разрешен для всех пользователей. Если шаблон имеет вид USER @ HOST, тогда USER и HOST проверяются отдельно, ограничивая вход в систему для определенных пользователей с определенных хостов.

Тем не менее, YMMV может быть довольно ограничительным. Надеюсь это поможет.

Я бы посоветовал вам использовать Match особенность в sshd_config, и сопоставить с IP (или подсетью).

Это позволит вам также указать разрешенные функции. Например: вы можете сказать, что только пользователи из «внутреннего» набора подсетей могут использовать PasswordAuthentication (и это AllowRoot может поступать только с одного / небольшого диапазона IP-адресов, для которых это требуется).

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

посмотрите /etc/hosts.allow и /etc/hosts.deny

Устанавливать

PermitRootLogin without-password

в sshd_config, а затем вставьте открытый ключ с разрешенной машины в authorized_keys2 в целевой системе.
Если вы не знаете, как это сделать - в «разрешенной системе» сделайте это как root (примите значения по умолчанию и не устанавливайте пароль):

# ssh-keygen -t rsa -b 2048 
# scp /root/.ssh/id_rsa.pub targetsystem:/tmp

В «целевой» системе выполните:

cat /tmp/id_rsa.pub >> /root/.ssh/authorized_keys2
rm -f /tmp/id_rsa.pub

В качестве альтернативы вы можете установить пароль на ключ ssh. Это простое решение, которое запрещает авторизацию пользователя root на основе пароля для входа в систему, вместо этого для доступа к нему используется открытый ключ только из «разрешенной» системы.

Умы подобны парашютам, потому что вы потеряли свой не значит, что вы одолжите мой ...

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

При этом мое мнение ниже:

входить в систему как root откровенно глупо. Для этого просто нет причин ... так что не делайте этого. Для пользователей с достаточными привилегиями sudo для root убедитесь, что ваша система настроена должным образом. Парольная аутентификация, отключите, используйте только SSH-ключи.

С доверенных хостов, ограниченное количество адресов / 32 для входа в систему, поскольку ваша учетная запись пользователя не должна требовать ничего, кроме вашего ключа ssh ... с ненадежных хостов используйте двухфакторную аутентификацию. Имя пользователя / пароль ... + 6-8 смена номера каждые 30 секунд ...

ПРИМЕЧАНИЕ. Эту конфигурацию можно выполнить, установив в sshd_config:

PermitRootLogin no
PasswordAuthentication no

Обратите внимание на Google-Authenticator, его очень легко установить и настроить, и он отлично справляется со своей задачей. Подобно RSA или любой другой двухфакторной настройке, у Google есть приложение для Android и iPhone, так что его легко настроить. А при подключении с ненадежных хостов пароли будут разрешены, если двухфакторная аутентификация настроена правильно.