Страница 1 из 1

Монтирование без рут

Добавлено: 22 июн 2019, 11:40
FreeStyler
Хочу через терминал монтировать флеху как гуёвые проги монтируют, как то: Caja, Disks, Dolphin, Double Commander.
Может знает кто, каким чудом они это делают без рут прав?
Т.е. просто вставил флешку и нажал на неё - она автоматом подмонтируется. У меня только через sudo mount получается, подглядел в инете:
sudo mount -t vfat /dev/sdc1 /media/alex/flash -o uid=1000,gid=1000,utf8,dmask=027,fmask=137

Монтирование без рут

Добавлено: 22 июн 2019, 12:57
slant
Они не делают это без root прав. Там работает механизм схожий с sudo (для него есть возможность настроить запуск какой-либо конкретной программы пользователем с повышением прав, и даже сделать этот запуск безусловным - без запроса пароля). Для файловых менеджеров этот процесс в современных линуксах настраивают обычно через polkit.

Если нужно монтировать только определенный носитель известный заранее, есть простой способ. Добавляем в /etc/fstab примерно такое:

/dev/sdc /mnt/flashpen auto noauto,user 0 0

После чего команду mount /dev/sdc /mnt/flashpan может давать и обычный пользователь. Ключевые опции - noauto,user. Первая запрещает автоматически монтировать написанное в этой строчке, вторая - дает права непривилегированному пользователю.

Есть еще механизм automount для systemd - можно настроить автоматическое монтирование (определенных носителей в определенный каталог). Есть возможность сделать это еще через правила udev. Но это будет полное монтирование сразу по факту втыкания флешки, и размонтировать без прав root вручную тоже не выйдет. А давать через polkit или sudo обычному юзеру полный свободный доступ к mount и umount - грубейшее нарушение безопасности системы.

Монтирование без рут

Добавлено: 22 июн 2019, 13:34
FreeStyler
slant, хм, что-то как-то не верится, что портабельный Double Commander, запускаемый не под рутом имеет какое-то отношение к polkit и всякому такому...
slant писал(а):
22 июн 2019, 12:57
Добавляем в /etc/fstab
но это же тоже получается что нужен рут для редактирования этого файла и опять же - так вся динамика рушится, вдруг я ещё один ЖД подключу и уже он будет sdc

Блин, исходники что ли копать придётся :sad: так неохота...
Вообще я питонячий скрипт пишу дабы он монтировал флеху автоматом, когда я её встввляю. Я могу его и с судо запускать, хотелось бы как-то без судо обойтись.

Монтирование без рут

Добавлено: 22 июн 2019, 17:07
rogoznik
FreeStyler писал(а):
22 июн 2019, 13:34
портабельный Double Commander,
Он в принципе ничего не монтирует даже если установлен из реп. Он только знает какой "скрипт" нужно запустить для монтирования.

Монтирование без рут

Добавлено: 22 июн 2019, 17:38
Chocobo
slant писал(а):
22 июн 2019, 12:57
noauto
Поправь если я не ошибаюсь, но noauto вроде про сетевые шары параметр.
С дивана вещал, и перепутал его значение. :smile:

глянул в ман
noauto
Can only be mounted explicitly (i.e., the -a option will not cause the filesystem to be mounted).
...

Монтирование без рут

Добавлено: 22 июн 2019, 18:18
FreeStyler
darkfenix, ну даже если так, суть в том что он монтирует. Может кто знает какой он скрипт запускает? Или код этого скрипта? Без рута же это делает. Я бы тоже мог этот скрипт запускать.

Монтирование без рут

Добавлено: 22 июн 2019, 20:14
rogoznik
FreeStyler писал(а):
22 июн 2019, 18:18
Без рута же это делает.
Ты очень не внимательно читал пост slant. Перечитай вдумчиво и внимательно.

Монтирование без рут

Добавлено: 22 июн 2019, 20:50
FreeStyler
darkfenix, и шо там? -__-
Фига...

Монтирование без рут

Добавлено: 22 июн 2019, 21:11
rogoznik
FreeStyler, ну тогда я не знаю как тебе еще понятнее объяснить.

Монтирование без рут

Добавлено: 23 июн 2019, 07:21
FreeStyler
То ли лыжи не едут, то ли вижу фигу -__-

darkfenix, ну вот он описал 3 способа - полкит, фстаб, юдев.

1. Через полкит как я понимаю это DC должен сделать телодвижения, которые описаны здесь Запуск привилегированных приложений с pkexec (PolicyKit) ? Или я не так понял? Если не так, то, объясните пожалуйста поподробнее. А если так, то для этих телодвижений опять же нужны рут права.
2. Через фстаб - как уже писал выше "но это же тоже получается что нужен рут для редактирования этого файла и опять же - так вся динамика рушится, вдруг я ещё один ЖД подключу и уже он будет sdc" ну и думаю вряд ли DC лезет в фстаб.
3. С юдев та же ботва, которая в п.2, что и с фстаб.

Монтирование без рут

Добавлено: 23 июн 2019, 14:26
KOT040188
В sudoers отключить пароль для команды sudo mount. Ничего сложного.

Монтирование без рут

Добавлено: 23 июн 2019, 14:49
FreeStyler
KOT040188, а, ну это всё решает, спасибо!
Читать тему? Не, не слышал...

Монтирование без рут

Добавлено: 23 июн 2019, 19:01
rogoznik
FreeStyler, все намного проще. Эти правила уже написаны. И ФМ просто их дергает при необходимости. В этих правилах, вероятно, указано что выполнять эти действия с повышением прав, но без запроса пароля.

Монтирование без рут

Добавлено: 23 июн 2019, 19:29
FreeStyler
darkfenix, ага, так и есть, но не хотелось в исходник лезть...

лол, нашёл таки решение через исходник -__-

Искал через mount, нашёл такие строки

Код: Выделить всё

UDisksDeviceInterface = 'org.freedesktop.UDisks.Device';

message := dbus_message_new_method_call(UDisksAddress,
PChar(ObjectPath),
UDisksDeviceInterface,
'FilesystemUnmount');
Но я не заметил что код про отмонтирование - 'FilesystemUnmount', хотя может это и не важно.

Полез искать org.freedesktop.UDisks.Device, в итоге нашёл такой пост https://askubuntu.com/a/181854/743770

Из него попробовал

Код: Выделить всё

gdbus call --system --dest org.freedesktop.UDisks --object-path /org/freedesktop/UDisks/devices/sdc4 --method org.freedesktop.UDisks.Device.FilesystemMount "vfat" []
но он выдаёт ошибку.

В том же посте нашёл что есть уже UDisks2 и с помощью него можно сделать вывод списка дисков

Код: Выделить всё

gdbus introspect --system --dest org.freedesktop.UDisks2 --object-path /org/freedesktop/UDisks2/drives --recurse --only-properties
Ну и в том же посте нашёл таки ту самую команду, которую юзает сам DC:

Код: Выделить всё

udisksctl mount --block-device /dev/sdc1
udisksctl unmount --block-device /dev/sdc1
И по ней уже в исходниках нашёл, что это действительно так:

Код: Выделить всё

{$IF DEFINED(LINUX)}
if not Result and HaveUDisksCtl then
begin
Result:= RunCommand('udisksctl', ['mount', '-b', Drive^.DeviceId], MountPath);
if Result then
begin
Write(MountPath);
Index:= Pos(' at ', MountPath);
if Index > 0 then
begin
Inc(Index, 4);
Drive^.Path:= Copy(MountPath, Index, Length(MountPath) - Index - 1);
end;
end
end;
if not Result and uUDisks.Initialize then
begin
try
Result := uUDisks.Mount(DeviceFileToUDisksObjectPath(Drive^.DeviceId), EmptyStr, nil, MountPath);
except
on E: Exception do
begin
Result := False;
WriteLn(E.Message);
end;
end;
if Result then
Drive^.Path := MountPath;
uUDisks.Finalize;
end;
if not Result and HavePMount and Drive^.IsMediaRemovable then
Result := fpSystemStatus('pmount ' + Drive^.DeviceId) = 0;
{$ELSE IF DEFINED(DARWIN)}
Так что можно не морочиться с фстаб и прочей лабудой, и если есть, то юзать udisksctl :smile:

Монтирование без рут

Добавлено: 23 июн 2019, 20:21
KOT040188
FreeStyler писал(а):
23 июн 2019, 14:49
а, ну это всё решает, спасибо!
Читать тему? Не, не слышал...
Читал. А что?

Монтирование без рут

Добавлено: 24 июн 2019, 05:17
FreeStyler
KOT040188 писал(а):
23 июн 2019, 20:21
Читал. А что?
видимо по-диагонали или не понял смысла

Монтирование без рут

Добавлено: 24 июн 2019, 06:03
rogoznik
FreeStyler, рад что нашел как сделать. :thumbs:
А на кота не обращай внимания, он же кот :crazy:

Монтирование без рут

Добавлено: 24 июн 2019, 07:11
vir0id
FreeStyler писал(а):
22 июн 2019, 11:40
Т.е. просто вставил флешку и нажал на неё - она автоматом подмонтируется. У меня только через sudo mount получается, подглядел в инете:
sudo mount -t vfat /dev/sdc1 /media/alex/flash -o uid=1000,gid=1000,utf8,dmask=027,fmask=137
Т.е ты не хотел вводить в консоле sudo mount?

Монтирование без рут

Добавлено: 24 июн 2019, 07:27
FreeStyler
vir0id, я вообще не хотел ничего вводить, как я уже писал
FreeStyler писал(а):
22 июн 2019, 13:34
Вообще я питонячий скрипт пишу дабы он монтировал флеху автоматом, когда я её вставляю. Я могу его и с судо запускать, но хотелось бы как-то без судо обойтись, раз уж такая возможность есть и ею пользуются другие проги.
Ну и заодно выяснить есть ли действительно такая команда, как оказалось - есть.
Ну и udisksctl mount -b /dev/sdXY попроще таки, чем простыня

Код: Выделить всё

sudo mount -t vfat /dev/sdc1 /media/alex/flash -o uid=1000,gid=1000,utf8,dmask=027,fmask=137

Монтирование без рут

Добавлено: 26 июн 2019, 09:30
FreeStyler
Хм, сейчас пересмотрел код с исходником и заметил там ещё pmount.
На всякий случай оставлю это здесь)
https://ua3nbw.ru/all/avtomaunt-fleshek ... n-stretch/
https://raspberrypi.stackexchange.com/q ... thout-uuid