The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Монтирование не из под рута (mount() syscall)"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Информационная безопасность (Public)
Изначальное сообщение [ Отслеживать ]

"Монтирование не из под рута (mount() syscall)"  
Сообщение от psea on 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) могу.
Уважаемые разъясните пожалуйста так оно и должно быть? или я где-то что-то упустил из виду?
Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Монтирование не из под рута (mount() syscall)"  
Сообщение от angra (ok) on 22-Мрт-09, 04:58 
Непонятно почему вы вообще связываете разрешение на запись/чтение/выполнение с возможностью монтирования.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Монтирование не из под рута (mount() syscall)"  
Сообщение от psea on 22-Мрт-09, 13:00 
>Непонятно почему вы вообще связываете разрешение на запись/чтение/выполнение с возможностью монтирования.

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

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

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

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

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


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

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

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "Монтирование не из под рута (mount() syscall)"  
Сообщение от psea on 22-Мрт-09, 18:19 
>именно по этому монтирование и доступ к fstab настраивается root'ом

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

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

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

8. "Монтирование не из под рута (mount() syscall)"  
Сообщение от psea on 22-Мрт-09, 21:59 
нашел!
все таки не обязательно становиться root'ом чтобы имееть возможность примонтировать ФС на устройстве rw-rw---- user,user /dev/hda1. называется эта возможность FUSE + модули fusefat,fuseext,fusentfs etc.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




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

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