<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416545&amp;view=findpost&amp;p=3818881</guid>
        <pubDate>Tue, 21 Jan 2020 08:25:55 +0000</pubDate>
        <title>вопрос по питону и докеру</title>
        <link>https://forum.sources.ru/index.php?showtopic=416545&amp;view=findpost&amp;p=3818881</link>
        <description><![CDATA[Wound: Пожалуйста. Если что то не будет понятно, пиши. В принципе я с этим работал, но довольно давно - около года, двух назад, детали не помню, но общую картину представляю.]]></description>
        <author>Wound</author>
        <category>Python</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416545&amp;view=findpost&amp;p=3818880</guid>
        <pubDate>Tue, 21 Jan 2020 08:24:36 +0000</pubDate>
        <title>вопрос по питону и докеру</title>
        <link>https://forum.sources.ru/index.php?showtopic=416545&amp;view=findpost&amp;p=3818880</link>
        <description><![CDATA[доктор Рагин: спасибо&#33;]]></description>
        <author>доктор Рагин</author>
        <category>Python</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416545&amp;view=findpost&amp;p=3818874</guid>
        <pubDate>Tue, 21 Jan 2020 07:31:09 +0000</pubDate>
        <title>вопрос по питону и докеру</title>
        <link>https://forum.sources.ru/index.php?showtopic=416545&amp;view=findpost&amp;p=3818874</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416545&view=findpost&p=3818873'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>доктор Рагин &#064; <time class="tag-quote__quoted-time" datetime="2020-01-21T07:16:44+00:00">21.01.20, 07:16</time></span><div class='quote '>Как запрещать в контейнерах докер операции с файловой с-мой?</div></div><br>
докер контейнер, это такая приблуда, позволяющая выполнять другие программы внутри изолированного окружения. Другими словами, докер-контейнер, это маленькая виртуальная линукс система с очень ограниченными(только то, что нужно для работы приложения), возможностями. Т.е. все что произойдет в нем плохого, пострадает только сама докер машина. Т.е. ее можно будет в случае чего снести и заного поставить, если все правильно настроить, то займет это время примерно столько же, сколько на установку обычной программы.<br>
В твоем случае, нужно поднять докер, развернуть там питон, и сделать ее видимой наружу(например через реверс прокси, у того же nginx есть такая возможность). Все. <br>
Сделат веб интерфейс, который например при нажатии на кнопку &quot;Создать новый скрипт&quot; ну или при открытии веб интерфейса - будет генерировать уникальное имя файла(тем же питоном это можно сделать), сохранять его на диск, дальше когда пользователь напишет скрипт в окне браузера, я бы просто тем же питоном для начала фильтровал этот файл/или даже сам скрипт(например на наличие слова os или import os) обычной регуляркой, затем если ничего такого не найдено - выполнял бы скрипт и выдавал его результат обратно. Еще можно почитать доку по самому питону, возможно там есть встроенные средства выполнения, которые отключают модуль os при интепретации скрипта. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2020-01-21T07:33:29+00:00">21.01.20, 07:33</time></span></span><br>
Вот тут в холиварах я создавал тему про докер контейнеры, там есть некоторые интересные ссылки, которые можно почитать и ознакомиться как с ним работать -&gt; <a class='tag-url' href='https://forum.sources.ru/index.php?showtopic=414099' target='_blank'>DockerContainer vs остальное</a><br>
По первой ссылке в первом же посте, есть хорошая статья на хабре для ознакомления с тем что такое докер контейнер и как с ним работать, ну и советовал бы остальные тоже просмотреть, возможно что то интересное встретится.<br>
Если разрабатываешь под Linux&#39;ом - то там докер уже встроенный, единственное для удобного деплоя я бы еще обязательно установил docker-compose, по умолчанию он не установлен в Linux&#39;е, он здорово упрощает создание докер образа и его деплой. По сути оди нраз написал, а дальше инсталяция проходит в 1 клик. Без docker-compose придется либо руками настраивать постоянно ну и деплоить - путем написания длинных строчек для команды ( в зависимости от настроек ), ну либо писать опять же скрипт на чем то другом. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2020-01-21T07:42:28+00:00">21.01.20, 07:42</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416545&view=findpost&p=3818874'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2020-01-21T07:31:09+00:00">21.01.20, 07:31</time></span><div class='quote '>Сделат веб интерфейс, который например при нажатии на кнопку &quot;Создать новый скрипт&quot; ну или при открытии веб интерфейса - будет генерировать уникальное имя файла(тем же питоном это можно сделать), сохранять его на диск, дальше когда пользователь напишет скрипт в окне браузера, я бы просто тем же питоном для начала фильтровал этот файл/или даже сам скрипт(например на наличие слова os или import os) затем если ничего такого не найдено - выполнял бы скрипт и выдавал его результат обратно. Еще можно почитать доку по самому питону, возможно там есть встроенные средства выполнения, которые отключают модуль os при интепретации скрипта.</div></div><br>
Ну либо еще можно запретить модифицировать файлы в определенной папке, но разрешить им выполняться. Это можно сделать на уровне докер образа(т.к. это по сути изолированная система Linux).<br>
Делается это командой <a class='tag-url' href='https://ru.wikipedia.org/wiki/Chmod' target='_blank'>chmod</a> например на папке, которая является рутовым каталогом для твоего веб сайта.<br>
В твоем случае это будет наверное что то типа: <br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">chmod -R 755 my_web_python_catalog</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '><br>
755 (-rwxr-xr-x)<br>
Каждый пользователь имеет право читать и запускать на выполнение; владелец может редактировать<br>
</div></div> <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2020-01-21T07:44:44+00:00">21.01.20, 07:44</time></span></span><br>
С помощью <a class='tag-url' href='https://ru.wikipedia.org/wiki/Chown' target='_blank'>chown</a> можно установить владельца. например там:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&nbsp;chown DoctorRagin my_web_python_catalog</div></ol></div></div></div></div> <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2020-01-21T07:56:47+00:00">21.01.20, 07:56</time></span></span><br>
А, еще - сделать запрет модификации каталога на уровне файловой системы докер образа, и дать права только на чтение и выполнение(с помощью chmod), можно либо при сборке докер образа(там можно создавать любые каталоги и давать им сразу права, можно заранее сделать структуру каталогов и выдать права), либо прямо после деплоя зайти на докер образ и внутри выставить ему необходимые права на каталог. Но тогда не будет возможности сохранять скрипты  :-? <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2020-01-21T08:10:24+00:00">21.01.20, 08:10</time></span></span><br>
Если не знаешь с чего начать, то я бы на твоем месте начал бы со следующего:<br>
1) Сначала бы на локальную машину поставил бы питон. <br>
2) Сделал примитивный сайт-страницу с полем для ввода и кнопкой выполнить.<br>
3) Серверной части сайта передавал написанный в поле ввода скрипт питону(например с помощью ajax посылать контроллеру, либо прям на питоне и писать, посмотреть в сторону шаблонизаторов каких то или там микрофреймворков, тот же Flask на питоне взять, раз у тебя уже питон идет с системой), и возвращал бы результат в браузер.<br>
<br>
4) Когда эта часть будет закончена, у тебя получится веб-сайт со своим окружением. Вот потом его просто запихиваешь в докер образ, делаешь его видным извне, далее проверяешь что все работает в докер образе.<br>
5) Потом уже экспериментируешь как тебе ограничить возможность работы с файловой системой через питон. Это либо регулярка на питоне, либо задание прав утилитой chmod на каталоге. chmod - проще и быстрее, регулярка гибче, и имеет больше возможностей.<br>
<br>
В принципе если так подумать, тут работы на день.]]></description>
        <author>Wound</author>
        <category>Python</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416545&amp;view=findpost&amp;p=3818873</guid>
        <pubDate>Tue, 21 Jan 2020 07:16:44 +0000</pubDate>
        <title>вопрос по питону и докеру</title>
        <link>https://forum.sources.ru/index.php?showtopic=416545&amp;view=findpost&amp;p=3818873</link>
        <description><![CDATA[доктор Рагин: Здравствуйте, коллеги&#33; У меня вопрос:<br>Сделать Web-сайт. В браузере вводить текст программы на Python и нажимать кнопку &lt;Выполнить&gt;. Программа должна выполниться на сервере в отдельном Docker-контейнере. Причем надо запретить все файловые операции в этой программе (import os). Результат выполнения программы надо возвращать в браузер. Может вы мне подскажете как это сделать? Как запрещать в контейнерах докер операции с файловой с-мой?]]></description>
        <author>доктор Рагин</author>
        <category>Python</category>
      </item>
	
      </channel>
      </rss>
	