The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Следует ли ограничить использование спецсимволов в файловых системах Unix

25.03.2009 17:38

"Fixing Unix/Linux/POSIX Filenames" - обсуждение проблемы, связанной с использованием спецсимволов в файловых системах Unix. Стандарт POSIX не ограничивает использование символов в именах файлов, за исключением слэша и символа с нулевым кодом. Простой пример, демонстрирующий опасность такого подхода: создайте файл с именем '--help' и выполните команду 'ls *'. Продолжим эксперименты, создадим файл с именем "; echo 1 > 2" или ">2", выполним типовой 'find . -exec sh -c "echo {}" \;' и не желая того создадим файл 2. Эксперименты можно продолжать, например, создать файл '~имя_пользователя' и попробовать его переименовать в файловом менеджере.

  1. Главная ссылка к новости (http://www.dwheeler.com/essays...)
Лицензия: CC BY 3.0
Источник: lwn.net
Короткая ссылка: https://opennet.ru/20932-fs
Ключевые слова: fs, unix, security
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (38) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Nick (??), 18:01, 25/03/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    интересно...
     
     
  • 2.11, User294 (??), 19:08, 25/03/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >интересно...

    О сколько нам открытий чудных... или новый взгляд на старые вещи :)

    Вспомнился старинный DoS attack применимый для виндов и некоторых *nix: сетевым софтом (самбой, NFS) можно [коге где "было можно"] создать папки с невалидными именами, например слэшами в имени файла.Чисто физически ФС может это создать.А вот удалить потом такой файл штатными средствами юзер обломается :).Так можно например выжрать все место на диске если разрешен аплоад и при том админ ничего с этим не сможет поделать т.к. стереть файл он обломается.Данный прикол встречался на куче разных платформ.

     
     
  • 3.29, Nick (??), 22:08, 25/03/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >[оверквотинг удален]
    >О сколько нам открытий чудных... или новый взгляд на старые вещи :)
    >
    >
    >Вспомнился старинный DoS attack применимый для виндов и некоторых *nix: сетевым софтом
    >(самбой, NFS) можно [коге где "было можно"] создать папки с невалидными
    >именами, например слэшами в имени файла.Чисто физически ФС может это создать.А
    >вот удалить потом такой файл штатными средствами юзер обломается :).Так можно
    >например выжрать все место на диске если разрешен аплоад и при
    >том админ ничего с этим не сможет поделать т.к. стереть файл
    >он обломается.Данный прикол встречался на куче разных платформ.

    :)

    хотя в данной новости суть проста: экранируйте переменные в параметрах команд.

     

  • 1.2, Аноним (-), 18:07, 25/03/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >>создать файл '~имя_пользователя' и попробовать его переименовать в файловом менеджере.

    konqueror, mc и mv нормально переименовывают

     
     
  • 2.5, Andrew Kolchoogin (?), 18:24, 25/03/2009 [^] [^^] [^^^] [ответить]  
  • +/
    > вот бы еще избавились от дибильной точки в начале имени для скрытия
    > файла и сделали нормальный атрибут "скрытый"

        Сделали уже сто лет, как: большинство современных файловых систем поддерживают расширенные атрибуты произвольного формата типа "ключ:значение".

        Дело за малым: переписать весь накопленный за 40 лет софт и "пересобрать мозг" системным администраторам на новую семантику. Займешься?

     
     
  • 3.7, Аноним (-), 18:29, 25/03/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >Дело за малым: переписать весь накопленный за 40 лет софт и "пересобрать мозг" системным администраторам на новую семантику. Займешься?

    Нет, уж лучше до конца времен пользоваться костылями, изобретенными 40[50[60[70]]] лет назад


     
     
  • 4.15, User294 (??), 19:28, 25/03/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >Нет, уж лучше до конца времен пользоваться костылями, изобретенными 40[50[60[70]]]
    >лет назад

    Электричество открыли несколько столетий назад.А электродвигатели и трансформаторы которым более 100 лет с момента изобретения и сегодня в почете.Может и изменились некоторые аспекты но в целом по природе своей это те же устройства что и век назад.По вашей логике от них должны бы уже избавиться как от "костылей"?...

     
     
  • 5.17, pavlinux (ok), 19:36, 25/03/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Даёшь движители на ионной, фотонной и Z-dot тяге!!! Роторы/статоры, поршни/цилиндры в политехнический музей! :)
      
     
  • 4.33, fredy (?), 07:56, 26/03/2009 [^] [^^] [^^^] [ответить]  
  • +/
    что плохого в точке и зачем ее заменять костылем из окна?


     
  • 3.41, fresco (??), 09:32, 26/03/2009 [^] [^^] [^^^] [ответить]  
  • +/
    > вот бы еще избавились от дибильной точки в начале имени для скрытия

    не троньте точку, вы, масдайщики!

     
  • 2.18, Аноним (18), 19:42, 25/03/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >вот бы еще избавились от дибильной точки в начале имени для скрытия
    >файла и сделали нормальный атрибут "скрытый"

    А мне дак уже наоборот это удобным кажется.

     
  • 2.20, аноним (?), 20:00, 25/03/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >вот бы еще избавились от дибильной точки в начале имени для скрытия
    >файла и сделали нормальный атрибут "скрытый"

    смысл сего действа не ясен O_o когда в терминале смотришь сразу видно, где какой файл, а так - фик.

     

  • 1.8, Аноним (8), 18:47, 25/03/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    "ls -- *" работает.
    Опция "--" специально для таких случаев придумана, есть у всех основных утилит
     
     
  • 2.12, Sarge (??), 19:15, 25/03/2009 [^] [^^] [^^^] [ответить]  
  • +/
    ls ./* тоже нормально работает.
    IMHO это всё просто и банально уязвимости в программах, которые не ограничениями в ФС надо лечить.
     
  • 2.26, Фнон (?), 20:29, 25/03/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >"ls -- *" работает.
    >Опция "--" специально для таких случаев придумана, есть у всех основных утилит

    И много по вашему людей всегда набирают "ls --" когда звездочку используют ?


     
     
  • 3.38, sn (??), 08:18, 26/03/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Много по вашему людей, которые используют "ls *" вместо простого "ls" без аргументов?
     
     
  • 4.40, Фнон (?), 08:48, 26/03/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >Много по вашему людей, которые используют "ls *" вместо простого "ls" без
    >аргументов?

    Звездочку в качестве маски, как и find . -exec sh  используют поголовно, понятно что 'ls *' и 'sh -c "echo {}"' это абстрактные примеры, под который подпадает и "ls *.txt".

     
     
  • 5.45, pernatiy (?), 19:03, 26/03/2009 [^] [^^] [^^^] [ответить]  
  • +/
    А что с "ls *.txt" ? Приведите хоть один пример когда использование такой команды даст "неожиданый" результат.
     
     
  • 6.48, ximaera (?), 19:41, 27/03/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Пожалуйста.

    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$

     
     
  • 7.49, pernatiy (?), 19:59, 27/03/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Далее чем на отображение это не влияет. Поэтому я считаю что это несущественно. А более страшного варианта (создание/перезапись файлов) лично я не могу придумать.
     
  • 3.39, Frank (??), 08:20, 26/03/2009 [^] [^^] [^^^] [ответить]  
  • +/
    А много людей звёздочку используют? Достаточно уяснить, что при использовании звёздочки, нужно использовать -- и всё будет ОК. Это не причина заниматься кастрацией ФС.
     

  • 1.10, NicK (?), 19:04, 25/03/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >вот бы еще избавились от дибильной точки в начале имени для скрытия файла и
    >делали нормальный атрибут "скрытый"

    Чем проще, тем лучше. Точка останется.

     
  • 1.13, Аноним (-), 19:16, 25/03/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >выполним типовой 'find . -exec sh -c "echo {}" \;'

    это не "типовой" это пример "как не надо делать"

     
     
  • 2.25, Фнон (?), 20:27, 25/03/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >>выполним типовой 'find . -exec sh -c "echo {}" \;'
    >
    >это не "типовой" это пример "как не надо делать"

    Ну и ? Покажите как иначе без всяких внешних скриптов сделать неоднокомандную обработку в find, кром как через вызов shell.

     
     
  • 3.28, pavel_simple (ok), 21:03, 25/03/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >>>выполним типовой 'find . -exec sh -c "echo {}" \;'
    >>
    >>это не "типовой" это пример "как не надо делать"
    >
    >Ну и ? Покажите как иначе без всяких внешних скриптов сделать неоднокомандную
    >обработку в find, кром как через вызов shell.

    простите , а что за изврат запускать /bin/echo через /bin/sh ?

    не одной командой - но 5 букв типа xargs не сильно напрягают.

     
     
  • 4.32, Аноним (-), 23:41, 25/03/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >простите , а что за изврат запускать /bin/echo через /bin/sh ?

    echo - это встроенная команда в sh, см. sh(1)

     
     
  • 5.34, pavel_simple (ok), 07:57, 26/03/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >>простите , а что за изврат запускать /bin/echo через /bin/sh ?
    >
    >echo - это встроенная команда в sh, см. sh(1)

    везёт-же вам

    ls -la /bin/echo
    -rwxr-xr-x 1 root root 30136 Апр  4  2008 /bin/echo

    Debian 5 (lenny)

     
     
  • 6.42, Sarge (??), 10:57, 26/03/2009 [^] [^^] [^^^] [ответить]  
  • +/
    на самом деле во многих шеллах эта команда встроена. man sh, man bash (Debian Etch).

    Можете для эксперимента переименовать файл mv /bin/echo /bin/echo.1 и после этого запустить в терминале echo test --отработает без проблем.

     
     
  • 7.43, pavel_simple (ok), 11:02, 26/03/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >на самом деле во многих шеллах эта команда встроена. man sh, man
    >bash (Debian Etch).
    >
    >Можете для эксперимента переименовать файл mv /bin/echo /bin/echo.1 и после этого запустить
    >в терминале echo test --отработает без проблем.

    и что -- то что почти во всех shell'ах эта команда встроенная, я должен её выполнять именно через shell? особенно учитывая видимо то, что bash/dash/ksh/zsh гораздо дольше будут выполняться чем /bin/echo ??? или именно для того, чтобы приведённые в примерах глупости работали?

     
     
  • 8.46, Sarge (??), 06:45, 27/03/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Это не глупость, а Proof of Concept В более реальных задачах скорее всего испол... текст свёрнут, показать
     
  • 5.35, Frank (??), 08:06, 26/03/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >>простите , а что за изврат запускать /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

     

  • 1.14, Аноним (-), 19:26, 25/03/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    вашу ж мать, этож юникс
    умный админ такого делать не станет, а для тупых пользователей прикладной гуёвый софт не должен позволять такие фокусы выкидывать
     
  • 1.21, Аноним (-), 20:08, 25/03/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    [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 отменили ?

     
  • 1.36, Frank (??), 08:12, 26/03/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Вот с 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

     
     
  • 2.37, Frank (??), 08:15, 26/03/2009 [^] [^^] [^^^] [ответить]  
  • +/
    извиняюсь, это не тот пример)
     

  • 1.44, Andrey Mitrofanov (?), 12:33, 26/03/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    ##> Следует ли ограничить использование спецсимволов в файловых системах Unix

    Следует ли "решать" проблему экранирования спец.символов шела -- костылями в файлов_ых_ системах? ...в POSIX-е?

    Является ли проблема экранирования спец.символов шелла -- проблемой posix-а/unix-вея? ...любой, хоть какой-нибудь, файловой системы?
    (То, что она является "неисчерпаемым источником" ошибок людей, -- понятно.)

    Является ли сравнительно бОльшая сложность безопасного прграммирования в сравнении с программированием "вообще"(*1) -- проблемой {POSIX, файловой системы, Индустрии, $чего-ещё$ }? ...которую нужно решать запретами? ...костылями в стандартах?

    (*1) => существенное число "просто" работающих програм -- содержат (стремятся содержать?!) ошибки безопасности.

    ...надо ли в консерватории вообще что-то исправлять?... ...возможно ли??...

     
  • 1.47, XoRe (ok), 17:42, 27/03/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А мне в свое время помогала кнопка Tab в этом деле =)
    Когда был открыт фтп сервер с доступом на запись и всякие умники создавали файлы с веселыми именами, мне помогало автодополнение в шелле (csh/bash).
    Шелл сам подставлял имя файла с экранированными символами.
    Что говорит о том, что проблемы с такими именами файлов только у людей.
     
  • 1.50, sEr... (?), 05:36, 05/05/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Это скорее не проблемма, а то что нужно знать и не делать. :)
    И правда, это может делать, либо злоумышленник, либо баран, который скорее всего будет юзать винду.
    Сознательно сам себе врядли такое накуралесишь :)))

    А по поводу точки перед файлами очень даже удобно, ненужно это менять. Хотя... Смотря как.

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру