Почему для монтирования требуются права суперпользователя?

54

Почему Linux требует, чтобы пользователь был root / использовал sudo / был специально авторизован на монтирование для монтирования чего-либо? Похоже, решение о том, разрешать ли пользователю монтировать что-либо, должно основываться на его правах доступа к исходному тому / сетевому ресурсу и точке монтирования. Пара применений для монтирования без полномочий root - это монтирование образов файловой системы в направлении, принадлежащем пользователю, и подключение сетевого ресурса в каталог, принадлежащий пользователю. Кажется, что если пользователь контролирует обе стороны уравнения монтирования, все должно быть круто.

Разъяснение ограничения доступа:

Я чувствую, что должен иметь возможность монтировать все, что в противном случае пользователь имел бы доступ к точке монтирования, владельцем которой является пользователь.

Например, на моем компьютере / dev / sda1 принадлежит пользователю root и групповой диск с разрешениями brw-rw----. Поэтому пользователи без полномочий root не могут связываться с / dev / sda1 и, очевидно, что mount не должен позволять монтировать его. Однако, если пользователь владеет /home/my_user/my_imagefile.img и точкой монтирования / home / my_user / my_image /, почему он не может смонтировать этот файл образа в этой точке монтирования с помощью:

mount /home/my_user/my_imagefile.img /home/my_user/my_image/ -o loop

Как отметил Кормак, существует проблема suid. Поэтому необходимо добавить некоторые ограничения, чтобы suid не был проблемой, а также, возможно, некоторыми другими проблемами. Возможно, один из способов сделать это - заставить ОС обрабатывать все файлы как принадлежащие пользователю, который выполнял монтирование. Однако для простого чтения / записи / выполнения я не понимаю, почему это будет проблемой.

Случай использования:

У меня есть учетная запись в лаборатории, где мое домашнее пространство ограничено до 8 ГБ. Это крошечный и очень очень раздражающий. Я хотел бы смонтировать том nfs со своего персонального сервера, чтобы существенно увеличить количество места, которое у меня есть. Однако из-за того, что Linux не допускает подобных вещей, я застрял с файлами scp'а туда-сюда, чтобы остаться ниже предела 8 ГБ.

CrazyCasta
источник
4
Похоже, проблема не столько в том, что "linux не позволяет такие вещи", поскольку вам не разрешено делать такие вещи в своей лаборатории, поскольку система может быть настроена так, чтобы вы могли это делать. Вы можете обсудить эту проблему с людьми, которые управляют системой; если они не дружат, то речь идет о политике, а не о компьютерах;)
Златовласка
Можно ли смонтировать произвольные точки монтирования, к которым у каждого есть нормальный доступ? Казалось бы, администратор должен добавить явную строку в fstab для моего монтирования nfs, чтобы разрешить это. В свою очередь это, вероятно, создало бы прецедент, где они должны были бы также сделать то же самое для всех, кто просил такое, что, как я понимаю, было бы несостоятельным. Отсюда возникает вопрос, почему Linux не позволяет вам монтировать произвольные вещи, которые были бы безопасны (каким-то ограниченным способом).
CrazyCasta
10
Ты пробовал sshfs? Он будет монтировать удаленный каталог, sshкак вы сами, без необходимости рут-доступа. Это просто нужно FUSE (Файловая система в UserSpacE) для установки.
Arcege
1
Вы слышали о проблемах с жестким диском и т. Д. Итак, я знаю, что я говорил это несколько раз, но философия заключается в том, что «установка произвольных вещей» не может быть безопасной , и именно поэтому она так и стоит. есть (конкретные исключения должны быть организованы). Кстати, если у вас нет FUSE, sftpэто немного приятнее в использовании, чем scp.
Златовласка
1
Похоже (вариант) это уже спрашивалось здесь раньше: Смонтировать файл цикла без прав root?
Даниэль Приден

Ответы:

37

Это и историческое ограничение, и ограничение безопасности.

Исторически большинство дисков не было съемными. Поэтому имеет смысл ограничить монтирование людьми, которые имеют законный физический доступ, и они, вероятно, будут иметь доступ к корневой учетной записи. Записи fstab позволяют администраторам делегировать монтирование другим пользователям для съемных дисков.

