コマンドラインから、fstab を使用せずに、非ルート、読み取り/書き込みとして Samba をマウントしますか?

コマンドラインから、fstab を使用せずに、非ルート、読み取り/書き込みとして Samba をマウントしますか?

まあ、これはもっと簡単だと思ったのですが、私が望むことが実行可能かどうかがどうしてもわかりません。

Ubuntu 20.04 (MATE) のコマンド ラインからネットワーク Samba 共有をマウントしたいのですが、できればファイルの変更や設定の保存はせずに、コマンド ラインのみでマウントしたいです。

そこでまず試したのは:

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 ユーザー名とは異なるため、次のようになります。

代替案としては、マウントされたネットワーク共有が使用するユーザーとグループ ID を指定する方法があります。これにより、特定のユーザーとグループが共有に書き込むことができるようになります。マウントに次のオプションを追加します: ...


最初の問題は、上記をどのようにアンマウントするかです。私は次のようにしました:

$ 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

だから、多分私はできたそうでなければ非ルートとしてこれを実行した、もしオプションを使用する必要はありませんでしたuserが、使用しました。そのため、このコマンドを実際に使用することはできません。

これを回避するための1つの提案は、fstabでオプションを指定することです。 sudo なしで共有 cifs フォルダをマウントする:

そのフォルダを通常のユーザーとしてマウントできるようにするには、設定ファイル/etc/fstabにcifsフォルダのマウントオプションを含め、オプションnoauto、user、を追加します。

しかし、私はないこれをやりたいのは、自分のマシンに SMB 資格情報の記録を保持したくないからです。また、fstab を編集する必要がある場合、編集が完了したら fstab からエントリを削除する責任は私にありますが、通常、そのときには疲れていて、忘れてしまう可能性があります。

これはおそらく何らかのセキュリティ機能であることがわかりました。

https://unix.stackexchange.com/questions/365308/use-mount-o-with-a-non-root-user

-o 制限 (root のみが指定可能) は、システムを保護するために設けられています。管理者は、-o を直接使用するか、/etc/fstab を使用して、必要なオプションを設定できます。一方、ユーザーは、オプションを指定せずに、ユーザー制御のファイル システムをマウントまたはアンマウントすることしかできません。これは、ファイル システム オプションによって、さまざまな悪意のあるシナリオが許容されるためです。その結果、一部のファイル システムでは、CIFS で上記で使用される USER 環境変数など、特定のオプションを設定する他の方法がサポートされています。

/etc/fstabええ、そうですが、私にとっては、SMB パスをまったく入力しない方が安全です。

だから、私は本当にマウントしたいただコマンドラインを使用してそれなし任意の設定ファイル( を含む/etc/fstab)をどこでも変更します。

別のコマンドがあることを期待して、見つけましたgvfs-mount- しかし、私は同じ問題を抱えていますコマンドラインからgvfsを使用してSMB共有をマウントする:

$ 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

...ここでも、ローカル ディレクトリのマウント ポイントはありません。


上記のことを踏まえると、ローカル ファイル ( 、特に など/etc/fstab) を変更せずに、sudo を使用せずに、r/w 権限 (Windows で SMB ユーザー MYUSER が持っていることを確認しました) を使用して、コマンド ラインから SMB 共有をマウントすることは可能ですか。また、可能な場合は、どのようにすればよいですか。

答え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/ユーザー/1000/gvfs

1000を自分のuid番号に置き換えてください

自分の共有の 1 つをマウントします。

~$ 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 ..

関連情報