Как позволить несуперпользователям монтировать какую-либо файловую систему?

Всегда существует Октава GNU, emacs калькуляторов командной строки (для того, когда Вы хотите полную среду разработки и язык программирования, встроенный к Вашему калькулятору и тысячам дополнительных дополнений),

или R, если статистика является большим количеством Вашей вещи.

Я главным образом просто использую bc -l получить стандартную математическую загруженную библиотеку... Я даже имею bc искаженный к bc -l. См. ответ Циновки для получения информации об определении функции факториала.... хотя bc страница справочника определяет его как:

define f (x) {
  if (x <= 1) return (1);
  return (f(x-1) * x);
}

Проверка <=1, а не == 1 предотвращает бесконечный цикл, если Вы, оказывается, питаетесь, это отрицательное число (должна быть ошибка), или (допустимый) нуль.

49
17.06.2018, 16:33
7 ответов

Существует пара подходов, некоторые из них главным образом безопасна, другие нисколько.

Небезопасный путь

Позвольте любому выполненному использованию mount, например, через sudo. Вы могли бы также дать им корень; это - то же самое. Пользователь мог смонтировать файловую систему с корневой копией suid bash— выполнение, которое немедленно дает корень (вероятно, без любого входа, вне факта это mount был выполнен).

С другой стороны, пользователь мог смонтировать свою собственную файловую систему сверху /etc, содержа его собственную копию /etc/shadow или /etc/sudoers, затем получите корень с также su или sudo. Или возможно свяжите - монтируются (mount --bind) по одному из тех двух файлов. Или новый файл в /etc/sudoers.d.

Подобные нападения могли быть осуществлены /etc/pam.d и много других мест.

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

Главным образом безопасный путь: udisks или подобный

Различные настольные среды на самом деле уже создали решения этого, чтобы позволить пользователям монтировать съемные носители. Они работают путем монтирования в подкаталоге /media только и путем выключения set-user/group-id поддерживают через опции ядра. Опции здесь включают udisks, udisks2, pmount, usbmount,

Если Вы должны, Вы могли бы записать свой собственный сценарий, чтобы сделать что-то подобное, и вызвать его через sudo — но необходимо быть действительно тщательной записью этого сценария для не отъезда корневого использования. Если Вы не хотите, чтобы Ваши пользователи должны были помнить sudo, можно сделать что-то вроде этого в сценарии:

#!/bin/bash
if [ $UID -ne 0 ]; then       # or `id -u`
    exec sudo -- "$0" "$@"
fi

# rest of script goes here 

will-be-secure когда-нибудь путь: пользовательские пространства имен

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

Далее, много ядер дистрибутива имеют (из соображений безопасности), принял значение по умолчанию к не разрешению непривилегированным пользователям использовать пользовательские пространства имен; например, Debian имеет a kernel.unprivileged_userns_clone это принимает значение по умолчанию к 0. Другие дистрибутивы имеют подобные настройки, хотя часто с немного отличающимися именами.

Лучшая документация, которую я знаю приблизительно пользовательских пространств имен, является статьей LWN Пространства имен в операции, части 5: Пользовательские пространства имен.

На данный момент я пошел бы с udisks2.

47
27.01.2020, 19:34
  • 1
    Спасибо за Ваш ответ! BTW, был бы Вы считать, что это безопасно, чтобы позволить пользователям в группе mount смочь смонтировать файловые системы как корень делает? Я прочитаю документ пространств имен, который Вы связали и пытаетесь реализовать эту вещь группы монтирования, по крайней мере, как осуществление. –   18.10.2013, 19:16
  • 2
    @derobert, так как Вы говорили о пользовательских пространствах имен, можно хотеть проверить План 9 от Bell Labs (это - преемник UNIX, сделанного теми же людьми). это моделирует дерево файла как пространство имен для каждого процесса (и нет такой вещи как корень). захватывающий материал. –  strugee 21.10.2013, 07:11

Можно сделать это, но необходимо изменить запись в /etc/fstab при соответствии файловой системе Вы хотите смонтироваться, добавляя флаг user к этой записи. Пользователи неполномочия затем смогли бы смонтировать его.

Посмотрите man mount для получения дополнительной информации.

18
27.01.2020, 19:34
  • 1
    Это - единственный ответ, который я могу найти с поиском с помощью Google. Я узнал, что на FreeBSD, можно позволить пользователям монтировать файловые системы с установкой переменной (а именно, vfs.usermount). Я хочу sth. аналогичный этому. Я использую много съемных дисков со многими разделами на каждом, и это было бы громоздким для добавления дюжины или двух записей в fstab для каждого из них. –   18.10.2013, 17:43
  • 2
    Ужасное обходное решение могло быть должно позволить udev справьтесь с записями, поскольку новые устройства появляются и исчезают. –  Jester 18.10.2013, 17:44
  • 3
    я не нашел, что это работает над Монетным двором или Ubuntu. Да, учетная запись пользователя по умолчанию может смонтироваться без корня, но 'стандарт'/'desktop' пользователи не может смонтировать его. –  johny why 08.06.2015, 10:24

Можно настроить sudo позволить ряду пользователей работать mount команда.

Обновление: относительно того, как можно повредить систему путем монтирования? Например, можно создать корневую оболочку setuid в файловой системе, которую можно затем смонтироваться и выполнить для получения прав пользователя root.

3
27.01.2020, 19:34
  • 1
    я думал об этом, но не будет это требовать, чтобы пользователь выполнил команду с sudo? Кроме того, разве это не пользователь root, монтирующий файловую систему, только негласно, с этим методом? –   18.10.2013, 17:32
  • 2
    Да, им был бы нужен sudo, и да он будет работать от имени корня. Для решения первого выпуска Вы могли исказить mount кому: sudo mount или используйте сценарий обертки. –  Jester 18.10.2013, 17:43
  • 3
    То, что я хотел бы иметь, должно смонтировать файловую систему без агентства пользователя root. Маскирование этого агентства с чем-либо не то, что я после вообще. –   18.10.2013, 17:48
  • 4
    Отметьте это даже добавление user к fstab только работает потому что mount корень setuid. Ядро проверяет на корень или CAP_SYS_ADMIN возможность, таким образом, Вы не можете действительно обойти корень вовлечения. А-ч –  Jester 18.10.2013, 17:51
  • 5
    Можно ли настроить, как? Это не помогает. –  Nuzzolilo 01.01.2016, 10:23

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

При подведении итогов других 2 вопросов я скажу это:

  • fstab сильно для монтирования в постоянном хранении времени начальной загрузки. Не настолько замечательно, когда Вы хотите включить карты памяти или смонтировать иногда некоторые сетевые ресурсы.

  • sudo mount также в порядке, если Вы находитесь на человечности* системы. Необходимо будет все еще ввести в пароле все же.

  • udev будет заботиться о монтирующихся вещах как палки usb, камеры и карты флэш-памяти в человечности* системы (но не в меньшем количестве удобных для пользователя дистрибутивов как debian, slackware, и т.д.)

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

Существуют МНОГИЕ руководства для использования его там, таким образом, я не предложу никакой конкретный. Я скажу, что использовал веб-сайт проекта документации Linux для приобретения знаний об этом.

С чем больше sudoers это, можно смонтировать устройства и доли прозрачно - даже, не обеспечивая пароль, если Вы принимаете решение сделать так (быть дополнительны осторожный относительно этого).

То, что я обычно делаю в среде управления, я использую sudoers файл, чтобы позволить пользователям определенной группы монтировать сетевые ресурсы прозрачно. Таким образом, я добавляю команды mount.nfs и mount.cifs в sudoers файле, что разрешение операций тех, которые "монтируют домашнюю папку пользователя от сетевого файлового сервера, когда пользователь входит в систему клиентского терминала" и studd как этот.

0
27.01.2020, 19:34
  • 1
    При использовании sudo для разрешения монтированию пользователя их домашние папки после входа в систему, необходимо посмотреть на autofs. –  derobert 18.10.2013, 19:11
  • 2
    я использую их вместе; я не мог выяснить, как использовать autofs самостоятельно смонтироваться /home/$USER от файлового сервера, к местоположению /home/$USER/fromFS/ на клиентском ПК. –  nass 18.10.2013, 19:15

Здесь вики для настройки правил polkit для udisks/udisks2, чтобы монтировать разделы не корневыми (например, пользователями) группами.

Сохраните код ниже в /etc/polkit-1/rules.d/50-udisks.rules

polkit.addRule(function(action, subject) {
  var YES = polkit.Result.YES;
  var permission = {
    // only required for udisks1:
    "org.freedesktop.udisks.filesystem-mount": YES,
    "org.freedesktop.udisks.filesystem-mount-system-internal": YES,
    "org.freedesktop.udisks.luks-unlock": YES,
    "org.freedesktop.udisks.drive-eject": YES,
    "org.freedesktop.udisks.drive-detach": YES,
    // only required for udisks2:
    "org.freedesktop.udisks2.filesystem-mount": YES,
    "org.freedesktop.udisks2.filesystem-mount-system": YES,
    "org.freedesktop.udisks2.encrypted-unlock": YES,
    "org.freedesktop.udisks2.eject-media": YES,
    "org.freedesktop.udisks2.power-off-drive": YES,
    // required for udisks2 if using udiskie from another seat (e.g. systemd):
    "org.freedesktop.udisks2.filesystem-mount-other-seat": YES,
    "org.freedesktop.udisks2.encrypted-unlock-other-seat": YES,
    "org.freedesktop.udisks2.eject-media-other-seat": YES,
    "org.freedesktop.udisks2.power-off-drive-other-seat": YES
  };
  if (subject.isInGroup("users")) {
    return permission[action.id];
  }
});

Предположим, что вы находитесь в группе "users", используя следующую команду для монтирования раздела (не нужно sudo).

# udisks2
udisksctl mount --block-device /dev/sda1

# udisks
udisks --mount /dev/sda1
8
27.01.2020, 19:34

1 Посмотрите, где это работает

На Xubuntu он работает "из коробки", чтобы монтировать и извлекать USB-накопитель, разделы жесткого диска, CD / DVD и, возможно, многое другое.

Предположим, что решение, выбранное Ubuntu с помощью policyKit, достаточно безопасно.

2 Выберите соответствующую часть

В XFCE в Debian 8.3 мне нужно было разрешить пользователю монтировать и извлекать файловые системы из thunar без пароля. Что сработало для меня, так это выбор файла разрешений из Ubuntu.

Добавление строк ниже как root в файл с именем /var/lib/polkit-1/localauthority/10-vendor.d/com.ubuntu.desktop.pkla должно помочь:

[Mounting, checking, etc. of internal drives]
Identity=unix-group:admin;unix-group:sudo
Action=org.freedesktop.udisks.filesystem-*;org.freedesktop.udisks.drive-ata-smart*;org.freedesktop.udisks2.filesystem-mount-system;org.freedesktop.udisks2.encrypted-unlock-system;org.freedesktop.udisks2.filesystem-fstab;
ResultActive=yes

3 Прибыль!

(На самом деле я выбрал немного больше из файла с таким же именем в Ubuntu 16.04, и это сработало для меня. Если вам это нужно, это в основном выглядит как содержимое https: //gist.github .com / kafene / 5b4aa4ebbd9229fa2e73 )

6
27.01.2020, 19:34

guestmounttrucos de libguestfs

sudo apt-get install libguestfs-tools

# Workarounds for Ubuntu 18.04 bugs.
# https://serverfault.com/questions/246835/convert-directory-to-qemu-kvm-virtual-disk-image/916697#916697
sudo rm -rf /var/cache/.guestfs-*
echo dash | sudo tee /usr/lib/x86_64-linux-gnu/guestfs/supermin.d/zz-dash-packages
sudo chmod +r /boot/vmlinuz-*

# Create a test image.
mkdir sysroot
dd if=/dev/urandom of=sysroot/myfile bs=1024 count=1024
virt-make-fs --format=raw --type=ext2 sysroot sysroot.ext2

# Mount it, have fun, unmount!
mkdir -p mnt
# /dev/sda becuase we have a raw filesystem.
guestmount -a sysroot.ext2.qcow2 -m /dev/sda mnt
cmp sysroot/myfile mnt/myfile
guestunmount mnt

Se basa en:

  • implementación de los sistemas de archivos en la zona de usuario
  • FUSIBLE

Documentos:http://libguestfs.org/guestmount.1.html

Probado en Ubuntu 18.04, libguestfs -herramientas 1 :1.36.13 -1ubuntu3.

0
27.01.2020, 19:34

Теги

Похожие вопросы