С точки зрения безопасности, есть три основные проблемы с разрешением произвольным пользователям монтировать произвольные блочные устройства или образы файловой системы в произвольных местах.

  • Монтирование в не принадлежащее место затеняет файлы в этом месте. Например: подключите файловую систему по вашему выбору /etc, /etc/shadowсодержащую пароль root, который вы знаете. Это исправлено, позволяя пользователю монтировать файловую систему только в директории, которой он владеет.
  • Драйверы файловой системы часто не тестировались так тщательно с искаженной файловой системой. Неисправный драйвер файловой системы может позволить пользователю, предоставляющему искаженную файловую систему, ввести код в ядро.
  • Монтирование файловой системы может позволить монтированию вызвать появление некоторых файлов, которые в противном случае он не имел бы разрешения на создание. Исполняемые файлы setuid и файлы устройств являются наиболее очевидными примерами, и они фиксируются параметрами nosuidи nodev, подразумеваемыми наличием userin /etc/fstab.
    До сих пор соблюдая userкогдаmountне называется root достаточно. Но в целом возможность создания файла, принадлежащего другому пользователю, проблематична: содержание этого файла может быть связано с предполагаемым владельцем, а не с монтажником. Случайная копия, сохраняющая атрибуты root в другую файловую систему создаст файл, принадлежащий объявленному, но незадействованному владельцу. Некоторые программы проверяют законность запроса на использование файла, проверяя, что файл принадлежит конкретному пользователю, и это больше не будет безопасным (программа должна также проверять, что каталоги на пути доступа принадлежат этому пользователю; если бы разрешалось произвольное монтирование, им также пришлось бы проверять, что ни один из этих каталогов не является точкой монтирования, где монтирование не было создано ни пользователем root, ни желаемым пользователем).

Для практических целей в настоящее время возможно монтировать файловую систему без полномочий root через FUSE . Драйверы FUSE запускаются как пользователь монтирования, поэтому нет риска повышения привилегий за счет использования ошибки в коде ядра. Файловые системы FUSE могут отображать только те файлы, которые пользователь имеет право создавать, что решает последнюю проблему, описанную выше.

Жиль "ТАК - перестань быть злым"
источник
24

Если пользователь имеет прямой доступ на запись к блочному устройству и может смонтировать это блочное устройство, он может записать исполняемый файл suid на блочное устройство, смонтировать его и выполнить этот файл, и, таким образом, получить root-доступ к системе. Вот почему монтирование обычно ограничено root.

Теперь root может позволить обычным пользователям монтировать с определенными ограничениями, но он должен убедиться, что, если у пользователя есть доступ на запись к блочному устройству, монтирование не разрешает suid, а также devnodes, у которых есть похожая проблема (пользователь может создать узел, который дает им доступ на запись к важному устройству, к которому у них не должно быть доступа на запись).

psusi
источник
8

Это не всегда требует супер привилегий. Изman mount

   The non-superuser mounts.
          Normally,  only  the  superuser can mount filesystems.  However,
          when fstab contains the user option on a line, anybody can mount
          the corresponding system.

          Thus, given a line

                 /dev/cdrom  /cd  iso9660  ro,user,noauto,unhide

          any  user  can  mount  the iso9660 filesystem found on his CDROM
          using the command

                 mount /dev/cdrom

          or

                 mount /cd

          For more details, see fstab(5).  Only the user  that  mounted  a
          filesystem  can unmount it again.  If any user should be able to
          unmount, then use users instead of user in the fstab line.   The
          owner option is similar to the user option, with the restriction
          that the user must be the owner of the special file. This may be
          useful e.g. for /dev/fd if a login script makes the console user
          owner of this device.  The group option  is  similar,  with  the
          restriction  that  the  user  must be member of the group of the
          special file.
RS
источник
Да, вы правы, я был немного неточным в своем вопросе. Я знаю, что один может быть специально авторизован на основе монтирования. Но кажется, что если точка монтирования и том принадлежат пользователю, пользователь должен иметь возможность монтировать без особой авторизации.
3
@CrazyCasta: точка монтирования может принадлежать пользователю, а узел устройства - нет. Какие права собственности и т. Д. На данные в разделе: а) неизвестно, б) не имеет отношения к делу.
Златовласка
Но что, если узел устройства принадлежит пользователю.
CrazyCasta
Тогда в fstab должно быть сделано параллельное исключение, так как узел устройства, принадлежащего пользователю, будет исключительным для начала (попробуйте создать его). Опять же, принцип заключается в том, что безопасная система ограничена, и людям предоставляются привилегии ... если вам не предоставлены привилегии, вам, к сожалению, не повезло. Видите, * nix не продает журналы большой емкости без рецепта - вам нужно разрешение.
Златовласка
Чтобы было понятно, mount()системный вызов всегда требует root. Утилиты suid могут стать пользователем root и разрешить монтирование не-root пользователям, и если mountкоманда установлена ​​suid, она будет делать это на основе флага пользователя в fstab. Другие исполняемые файлы suid были написаны, чтобы позволить пользователям монтировать, например pmount, который позволяет пользователям монтировать внешний носитель и применяет соответствующие ограничения, такие как nosuid, nodev.
psusi
5

