/ / Linux не-su скрипт опосередковано запускає su-скрипт? - linux, shell, su, spool

Сценарій не-su Linux, опосередковано запускаючи su-скрипт? - linux, shell, su, spool

Я хотів би створити сценарій автоматичного тестування / оцінювання для студентів в системі Linux таким чином:

  • Будь-який студент-користувач може ініціювати сценарій у будь-який час.
  • Окремий сценарій (з кореневими привілеями) копіює код студента у файловий простір, не доступний для студентів, використовуючи одиничні тести, доступні не для студентів, тощо.
  • Користувач отримує обмежений зворотний зв'язок у вигляді текстового файлу, сформованого сценарієм оцінювання.

Коротше кажучи, я прагну створити щось подібне до систем подання програм на конкурс, але дозволяючи багатший зворотній зв'язок, не розкриваючи тестування всіх викладачів.

Я б міг уявити, що розгульна поведінка між нимиодин ініціюючий скрипт і один сценарій крона з дозволом root можуть бути в порядку. Чи є моделі / приклади того, як можна найкраще структурувати зв’язок між ініційованим користувачем сценарієм та окремим ініційованим кореневим скриптом для таких цілей?

Відповіді:

0 для відповіді № 1

Є багато варіантів.

Речі, які я б зазначив у першому рядку:

  • Не використовуйте су; використовувати судо; Для цього є кілька причин, і головна причина, яку потрібно використовувати су вам потрібен пароль користувача, яким ви хочете бути і з яким судо - ти не «т;
  • Сценарії не можуть бути суїд, ви повинні використовувати бінарні файли або просто звичайний скрипт, який буде розпочато з використання sudo (звичайно, студенти повинні мати sudoers запис, що дозволяє їм використовувати сценарій);
  • Крон не так швидко, як вам теоретично може знадобитися; cron виконує завдання щохвилини; будь ласка, врахуйте Inotify використання;
  • Для зв'язку між компонентами вашої системивам потрібно щось, що реагуватиме в режимі реального часу; Є багато компонентів / бібліотек / фреймворків, які можуть вам допомогти, але рекомендую поглянути ZeroMQ і Редіс;
  • Результати виконання / тестів сценаріїв можна записати або у файлову систему (я думаю, що це було б краще), або в СУБД.

0 для відповіді № 2

Якщо ви хочете дотримуватися сценаріїв оболонок, тоМетод, який я пропоную для спілкування між процесами, полягав би в тому, щоб кореневий скрипт постійно перевіряв іменовану трубу на вхід (тобто продовжувати відкривати її після кожного eof) і надсилати кожен вхід за допомогою будь-яких різноманітних тестів. Нехай частина входу буде "зворотною адресою" - куди відправити результат.

Це повинно дозволяти виконувати випробування в апривілейований простір, не піддаючи студентам ніякого контролю над привілейованим простором. Студентам не потрібно судо, а вам не потрібно тягнути до бібліотек. Просто запропонуйте студентам передати свій код у непривілейований скрипт, який додає зворотну адресу та будь-яку іншу розмітку, яка вам може знадобитися, а потім надає її до названої труби.