sambaによるLinuxとWindowsのファイル共有
LinuxとWindowsでは、ファイルシステム(NTFS、ext3)と文字コード(shift-jis、euc-jp、utf-8)が異なります。したがって、両者の間で正常にファイルをコピーするためには、ファイルシステム、文字コードを相互に変換する必要があります。このLinuxとWindowsのファイルシステム、文字コードの差異を意識せず、両者でファイルを共有する仕組みを提供するのがsambaと呼ばれるプログラムです。
必要なパッケージのインストール
$ sudo aptitude install samba smbfs
sambaの設定方法
まずは、sambaの設定ファイルを書き換えます。
[/etc/samba/smb.conf] [global] ## Browsing/Identification ### workgroup = Windowsで設定したワークグループ server string = %h server on samba %v dos charset = cp932 display charset = utf-8 unix charset = utf-8 ; wins support = no ; wins server = w.x.y.z dns proxy = no ; name resolve order = lmhosts host wins bcast #### Debugging/Accounting #### log file = /var/log/samba/log.%m max log size = 1000 ; syslog only = no syslog = 0 panic action = /usr/share/samba/panic-action %d ####### Authentication ####### security = user encrypt passwords = true passdb backend = tdbsam obey pam restrictions = yes ; guest account = nobody invalid users = root ; unix password sync = no passwd program = /usr/bin/passwd %u passwd chat = *Enter\snew\sUNIX\spassword:* %n\n *Retype\snew\sUNIX\spassword:* %n\n . ; pam password change = no ########## Domains ########### ; domain logons = yes ; logon path = \\%N\profiles\%U ; logon path = \\%N\%U\profile ; logon drive = H: ; logon home = \\%N\%U ; logon script = logon.cmd ; add user script = /usr/sbin/adduser --quiet --disabled-password --gecos "" %u ########## Printing ########## ; load printers = yes ; printing = bsd ; printcap name = /etc/printcap ; printing = cups ; printcap name = cups ; printer admin = @ntadmin ######## File sharing ######## ; preserve case = yes ; short preserve case = yes ############ Misc ############ ; include = /home/samba/etc/smb.conf.%m socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 ; message command = /bin/sh -c '/usr/bin/linpopup "%f" "%m" %s; rm %s' & ; domain master = auto ; idmap uid = 10000-20000 ; idmap gid = 10000-20000 ; template shell = /bin/bash ; winbind enum groups = yes ; winbind enum users = yes [homes] comment = /home/%u path = /home/%S browseable = no writable = yes create mask = 0644 directory mask = 0755 ;[netlogon] ; comment = Network Logon Service ; path = /home/samba/netlogon ; guest ok = yes ; writable = no ; share modes = no ;[profiles] ; comment = Users profiles ; path = /home/samba/profiles ; guest ok = no ; browseable = no ; create mask = 0600 ; directory mask = 0700 [printers] comment = All Printers browseable = no path = /var/spool/samba printable = yes public = no writable = no create mode = 0700 [print$] comment = Printer Drivers path = /var/lib/samba/printers browseable = yes read only = yes guest ok = no ; write list = root, @ntadmin ;[cdrom] ; comment = Samba server's CD-ROM ; writable = no ; locking = no ; path = /cdrom ; public = yes ; preexec = /bin/mount /cdrom ; postexec = /bin/umount /cdrom
sambaを利用すると、接続先のファイルシステムを操作できます。しかし、すべてのユーザからのアクセスを許可することはセキュリティ上よろしくないので、事前に登録したユーザのみsambaを利用することができます。samba3.0のユーザ登録にはsmbpasswdとpdbeditというコマンドを利用します。このとき、入力するパスワードは、WindowsからLinuxのファイルシステムにアクセスする際、またLinuxからWindowsのファイルシステムにアクセスする際に入力する必要があるパスワードです。
$ sudo smbpasswd -a username $ sudo pdbedit -a -u username
現在登録済みのユーザは以下のコマンドで確認することができます。
$ sudo pdbedit -L
最後にsmbdを起動します。
$ sudo /etc/init.d/samba restart
WindowsからLinuxのファイルシステムにアクセスする
事前にsambaを設定しておきます。そして、Windowsのexploreにおけるパスを"\\hostname\username"と直打ちすれば、Linuxの自分のホームディレクトリにアクセスできます。ファイルのコピー、削除、編集も自由自在です。
Windowsのネットワークドライブを利用すれば、一つのドライブとして認識させることもできます。また、smb.confのworkgroupがWindowsで設定してあるWORKGROUPと同一であれば、マイネットワークから同様にアクセスすることができます。
LinuxからWindowsのファイルシステムにアクセスする
事前にsambaを設定しておきます。ここでは、Windows(host名はwinhost)のフォルダD:\shareをLinux(host名はlinhost)の~/mnt/winhostにマウントしたいと仮定します。
まず、フォルダD:\shareのプロパティの[共有]タブから共有設定を有効にしておきます。そして、Linux側から
$ smbmount //winhost/share ~/mnt/winhost -U username
を実行すれば、~/mnt/winhost以下にD:\shareがマウントされます。アンマウントする場合は、以下の通りです。
$ smbumount ~/mnt/winhost