Смонтировать Samba из командной строки как не-root, чтение/запись, без fstab?

Смонтировать Samba из командной строки как не-root, чтение/запись, без fstab?

Ну, я думал, что это будет проще, но я просто не могу понять, осуществимо ли то, что я хочу.

Я хочу смонтировать сетевой ресурс 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 ..

Связанный контент