Я хочу сделать онлайн-судью для программ c. Я записал пользовательский ввод в текстовое поле и сделал из него файл .c. Теперь он хочет, чтобы php запускал команду linux `gcc code.c
Я сделал это как
$cmd=gcc -std=c99 code.c -g -Wall
$last=exec($cmd,$out,$status);
как предлагается в stackoverflow. Но эта команда не работает. Он вернулся со статусом 1. Но другие команды Linux, такие как date, pwd и т.д., работают нормально.
Я подозреваю, что проблема в том, что whoami
команда говорит "никто". Теперь этот «никто» может не иметь разрешения на запуск gcc. Итак, скажите, пожалуйста, как заставить это работать или как назначить разрешение пользователю «none»?
Я знаю, что это очень небезопасно. Но пусть будет так. Пожалуйста, дайте решения, чтобы команда заработала.
Нет
Вы не используете nobody
. nobody
никогда не следует использовать ни для чего. nobody
не личность.
С помощью nobody
делать что-то значит предоставлять nobody
разрешения. Как только вы это сделаете, вы начнете спускаться по скользкому склону и в конечном итоге окажетесь на nobody
будучи членом wheel
группа и su
получить root права, потому что это проще, а затем вашу систему взломают инопланетные космические хакеры, и вся планета рухнет, и она ВСЕ ТВОЯ ВИНА.
Нет
Вы не просто берете чужой код и выполняете его.
Ты даже не берешь ваш собственный код и выполнить его.
Выполнение ненадежного пользовательского ввода Плохо и неправильно.
Если вы хотите сделать это, вы запускаете полностью изолированные виртуальные машины для компиляции и выполнения программы в полностью изолированной песочнице без подключения к сети и доступа к внешней машине.
Если кто-то на Stack Overflow намекнул, что это каким-либо образом сформировало Отличная идея этот человек идиот. Вот почему мы не позволяем разработчикам управлять производственной средой.
Стоп, не пройди, не собирай интернет-герпес.
Пожалуйста, пожалуйста, займитесь исследованием Докер и узнайте, почему что-то подобное является лучшим решением этой проблемы.