URL: https://ssl.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID10
Нить номер: 4196
[ Назад ]

Исходное сообщение
"Монтирование не из под рута (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 , 22-Мрт-09 04:58 
Непонятно почему вы вообще связываете разрешение на запись/чтение/выполнение с возможностью монтирования.

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

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


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

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


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

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



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

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


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

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


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

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


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