LinuxのNFSディレクトリをWindows Serverからマウントしユーザマッピングする
Linuxでファイル共有のためにNFSサーバをたててディレクトリを公開することはよくあるが、
今回Windows Serverからも同じフォルダにアクセスするためにLinuxのNFSディレクトリをドライブにマウントする手順を検証した。
また、その際に簡易な方法でWindowsユーザとLinuxユーザのマッピングもしてみる。
環境はLinuxもWindowsもAWS上のEC2インスタンス上に構築しており、それぞれのバージョンは以下の通り。
- Red Hat Enterprise Linux Server release 7.3 (Maipo)
- Windows Server 2012 R2 Standard
LinuxでNFSセットアップ
まずはLinux上にNFSサーバを構築し、共有ディレクトリの公開設定を行う。
作業はec2-userで行う。
まずNFSをインストールする。
$ sudo yum -y install nfs-utils
/shareディレクトリを公開する。またパーミッションは今回は777にしておく。
$ sudo mkdir /share $ sudo chmod 777 /share/
以下の1行を記載。win2012
の部分はNFSクライアントであるWindows ServerのホストまたはIPアドレスを指定する。
$ sudo vi /etc/exports /share win2012(rw)
NFSサーバを起動する。
$ sudo systemctl start nfs-server $ sudo systemctl status nfs-server ● nfs-server.service - NFS server and services Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; disabled; vendor preset: disabled) Active: active (exited) since Fri 2017-07-28 04:54:59 EDT; 3s ago Process: 9572 ExecStart=/usr/sbin/rpc.nfsd $RPCNFSDARGS (code=exited, status=0/SUCCESS) Process: 9571 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS) Main PID: 9572 (code=exited, status=0/SUCCESS) CGroup: /system.slice/nfs-server.service Jul 28 04:54:59 ip-172-31-17-13.ap-northeast-1.compute.internal systemd[1]: Starting NFS server and services... Jul 28 04:54:59 ip-172-31-17-13.ap-northeast-1.compute.internal systemd[1]: Started NFS server and services.
正常にNFSサーバが起動したことを確認。
またLinuxのファイアウォール(AWSのセキュリティグループも)でWindows ServerからのNFSポート(デフォルトは2049)を開けておくこと。
ここまででNFS公開ディレクトリの準備はできたので、Windowsからアクセスした際のテスト用のファイルを出力しておく。
$ sudo echo hello > /share/test.txt
Windows ServerからNFSマウント
続いて、Windows Server側にNFSクライアントツールを導入し、LinuxのNFSディレクトリをマウントする。
まず、NFSクライアントをインストールする。
サーバーマネージャーを起動し、「役割と機能の追加」を選択する。
しばらくはデフォルトのまま「次へ」で進み、
「機能の選択」のところで、「Client for NFS」にチェックを入れ、「次へ」を選択する。
「インストール」を選択する。
すぐに再起動する場合は「必要に応じて対象サーバーを自動的に再起動する」にチェックを入れる。
チェックを入れなかった場合は再起動をあとで行う。
続いて、NFSクライアント(mountコマンド)を使って、NFSディレクトリにアクセスする。
まずコマンドプロンプトを起動し、mountコマンドが実行できるようになったことを確認する。
問題なければ以下のコマンドでLinuxのNFSサーバにアクセスし、ドライブにマウントする。
> mount <NFSサーバホスト>:/<NFS公開パス> <マウント先ドライブ>
今回は以下のように実行し、Yドライブに割り当てた。172.31.17.13はLinuxサーバのIPアドレスを指定する。
> mount 172.31.17.13:/share Y:
コマンドが正常に実行できると、コンピュータからYドライブに割り当てが追加されており、エクスプローラからアクセスできることが確認できる。
LinuxとWindows Server間のユーザマッピングをする
さて、ここまでの手順でLinux上で作ったファイルをWindows Serverから正しく見れることを確認した。
一方で、Windows Server上からファイルを作成した場合の動きを見てみる。
Windows Server側からファイルを新規作成する。
Linux上でls -l
してみる。
ファイルの所有者やグループを見てみる。
$ ls -l /share/ total 8 -rwxr-xr-x. 1 4294967294 4294967294 11 Jul 28 05:20 test2.txt -rw-rw-r--. 1 ec2-user ec2-user 6 Jul 28 05:18 test.txt
Windowsで作ったtest2.txtファイルの所有者、グループのuid,gidがLinux側に存在しないため、番号がそのまま表示されている。
これは不便なので、Windows Serverから書き込んだ場合にLinuxのec2-userが所有者、グループになるようにユーザマッピング設定を行う。
まずLinuxの/etc/passwd
と/etc/group
からec2-userユーザエントリとグループエントリを確認する。
$ grep ec2-user: /etc/passwd ec2-user:x:1000:1000:Cloud User:/home/ec2-user:/bin/bash $ grep ec2-user: /etc/group ec2-user:x:1000:
どちらも1000番であることが確認できる。つまり、Windowsでアクセスするユーザでマウントする際に1000番であることを明示できればよい。
Windows Serverの2012から、C:\Windows\System32\drivers\etc
フォルダにLinuxのものと同じようなpasswd
ファイルとgroup
ファイルを配置することで、このことが実現できる。
現在ログインしているWindowsユーザXXXUSERとLinuxのec2-userをマッピングするには、以下のようなpasswd
とgroup
ファイルを作成すればよい。
passwd
ファイルにはLinuxで確認した/etc/passwd
のec2-userのユーザエントリのユーザ名の部分をXXXUSERに置き換えて記載する。
XXXUSER:x:1000:1000:Cloud User:/home/ec2-user:/bin/bash
同様にgroup
ファイルにも同様に、Linuxで確認した/etc/group
のec2-userのグループエントリのグループ名の部分をWindowsユーザグループ名に置き換えて記載する。
例えばAdministratorsグループに所属するユーザの場合はBUILTIN¥
を頭に付けて以下のように記載する。
BUILTIN\Administrators:x:1000:
これでユーザマッピングの設定が整ったので、再マウントを行う。
まずアンマウントするため、Windows Serverのコマンドプロンプトを開き、以下のコマンドを実行する。
> umount Y:
次に再マウントを行うが、今度はWindowsユーザとそのログインパスワードをオプションで明示して実行する。
> mount <NFSサーバホスト>:/<NFS公開パス> -u:<Windowsユーザ名> -p:<ログインパスワード> <マウント先ドライブ>
コマンドプロンプトで以下のように実行する。
> mount 172.31.17.13:/share -u:XXXUSER -p:password Y:
この状態で先ほどと同じように、Windows Server側からマウント先に新規ファイルを作成する。
それをLinuxから見ると、今度は正しく所有者とグループがec2-userのものとして作成されている!
$ ls -l /share/ total 12 -rwxr-xr-x. 1 4294967294 4294967294 11 Jul 28 05:20 test2.txt -rwxr-xr-x. 1 ec2-user ec2-user 9 Jul 28 05:30 test3.txt ★ -rw-rw-r--. 1 ec2-user ec2-user 6 Jul 28 05:18 test.txt
まとめ
LinuxのNFSディレクトリにWindows ServerからNFSクライアントでドライブにマウントする方法を見た。
その際に、適切にユーザマッピングを設定しておくことで、パーミッション等の設定もしやすくなる。
Linux同士であれば同じuidのユーザを作っておく等の注意でよいが、Windows Serverのユーザの場合はこのようにマッピングファイルを作っておくことで、同じように同じ所有者のファイルとして作成したりできる。
以上