Игровой хостинг сервера и безопасность

[112350] Следующие три фрагмента оболочки эквивалентны (т.е. они выполняют одно и то же, и вы должны копаться в них, чтобы заметить любой другой эффект):

Все они устанавливают переменную окружения [112771] COLUMNS[112772] на значение [112773]%s[112774] для вызова команды [112775]ps[112776]. В командной оболочке значение [112777]COLUMNS[112778], если таковое имеется, остается таким же, как и раньше. Первый фрагмент выполняет этот эффект через внешнюю программу [112779]env[112780], второй - с использованием чистого синтаксиса оболочки, третий - с помощью сборки оболочки [112781] export[112782] в сочетании с конструкцией [112783](...)[112784] subhell. Это отличается от

, которая устанавливает переменную окружения [112785]COLUMNS[112786] таким образом, что она остается в силе в оставшейся части скрипта, и от

, которая в отличие от других устанавливает только переменную оболочки (которую [112787]ps[112788] не увидит), но не экспортирует [112789]COLUMNS[112790] в оболочку окружения. (Однако, если [112791]COLUMNS[112792] уже присутствовал в окружении, то установлено значение [112793]%s[112794]. )

Программа [112795]env[112796] может выглядеть бесполезной, но она существует

потому что старше конструкции оболочки [113044]VAR=value command[113045];

потому что она полезна в других случаях, например, когда программа запускает другую программу, не проходя через оболочку, и вы хотите установить несколько переменных окружения;

потому что она может работать с системами, которые имеют другую оболочку (e. g. в csh или Windows), если команда [113046]env[113047] доступна и в PATH.

Все конструкции, упомянутые здесь, работают в любой оболочке в стиле Борна/POSIX (sh, ash, bash, ksh, zsh, ...), за исключением нескольких старинных версий оболочки Борна, с которыми вы вряд ли когда-нибудь столкнетесь (и которые никогда не были портированы на Linux или OSX).

Обратите внимание, что [112803]COLUMNS[112804] должен быть числом; [112805]ps[112806] игнорирует его, если он не числовой. Zsh даже отказывается устанавливать [112807]COLUMNS[112808] на нецифровое значение, поскольку по умолчанию он объявляет [112809]COLUMNS[112810] числовой переменной. В программе, которую вы цитируете, [112811]%s[112812] будет заменено на число перед использованием строки в качестве команды оболочки.[112367].

1
25.03.2014, 07:30
2 ответа
Моя вторая идея - запустить "удаленную" панель управления как собственного пользователя (root?). который затем создает отдельных пользователей для каждого сервера и запускает их как соответствующих пользователей. Это не лучшее решение, но в интересах вашего обучения, я все равно буду критиковать его. Я доберусь до лучшего решения всего за секунду, но это важно.Повторяйте за мной: [116523]никогда, никогда не запускайте веб-сервисы в качестве root, если вы можете помочь ему[116524] (и в этом случае вы [116525]можете помочь ему, потому что у вас есть контроль над приложением). Правильным способом реализации этого является наличие демона, который начинает с root, но передает привилегии непривилегированному пользователю. Вы заставите этого демона породить второго демона перед тем, как он сбросит привилегии, а непривилегированный демон будет разговаривать с демоном с привилегиями. Привилегированный демон будет выполнять действия от имени непривилегированного демона.Повторяйте за мной: [116527]такое разделение привилегий БЕЗ ИСПОЛЬЗОВАНИЯ, если только демон с привилегиями не выполняет валидацию.[116528] Это означает, что демон с привилегиями не может слепо принимать команды от демона с непривилегированными правами. Он должен убедиться, что команда - это что-то, что хорошо и имеет смысл. Если вы не делаете валидацию, вы ввели [116529] запутанную проблему заместителей [116530]. При написании такого кода безопасности предположим, что ваш веб-сервис будет скомпрометирован. Я слышу, что вы говорите - "этого никогда не случится". [116531] Да, случится. [116532] Безопасность заключается в ограничении ущерба. Вы также можете извлечь пользу из чтения [116533]Шесть самых тупых идей в компьютерной безопасности[116534].Моя третья идея - расширить первую и запустить все серверы в какой-нибудь песочнице, где исполняемые файлы не могут получить доступ к файлам снаружи. Но технически я не знаю, как это будет сделано и возможно ли это вообще.

Screenshot of “ChromeLite”

A+: это (часть) правильный способ достижения такого рода безопасности веб-приложений. Способ, которым вы бы это сделали, это порождение процессов вашего сервера в [116537]chroot jail[116538].[116030].
5
27.01.2020, 23:15
[116222] Я бы предложил. Каждый игровой сервер работает как собственный пользователь. [12191]/home/user1/game /home/user2/game[12192]Тогда для запуска и остановки игрового сервера Вам просто нужно, чтобы Ваш веб-сервер выполнил команду в качестве этого пользователя (user1 или user2). [12193]SFTP легко настроить при поддержке реальных пользователей. [12194]Лично я бы запустил deamon, как каждый пользователь, который прослушивает команды в файле fifo или tmp, а затем запускает их от имени пользователя. Затем запишите в этот файл на веб-фронтале. [12195] Демон должен прослушивать только конкретные команды типа "stop" и "start", которые выполняют игру или убивают ее. Таким образом, ваше разделение тактично, но вы можете запускать команды, которые вы, как администратор/настройка деамона. [116233]
1
27.01.2020, 23:15

Теги

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