The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Монтирование не из под рута (mount() syscall), !*! psea, 21-Мрт-09, 20:15  [смотреть все]
Задался вопросом как примонтировать раздел не из под рута.
У программы mount есть опция user, которая позволяет монтировать ФС обычным пользователям. Работает эта опция просто, т.к. у файла /bin/mount установлен setuid бит, то /bin/mount просто изменяет euid на 0 и вызывает системный вызов mount(). Возник вопрос "зачем нужен setuid бит /bin/mount? нельзя ли примонтировать ФС без опции user?"
стал пробовать:
изменил права - rw-rw-rw user,user /dev/hda1
написал программку mymount которая вызывает mount("/dev/hda1", "/home/user/hda1",0,0)
вызываю её под user - не работает, вызываю под root - работает. Почему? ведь пользователь user имеет права на чтение файла /dev/hda1 и монтировать он его хочет в свой каталог. man 2 mount дал ответ на вопрос, оказывается "Appropriate privilege (Linux: the CAP_SYS_ADMIN capability) is required to mount and unmount file systems." Хорошо на тебе эту капабилити, выполнил "root# setcap cap_sys_admin+ep /home/user/mymount" и все заработало, пользователь user получил возможность монтировать /dev/hda1. потом сменил права для /dev/hda1 на такие:
rw-rw---- root,root /dev/hda1. запускаю свой mymount и раздел без проблем монтируется! как так ведь пользователь user не имеет права на чтение /dev/hda1! т.е. получается читать /dev/hda1 не могу, а вот монтировать (при наличии capability CAP_SYS_ADMIN) могу.
Уважаемые разъясните пожалуйста так оно и должно быть? или я где-то что-то упустил из виду?
  • Монтирование не из под рута (mount() syscall), !*! angra, 04:58 , 22-Мрт-09 (1)
    Непонятно почему вы вообще связываете разрешение на запись/чтение/выполнение с возможностью монтирования.
    • Монтирование не из под рута (mount() syscall), !*! psea, 13:00 , 22-Мрт-09 (2)
      >Непонятно почему вы вообще связываете разрешение на запись/чтение/выполнение с возможностью монтирования.

      Поясняю. если у пользователя есть доступ к /dev/hda1 т.е. он может прочитать содержимое этого файла(раздела), то почему этот же пользователь не может представить содержимое файла /dev/hda1 в удобном для него виде - в виде каталога с файлами т.е. монтировать? получается я могу написать программу в userspace которая будет читать содержимое /dev/hda1 (выводить список файлов на экран или копировать их в указанный каталог,например), а вот сделать содержимое /dev/hda1 частью своего домашнего каталога нельзя? Странно как-то.
      т.е. что получается - имея полный доступк /dev/hda1 можно написать программу в userspace которая будет читать содержимое ФС /dev/hda1, копировать всё что там есть (каталоги и файлы) в указанное место, далее я могу изменить что нибудь в этой копии и далее можно записать все изменения обратно в /dev/hda1. таким образом мы получили полный доступ к ФС на /dev/hda1. вопрос, почему мне ядро не дает этого сделать штатным вызовом mount()?

      • Монтирование не из под рута (mount() syscall), !*! pavel_simple, 15:58 , 22-Мрт-09 (3)
        >[оверквотинг удален]
        >userspace которая будет читать содержимое /dev/hda1 (выводить список файлов на экран
        >или копировать их в указанный каталог,например), а вот сделать содержимое /dev/hda1
        >частью своего домашнего каталога нельзя? Странно как-то.
        >т.е. что получается - имея полный доступк /dev/hda1 можно написать программу в
        >userspace которая будет читать содержимое ФС /dev/hda1, копировать всё что там
        >есть (каталоги и файлы) в указанное место, далее я могу изменить
        >что нибудь в этой копии и далее можно записать все изменения
        >обратно в /dev/hda1. таким образом мы получили полный доступ к ФС
        >на /dev/hda1. вопрос, почему мне ядро не дает этого сделать штатным
        >вызовом mount()?

        потому что не положено -- а вдуг у вас на /dev/hda1 програмка с suid битом

        • Монтирование не из под рута (mount() syscall), !*! psea, 17:28 , 22-Мрт-09 (4)
          >потому что не положено -- а вдуг у вас на /dev/hda1 програмка
          >с suid битом

          хорошо, если там бинарники с setuid, то можно же сдалать так что-бы при монтировании через вызов mount() от обычно пользователя права на все файлы были например такие rw-rw---- user,user и setuid бит или другие какие свойства файлов потенциально небезопасные игнорировались.


          • Монтирование не из под рута (mount() syscall), !*! pavel_simple, 17:58 , 22-Мрт-09 (5)
            >>потому что не положено -- а вдуг у вас на /dev/hda1 програмка
            >>с suid битом
            >
            >хорошо, если там бинарники с setuid, то можно же сдалать так что-бы
            >при монтировании через вызов mount() от обычно пользователя права на все
            >файлы были например такие rw-rw---- user,user и setuid бит или другие
            >какие свойства файлов потенциально небезопасные игнорировались.

            именно по этому монтирование и доступ к fstab настраивается root'ом

            • Монтирование не из под рута (mount() syscall), !*! psea, 18:19 , 22-Мрт-09 (6)
              >именно по этому монтирование и доступ к fstab настраивается root'ом

              Вопрос остается открытым. и явная нестыковка на лицо. root он может настраивать в fstab все что угодно. пользователю до этого нет ни какого дела если есть rw-rw---- user,user /dev/hda1. "Легко" можно написать программу (демон если хотите, который будет работать в фоне совершенно не заментым для пользователя), которая будет отображать содержимо /dev/hda1 в каталог пользователя, а изменения сделанные в этом отображении записывать обратно в /dev/hda1. т.е. мы получим "примонтированную" ФС которая ничем не будет отличаться он нормально монтированной ФС. не понятно одно, почему я не могу сделать это штатным mount() из под обычного пользователя?

              • Монтирование не из под рута (mount() syscall), !*! pavel_simple, 19:27 , 22-Мрт-09 (7)
                >[оверквотинг удален]
                >
                >Вопрос остается открытым. и явная нестыковка на лицо. root он может настраивать
                >в fstab все что угодно. пользователю до этого нет ни какого
                >дела если есть rw-rw---- user,user /dev/hda1. "Легко" можно написать программу (демон
                >если хотите, который будет работать в фоне совершенно не заментым для
                >пользователя), которая будет отображать содержимо /dev/hda1 в каталог пользователя, а изменения
                >сделанные в этом отображении записывать обратно в /dev/hda1. т.е. мы получим
                >"примонтированную" ФС которая ничем не будет отличаться он нормально монтированной ФС.
                >не понятно одно, почему я не могу сделать это штатным mount()
                >из под обычного пользователя?

                как бы Вам это объяснить... ан нет - увольте. "Ну не понимаю" (C) Народная Мудрось




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

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