Ограничить 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. Надеюсь это поможет.
Задавать
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 для входа в систему, вместо этого используя открытый ключ только из "разрешенной" системы для доступа к нему.
Умы похожи на парашюты, только потому, что вы потеряли свой, не означает, что вы одолжили мой...
Я люблю дискуссии вокруг безопасности, все думают, что их путь - единственный путь. Вот что вы делаете, сделайте шаг назад, посмотрите на свою инфраструктуру, рассмотрите точки доступа, а затем создайте модель, которая обеспечит вам достаточную безопасность, чтобы вам не пришлось особо беспокоиться об этом.
Это, как говорится, мое мнение ниже:
входя в систему как root откровенно, глупо. Просто нет причин делать это... так что не делайте этого. Для пользователей с достаточными правами доступа sudo для root убедитесь, что ваша система настроена должным образом. Аутентификация по паролю, отключите ее, используйте только SSH-ключи.
С доверенных хостов ограниченное число /32 адресов, которые входят в систему под вашей учетной записью пользователя, не должны требовать ничего, кроме вашего ключа ssh... от ненадежных хостов, используйте двухфакторную аутентификацию. Имя пользователя / пароль... + 6-8 смена номера каждые 30 секунд...
ПРИМЕЧАНИЕ. Эту настройку можно выполнить, установив в sshd_config:
PermitRootLogin no
PasswordAuthentication no
Проверьте Google-Authenticator, он очень прост в настройке и настройке, и делает работу просто отлично. Как и RSA или любая другая двухфакторная установка, у Google есть приложение для android и iphone, так что его легко и просто настроить. А при подключении с ненадежных хостов пароли будут разрешены, если двухфакторная аутентификация настроена правильно.