Я впевнений, що для цього є багато рішень, і багато більш надійних, ніж той, який я пропоную. Однак цього може бути достатньо для ваших потреб. Для цього я припускаю, що користувач може виконати автентифікацію на основі ключа ssh (putty або будь-яка unix ssh повинна підтримувати це).
Додайте користувача, як зазвичай ("adduser" або будь-який інший інструмент)
Створіть користувачів .ssh dir та .ssh / Author_keys
your_user $ sudo -Hu ssh_forwarder /bin/bash
ssh_forwarder $ cd ~
ssh_forwarder $ mkdir .ssh
ssh_forwarder $ ( umask 066 && cat > .ssh/authorized_keys ) <<EOF
no-agent-forwarding,no-X11-forwarding,command="read a; exit" ssh-rsa AAAB3NzaC1y....2cD/VN3NtHw== smoser@brickies
EOF
- Вимкнути доступ до пароля до цього облікового запису.
your_user $ sudo usermod --lock ssh_forwarder
Тепер єдиний спосіб, коли користувач може потрапити у вашу систему, це через доступ до відповідного ключа ssh, і ssh запустить "/ bin / bash -c 'read a" "для них, незалежно від того, що вони намагаються запустити. 'read a' буде просто читати до появи нового рядка, і тоді оболонка вийде, тож користувачеві достатньо натиснути «enter», щоб перервати з'єднання.
Є багато інших речей, які ви можете зробити в команді =. Перегляньте man authorized_keys
та знайдіть „команду“ для отримання додаткової інформації.
Якщо вам не подобається, що натискання клавіші вбиває з'єднання, ви можете використати щось на зразок наступного для запису 'command =':
command="f=./.fifo.$$ && mkfifo $f && trap \"rm -f $f\" EXIT && read a <$f && echo $a; exit;"
Це просто створює тимчасову фіфо в домашньому каталозі користувачів, а потім намагається прочитати з неї. Нічого не буде писати у цей файл, тому це буде зависати нескінченно. Крім того, якщо ви хочете насильно припинити це з'єднання, ви можете зробити щось на кшталт:
your_user$ echo GOODBYE | sudo tee ~ssh_forwarder/.fifo.*
Для цього слід використовувати дуже мало ресурсів, і нічого не повинно бути помилковим у тому сценарії, який не закінчився б закінченням оболонки.
sleep 1h; echo You have been here too long. Good bye.
Я не бачив, як ви можете дозволити користувачу віддалено вперед ( ssh -R
), але обмежити ( ssh -L
). Можливо, може бути використаний «дозвіл на відкриття». Гуглінг не дуже допомагав. Здавалося б, було б корисно дозволити щось на кшталт "без переадресації порту, позволення перегляду = 10001" ssh -R 6901:localhost:6901
.
Це рішення. Це, безумовно, можна покращити, і будь-яке відкриття віддалених портів слід ретельно перевірити. Якщо моєю метою було дозволити моїй бабусі підключитися до моєї локальної мережі, щоб я міг використовувати vnc для перегляду її екрана, а доступ до цих клавіш був обмежений нею, я особисто відчував би себе в безпеці. Якби це було для підприємства, було б необхідне більш ретельне розслідування. Одне, що потрібно пам’ятати, - це не вимагати оболонки взагалі, тому код 'command =' не виконується.ssh -N
Інші, можливо, більш безпечні механізми можуть включати створення користувальницької оболонки для користувача та навіть блокування цієї програми за допомогою apparmour.