"Fixing Unix/Linux/POSIX Filenames (http://www.dwheeler.com/essays/fixing-unix-linux-filenames.html)" - обсуждение проблемы, связанной с использованием спецсимволов в файловых системах Unix. Стандарт POSIX не ограничивает использование символов в именах файлов, за исключением слэша и символа с нулевым кодом. Простой пример, демонстрирующий опасность такого подхода: создайте файл с именем '--help' и выполните команду 'ls *'. Продолжим эксперименты, создадим файл с именем "; echo 1 > 2" или ">2", выполним типовой 'find . -exec sh -c "echo {}" \;' и не желая того создадим файл 2. Эксперименты можно продолжать, например, создать файл '~имя_пользователя' и попробовать его переименовать в файловом менеджере.URL: http://www.dwheeler.com/essays/fixing-unix-linux-filenames.html
Новость: http://www.opennet.me/opennews/art.shtml?num=20932
интересно...
>интересно...О сколько нам открытий чудных... или новый взгляд на старые вещи :)
Вспомнился старинный DoS attack применимый для виндов и некоторых *nix: сетевым софтом (самбой, NFS) можно [коге где "было можно"] создать папки с невалидными именами, например слэшами в имени файла.Чисто физически ФС может это создать.А вот удалить потом такой файл штатными средствами юзер обломается :).Так можно например выжрать все место на диске если разрешен аплоад и при том админ ничего с этим не сможет поделать т.к. стереть файл он обломается.Данный прикол встречался на куче разных платформ.
>[оверквотинг удален]
>О сколько нам открытий чудных... или новый взгляд на старые вещи :)
>
>
>Вспомнился старинный DoS attack применимый для виндов и некоторых *nix: сетевым софтом
>(самбой, NFS) можно [коге где "было можно"] создать папки с невалидными
>именами, например слэшами в имени файла.Чисто физически ФС может это создать.А
>вот удалить потом такой файл штатными средствами юзер обломается :).Так можно
>например выжрать все место на диске если разрешен аплоад и при
>том админ ничего с этим не сможет поделать т.к. стереть файл
>он обломается.Данный прикол встречался на куче разных платформ.:)
хотя в данной новости суть проста: экранируйте переменные в параметрах команд.
>>создать файл '~имя_пользователя' и попробовать его переименовать в файловом менеджере.konqueror, mc и mv нормально переименовывают
> вот бы еще избавились от дибильной точки в начале имени для скрытия
> файла и сделали нормальный атрибут "скрытый"Сделали уже сто лет, как: большинство современных файловых систем поддерживают расширенные атрибуты произвольного формата типа "ключ:значение".
Дело за малым: переписать весь накопленный за 40 лет софт и "пересобрать мозг" системным администраторам на новую семантику. Займешься?
>Дело за малым: переписать весь накопленный за 40 лет софт и "пересобрать мозг" системным администраторам на новую семантику. Займешься?Нет, уж лучше до конца времен пользоваться костылями, изобретенными 40[50[60[70]]] лет назад
>Нет, уж лучше до конца времен пользоваться костылями, изобретенными 40[50[60[70]]]
>лет назадЭлектричество открыли несколько столетий назад.А электродвигатели и трансформаторы которым более 100 лет с момента изобретения и сегодня в почете.Может и изменились некоторые аспекты но в целом по природе своей это те же устройства что и век назад.По вашей логике от них должны бы уже избавиться как от "костылей"?...
Даёшь движители на ионной, фотонной и Z-dot тяге!!! Роторы/статоры, поршни/цилиндры в политехнический музей! :)
что плохого в точке и зачем ее заменять костылем из окна?
> вот бы еще избавились от дибильной точки в начале имени для скрытияне троньте точку, вы, масдайщики!
>вот бы еще избавились от дибильной точки в начале имени для скрытия
>файла и сделали нормальный атрибут "скрытый"А мне дак уже наоборот это удобным кажется.
>вот бы еще избавились от дибильной точки в начале имени для скрытия
>файла и сделали нормальный атрибут "скрытый"смысл сего действа не ясен O_o когда в терминале смотришь сразу видно, где какой файл, а так - фик.
"ls -- *" работает.
Опция "--" специально для таких случаев придумана, есть у всех основных утилит
ls ./* тоже нормально работает.
IMHO это всё просто и банально уязвимости в программах, которые не ограничениями в ФС надо лечить.
>"ls -- *" работает.
>Опция "--" специально для таких случаев придумана, есть у всех основных утилитИ много по вашему людей всегда набирают "ls --" когда звездочку используют ?
Много по вашему людей, которые используют "ls *" вместо простого "ls" без аргументов?
>Много по вашему людей, которые используют "ls *" вместо простого "ls" без
>аргументов?Звездочку в качестве маски, как и find . -exec sh используют поголовно, понятно что 'ls *' и 'sh -c "echo {}"' это абстрактные примеры, под который подпадает и "ls *.txt".
А что с "ls *.txt" ? Приведите хоть один пример когда использование такой команды даст "неожиданый" результат.
Пожалуйста.ximaera@endeavour:~/tmp$ >-1.txt
ximaera@endeavour:~/tmp$ ls *.txt
ls: invalid option -- '.'
Try `ls --help' for more information.
ximaera@endeavour:~/tmp$Обратите внимание, что на единицу ls не ругнулся, так как это валидный аргумент.
Можно забавнее:
ximaera@endeavour:~/tmp$ mkcd ls
ximaera@endeavour:~/tmp/ls$ >good_file.txt
ximaera@endeavour:~/tmp/ls$ >bad_file.txt
ximaera@endeavour:~/tmp/ls$ mv -- bad_file.txt --hide=\*.txt
ximaera@endeavour:~/tmp/ls$ ls
good_file.txt --hide=*.txt
ximaera@endeavour:~/tmp/ls$ ls *.txt
good_file.txt
ximaera@endeavour:~/tmp/ls$ ls *
good_file.txt
ximaera@agavrichen2:~/tmp/ls$
Далее чем на отображение это не влияет. Поэтому я считаю что это несущественно. А более страшного варианта (создание/перезапись файлов) лично я не могу придумать.
А много людей звёздочку используют? Достаточно уяснить, что при использовании звёздочки, нужно использовать -- и всё будет ОК. Это не причина заниматься кастрацией ФС.
>вот бы еще избавились от дибильной точки в начале имени для скрытия файла и
>делали нормальный атрибут "скрытый"Чем проще, тем лучше. Точка останется.
>выполним типовой 'find . -exec sh -c "echo {}" \;'это не "типовой" это пример "как не надо делать"
>>выполним типовой 'find . -exec sh -c "echo {}" \;'
>
>это не "типовой" это пример "как не надо делать"Ну и ? Покажите как иначе без всяких внешних скриптов сделать неоднокомандную обработку в find, кром как через вызов shell.
>>>выполним типовой 'find . -exec sh -c "echo {}" \;'
>>
>>это не "типовой" это пример "как не надо делать"
>
>Ну и ? Покажите как иначе без всяких внешних скриптов сделать неоднокомандную
>обработку в find, кром как через вызов shell.простите , а что за изврат запускать /bin/echo через /bin/sh ?
не одной командой - но 5 букв типа xargs не сильно напрягают.
>простите , а что за изврат запускать /bin/echo через /bin/sh ?echo - это встроенная команда в sh, см. sh(1)
>>простите , а что за изврат запускать /bin/echo через /bin/sh ?
>
>echo - это встроенная команда в sh, см. sh(1)везёт-же вам
ls -la /bin/echo
-rwxr-xr-x 1 root root 30136 Апр 4 2008 /bin/echoDebian 5 (lenny)
на самом деле во многих шеллах эта команда встроена. man sh, man bash (Debian Etch).Можете для эксперимента переименовать файл mv /bin/echo /bin/echo.1 и после этого запустить в терминале echo test --отработает без проблем.
>на самом деле во многих шеллах эта команда встроена. man sh, man
>bash (Debian Etch).
>
>Можете для эксперимента переименовать файл mv /bin/echo /bin/echo.1 и после этого запустить
>в терминале echo test --отработает без проблем.и что -- то что почти во всех shell'ах эта команда встроенная, я должен её выполнять именно через shell? особенно учитывая видимо то, что bash/dash/ksh/zsh гораздо дольше будут выполняться чем /bin/echo ??? или именно для того, чтобы приведённые в примерах глупости работали?
Это не глупость, а Proof of Concept. В более реальных задачах скорее всего использование шелла будет необходимым. А косяк где-то явно имеется и его надо исправлять. Разумеется, не ограничениями фс, а в более других местах.
>>простите , а что за изврат запускать /bin/echo через /bin/sh ?
>
>echo - это встроенная команда в sh, см. sh(1)Сфига ли?
frank@fqc-desktop:~$ file `which echo`
/bin/echo: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.8, dynamically linked (uses shared libs), stripped
вашу ж мать, этож юникс
умный админ такого делать не станет, а для тупых пользователей прикладной гуёвый софт не должен позволять такие фокусы выкидывать
[root@lx ~]# ls -lib wireless
8651803 -rw-r--r-- 1 root root 695 Mar 24 2008 wireless[root@lx ~]# find . -inum 8651803 -exec ls -l "{}" \;
-rw-r--r-- 1 root root 695 Mar 24 2008 ./wireless[root@lx ~]#find . -inum 8651803 -exec rm -f "{}" \;
Inodes отменили ?
Вот с ls это не работает!frank@fqc-desktop:~/1$ ls
; echo 1 > 2
frank@fqc-desktop:~/1$ ls *
; echo 1 > 2
frank@fqc-desktop:~/1$ ls
; echo 1 > 2
frank@fqc-desktop:~/1$ rm *
frank@fqc-desktop:~/1$ ls
извиняюсь, это не тот пример)
##> Следует ли ограничить использование спецсимволов в файловых системах UnixСледует ли "решать" проблему экранирования спец.символов шела -- костылями в файлов_ых_ системах? ...в POSIX-е?
Является ли проблема экранирования спец.символов шелла -- проблемой posix-а/unix-вея? ...любой, хоть какой-нибудь, файловой системы?
(То, что она является "неисчерпаемым источником" ошибок людей, -- понятно.)Является ли сравнительно бОльшая сложность безопасного прграммирования в сравнении с программированием "вообще"(*1) -- проблемой {POSIX, файловой системы, Индустрии, $чего-ещё$ }? ...которую нужно решать запретами? ...костылями в стандартах?
(*1) => существенное число "просто" работающих програм -- содержат (стремятся содержать?!) ошибки безопасности.
...надо ли в консерватории вообще что-то исправлять?... ...возможно ли??...
А мне в свое время помогала кнопка Tab в этом деле =)
Когда был открыт фтп сервер с доступом на запись и всякие умники создавали файлы с веселыми именами, мне помогало автодополнение в шелле (csh/bash).
Шелл сам подставлял имя файла с экранированными символами.
Что говорит о том, что проблемы с такими именами файлов только у людей.
Это скорее не проблемма, а то что нужно знать и не делать. :)
И правда, это может делать, либо злоумышленник, либо баран, который скорее всего будет юзать винду.
Сознательно сам себе врядли такое накуралесишь :)))А по поводу точки перед файлами очень даже удобно, ненужно это менять. Хотя... Смотря как.