Путь наименьшего сопротивления должен сказать Вашу оболочку на поле 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
Для полноты вот простое решение. Я следую за ним со своим представлением того, почему система управления версиями не является соответствующей.
Я закончил тем, что включил 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";
}
Продолжение одного из комментариев (у меня нет достаточного количества заклинания для комментария все же): кажется, что у всех есть доступ оболочки к известному хосту к тому, чтобы делать уроки. Таким образом, это упрощает вещи. Вот то, что Вы можете (и если) сделайте:
Длинная короткая история: существует так, чтобы студенты учились, так мало времени для обучения этого. За прошлые 20 лет как профессиональный разработчик я редко видел, что новый наем из университета на самом деле знает, как использовать любой тип управления версиями. Все, что они имеют, является свободным схватыванием языков программирования x, y и z (и Java), и не знайте ничего из разработки программного обеспечения. Но мы не можем действительно обвинить студентов, тем не менее, может мы? (Гм...), Это - обучающий момент.
Необходимо смочь использовать Липкий бит, чтобы позволить студентам только перезаписывать свои собственные файлы в общем каталоге.
Править: Не решает проблему, так как студенты смогли бы читать, другие студенты работают.