Kormac и другие указали, что это не дилемма, которую вы представляете; мне кажется, это сводится к философии явного предоставления пользователям привилегий по сравнению с системой, в которой все пользователи будут иметь неизменное право монтировать файловую систему.

Жиль решает некоторые проблемы безопасности, связанные с монтированием файловых систем. Я буду задним числом избегать прологизированной и неосторожной дискуссии о потенциальных технических проблемах, связанных с этим (см. Комментарии), но я думаю, что это справедливо, что ненадежные пользователи не имеют неизменного права монтировать жесткие диски.

Проблема, связанная с виртуальными и удаленными файловыми системами (или удаленными файловыми системами через виртуальные файловые системы, как FUSE), является менее существенной, но это не решает вопрос безопасности (хотя FUSE может, и это, безусловно, решит вашу проблему). Также важно учитывать, что к данным в таких файловых системах почти всегда можно получить доступ без необходимости монтирования устройства, либо путем передачи файлов, либо с помощью инструментов, которые извлекают из образов без монтирования, поэтому система, которая не позволяет вам монтировать что-либо, делает не представляет непреодолимой проблемы в отношении доступа к данным, которые вы странным образом поместили в файл изображения или (что более понятно) хотите получить из удаленной системы. Если у вас есть ситуация, когда это не так, возможно, стоит спросить:

  1. Что именно я пытаюсь сделать?

  2. Где я пытаюсь это сделать?

Если администрация системы справедлива, то № 2 объясняет, почему № 1 невозможен для вас. Если администрация системы не справедлива, это политика . Решение проблемы «Мой системный администратор не справедлива» не в том, чтобы перепроектировать ОС, чтобы системные администраторы во всем мире не могли ограничивать пользователей.

Система позволяет суперпользователю ограничивать ваши действия либо явным образом, либо бездействием («Мы не предоставляем FUSE» и т. Д.). Привилегии являются одним из механизмов, с помощью которого это достигается. Может быть, нехорошо, когда вам говорят: «Вам не нужно этого делать», но если это правда… Que sera… вам не нужно этого делать. Используйте ftp и т. Д. Если это не так, вы должны приставать к ответственным.

лютик золотистый
источник
Ваш ответ сбивает с толку, не защищены ли сами тома (например, / dev / sda1, / dev / sda2 и т. Д.) От пользователей, которые их читают / пишут? Мне интересно, почему пользователь не может смонтировать то, к чему у него есть доступ. Чтобы уточнить, если у меня есть файл образа с именем ext2, я мог бы написать приложение, которое позволяет мне читать / записывать из / в указанный образ (конечно, не как часть файловой системы ОС). Указанное приложение не сможет читать / писать из разделов в / dev (если только эти разделы не были изменены, чтобы разрешить пользователю доступ к ним, что обычно не имеет смысла).
CrazyCasta
PS Я не согласен с тем, что пользователи должны иметь возможность монтировать файловую систему, к которой у них нет другого доступа, без специальной авторизации, поскольку сам процесс монтирования может потенциально вызвать некое действие (такое как проверка файловой системы), которого root не хочет.
CrazyCasta
Монтирование изображения все еще включает в себя узлы устройства (например, / dev / loop). Вы правы в том, что это создает трудности, но «принятие мер» для этого будет варьироваться от системы к системе (с одной стороны, существует ограниченное количество петлевых устройств), поэтому, опять же, поэтому по умолчанию все это ограничено. Но это значение по умолчанию может быть переопределено суперпользователем от имени кого-либо еще.
Златовласка
Это хорошее замечание по поводу ограничения количества петлевых узлов устройства. Я не совсем понимаю, почему должно быть устройство обратной связи, хотя, кажется, немного избыточно. Я знаю, это потому, что для монтирования требуется блочный файл, а не обычный файл. Я не понимаю, почему это так. Можете ли вы предложить какую-то информацию, например, как ядро ​​по-разному относится к блочным устройствам и обычным файлам?
CrazyCasta
1
@goldilocks: Причина, по которой этот ответ - бред, состоит в том, что ваша теория, лежащая в основе ограничения, очень убедительна, но она совершенно неверна, упомянутой вами проблемы не существует. Разрешение на создание виртуальной файловой системы (например, FUSE) не позволяет вам делать что-либо, что уже не возможно более окольным путем с использованием IPC. Ваше замечание относительно прерываний на устройствах совершенно не имеет значения; единственное значительное прерывание, которое происходит для удаленной файловой системы, происходит от сетевой карты, которая полностью обрабатывается ядром.
Ли Райан
5

