Comments 16
Блок цитаты закрыт сразу после блока кода. Не знаю, почему отображается неправильно.
Полезная штука, а почему нельзя ограничиться условием
По-моему, шелл будет пытаться запустить любой скрипт с shebang
getline(1) =~ "^#!"
? По-моему, шелл будет пытаться запустить любой скрипт с shebang
может, паранойя?
$ touch tmp
$ vim test
$ ls
test tmp
$ cat test
#!/bin/rm tmp
$ chmod +x test
$ ./test
$ ls
$
Вобщем, я бы еще проверял, что после /bin идет. =)
$ vim test
$ ls
test tmp
$ cat test
#!/bin/rm tmp
$ chmod +x test
$ ./test
$ ls
$
Вобщем, я бы еще проверял, что после /bin идет. =)
Вообще-то упомянутый скрипт только упрощает жизнь, излишне перегружать его какими-либо проверками безопасности.
Юниксвей — позволить пользователю самому решать, что он делает.
Юниксвей — позволить пользователю самому решать, что он делает.
Предположим крайнюю ситуацию. Вы, к примеру, пошли пить кофе, а в это время добрый дядька подправил первую строчку на #!/bin/rm -rf /. Вы возвращаетесь на рабочее место, и, ничего не подозревая, запускаете свой скрипт с правами root`а?) А лишнее условие скрипт не перегрузит, а лишь обезопасит.
Как правило, люди перед уходом пить кофе сохраняют написанное. Соответственно, если добрый дядечка напакостит, атрибут уже будет проставлен. Да и никто не помешает ему в конце концов самому выполнить тот же chmod :)
и что дальше? первая строчка идет как комментарий. Она будет проигнорирована интерпретатором
ну и ничего не случится, ибо шелл обработает сию строчку как /bin/rm "-rf /"
Приведенный трюк по удалению одного файла (если права позволяют) сработает, а вот, например, ключи «rf» rm уже не получит, как верно заметил coldflame.
С другой стороны, #!/bin/rm в качестве первой строки это дрогуй очень распространенный трюк, спомощью которого делаются «одноразовые» сценарии, которые сразу самоуничтожаются после выполнения, что порой очень полезно.
Last but not least, если у злонамеренного пользователя есть доступ к системе во время отсутствия хозяина, то это грубое нарушение базовых правил безопасности и, соглашаясь с sergicus, следует отметить, что редактирование подобного исполняемого файла далеко не самое ужасное из возможных вариантов развития событий. :) Блокировать экран нужно, отходя от рабочего места, что ли… %) Приведенный способ должен облегчить жизнь в первую очередь хозяину, а об упомянутом случае должна заботиться политика безопасности.
С другой стороны, #!/bin/rm в качестве первой строки это дрогуй очень распространенный трюк, спомощью которого делаются «одноразовые» сценарии, которые сразу самоуничтожаются после выполнения, что порой очень полезно.
Last but not least, если у злонамеренного пользователя есть доступ к системе во время отсутствия хозяина, то это грубое нарушение базовых правил безопасности и, соглашаясь с sergicus, следует отметить, что редактирование подобного исполняемого файла далеко не самое ужасное из возможных вариантов развития событий. :) Блокировать экран нужно, отходя от рабочего места, что ли… %) Приведенный способ должен облегчить жизнь в первую очередь хозяину, а об упомянутом случае должна заботиться политика безопасности.
Спасибо за «silent», а то я всё думал, как отучить вим моргать при перегенерации tags :)
au BufWritePost * if getline(1) =~ "^#!.*/bin/"|silent !chmod a+x %|endif
Sign up to leave a comment.
Делаем файлы сценариев исполняемыми