Ну, я думал, что это будет проще, но я просто не могу понять, осуществимо ли то, что я хочу.
Я хочу смонтировать сетевой ресурс 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 umount /tmp/myshare
$
... и поскольку ошибок не сообщается, я предполагаю, что все прошло успешно, но затем я пробую:
$ ls /tmp/myshare
file_from_share01.txt file_from_share02.txt ...
... файлы все еще перечислены, поэтому общий ресурс смонтирован; оказывается (черезhttps://stackoverflow.com/questions/74626/how-do-you-force-a-cifs-connection-to-unmount) Чтобы размонтировать его, мне нужно сделать:
$ sudo umount -a -t cifs -l
Вот в чем сложность: если я хочу подключиться как обычный пользователь и при этом указать имя пользователя SMB, мне придется написать ту же команду, что и выше, но без sudo
:
$ mount -t cifs -o user=MYUSER //192.0.2.1/myshare /tmp/myshare
mount: only root can use "--options" option
Так что, может быть, ямогв противном случае запустил это как не-root,еслиМне не пришлось использовать эту user
опцию, но я ее использую. Так что я не могу использовать эту команду.
Одним из вариантов решения этой проблемы является указание опций в 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-launch bash
$ gvfs-mount smb://192.0.2.1/myshare
This tool has been deprecated, use 'gio mount' instead.
See 'gio help mount' for more info.
Password required for share myshare on 192.0.2.1
User [locuser]: MYUSER
Domain [WORKGROUP]:
Password:
$
В этот момент кажется, что он смонтировался, но на самом деле этого не произошло:
$ ls /run/user/1000/gvfs/
$
... и через gvfs-mount -l
, мы можем увидеть, что соответствующей точки монтирования нет:
$ gvfs-mount -l
...
Volume(3): test_nfs
Type: GProxyVolume (GProxyVolumeMonitorUDisks2)
Mount(0): test_nfs -> file:///tmp/test_nfs
Type: GProxyMount (GProxyVolumeMonitorUDisks2)
Mount(0): myshare on 192.0.2.1 -> smb://192.0.2.1/myshare/
Type: GDaemonMount
... и поэтому мы в любом случае не сможем получить доступ ни к каким файлам с помощью этого «монтирования».
Опять же, как это размонтировать - вы не можете этого сделать umount /tmp/myshare
, оно даже не считается смонтированным; обнаружил, что здесьРазмонтируйте общий ресурс gvfs samba с открытым файлом:
$ ls ~/.gvfs
ls: cannot access '~/.gvfs': No such file or directory
$ gvfs-mount -u smb://192.0.2.1/myshare
This tool has been deprecated, use 'gio mount' instead.
See 'gio help mount' for more info.
После этого проверка с помощью gvfs-mount -l
подтверждает, что акция действительно исчезла)
И в ответ на упоминание gio mount
- во-первых, отметим, что без запуска сеанса dbus происходит сбой:
$ gio mount smb://192.0.2.1
gio: smb://192.0.2.1: volume doesn’t implement mount
... затем, внутри оболочки, запущенной dbus-launch bash
, он ведет себя точно так же, как gvfs-mount
:
$ gio mount smb://192.0.2.1/myshare
Password required for share myshare on 192.0.2.1
User [locuser]: MYUSER
Domain [WORKGROUP]:
Password:
$
Похоже, он смонтировался, но:
$ gio mount -l
...
Volume(3): test_nfs
Type: GProxyVolume (GProxyVolumeMonitorUDisks2)
Mount(0): test_nfs -> file:///tmp/test_nfs
Type: GProxyMount (GProxyVolumeMonitorUDisks2)
Mount(0): myshare on 192.0.2.1 -> smb://192.0.2.1/myshare/
Type: GDaemonMount
... снова нет точки монтирования локального каталога.
Учитывая вышесказанное: возможно ли смонтировать общий ресурс SMB из командной строки, не изменяя никаких локальных файлов (таких как , и особенно /etc/fstab
), без sudo и с правами чтения/записи (которые, как я подтвердил в Windows, есть у пользователя SMB MYUSER) — и если да, то как?
решение1
Ну, размещаю это как ответ, поскольку, как оказалось, некоторые из этих команд gvfs
/ gio
, по-видимому, сработали - я просто, по-видимому, не смотрел на нужную папку монтирования; по-видимому, в моем Ubuntu 20.04 это не так:
$ ls ~/.gvfs
ls: cannot access '~/.gvfs': No such file or directory
... но вместо того, чтобы:
$ ls ~/.cache/gvfs/
'smb-share:server=192.0.2.1,share=myshare'
... и файлы там, и я могу читать/писать... Теперь я озадачен, как они все еще там, ведь я, кажется, отмонтировал их... ну ладно.
Ну, я рад, что после всех этих десятилетий развития, обмен файлами стал таким простым в наши дни! И с нетерпением жду дальнейших изменений, надеюсь, мы увидим их ~/.cache/.etc/gvfs-2/
в использовании, так что мы получим еще больше поломок и еще больше бесполезных ответов, на изучение которых нам придется тратить часы! Разве развитие технологий не здорово?:)
решение2
Точка монтирования не находится под~/.cache/gvfs/это под/run/user/1000/gvfs
Замените 1000 на свой собственный номер UID.
Я смонтирую одну из своих собственных акций:
~$ gio mount smb://vubmate2004.local/Private
Password required for share private on vubmate2004.local
User [tester]: tester
Domain [WORKGROUP]:
Password:
Я проверю, смонтировано ли оно:
~$ ls -al /run/user/1000/gvfs
total 0
dr-x------ 3 tester tester 0 Jan 5 15:08 .
drwx------ 10 tester tester 300 Jan 5 15:13 ..
drwx------ 1 tester tester 0 Jan 5 15:14 'smb-share:server=vubmate2004.local,share=private'
Я проверю содержимое смонтированного общего ресурса:
~$ ls -al /run/user/1000/gvfs/smb-share:server=vubmate2004.local,share=private
total 0
drwx------ 1 tester tester 0 Jan 5 15:14 .
dr-x------ 3 tester tester 0 Jan 5 15:08 ..
-rwx------ 1 tester tester 0 Jan 5 15:14 'new file'
Я отключу общий ресурс:
~$ gio mount -u smb://vubmate2004.local/Private
Я проверю, смонтировано ли оно еще:
~$ ls -al /run/user/1000/gvfs
total 0
dr-x------ 2 tester tester 0 Jan 5 15:08 .
drwx------ 10 tester tester 300 Jan 5 15:13 ..