К сведению: новейшие ядра имеют поддержку «пространства имен». Обычные пользователи могут создавать пространство имен, а внутри этого пространства имен становиться root и делать забавные вещи, такие как монтирование файловых систем.

Однако он не дает вам «настоящих» прав суперпользователя - вы можете делать только то, что вам уже разрешено (т.е. вы можете монтировать только те устройства, которые уже можете прочитать).

http://lwn.net/Articles/531114/ См. раздел 4.

BraveNewCurrency
источник
Пространства имен более ограничены, чем это. Вы можете появляться rootвнутри пространства имен пользователя, но оно не позволяет вам монтировать обычные типы файловых систем, даже если вы можете читать и записывать блочные устройства. Смотрите эксперимент 2 здесь: unix.stackexchange.com/questions/517317/…
sourcejedi
0

Поскольку данные в файловой системе, которую они намереваются монтировать, могут поставить под угрозу безопасность сервера или даже привести к ее поломке (если она была специально создана таким образом).

sendmoreinfo
источник
Не могли бы вы уточнить? Я не уверен, как «данные в файловой системе, которую они собираются смонтировать», могут поставить под угрозу безопасность. Если вы можете нормально читать / писать файл, тогда вы сможете смонтировать его (это мой аргумент). Если я могу читать / записывать точку монтирования, то я должен быть в состоянии все, что можно монтировать, за исключением фактического монтирования ее в каталог. Если вы не можете прочитать / записать его или не можете просмотреть каталог, в котором он находится, чтобы увидеть, существует ли он, то mount будет просто не работать так же, как команда типа ls или cat.
Ваш аргумент действителен, если вы являетесь единственным пользователем; помните, что Linux (и Unix) являются многопользовательскими системами, где пользователям не обязательно доверять.
sendmoreinfo
Двоичные файлы suid могут быть добавлены на устройство, смонтированы на вашем боксе и использованы для рутинга корня, поэтому по умолчанию ownerи user(s)установлены nosuid. Вы бы не хотели, чтобы кто-то мог так легко обойти это, позволив им вручную удалитьnosuid
RS
@sendmoreinfo Я хорошо знаю, что Linux - многопользовательская система, нет необходимости быть покровительственным. Мне интересно, почему я не могу подключиться к общим сетевым ресурсам и файлам образов, к которым у меня есть другой доступ. Ответ kormoc очень интересен, хотя мне любопытно, почему некоторые пользователи не могут принудительно устанавливать некоторые флаги (например, nosuid), чтобы это исправить. Кажется, что я должен быть в состоянии монтировать для целей простого чтения / записи файла образа / сетевой папки, к которой у меня есть другой доступ, к точке монтирования, которой я владею.
CrazyCasta
1
@CrazyCasta WRT, «приводящий к сбою системы», безусловно, возможно установить неисправное оборудование, которое использует уязвимости в интерфейсе оборудования. Любой, у кого есть жесткий диск с достаточным количеством поврежденных блоков, может рассказать вам, как это может повлиять на ядро ​​(и, следовательно, на всю систему) - он входит в напряженный цикл и эффективно парализует весь набор и kaboodle. Возможно, в основе этого лежит логика, которая делает невозможным ее решение, поскольку это хорошо известная проблема, которая существовала в течение длительного времени без решения.
Златовласка
0

В GNOME gvfs не требуется root для монтирования удаленной файловой системы (ftp или ssh), а gnome-mount также не требуется root для монтирования внешнего хранилища (USB-накопитель, CD / DVD и т. Д.).

Большинство систем, вероятно, не захотят иметь весь GNOME только для удаленного монтирования, тогда вы можете использовать lufs , sshfs или ftpfs .

gvfs, lufs, sshfs и ftpfs используют FUSE, чтобы позволить пользователям без полномочий root монтировать виртуальную файловую систему; и в отличие от mount -o user, FUSE не требует, чтобы системный администратор организовывал определенные монтирования. Если у вас есть привилегия для каталога монтирования и любых ресурсов, которые необходимы для построения файловой системы, вы можете создать FUSE mount.

Почему для монтирования требуются права суперпользователя?

Потому mountчто в первую очередь / изначально предназначен для локальной файловой системы, которая почти всегда включает аппаратное обеспечение.

Ли Райан
источник