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