Як дозволити ssh викорінювати користувача лише з локальної мережі?


38

Я встановив Google-аутентифікатор на машину CentOS 6.5 і налаштував певних користувачів на надання OTP.

Під час редагування /etc/ssh/sshd_configя бачив директиву, PermitRootLoginяка коментується за замовчуванням.

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

Це можливо?


5
Ніколи цього не роби. SSH, як ваші користувачі, а потім використовуйте sudo для підвищення дозволів. Зробіть це так, щоб він залишив паперовий слід, і таким чином ви дізнаєтесь, який обліковий запис було порушено.
SnakeDoc

3
@SnakeDoc: Це одна школа думок, але це не чітко, і я б стверджував протилежне. Судо - це величезна складна атакова поверхня, і не те, що я б хотів коли-небудь встановити. SSH pubkey auth є значно меншою поверхнею атаки. Можна входити в журнал, але журнал не дуже корисний, коли користувач (root) може редагувати або видаляти журнали, що завжди має місце, якщо ви не увійдете у зовнішнє сховище, додане лише для додавання.
R ..

1
@R .. Якщо правильно налаштувати sudoers, використовуючи принцип найменшого привілею, ці описані вами проблеми здебільшого не є проблемою. Жоден користувач не повинен мати змогу вступити в sudo - suкорінь або вступити або виконувати все, що їх користувачам не потрібно (у судорах ви використовуєте білий список для команд). Якщо вам потрібен корінь, ви повинні фізично бути біля консолі - тобто. Корінь через SSH ніколи не повинен бути дозволений ... ключі чи ні.
SnakeDoc

1
@SnakeDoc: Ви помиляєтесь. Судо має як власні складні поверхні атаки, так і фундаментальну складну поверхню атаки, яка властива двійковій інформації, у вигляді всього стану, що успадковується через execve. У деяких випадках помилка в самій програмі suid (suid) навіть не потрібна; помилок в базовій інфраструктурі, такі як динамічний лінкер (наприклад, CVE-2010-3856), може бути достатньо.
Р ..

1
@R .. Ви припускаєте, що ви завжди будете знати, якщо ключ просочився. Це одна біса припущення. Крім того, потрапивши до вашого, зловмисник має кореневі привілеї. Ще краще надіслати їх через непривілейований рахунок і змусити їх піднятись до root. Таким чином у вас є ключ, який потрібно просочити, ключову парольну фразу, яку потрібно зламати, а потім звичайний пароль облікового запису користувача, який потрібно зламати. І якщо зловмисник переживає все це ... вони нічого не можуть зробити, тому що цей користувач налаштований під судори з дуже обмеженими можливостями ... Бачите вигоду зараз? Не дозволяти прямого входу в корінь протягом ssh ... періоду. Це хороша гігієна
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, роблять їх дуже надійними для неправильно налаштованих мереж. Це означає, що якщо вам потрібно ввімкнути скриньку, щоб виправити помилкову конфігурацію мережі, можливо, використання єдиного варіанту використання локальної адреси IPv6 є єдиним параметром.
kasperd

FYI Якщо ви додатково використовуєте директиву AllowUser , вам доведеться також (і контр-інтуїтивно) також робитиAllowUser root
Роберт Ридл,

14

Match addressМетод вже згадувався, але ви також можете обмежити користувач (або групи), які дозволені для входу на систему. Наприклад, обмежити вхід для користувача itai(з будь-якого місця) таroot (з певної мережі), використовуйте:

AllowUsers itai root@192.168.0.*

Це заважає всім іншим користувачам (наприклад apache) входити через SSH.

Дивіться також AllowUsersключове слово у посібнику sshd_config (5) .


4
Я віддаю перевагу AllowGroupsта додаю всіх користувачів, які повинні мати можливість увійти за допомогою SSH до певної групи. Здається, справа в смаку, але це здається меншим редагуванням sshd_config (що означає менший ризик зіпсувати і заблокувати всіх).
CVn

1
@ MichaelKjörling Також AllowGroups означає, що вам не потрібні дозволи на редагування для sshd_config, якщо ваша команда розширюється або скорочується. Це може навіть дозволити більше управлінських типів чи інтернів.
Nzall

Хороші моменти, зауважте, що ви можете комбінувати варіанти, є, AllowUsers itai root@192.168.0.*і AllowGroups ssh-usersви не випадково
викличете
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.