Как разрешить ssh пользователю root только из локальной сети?

38

Я установил Google-Authenticator на компьютере с CentOS 6.5 и настроил некоторых пользователей на предоставление OTP.

Во время редактирования /etc/ssh/sshd_configя увидел директиву " PermitRootLogin", которая закомментирована по умолчанию.

Я хотел бы установить " PermitRootLogin no", но по-прежнему иметь возможность ssh к компьютеру от имени пользователя root только из локальной сети.

Это возможно?

Итай Ганот
источник
5
Никогда не делай этого. SSH в качестве ваших пользователей, затем используйте sudo для повышения разрешений. Сделайте это так, чтобы он оставил бумажный след, и вы будете знать, какая учетная запись была взломана.
SnakeDoc
3
@SnakeDoc: Это одна школа мысли, но она не ясна, и я бы сказал, что все наоборот. sudo - это огромная сложная атака, которую я никогда не хотел бы устанавливать. SSH pubkey auth - намного меньшая поверхность атаки. Любой из них может быть зарегистрирован, но регистрация не очень полезна, когда пользователь (root) может редактировать или удалять журналы, что всегда имеет место, если вы не входите во внешнее хранилище только для добавления.
R ..
1
@R .. Если вы правильно настроили sudoers, используя принцип наименьших привилегий, описанные вами проблемы в основном не являются проблемой. Ни один пользователь не должен иметь возможность входить в систему и sudo - suвходить в систему по ssh или делать то, что не нужно его пользователям (в sudoers вы используете белый список для команд). Если вам нужен root, вы должны физически находиться на консоли - т.е. Root over SSH никогда не должен быть разрешен ... ключи или нет.
SnakeDoc
1
@ SnakeDoc: Вы ошибаетесь. Sudo имеет как свои собственные сложные поверхности атаки, так и фундаментальную сложную поверхность атаки, которая присуща тому, чтобы быть suid-двоичным файлом, в форме всех состояний, которые наследуются через execve. В некоторых случаях ошибка в самой программе suid (suid) даже не нужна; ошибок в базовой инфраструктуре, такой как динамический компоновщик (например, CVE-2010-3856), может быть достаточно.
R ..
1
@R .. Вы предполагаете, что всегда будете знать, если ключ просочился. Это чертовски предположение. Кроме того, один раз, ваш злоумышленник имеет права root. Еще лучше отправить их через непривилегированную учетную запись и заставить их подняться до root. Таким образом, у вас есть ключ, который должен быть пропущен, ключевая фраза для взлома, а затем обычный пароль учетной записи пользователя для взлома. И если злоумышленник пройдет через все это ... он ничего не сможет сделать, потому что этот пользователь настроен на работу с sudoers с очень ограниченными возможностями ... Видите преимущество сейчас? Не разрешать прямой root-вход через ssh ... period. Это хорошая гигиена
SnakeDoc

Ответы:

54

Используйте Matchпараметр config в /etc/ssh/sshd_config:

# general config
PermitRootLogin no 

# the following overrides the general config when conditions are met. 
Match Address  192.168.0.*
    PermitRootLogin yes

Видеть man sshd_config

Свен
источник
Почему я не подумал об этом? Спасибо друг
Итай Ганот
8
Вы также можете ограничить источник ключей аутентификации в ~root/.ssh/authorized_keys. Префикс с ключом from="192.168.0.0/24 ".
BillThor
9
Я хотел бы изменить его, чтобы также разрешить локальные адреса IPv6. То, как локальные адреса ссылок работают в IPv6, делает их очень устойчивыми к неверно настроенным сетям. Это означает, что если вам нужно подключиться по ssh для исправления неправильной конфигурации сети, возможно, что использование локального IPv6-адреса канала - это единственный оставшийся вариант.
Касперд
К вашему сведению, если вы дополнительно используете директиву AllowUser , вы должны дополнительно (и нелогично) также это сделатьAllowUser root
Роберт Ридл
14

Этот Match addressметод уже упоминался, но вы также можете ограничить пользователей (или группы), которым разрешено входить в систему. Например, чтобы ограничить вход в систему для пользователя itai(из любого места) и root(из определенной сети), используйте:

AllowUsers itai root@192.168.0.*

Это препятствует тому, чтобы все другие пользователи (как apache) входили через SSH.

Смотрите также AllowUsersключевое слово в руководстве sshd_config (5) .

Lekensteyn
источник
4
Я предпочитаю AllowGroupsдобавлять всех пользователей, которые должны иметь возможность войти в систему, используя SSH, к определенной группе. Думаю, это дело вкуса, но это похоже на меньшее редактирование sshd_config (что приводит к меньшему риску испортить и заблокировать всех).
CVn
1
@ MichaelKjörling Кроме того, AllowGroups означает, что вам не нужны разрешения на редактирование для sshd_config, если ваша команда расширяется или сжимается. Это может даже позволить большему количеству управленческих типов или молодых специалистов сделать это.
Nzall
Хорошие моменты, обратите внимание, что вы можете комбинировать варианты, иметь AllowUsers itai root@192.168.0.*и, AllowGroups ssh-usersи вы не будете случайно вызывать локаут в случае, если стажер случайно очищает группу :)
Лекенштейн