LinuxホストとWindowsゲスト間でフォルダ共有
仮想マシン上のゲストOSとホストOS間で、フォルダを共有する方法をまとめておく。構成は以下のとおり。- ホストOS:Arch Linux x86_64
- ゲストOS:Windows XP Home Edition SP3
- 仮想環境:QEMU/KVM
- 共有サーバー:Samba 4.4.2-1
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
スポンサーリンク
> Sambaのインストール
返信削除>ゲストOSにSambaをインストールする。Arch Linuxでは、パッケージマネージャーのpacmanからインストールする。
とあるのですが、これは「ホストOS」の間違いだったりしますか?
返信が遅くなり、申し訳ありません。また、ご指摘いただきありがとうございました。
削除おっしゃる通り、ゲストOSではなくホストOSでした。記事の内容を修正しましたので、ご確認いただければ幸いです。
今後とも、当ブログをよろしくお願いします。