windowsXP(ホスト名:xp)の共有フォルダ(下図のShare[c:\Share])をLinuxから利用してみる。
ここではcifs-utilsパッケージを使用します。
このツールは、windowsの共有フォルダに特定アカウントでアクセスして、Linux側にリソースを提供します。
そのため、この特定アカウントがアクセスできる範囲ならLinuxでも利用できるが、そうでないならLinux側でも見えない。
なので管理者権限を有するアカウントでのアクセスが望ましいかと。
ここでは管理者権限をもつ supervisor アカウントをwindowsXPで作って、Administratorsグループに参加させた。

*Guestアカウントは無効にします
Share([c:\Share])フォルダのプロパティーから[共有]タブを開き、共有名はShareで、[アクセス許可]ボタンの押下の内容は
| グループ名またはユーザ名 | アクセス許可 |
| supervisor(XP\supervisor) | 変更、読み取り |
と定義する。[セキュリティ]タブは C:\Share フォルダ作成時のデフォルトをそのまま使用する。
CentOS6.7を使ってます。
[root@c104 ~]# yum install cifs-utils
*同じくインストールされるパッケージ
samba-common, samba-winbind, samba-winbind-clients,
libtdb, libtevent, libtalloc, keyutils
[root@c104 ~]#共有フォルダを提供しているwindowsマシンで利用可能なアカウントがsys、そのパスワードがxxxxxxであるなら、
[root@c104 ~]# mount.cifs //xp/share /mnt -o username=supervisor,passowrd=xxxxxxx
[root@c104 ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda3 ext4 6.3G 927M 5.1G 16% /
tmpfs tmpfs 939M 0 939M 0% /dev/shm
/dev/sda1 ext4 488M 73M 391M 16% /boot
//xp/share cifs 8.0G 4.2G 3.9G 52% /mnt
[root@c104 ~]#となる。オプションはいろいろあって、windows由来のフォルダ、ファイルのパーミッションを定めたり、その所有者を規定することも可能である。
下記の場合は、/mntはrootの所有で、配下のファイル、ディレクトリはrootしか参照できない。
[root@c104 ~]# umount /mnt
[root@c104 ~]# mount.cifs //xp/share /mnt -o username=supervisor,passowrd=xxxxxx,uid=root,gid=root,file_mode=0600,dir_mode=0700
[root@c104 ~]# ls -l /mnt/
合計 0
drwx------ 0 root root 0 12月 5 18:37 2015 em
drwx------ 0 root root 0 12月 5 18:37 2015 xray
[root@c104 ~]#/etc/fstabへの記述は下記のようにする。
//xp/share /mnt cifs username=supervisor,passowrd=xxxxxx,uid=root,gid=root,file_mode=0600,dir_mode=0700 0 0だが、このままだとパスワードが読まれてしまうので、credentialsオプションを使う。これはusernameとpassowrdを指定したファイルから読み込ませるオプションで、指定したファイルはroot以外読めないようにしておける。
[root@c104 ~]# cat /etc/cifscredentials
username=supervisor
password=xxxxxx
[root@c104 ~]# chmod 600 /etc/cifscredentials
[root@c104 ~]# umount /mnt
[root@c104 ~]# mount.cifs //xp/share /mnt -o credentials=/etc/cifscredentials,uid=root,gid=root,file_mode=0600,dir_mode=0700
(/etc/fstabには)
//xp/share /mnt cifs credentials=/etc/cifscredentials,uid=root,gid=root,file_mode=0600,dir_mode=0700 0 0ここでは次に示すsambaによる再公開を目指すので、
//xp/share /mnt cifs credentials=/etc/cifscredentials,uid=root,gid=root,file_mode=0644,dir_mode=0755 0 0
(autofsの場合)
/etc/auto.master
/- /etc/auto.cifs --timeout=600
/etc/auto.cifs
/mnt -fstype=cifs,credentials=/etc/cifscredentials,uid=root,gid=root,file_mode=0644,dir_mode=0755 ://xp/share <--「:」が必要として、どのユーザでも閲覧可能にしている。
留意 共有フォルダを提供するwindowsマシンがADに参加してADユーザでusernameに指定するには <domain名>/sys とする。ドメインに参加しても共有はローカルのユーザを使用するなら <hostname名>/sys とします。
windows10へアクセスすると「mount error(112): Host is down」と言われる。
smb1でのアクセスがダメなので、「-o vers=2.0」とか「-o vers=3.0」としてアクセスする。
共有ドライブのあるwindowsマシンがADに入っているならKerberos認証でパスワードなしでmount操作ができる
[illya@c ~]$ ssh silo
illya@silo's password:
[illya@silo ~]$ klist <-- sshログインでチケットを入手
Ticket cache: FILE:/tmp/krb5cc_1002_VgibTt
Default principal: illya@SYBYL.LOCAL
Valid starting Expires Service principal
06/20/2020 20:28:16 06/21/2020 06:28:16 krbtgt/SYBYL.LOCAL@SYBYL.LOCAL
renew until 06/21/2020 20:28:16
[illya@silo ~]$ sudo mount.cifs //win7u32bit/S /mnt -o cruid=illya,sec=krb5 <--[cruid]は指定ユーザのチケットを使うことを意味する
[illya@silo ~]$ df /mnt/
Filesystem 1K-blocks Used Available Use% Mounted on
//win7u32bit/S 33551356 92908 33458448 1% /mnt
[illya@silo ~]$一応、この段階でrootは何もチケットを持っていない
[illya@silo ~]$ su -
Password:
[root@silo ~]# klist
klist: No credentials cache found (filename: /tmp/krb5cc_0)
[root@silo ~]#ユーザ側のチケットを意図的に破棄すると mount できない.
[illya@silo ~]$ kdestroy <-- もっているチケットを破棄する
[illya@silo ~]$ klist
klist: No credentials cache found (filename: /tmp/krb5cc_1002_I6FEal) <--- なにもチケットがない状態
[illya@silo ~]$ sudo mount.cifs //win7u32bit/S /mnt -o cruid=illya,sec=krb5 -v
mount.cifs kernel mount options: ip=192.168.0.59,unc=\\win7u32bit\S,sec=krb5,cruid=1002,user=root,pass=********
mount error(126): Required key not available
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)
[illya@silo ~]$*visudoでユーザにroot権限をNOPASSWORDで下記のように降ってます
[root@silo ~]# visudo
:
illya ALL=(ALL) NOPASSWD:/sbin/mount.cifs,/bin/umount
:
[root@silo ~]#参照先: https://superuser.com/questions/1082450/mount-a-samba-share-using-kerberos-ticket
windowsで公開されているフォルダ/ファイルをLinuxでマウントして、再度sambaで公開してみる。
windows A -> centos -> windows B

