/ / Linux non-su script déclenchant indirectement le script su? - linux, shell, su, spool

Un script non-su Linux déclenchant indirectement un script su? - linux, shell, su, bobine

Je souhaite créer un script de test / évaluation automatique pour les étudiants sur un système Linux tel que:

  • Tout utilisateur étudiant peut lancer le script à tout moment.
  • Un script séparé (avec les privilèges root) copie le code étudiant dans un espace fichier non accessible aux étudiants, à l'aide de tests unitaires non accessibles aux étudiants, etc.
  • L'utilisateur reçoit des commentaires limités sous la forme d'un fichier texte généré par le script de notation.

En bref, je cherche à créer quelque chose de similaire aux systèmes de soumission de concours de programmation, mais permettant une rétroaction plus riche sans révéler tous les tests unitaires des enseignants.

J'imagine qu'un comportement de spoule entreun script de lancement et un script cron d'autorisation root peuvent être en ordre. Existe-t-il des modèles / exemples de la meilleure façon de structurer la communication entre un script initié par l'utilisateur et un script initié par la racine distinct à ces fins?

Réponses:

0 pour la réponse № 1

Il y a beaucoup d'options.

Les choses que je mentionnerais à la première ligne:

  • Don "t utiliser su; utilisation sudo; il y a plusieurs raisons à cela, et la raison principale, que d'utiliser su vous avez besoin du mot de passe de l'utilisateur que vous souhaitez être et avec sudo - vous ne le faites pas;
  • Les scripts ne peuvent pas être suid, vous devez utiliser des binaires ou juste un script normal qui sera lancé en utilisant sudo (bien sûr, les étudiants doivent avoir sudoers entrée qui leur permet d'utiliser le script);
  • Cron n'est pas aussi rapide, comme vous pourriez en théorie avoir besoin; cron exécute des tâches toutes les minutes; veuillez considérer inotify usage;
  • Pour communiquer entre les composants de votre systèmevous avez besoin de quelque chose qui réagit en temps réel; il existe de nombreux composants / bibliothèques / frameworks Open Source qui pourraient vous aider, mais je vous recommande de jeter un œil à ZeroMQ et Redis;
  • Les résultats des exécutions / tests des scripts peuvent être écrits soit dans un système de fichiers (je pense que ce serait mieux), soit dans un SGBD.

0 pour la réponse № 2

Si vous souhaitez vous en tenir au script shell, leLa méthode que je suggère pour communiquer entre les processus consisterait à demander au script racine de vérifier en permanence un tube nommé pour l'entrée (c'est-à-dire de continuer à l'ouvrir après chaque eof) et d'envoyer chaque entrée à travers les différents tests à effectuer. Faire en sorte qu'une partie de l'entrée soit une "adresse de retour" - où envoyer le résultat.

Cela devrait permettre aux tests d'être effectués dans unespace privilégié sans exposer aucun contrôle sur l'espace privilégié aux étudiants. Les étudiants n'ont pas besoin de sudo, et vous n'avez pas besoin de récupérer des bibliothèques. Demandez simplement aux élèves de canaliser leur code dans un script non privilégié qui ajoute l'adresse de retour et tout autre balisage dont vous pourriez avoir besoin, qui le donne ensuite au tube nommé.