Полномочия для сценария представления

Путь наименьшего сопротивления должен сказать Вашу оболочку на поле Solaris, что означают escape-последовательности, отправленные PuTTY. Вы видите a ~ потому что эти ключи испускают escape-последовательность как ​␛[3~ где ​ символ ESC (\e, ASCII 27). Введите Ctrl+V, сопровождаемый одним из ключей так, чтобы ​ символ вставляется буквально, сопровождается другими символами. Затем определите привязку в соответствующем файле, который для удара является ~/.inputrc:

"\e[1~": beginning-of-line     # Home
"\e[4~": end-of-line           # End
"\e[5~": beginning-of-history  # PageUp
"\e[6~": end-of-history        # PageDown
"\e[3~": delete-char           # Delete
"\e[2~": quoted-insert         # Insert
"\eOD": backward-word          # Ctrl+Left
"\eOC": forward-word           # Ctrl+Right
3
12.01.2012, 21:29
3 ответа

Для полноты вот простое решение. Я следую за ним со своим представлением того, почему система управления версиями не является соответствующей.

Я закончил тем, что включил setuid, обдумал исполняемый файл представления (chmod 4755), так, чтобы, когда студенты выполнили его, программа работала как я. Все копирование файлов затем передало бы владение мне, и я мог сделать весь каталог недоступным студентам. Это действительно вовлекало несколько препятствий в заканчивание Perl, добавила setuid безопасность (не заражающий вход, не заражая ПУТЬ), но это удалось приятно в конце. Заключительный сценарий является приблизительно 20 строками.

Причина система управления версиями недопустима, состоит в том, потому что это - первый курс в программировании. Студенты никогда не использовали терминал и смущены достаточно идеей ssh-луга в сервер и передачу файлов назад и вперед. Детали системы управления версиями для классов верхнего подразделения (особенно, когда студент подвержен терминальным опечаткам!). И Вы были бы удивлены сегодня, сколько из тех курсов действительно на самом деле требует, чтобы изучил систему управления версиями (я взял четыре курса, которые сделали в моем студенте). Менее значительная причина я не мог сделать системы управления версиями, состоит в том, что я не мог иметь полномочий суперпользователя на сервере и не попрошу, чтобы преподаватель настроил систему управления версиями просто, потому что я не мог выяснить, что глупый setuid укусил.

Все, что я хочу для этого курса, является простым представлением с одним шагом к укромному уголку. Проблема была с моей казнью, и отсутствие знаний о полномочиях Unix (не знающий о setuid укусил), не структура моего решения. Таким образом, Sean C. 's комментарий был подсказкой, но я не распознал его сначала, потому что казалось, что он подразумевал, что точка должна была запустить скрипт как корень, и я не хотел, чтобы это защитило мир от моей собственной наивности о Unix.

Вот фактический рабочий сценарий и его полномочия. Укажите на любые дыры в системе безопасности, которые Вы могли бы видеть.

-rwsr-xr-x 1 260s12ta 260s12ta 600 2012-01-16 23:19 submit

#!/usr/bin/perl

use File::Copy;

$ENV{"PATH"} = "/usr/bin"; # appease the perl-suid security for shell calls

my $username = getlogin() or die "Couldn't access user login: $!\n"; 
my $dir = "/home/260s12ta/labs/$username/";

foreach (@ARGV) {
   if ($_ =~ /([\w-]+\.tar\.gz)/) { # untaint the given filename
      $filename = $1;
   } else {
      die "\nInvalid submission: $_ is not a .tar.gz file.\n";
   }

   print "Submitting $filename... ";
   copy($filename, $dir) or print "Submission failed: $!\n";
   chmod(0600, "$dir/$filename") or print "Submission failed: $!\n"; 
   print "OK!\n";
}
2
27.01.2020, 21:20
  • 1
    , Если это не является конфиденциальным, Вы могли бы отправить сценарий, в случае, если кто-то когда-то хочет сделать подобную вещь. –  Faheem Mitha 18.01.2012, 08:17
  • 2
    Рискуя тем, чтобы выставить мои навыки жемчуга новичка? уверенный, почему нет. –  JeremyKun 18.01.2012, 16:21
  • 3
    Спасибо, Боб. Вы хотели бы уточнить то, что означает 'неинфекция'? –  Faheem Mitha 18.01.2012, 17:23
  • 4
    Это - то, что сделал сценарий представления в моей школе. Нет ничего особенно секретного там, но если Вы хотите Вас, может даже установить его non-world-readable, таким образом, студенты могут выполнить его, но не видеть то, что это делает –  Michael Mrozek♦ 18.01.2012, 22:36
  • 5
    По некоторым причинам я установил его нечитаемый, и они не могли выполнить его... Но с удачей сценарий является достаточно пуленепробиваемым, что они могут считать его и не использовать в своих интересах его так или иначе. Кроме того, они - вводные программисты, таким образом, они, конечно, не знают Perl. –  JeremyKun 19.01.2012, 02:06

Продолжение одного из комментариев (у меня нет достаточного количества заклинания для комментария все же): кажется, что у всех есть доступ оболочки к известному хосту к тому, чтобы делать уроки. Таким образом, это упрощает вещи. Вот то, что Вы можете (и если) сделайте:

  • Необходимо настроить сервер мерзавца (предпочтительно gitolite для этого типа среды) и отдельный repo для каждого студента. Принятие Вас настроило студенческие корневые каталоги, можно идти вперед и выполнить ssh-keygen для каждой студенческой учетной записи и скопировать открытые ключи в gitolite администраторскую конфигурацию. (РЕДАКТИРОВАНИЕ (разъяснение): корневой доступ не требуется, чтобы устанавливать gitolite. Создание студенческой общественности/закрытых ключей требует доступа к их учетным записям, конечно, но это - всего одна команда, которую они могут выполнить самостоятельно, если необходимо (ssh-keygen).)
  • У каждого студента только есть полномочия для их repo, но у Вас есть доступ к чтению-записи им всем.
  • Они клонируют свой repo w/любые начальные шаблоны и инструкции в начале курса; впоследствии, они просто вытягивают/продвигают новые присвоения и представления.
  • Каждый проект (присвоение) может быть в отдельном каталоге (как Вы предположили). И можно создать каталоги сами и фиксировать/продвигать изменения, и они могут просто вытянуть изменения, когда пора запустить проект. (Да, необходимо сделать это для каждого студента, но это может быть легко задано сценарием.) Тот способ, которым Вы знаете каталоги проекта, все называют правильно для поддержки автоматизации для классификации.
  • Дополнительные льготы: Вы видите, кто запустил проект ночью перед тем, как это было должно... и кто запустился рано и совершенствовал, когда они пошли. Бонусные очки для устойчивых фиксаций; минус точки для единственной фиксации w/"законченный" проект. Вы можете также (дополнительно) сделать, чтобы люди работали над командами и действительно видели, кто сделал всю работу (у каждого человека будет их собственная история фиксации.) Это тривиально для конфигурирования полномочий этот путь в gitolite.

Длинная короткая история: существует так, чтобы студенты учились, так мало времени для обучения этого. За прошлые 20 лет как профессиональный разработчик я редко видел, что новый наем из университета на самом деле знает, как использовать любой тип управления версиями. Все, что они имеют, является свободным схватыванием языков программирования x, y и z (и Java), и не знайте ничего из разработки программного обеспечения. Но мы не можем действительно обвинить студентов, тем не менее, может мы? (Гм...), Это - обучающий момент.

2
27.01.2020, 21:20
  • 1
    Эй, я изучил CVS как студент (это была современная вещь в то время). Серьезно, я соглашаюсь, что система управления версиями с управлением доступом является хорошим решением здесь. –  Gilles 'SO- stop being evil' 13.01.2012, 23:40
  • 2
    +1, походит на разумную установку. @Bean, если Вы заставляете своих студентов изучить управление версиями, они поблагодарят Вас позже, хотя, возможно, не в то время.:-) Я предложил бы подвижный по мерзавцу для людей без опыта с управлением версиями. –  Faheem Mitha 17.01.2012, 10:25
  • 3
    Этот класс не является правильным местом для изучения управления версиями. Они едва знают терминал. Это - вводный класс. –  JeremyKun 18.01.2012, 04:02
  • 4
    @Bean никакая потребность изучить управление версиями; они просто должны следовать инструкциям. И это правда в любом случае. Любой они следуют инструкциям для "сценария фиксации собственной разработки" (/opt/bin/submit_hmwk.sh my_homewk.py); или, следуйте инструкциям (очень) популярный "сценарий фиксации", который, оказывается, называют "фиксацией мерзавца-a; нажатие мерзавца". Который является более трудным? Ну, 2-я опция (две команды), возможно, 2x более трудная, чем 1-е (одна команда). Однако, опция "мерзавца" бесконечно более полезна, рассматривание пользовательской возможности сценария имеет value=0 студенту. Но по общему признанию это была бы забава записать потрясающий ;-) –  michael 20.01.2012, 04:36
  • 5
    Точка взята. В любом случае у меня нет полномочий загрузить или установить что-либо на сервере, который мы используем (совместно использованный с некоторыми другими классами, по-видимому), и я, конечно, не настраивал их корневые каталоги. Так собственной разработки это. –  JeremyKun 20.01.2012, 05:24

Необходимо смочь использовать Липкий бит, чтобы позволить студентам только перезаписывать свои собственные файлы в общем каталоге.

Править: Не решает проблему, так как студенты смогли бы читать, другие студенты работают.

0
27.01.2020, 21:20
  • 1
    Нет. Я не хочу полномочий чтения также. –  JeremyKun 18.01.2012, 03:46
  • 2
    , да, который имеет смысл –  Jason Axelson 18.01.2012, 21:18

Теги

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