2016年5月6日金曜日

LinuxホストとWindows仮想マシン間でフォルダ共有

LinuxホストとWindowsゲスト間でフォルダ共有
仮想マシン上のゲストOSとホストOS間で、フォルダを共有する方法をまとめておく。構成は以下のとおり。
  • ホストOS:Arch Linux x86_64
  • ゲストOS:Windows XP Home Edition SP3
  • 仮想環境:QEMU/KVM
  • 共有サーバー:Samba 4.4.2-1
仮想環境はQEMU/KVMで行ったが、VirtualBox等の環境を用いても手順は同じになる。

Sambaのインストールと設定
Sambaのインストール
ホストOSにSambaをインストールする。Arch Linuxでは、パッケージマネージャーのpacmanからインストールする。
# pacman -S samba

resolving dependencies...
looking for conflicting packages...

Packages (3) gamin-0.1.10-8  iniparser-4.0-2  samba-4.4.2-1

Total Download Size:    4.67 MiB
Total Installed Size:  31.77 MiB
...
(1/3) installing gamin                                           [####################################] 100%
Optional dependencies for gamin
    python2: for the python module [installed]
(2/3) installing iniparser                                       [####################################] 100%
(3/3) installing samba

ネットワーク構成の確認
ホストOS上にSambaのサーバーを立てることになるので、ホストOSのネットワーク構成を確認しておく。

ipコマンドによって、ホストOS上のインターフェースのIPアドレスを確認しておく。QEMU/KVM, virt-managerを利用した仮想環境では、デフォルトでvirbr0が作成され、192.168.122.1/24が割り当てられている。
$ ip a

...
3: virbr0: <broadcast> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 52:54:00:95:17:37 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
...
</broadcast>

次に、ゲストOSに対して割り当てられるIPアドレスを確認しておく。QEMU/KVM, virt-managerを利用した仮想環境では、デフォルトでdnsmasqをDHCPサーバーとして使用し、ゲストOSに対してIPアドレスを割り当てるようになっている。プロセスを確認してみる。
$ ps -fe | grep dnsmasq

...
root      1044  1043  0 10:46 ?        00:00:00 /sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/lib/libvirt/libvirt_leaseshelper
...

読み込んでいる設定ファイル/var/lib/libvirt/dnsmasq/default.confを確認してみると、DHCPのリリース範囲が192.168.122.2〜192.168.122.254(dhcp-range)であると分かる。
$ cat /var/lib/libvirt/dnsmasq/default.conf

##WARNING:  THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE
##OVERWRITTEN AND LOST.  Changes to this configuration should be made using:
##    virsh net-edit default
## or other application using the libvirt API.
##
## dnsmasq conf file created by libvirt
strict-order
pid-file=/var/run/libvirt/network/default.pid
except-interface=lo
bind-dynamic
interface=virbr0
dhcp-range=192.168.122.2,192.168.122.254
dhcp-no-override
dhcp-lease-max=253
dhcp-hostsfile=/var/lib/libvirt/dnsmasq/default.hostsfile
addn-hosts=/var/lib/libvirt/dnsmasq/default.addnhosts

Sambaの設定
Sambaの設定ファイル/etc/samba/smb.confを作成し編集する。テンプレートファイルがあるので、コピーしてから編集する。
# cp -arp /etc/samba/smb.conf.default /etc/samba/smb.conf

/etc/samba/smb.confは以下のように編集した。ポイントをまとめておく。
  • virtbr0のIPアドレスを、interfacesのIPアドレスに設定する。(192.168.122.1/24)
  • dnsmasqのdhcp-rangeを、hosts allowに設定する。(192.168.122.)
  • ユーザー管理はtdb(Trivial Database; 軽量なデータベース)で行う。

# vim /etc/samba/smb.conf

# This is the main Samba configuration file. You should read the
# smb.conf(5) manual page in order to understand the options listed
# here. Samba has a huge number of configurable options (perhaps too
# many!) most of which are not shown in this example
#
# Any line which starts with a ; (semi-colon) or a # (hash) 
# is a comment and is ignored. In this example we will use a #
# for commentry and a ; for parts of the config file that you
# may wish to enable
#
# NOTE: Whenever you modify this file you should run the command "testparm"
# to check that you have not made any basic syntactic errors. 
#
#======================= Global Settings =====================================
[global]
   dos charset = CP932 ←追加
   unix charset = UTF-8 ←追加
   netbios name = SMBSERV ←追加
   private dir = /etc/samba/private ←追加
   passdb backend = tdbsam:/etc/samba/private/passdb.tdb ←追加

# workgroup = NT-Domain-Name or Workgroup-Name
   workgroup = MSHOME ←編集

# server string is the equivalent of the NT Description field
   server string = Samba Server

# This option is important for security. It allows you to restrict
# connections to machines which are on your local network. The
# following example restricts access to two C class networks and
# the "loopback" interface. For more examples of the syntax see
# the smb.conf man page
   hosts allow = 127.0.0.1 192.168.122. ←編集

# if you want to automatically load your printer list rather
# than setting them up individually then you'll need this
   printcap name = /etc/printcap
   load printers = no ←編集

# It should not be necessary to spell out the print system type unless
# yours is non-standard. Currently supported print systems include:
# bsd, sysv, plp, lprng, aix, hpux, qnx
;   printing = bsd

# Uncomment this if you want a guest account, you must add this to /etc/passwd
# otherwise the user "nobody" is used
;  guest account = pcguest

# this tells Samba to use a separate log file for each machine
# that connects
   log file = /var/log/samba/%m.log

# Put a capping on the size of the log files (in Kb).
   max log size = 50

# Security mode. Most people will want user level security. See
# security_level.txt for details.
   security = user
# Use password server option only with security = server
;   password server = <NT-Server-Name>

# Password Level allows matching of _n_ characters of the password for
# all combinations of upper and lower case.
;  username level = 8

# You may wish to use password encryption. Please read
# ENCRYPTION.txt, Win95.txt and WinNT.txt in the Samba documentation.
# Do not enable this option unless you have read those documents
;  encrypt passwords = yes
;  smb passwd file = /etc/samba/smbpasswd

# The following are needed to allow password changing from Windows to
# update the Linux sytsem password also.
# NOTE: Use these with 'encrypt passwords' and 'smb passwd file' above.
# NOTE2: You do NOT need these to allow workstations to change only
#        the encrypted SMB passwords. They allow the Unix password
#        to be kept in sync with the SMB password.
;  unix password sync = Yes
;  passwd program = /usr/bin/passwd %u
;  passwd chat = *New*UNIX*password* %n\n *ReType*new*UNIX*password* %n\n *passwd:*all*authentication*tokens*updated*successfully*

# Unix users can map to different SMB User names
;  username map = /etc/samba/smbusers

# Using the following line enables you to customise your configuration
# on a per machine basis. The %m gets replaced with the netbios name
# of the machine that is connecting
;   include = /etc/samba/smb.conf.%m

# Configure Samba to use multiple interfaces
# If you have multiple network interfaces then you must list them
# here. See the man page for details.
   interfaces = 192.168.122.1/24 ←編集
...
# DNS Proxy - tells Samba whether or not to try to resolve NetBIOS names
# via DNS nslookups. The built-in default for versions 1.9.17 is yes,
# this has been changed in version 1.9.18 to no.
   dns proxy = no 

# Case Preservation can be handy - system default is _no_
# NOTE: These can be set on a per share basis
;  preserve case = no
;  short preserve case = no
# Default case is normally upper case for all DOS files
;  default case = lower
# Be very careful with case sensitivity - it can break things!
;  case sensitive = no

#============================ Share Definitions ==============================
[homes]
   comment = Home Directories
   browseable = no
   writable = yes
   path = %H/Samba ←追加
   valid users = ユーザー名 ←追加(ユーザー名は適宜変更)
...
↓[printers]の設定は、すべてコメントアウト
# NOTE: If you have a BSD-style print system there is no need to 
# specifically define each individual printer
;[printers]
;   comment = All Printers
;   path = /var/spool/samba
;   browseable = no
# Set public = yes to allow user 'guest account' to print
;   guest ok = no
;   writable = no
;   printable = yes
...

testparmを実行して、設定が正しいか確認する。/etc/samba/smb.confで設定されている変数は、以下の通り。
$ testparm /etc/samba/smb.conf

Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Processing section "[homes]"
Loaded services file OK.
Server role: ROLE_STANDALONE

Press enter to see a dump of your service definitions

# Global parameters
[global]
 dos charset = CP932
 interfaces = 192.168.122.1/24
 netbios name = SMBSERV
 server string = Samba Server
 workgroup = MSHOME
 log file = /var/log/samba/%m.log
 max log size = 50
 load printers = No
 printcap name = /etc/printcap
 passdb backend = tdbsam:/etc/samba/private/passdb.tdb
 private dir = /etc/samba/private
 security = USER
 dns proxy = No
 idmap config * : backend = tdb
 hosts allow = 127.0.0.1 192.168.122.


[homes]
 comment = Home Directories
 path = %H/Samba
 browseable = No
 read only = No
 valid users = ユーザー名

Sambaユーザーの追加
pdbeditからSambaユーザーを追加する。「ユーザー名」には、上記でvalid usersに設定したものを入力する。パスワードはSambaの共有フォルダにアクセスするときに使われるパスワードなので、UNIXパスワード以外のものでよい。
# pdbedit -a ユーザー名

new password:
retype new password:

Unix username:        ユーザー名
NT username:          
Account Flags:        [U          ]
User SID:             S-1-5-21-3800208801-2817170176-1220739761-1000
Primary Group SID:    S-1-5-21-3800208801-2817170176-1220739761-513
Full Name:            
Home Directory:       \\smbserv\ユーザー名
HomeDir Drive:        
Logon Script:         
Profile Path:         \\smbserv\ユーザー名\profile
Domain:               SMBSERV
Account desc:         
Workstations:         
Munged dial:          
Logon time:           0
Logoff time:          木, 07  2月 2036 00:06:39 JST
Kickoff time:         木, 07  2月 2036 00:06:39 JST
Password last set:    金, 06  5月 2016 17:26:19 JST
Password can change:  金, 06  5月 2016 17:26:19 JST
Password must change: never
Last bad password   : 0
Bad password count  : 0
Logon hours         : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

Sambaサーバーの起動
systemdのSambaユニットを起動する。
# systemctl start smbd.service 
# systemctl enable smbd.service 

Created symlink from /etc/systemd/system/multi-user.target.wants/smbd.service to /usr/lib/systemd/system/smbd.service.

Windowsから共有フォルダにアクセスする方法
エクスプローラーからSambaサーバーにアクセス
マイコンピュータを開いて、「表示」→「ツールバー」→「アドレスバー」を選択して、アドレスバーを表示させる。


アドレスバーにSambaサーバーのIPアドレス(ここでは、上記のinterfacesに設定した192.168.122.1)を\\と\で挟んで入力し、「移動」をクリック。

 
認証画面が出てくるので、上記で設定したユーザー名(valid usersに設定したもの)とパスワード(pdbeditのウィザードにより設定したもの)を入力。


認証ができると、共有フォルダが表示される。


ネットワークドライブの割り当て
共有フォルダをネットワークドライブに割り当てておくと、マイコンピュータ上に表示することができアクセスしやすくなる。共有フォルダを右クリックして、「ネットワークドライブの割り当て」を選択。


ウィザードが立ち上がるので、ドライブ文字を割り当てて「完了」。


マイコンピュータを開くと、ネットワークドライブが割り当てられているのが確認できる。




参考:
[1]smb.conf
[2]Samba - ArchWiki

スポンサーリンク

スポンサーリンク


関連コンテンツ


この記事をシェアする

2 件のコメント:

  1. > Sambaのインストール
    >ゲストOSにSambaをインストールする。Arch Linuxでは、パッケージマネージャーのpacmanからインストールする。
    とあるのですが、これは「ホストOS」の間違いだったりしますか?

    返信削除
    返信
    1. 返信が遅くなり、申し訳ありません。また、ご指摘いただきありがとうございました。

      おっしゃる通り、ゲストOSではなくホストOSでした。記事の内容を修正しましたので、ご確認いただければ幸いです。

      今後とも、当ブログをよろしくお願いします。

      削除