Как защитить сервер Linux от копирования?

Имеется PC с установленной Linux CentOS 8. На нем развернут LAMP с коммерческим проектом на PHP. PC будет позднее установлен на территории клиента и будет приносить клиенту деньги. Тонкости - проект может работать без интернета, на локальной сети.

Задача: сделать так, чтобы проект был недоступен для клиента, он не мог его скопировать или запустить вторую копию этого проекта на другом объекте. Сам проект работает как web-сервер, вход пользователя ему не нужен. Схема - включил PC и все работает.

Какие варианты были уже рассмотрены:

  1. Вариант проверки в коде серийного номера SSD. Ломается легко - вынимается SSD, открывается на другом PC, находится проект на PHP, находится проверка серийного номера, удаляется, проект работает на любом SSD.
  2. Защита на уровне ОС, пользователь с неизвестным клиенту паролем. Ломается выниманием SSD из PC и запуском на другом PC, далее SSD открывается на чтение, разбирается код на PHP и делается копия проекта
  3. Шифрование диска на уровне ОС. Для работы нужно ввести пароль, без пароля ОС не запускается. Решение тупиковое - клиенту нельзя давать пароль, а без пароля ничего не работает. Если дать пароль - то все пропало.
  4. Обфусцирование/шифрование кода. Ничего не дает, проект работает на одном PC, клиент просто делает копию и получает второй работающий проект с зашифрованным и обфусцированным кодом. Обфусцирование и шифрование части кода с проверкой лиценции также ничего не дает, отлично находится и исключается.

В итоге упорно ищу способ сделать PC с SSD, который работает только в такой конфигурации, и никак иначе. Даже думали над установкой аппаратных пломб или ключей на USB, но снятие SSD и копирование/разбор информации на нем ставят крест на любых проверках.

Буду очень благодарен за указание на готовое решение, или за любые мысли о том, как это можно сделать.


Ответы (1 шт):

Автор решения: Sheridan

Если есть доступ к диску, то практически никак. Тем более для php. Диск можно склонировать, из php кода (даже обфусцированного) можно вырезать проверку. Единственное что можно попробовать сделать - взять исходники модуля работы с выбранной БД (например), встроить туда проверку идентификатора машины и, собственно, захардкодить туда предварительно сгенерированный идентификатор. Ну и вызывать проверку при подключении к БД. Соответственно, поставлять модуль вместе с сайтом. Ну и поддерживать его придётся тоже, да.

→ Ссылка