VirtualBox で Windows 10 から Samba 共有にアクセスする

VirtualBox で Windows 10 から Samba 共有にアクセスする

私はこの懸念について多くのユーザーの質問やブログを読みましたが、私の問題は解決しませんでした。

VirtualBox に Windows 10 ゲストがインストールされた Linux CENTOS ホストがあります。Linux には、ディレクトリ (777) を共有し、Samba ユーザー データベースに登録されている「myuser」というユーザーがいます。このユーザーにはパスワード制限はありません。smb.conf次のようになります。

[global]
workgroup = WORKSPACE_SHARE
security = user
map to guest = bad user

[public]
path = /home/myuser/public
public = yes
writeable = yes
comment = smb share
printable = no
guest ok = yes

Windows には、同じ名前 (「myuser」、パスワードは設定されていません) のローカル ユーザーがあり、ファイルとプリンターの共有が有効になっており、Microsoft クライアントが有効になっており、Samba ワークグループと一致し、プライベート ネットワークを使用するワークグループが設定されています。

エクスプローラーでは、確かに共有フォルダー ("public") を含む Linux ホストを確認できます。ただし、この共有フォルダーにアクセスしようとすると、次のエラー アラートが表示されます: アクセスする権限がありません...

インターネットで、「Windows 10 は SMBv3 を使用しますが、Samba はまだそれをサポートしていません」や SMBv3 をオフにする方法などを読みましたが、役に立ちませんでした。

Windows のローカル セキュリティ ポリシーを変更しても効果はありませんでした。https://superuser.com/a/916835/408191

この奇妙な問題をどうすれば解決できるでしょうか?

答え1

一部のLinuxディストリビューションでは、カーネルにSELinux実装と呼ばれるものが搭載されています。これは、「セキュリティ強化Linux」また、他の機能に加えて、Samba 共有を制限します。共有フォルダを作成する場合、適切なアクセス権限と定義を指定するだけでは不十分ですsamba.conf。共有フォルダの正しい「セキュリティ コンテキスト」も設定する必要があります。

次の権限マスクとセキュリティ コンテキストで問題が解決するはずです。

chmod -R 770 yoursharefolder
chcon -R -t samba_share_t yoursharefolder

さまざまなウィキからすでにわかっているすべての条件も遵守する必要があります。

  • 共有の所有者としての Unix ユーザーを Samba ユーザー データベースに追加する必要があります。smbpasswd -a youruser
  • Windowsマシンには、Sambaデータベースに設定されているのと同じ名前とパスワードを持つユーザーがいる必要があります。
  • 次のようになりますsamba.conf:

samba.conf(大文字の部分はすべて、関係する特定の環境に合わせてカスタマイズする必要があります):

[global]
workgroup = SAME_WORKGROUP_AS_CONFIGURED_IN_WINDOWS
server string = Samba Server %v
netbios name = HOST_NAME_OF_YOUR_LINUX_MACHINE_ON_NETWORK
security = user
map to guest = bad user
dns proxy = no

[yourshare]
path = /PATH/TO/YOURSHARE
valid users = YOUR_WINDOWS_USER_NAME
browsable = yes
writeable = yes
guest ok = no
read only = no
directory mask = 0770
create mask = 0770

編集:経由の変更はchcon永続的ではないことに注意してください。セキュリティ コンテキストを永続的に変更するには、次のコマンドを使用します。

semanage fcontext -a -t samba_share_t /full/path/to/your/share/folder

...そしてそれを効果的にするために:

restorecon -v /full/path/to/your/share/folder

関連情報