@wtfowned

Как скрыть PHP код на сервере при условии что надо его править?

Добрый день!

Есть PHP скрипты, классы, конфиги. Все это добро взаимосвязано, мне нужно дать доступ к серверу человеку чтобы он работал (запускал под рутом) с этими скриптами, при этом меняя только файлы конфигов, и чтобы не было возможности посмотреть исходный код.

Нашел разные обсфукаторы бесплатные превращающие код в нечто такое
<?php include(base64_decode('Li4vY29uZmlnLnBocA=='));include(base64_decode('cHJpdmF0ZS92ZW5kb3IvYXV0b2xvYWQucGhw'));$krc_5bf7f45b=[];foreach($bhi_6f9322e1as $xol_e8b7be43){$xol_e8b7be43=explode(base64_decode('Og=='),$xol_e8b7be43);try{$uic_c59361f8=new \xee_d9cb1642\cko_659fc60();$uic_c59361f8->ldc_aa08cb10($xol_e8b7be43[0],$xol_e8b7be43[1]);$krc_5bf7f45b[]=$uic_c59361f8;}catch(Exception $wky_efda7a5a)


1. Как быть, если файлы конфигов имеют названия переменных и получается что при обсфукации основного рабочего кода переменные имеют другие названия? Не заставлять же каждый раз пользователя прогонять через обсфукацию поправленный конфиг? Пока что такой вариант видится единственным.

2. Есть ли возможность внутри сервера под Ubuntu как-то ограничить возможность копирования или просмотра или скачивания определенных файлов или сделать какие-то другие методы защиты-скрытия, но при этом с возможность запуска этого кода. Была мысль спрятать код где-нибудь в недрах папок файловой системы, обозвав рандомными названиями, а запускать как-нибудь через симлинки по названию файлов или что-нибудь в таком духе. Возможно ли?

3. Вариант не предоставлять root доступ к серверу, а осуществлять запуск через браузер, дать доступ только к FTP для заливки конфига в отдельную папку. Но тут есть ряд моментов - все скрипты выполняются вплоть до недели, и должны быть выполнены под root. Как это решить?
  • Вопрос задан
  • 1874 просмотра
Пригласить эксперта
Ответы на вопрос 5
Щас предложу вариант, без конкретики но суть вы уловить должны, во первых, если надо править конфиги, вам не обязательно давать доступ к серверу, эти конфиги вы можете сделать редактируеми через какую нибудь веб морду, что касается запуска приложений, вы можете так же сделать пару кнопок, нагардив веб сервер соответствующими правами. Зачем давать доступ рута?
Ответ написан
@Sowander
От рута не спрятаться
1. Даем другого юзера клиенту
2. Пишем новый скрипт который на действия юзера. создает какойнить файлик в системе
3. В основной скрипт добавляем условие проверки существования файлика и удаления при успешном/неуспешном выполнении скрипта.
4. ставим основной скрипт на выполнение в крон каждую минуту из под рута
Ответ написан
Комментировать
@rPman
К сожалению в общем случае если вам нужно запускать скрипты под рутом, то злонамеренный программист может в конфигурационных файлах вставить свой код, который просканирует компьютер на наличие других файлов и скопирует их для изучения в каталог с доступом (или отправит по сети).

Если запускаемое приложение может работать без доступа к сети, то можно делать запуск в контролируемом окружении (виртуальная машина или lxc/docker контейнер), пусть он там что угодно делает, по окончании работы забираем ожидаемый результат и откатываем изменения.

p.s. есть способ, если все файлы проекта, которые вы хотите скрыть, не хранятся на компьютере совсем, а подгружаются через пайпы или перенаправления stdin с другой машины (по ssh например), все интерпретаторы позволяют это делать с помощью ключей командной строки... это не даст абсолютной защиты но сильно усложнит жизнь злоумышленнику, так как для изучения ему понадобится анализировать дампы памяти.
Ответ написан
Комментировать
@hewlett-pacific
Фреймворки дают механизмы относительно безопасного олицетворения, а вот в сыром php придется поизвращаться. Идея такая:
1) Создаем bash-скрипт, в котором через sudo даем привелегии.
2) Запускаем bash-скрипт с помощью exec().
3) Делаем то, что нужно.
4) Отзываем привилегии.
Вообще, имперсонации такого рода вызывают много вопросов безопасности, тем более на php. Может лучше в сторону демонов посмотреть?
Ответ написан
Комментировать
@metajiji
На вкус и цвет по вашим возможностям и степени паранои вот варианты:
Selinux/Apparmor
Docker/lxc/systemd-nspawn
KVM/VirtualBOX/etc
Chroot/cgroups/chroot+cgroups
Так же не забываем про простые вещи типа open_basedir

По опыту скажу, что сейчас обернуть это в контейнер проще простого, тот же systemd есть везде.
Если боитесь контейнеров, сделайте chroot и для верности помажьте сверху cgroup (получите +- тот же контейнер) ну и конечно же всегда есть kvm но это оверкилл, зато просто и надёжно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы