Ну, я думал, что это было бы проще, но я просто не могу найти, выполнимо ли то, что я хочу.
Я хочу смонтировать сетевой ресурс Samba из командной строки в Ubuntu 20.04 (MATE) - желательно без каких-либо изменений в файлах или сохранения настроек куда-либо; просто командная строка.
Итак, сначала я попробовал:
sudo mount -t cifs -o user=MYSMBUSER //192.0.2.1/myshare /tmp/myshare
Это отлично работает - в смысле монтирования, просмотра файлов и предоставления доступа к файлам только для чтения; но он не позволяет записывать файлы (отказано в доступе).
Это видимо из-за:
https://unix.stackexchange.com/questions/68079/mount-cifs-network-drive-write-permissions-and-chown
Вы монтируете общий ресурс CIFS как root (потому что вы использовали sudo), поэтому вы не можете писать как обычный пользователь. Если ваш дистрибутив Linux и его ядро достаточно новые, чтобы вы могли смонтировать сетевую папку как обычный пользователь (но в папке, которой владеет пользователь), у вас будут соответствующие учетные данные для записи файла.
Да, я хочу «подключить общий сетевой ресурс как обычный пользователь», и это может показаться вариантом, однако мое имя пользователя в Ubuntu отличается от имени пользователя Samba, поэтому:
Альтернативой является указание идентификатора пользователя и группы, который должен использовать смонтированный сетевой ресурс, это позволит этому конкретному пользователю и, возможно, группе записывать в общий ресурс. Добавьте к вашему монтированию следующие параметры: ...
Первая проблема - как размонтировать вышеперечисленное; Я сделал:
$ sudo размонтировать /tmp/myshare
$
... и поскольку он не сообщает об ошибках, я предполагаю, что он завершился нормально, но затем я пытаюсь:
$ лс /tmp/myshare
файл_из_общего_ресурса01.txt файл_из_общего_ресурса02.txt ...
... файлы все еще перечислены, поэтому общий ресурс смонтирован; оказывается (через https://stackoverflow.com/questions/74626/how-do-you-force-a-cifs-connection-to-unmount ), чтобы размонтировать его, я должен сделать:
$ sudo umount -a -t cifs -l
Вот сложная часть - если я хочу подключиться как обычный пользователь, но указать имя пользователя SMB, мне придется написать ту же команду, что и выше, но без судо:
$ mount -t cifs -o user=МОЙ ПОЛЬЗОВАТЕЛЬ //192.0.2.1/myshare /tmp/myshare
mount: только root может использовать опцию "--options"
Так что, может быть, я мог в противном случае запускали это как не root, если мне не пришлось использовать пользователь вариант - но я делаю. Поэтому я не могу использовать эту команду.
Одно из предложений обойти это — указать параметры в fstab — через
смонтировать общую папку cifs без sudo :
Чтобы иметь возможность монтировать эту папку как обычный пользователь, включите параметры монтирования для папки cifs в файле конфигурации /etc/fstab и добавьте параметры noauto,user,
Тем не менее, я делаю нет хочу сделать это, потому что я не хочу вести записи учетных данных SMB на своей машине - и если мне нужно отредактировать fstab, то я должен удалить запись из fstab после того, как это будет сделано, и обычно в это время время я устал, я мог забыть, бла-бла.
Я обнаружил, что это, вероятно, какая-то функция безопасности:
https://unix.stackexchange.com/questions/365308/use-mount-o-with-a-non-root-user
Ограничение -o (его может указать только пользователь root) предназначено для защиты системы: администратор может установить любые необходимые параметры, либо непосредственно с помощью -o, либо с помощью /etc/fstab; пользователи могут смонтировать или размонтировать только управляемые пользователем файловые системы без указания параметров, поскольку параметры файловой системы допускают ряд враждебных сценариев.В результате некоторые файловые системы поддерживают другие способы установки определенных параметров, например переменную среды USER, использованную выше с CIFS.
Да, но для меня более безопасно не вводить пути SMB в /etc/fstab вообще.
Итак, я действительно хотел бы смонтировать только с помощью командной строки без изменение любых конфигурационных файлов (включая /etc/fstab) везде.
Я надеялся, что есть другая команда, и я нашел gvfs-mount - но у меня такая же проблема, как Смонтировать общий ресурс SMB с помощью gvfs из командной строки :
$ dbus-запуск bash
$ gvfs-mount smb://192.0.2.1/myshare
Этот инструмент устарел, вместо него используйте 'gio mount'.
Для получения дополнительной информации см. «gio help mount».
Требуется пароль для общего доступа к myshare на 192.0.2.1
Пользователь [местопользователь]: MYUSER
Домен [РАБОЧАЯ ГРУППА]:
Пароль:
$
На данный момент кажется, что он смонтировался, но на самом деле это не так:
$ ls /run/пользователь/1000/gvfs/
$
... и через gvfs-mount -l, мы видим, что соответствующей точки монтирования нет:
$ gvfs-mount -l
...
Том (3): test_nfs
Тип: GProxyVolume (GProxyVolumeMonitorUDisks2)
Смонтировать (0): test_nfs -> файл:///tmp/test_nfs
Тип: GProxyMount (GProxyVolumeMonitorUDisks2)
Mount(0): myshare на 192.0.2.1 -> smb://192.0.2.1/myshare/
Тип: GDaemonMount
... и поэтому мы все равно не можем получить доступ к каким-либо файлам с этим «монтированием».
Опять же, как вы размонтируете это - вы не можете сделать размонтировать /tmp/myshare, он даже не считается смонтированным; обнаружил, что здесь Размонтировать общую папку gvfs samba с открытым файлом :
$ лс ~/.gvfs
ls: невозможно получить доступ к '~/.gvfs': нет такого файла или каталога
$ gvfs-mount -u smb://192.0.2.1/myshare
Этот инструмент устарел, вместо него используйте 'gio mount'.
Для получения дополнительной информации см. «gio help mount».
После этого проверка с gvfs-mount -l подтверждает, что доля действительно пропала)
И чтобы обратиться к упоминанию о Джио Маунт - во-первых, обратите внимание, что без запуска dbus-сессии происходит сбой с:
$ gio смонтировать smb://192.0.2.1
gio: smb://192.0.2.1: том не поддерживает монтирование
...затем в оболочке, запущенной dbus-запуск bash, он ведет себя точно так же, как gvfs-mount:
$ gio смонтировать smb://192.0.2.1/myshare
Требуется пароль для общего доступа к myshare на 192.0.2.1
Пользователь [местопользователь]: MYUSER
Домен [РАБОЧАЯ ГРУППА]:
Пароль:
$
Вроде смонтировал, но:
$ gio смонтировать -l
...
Том (3): test_nfs
Тип: GProxyVolume (GProxyVolumeMonitorUDisks2)
Смонтировать (0): test_nfs -> файл:///tmp/test_nfs
Тип: GProxyMount (GProxyVolumeMonitorUDisks2)
Mount(0): myshare на 192.0.2.1 -> smb://192.0.2.1/myshare/
Тип: GDaemonMount
... снова нет точки монтирования локального каталога.
Выше сказано: возможно ли смонтировать общий ресурс SMB из командной строки без изменения каких-либо локальных файлов (например, и особенно /etc/fstab), без sudo и с разрешениями r/w (которые я подтвердил в Windows, у пользователя SMB MYUSER) - и если да, то как?