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

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

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

account required pam_access.so

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

-:root:ALL EXCEPT IPADDRESS

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

11 ответов

В /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-адреса.

Это только мое мнение, но лучший подход - войти в систему как обычный пользователь, а затем войти в систему как root. Чтобы получить доступ к root, кому-то понадобится как ваш пароль пользователя, так и пароль root. Таким образом, ваша учетная запись обычного пользователя должна быть в группе admin или wheel, в зависимости от того, какой дистрибутив 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

#% РАМ-1,0

auth include system-auth

требуется учетная запись pam_nologin.so

требуется учетная запись pam_access.so

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

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

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

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

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

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

Прежде всего, разрешите вход в систему root в sshd_config, но разрешите ему только выполнять предопределенный набор команд: put 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 (если вход в систему по-прежнему включен), если нет, просто скопируйте содержимое ~/.ssh/id_rsa.pub в /root/.ssh/authorized_keys файл.

Теперь давайте предположим, что ваш клиент должен работать /root/bin/startup_skynet.sh как root через ssh. Ваш существующий файл author_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 отовсюду.

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

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

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

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

AllowUsers root @ 10.200.0.1

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

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

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

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

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

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

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

Ты пробовал:

-: ALL EXCEPT root:your_ip_address

?

Задавать

PermitRootLogin без пароля

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

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

На "целевой" системе делаем:

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

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

Посмотрите на /etc/hosts.allow и /etc/hosts.deny

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

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

Это, как говорится, мое мнение ниже:

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

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

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

PermitRootLogin no
PasswordAuthentication no

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

Другие вопросы по тегам