/ / Linux non-su skrypt pośrednio uruchamiający skrypt su? - linux, shell, su, spool

Skrypt Linux nie będący su uruchamia pośrednio skrypt su? - linux, shell, su, spool

Chciałbym stworzyć skrypt autotestowania / oceniania dla studentów w systemie Linux w taki sposób, aby:

  • Każdy użytkownik studencki może zainicjować skrypt w dowolnym momencie.
  • Osobny skrypt (z uprawnieniami roota) kopiuje kod studenta do przestrzeni plików niedostępnej dla studentów, wykorzystując testy jednostkowe niedostępne dla studentów itp.
  • Użytkownik otrzymuje ograniczoną informację zwrotną w postaci pliku tekstowego wygenerowanego przez skrypt oceniania.

Krótko mówiąc, staram się stworzyć coś podobnego do systemów zgłaszania konkursów programistycznych, ale pozwalając na bogatsze informacje zwrotne bez ujawniania wszystkich testów jednostki nauczyciela.

Wyobrażam sobie, że zachodzi między nimi buforowaniejeden skrypt inicjujący i jeden skrypt cron z uprawnieniami administratora mogą być w porządku. Czy są jakieś modele / przykłady, w jaki sposób można najlepiej skonstruować komunikację między skryptem inicjowanym przez użytkownika a oddzielnym skryptem inicjowanym przez roota do takich celów?

Odpowiedzi:

0 dla odpowiedzi № 1

Istnieje wiele opcji.

Rzeczy, które chciałbym wspomnieć w pierwszej linii:

  • Nie używaj su; posługiwać się sudo; istnieje kilka powodów tego i główny powód użycia su potrzebujesz hasła użytkownika, którym chcesz być i z którym sudo - ty nie;
  • Skrypty nie mogą być suid, musisz użyć binariów lub zwykłego skryptu, który zostanie uruchomiony sudo (oczywiście studenci muszą mieć sudoers wpis umożliwiający im użycie skryptu);
  • Cron nie jest tak szybki, jak może teoretycznie potrzebować; cron uruchamia zadania co minutę; Proszę wziąć pod uwagę inotify stosowanie;
  • Aby komunikować się między komponentami systemupotrzebujesz czegoś, co zareaguje w czasie rzeczywistym; istnieje wiele komponentów / bibliotek / frameworków open source, które mogą ci pomóc, ale polecam ci zapoznanie się z nimi ZeroMQ i Redis;
  • Wyniki wykonywania / testów skryptów można zapisać albo w systemie plików (myślę, że byłoby lepiej), albo w DBMS.

0 dla odpowiedzi nr 2

Jeśli chcesz trzymać się skryptów powłoki,Metoda, którą proponuję do komunikacji między procesami, polega na tym, aby skrypt główny stale sprawdzał nazwany potok dla danych wejściowych (tj. otwierał go po każdym eof) i wysyłał każde wejście za pomocą różnych testów, które muszą zostać wykonane. Niech część wejścia będzie „adresem zwrotnym” - gdzie wysłać wynik.

Powinno to pozwolić na wykonanie testów w auprzywilejowana przestrzeń bez narażania uczniów na kontrolę nad uprzywilejowaną przestrzenią. Studenci nie potrzebują sudo, a ty nie musisz wciągać bibliotek. Wystarczy, że uczniowie wprowadzą kod do nieuprzywilejowanego skryptu, który doda adres zwrotny i inne potrzebne znaczniki, które następnie nadają nazwanemu potokowi.