ssh тунелювання лише доступ


31

Чи можна налаштувати ssh (на Linux), щоб дозволити доступ лише для тунелювання? Тобто користувач може налаштувати тунелі, але не може отримати файли оболонки / доступу?

Відповіді:


42

Так, просто використовуйте /bin/falseяк оболонку та доручіть користувачеві розпочати процес тунелювання SSH, не виконуючи жодної віддаленої команди (тобто -Nпрапор для OpenSSH):

ssh -N -L 1234:target-host:5678 ssh-host

Гм, якщо користувач не використовує -N, у них є доступ до оболонки. Це дійсно не вирішує проблему і є небезпечним.
mlissner

12
@mlissner: Ні, якщо у вас є /bin/falseоболонка, ви не матимете доступу до оболонки, оскільки кожен сеанс входу буде негайно завершений.
Свен

10

У файл .ssh / autoriziran_keys користувача помістіть щось подібне:

permitopen="192.168.1.10:3306",permitopen="10.0.0.16:80",no-pty ssh-rsa AAAAB3N...

Таким чином, ви, головне, елементи керування знаходилися б перед відкритим ключем ssh користувача, розділеним пробілом. У прикладі з’єднань, що використовують конкретний відкритий ключ, буде дозволено здійснювати переадресацію порту SSH тільки на MySQL-сервер 192.168.1.10 та веб-сервер 10.0.0.16, і не буде призначено оболонку (no-pty). Ви спеціально запитуєте про опцію "no-pty", але інші також можуть бути корисними, якщо користувач повинен лише тунелювати до певних серверів.

Подивіться на головну сторінку для sshd, щоб отримати додаткові параметри для файлу санкціонованих_ ключів .

Зауважте, що досвід користувача може виглядати дещо дивним: коли вони забиваються, це виглядатиме як сеанс зависає (оскільки вони не отримують шкода). Все добре. Якщо користувач вказав переадресацію портів, наприклад, "-L3306: 192.168.1.10: 3306", переадресація порту все ще буде діяти.

У будь-якому випадку, спробуйте.


6
Це небезпечна порада ; no-ptyне перешкоджає доступу до оболонки, вона просто не дає оболонці піти. Він не відображає підказку (тобто "здається, висить"), але ви все одно можете давати команди просто чудово. Вам потрібна command="..."опція, .ssh/authorized_keysякщо ви хочете обмежити доступ до оболонки звідти.
Алексі Торхамо

@AleksiTorhamo вірно, але це початок; Ви також повинні встановити оболонку на / usr / sbin / nologin або / bin / false в / etc / passwd, щоб повністю обмежити оболонку. Я редагував вищезазначений запис, щоб відобразити це, поряд із порадою Алексі.
Джеймісон Бекер

4

Дайте користувачеві оболонку, яка дозволяє лише виходити з системи, такі як /bin/press_to_exit.sh

#! / бін / баш
read -n 1 -p Клавіша "Натисніть будь-яку клавішу для виходу"

Таким чином, він може залишатись увійти в систему, поки захоче, з активними тунелями, але не виконувати ніяких команд. Ctrl-cзакриває з'єднання.


3
Я думаю, що принаймні теоретично, користувач зможе в потрібний момент (між рядками 1 та 2) вдарити CTRL + C і в кінцевому підсумку отримати повну оболонку bash.
andreas-h

2

Призначте оболонку, яка не дозволяє користувачеві входити.

напр

#!/bin/sh
echo "No interactive login available."
sleep 60
exit 0

заважає їм отримати запит на оболонку та дасть їм час на 60 секунд - якщо немає з'єднання активним протягом 60 секунд, він вийде і тим самим повністю відключить їх (збільши кількість відповідно до вимог).

Вони також не можуть виконати віддалену команду, тому що ця оболонка не дозволить їм.


4
Більшість встановлень Linux вже мають щось для цього. / sbin / nologin, або / bin / false або подібне.
Рорі

1
Що б Ctrl-C робив у наведеному вище прикладі?
Ар’ян

Ар'ян: Оскільки сценарій використовується як оболонка, Ctrl-C матиме такий же ефект, як і " logout" у звичайному.
grawity

2
Насправді мені подобається відповідь графа, з опцією "-N", але якщо ви хочете надати своєму користувачеві корисне, доброзичливе, інформативне повідомлення - і зупинити їх у всьому місці залишати з'єднання SSH - тоді користувальницький сценарій приємний і зрозумілий про що це робить.
jrg

2
@jrg Ця дискусія є давньою, і ви, можливо, передумали :) але IMHO небезпечно виходити зі скриптами оболонки ручної роботи. Уже є /sbin/nologin, що ви можете налаштувати за допомогою зручного повідомлення в /etc/nologin.txt.
dr01

0

Моє рішення полягає в тому, щоб надати користувачеві, який може лише тунелювати, без інтерактивної оболонки , встановити цю оболонку в / etc / passwd в / usr / bin / tunnel_shell .

Просто створіть виконуваний файл / usr / bin / tunnel_shell з нескінченним циклом .

Додатково скористайтеся AllowGroupsі Match Groupопцією.

Повністю пояснено тут: http://blog.flowl.info/2011/ssh-tunnel-group-only-and-no-shell-please/


2
Користувач може якось вийти з виконуваного файлу і вийти з оболонки. Ви абсолютно впевнені, що ваш виконуваний файл не дозволить цього зробити?
dr01

2
@ dr01 Якщо чесно, я не впевнений, що це на 100% безпечно. Я думаю, що коли ви виходите з виконуваного файлу, сеанс SSH теж припиняється. Я вивчу це більше і, можливо, ще раз тут прокоментую.
Даніель В.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.