“Виртуальная” оболочка, т.е. заключение в тюрьму пользователя в процессе после (SSH) вход в систему

SDL в порядке, но необходимо также попробовать СПЕЦИЮ. Проверьте страницу Википедии для большего количества информации также.

4
10.02.2019, 21:12
3 ответа

После обновленной информации Вы должны сделать, чтобы они сделали частных/с открытым ключом пар и в .ssh/authorized_keys файл установил его, чтобы только выполнить script.php файл. Вы не должны полагаться .bashrc для защиты, тем более, что это необходимо для инициализации среды.

6
27.01.2020, 20:48
  • 1
    Используя 'команду' там действительно походит на хорошее решение (другой, я не думал о...). Я буду давать ему попытку и видеть, сталкиваюсь ли я с какими-либо проблемами. Я никогда не использовал его, хотя - я предполагаю, что различие было бы то, что использование этого полностью обойдет удар и запустит мой скрипт (или независимо от того, что команда может быть), непосредственно после входа в систему? –  alkor 06.11.2012, 22:55
  • 2
    Протестированный это и это работают как очарование. И это также гибко, поскольку это позволяет мне легко передавать различные параметры сценарию, в зависимости от которого ключ используется для входа в систему. Чтобы подробно остановиться на ответе, сказала, строка (строки) в authorized_keys мог бы начаться как это command="/usr/bin/php /some/path/script.php --user someone" ssh-rsa AAAAB3NzaC... –  alkor 07.11.2012, 00:54
  • 3
    хороший ответ. Я мог бы изменить свое решение для сценария чего-то подобного Вашему для наблюдения этой работы вместо изменения :) –   10.05.2014, 21:06

Можно изменить оболочку для рассматриваемого пользователя к тому, в чем Вы любите в последнем поле на соответствующей строке /etc/passwd, например:

specialuser:x:12345:123::/home/specialuser:/usr/bin/restricted_script.php

если Вы включаете соответствующий удар хеша (например. #!/usr/bin/php на первой строке сценария), это должно работать правильно далеко. Из соображений безопасности я рекомендовал бы не поместить сценарий в каталог, записываемый пользователем.

4
27.01.2020, 20:48
  • 1
    Это было первой вещью, которая прибыла по моему мнению, прежде чем я даже рассмотрел задавание этого вопроса. Однако с этим подходом это действительно по существу зависает на входе в систему SSH. Вполне откровенно я не понимаю внутренности, но я предполагаю, что это - понятное рассмотрение, что сценарий не является законченной оболочкой входа в систему, таким образом, это не имеет никакого способа иметь дело с логинами, тем более, что я использую pub/priv ключи. –  alkor 06.11.2012, 23:55
  • 2
    В зависимости от того, как Ваш pam и ssh настроены, сценарий, который Вы указываете, поскольку оболочка входа в систему, вероятно, должна быть перечислена в /etc/shells (через его полный путь). Что говорит ssh, пытаетесь ли Вы войти в verbosely? (Кроме того, я сделал это в прошлом путем определения сценария в .ssh/authorized_keys, поскольку @sparticvs говорит в другом ответе, а не в /etc/passwd. Я ожидаю, что необходимо смочь заставить последний метод работать также, все же.) –  dubiousjim 07.11.2012, 00:24
  • 3
    Мои извинения, ответ действительно также функционален, даже не указывая оболочку в/etc/shells в моем случае. Я добирался, 'сервер отказался от нашего ключевого' сообщения, но беглый взгляд в подлинный журнал сказал мне, что сценарий является 'просто' не исполняемым файлом. Другая глупая ошибка, просто потому что я обычно выполнял его через интерпретатор непосредственно, не используя хижину. Однако я действительно предпочитаю путь @sparticvs по причинам, упомянутым в комментариях. В любом случае - спасибо, это помогло мне лучше понять внутренности входа в систему. –  alkor 07.11.2012, 01:20

Самый простой путь состоял бы в том, чтобы поместить sth как это в .bashrc

php script.php
exit

После того, как выполнение оболочки script.php выйдет из сессии.

Но трудно сказать, что точно необходимо сделать и как уровень безопасности Вам нужно.

0
27.01.2020, 20:48
  • 1
    Этот ответ заставил меня чувствовать себя глупым, но он действительно решает проблему, так спасибо!:) Безопасность, кроме универсальной безопасности системы, имеет меньшие (чтобы не не говорить "ни один вообще") беспокойство, как я заявил в комментарии выше. По существу пользователь ничего не может сделать кроме того, что позволяет сам сценарий, и я хотел оставить сценарий как можно большей гибкостью (таким образом никакой jailkits) и осуществить любые ограничения на уровне PHP. –  alkor 06.11.2012, 22:33
  • 2
    Лучше должен был бы поместить просто exec php script.php в Вашем .bashrc. Затем bash процесс будет заменен полностью, вместо того, чтобы сидеть без дела, поднимая ресурсы, в то время как сценарий PHP работает. –  Jim Paris 06.11.2012, 22:55
  • 3
    Протестированный оба теперь. Одна проблема, которую я нашел с подходом в ответе, - то, что я должен был явно захватить sigint, т.е. trap "exit" 2 php script.php exit ... иначе ^C отложил бы меня в ударе (и очевидно я не могу обработать сигнал в сценарии для выхода из чего-то вне его объема). Нет такой проблемы с кодом @JimParis так, чтобы был бы лучший выбор, также рассмотрев упомянутое использование ресурсов. –  alkor 07.11.2012, 00:10
  • 4
    @alkor - Поскольку я сказал, что это была самая простая вещь, которая прибывает по моему мнению :) О ^C - после выходящей программы таким образом окружают, выполнит следующую команду, таким образом, это выйдет правильно, неважно, как 'php script.php' заканчивается. Я неправильно об этом? –  Mateusz W 07.11.2012, 12:08
  • 5
    @MateuszW - Ну, да, это вышло бы из сессии правильно, если бы сценарий закончился самостоятельно (независимо от кода выхода), и это также работает на ^D (EOF). Sigint прерывает цепочку обработки полностью, однако, таким образом, выход никогда не называют. –  alkor 07.11.2012, 15:05

Теги

Похожие вопросы