192.168.0.x側から複数の10.0.1.xなPCの共有フォルダを参照したい場合、一端中継となるcentos側で複数の共有フォルダをマウントして、192.168.0.x側に提供した方が楽。centos側でproxy機能を提供すれば済む話かもしれないけど。。
っで。/mntを192.168.0.x側のPCに公開するためにsambaをインストールする
[root@c104 ~]# yum install samba
*同じくインストールされるパッケージ
avahi-libs, cups-libs, gnutls, libjpeg-turbo, libpng, libtiff
perl, perl-Module-Pluggable, perl-Pod-Escapes, perl-Pod-Simple, perl-libs, perl-version
*っで、このマウントした箇所をsambaで再公開って違反かな?sambaで再公開するとユーザ接続制限が、、、
sambaの設定ファイルを定義する
[root@c104 ~]# cat /etc/samba/smb.conf
[global]
workgroup = MYGROUP
dos charset = CP932
unix charset = UTF-8
display charset = UTF-8
security = user
passdb backend = tdbsam
load printers = no
cups options = bsd
printcap name = /dev/null
map to guest = bad password
[share]
path = /mnt
guest ok = yes
read only = yes
browseable = yes
[root@c104 ~]#そして、sambaを起動させる
[root@c104 ~]# /etc/init.d/smb startっで、192.168.0.x側のPCからsambaの共有フォルダ(\\c104\share)を見て見ると、、、、、

なぜか、フォルダのはずが、サイズ0のファイルとして認識されてしまっている。。。
OSをCentOS7.1に揚げて確認すると

と正しくフォルダと認識された。
CentOS6.7での問題は、調べたらOSとsambaのバグという指摘がある。
https://bugzilla.samba.org/show_bug.cgi?id=9346
どうしてもCentOS6.7で行う場合はOSのカーネルを手動でupgradeすれば回避できる。ただしカーネルは 3.12.51 以降であった
| kernel | 可否 |
| kernel-3.2.74 kernel-3.4.110 kernel-3.10.93 | 否 |
| kernel-3.12.51 kernel-3.14.57 kernel-3.18.24 | 可 |
*CentOS7.1はkernel-3.10.0なのだが、バックポートされたのかうまく動くようだ。