このトピックでは、Samba サービスを使用して SMB プロトコルを使用して NFS ファイルシステムを共有し、NFSv4 ACE (アクセス制御リストエントリ)
を使用して NFS ファイルシステムへのアクセスを制御する方法について説明します。
このタスクについて
Samba を使用して、 Linux と Windows 間で SMB プロトコルを使用したファイル共有を有効化できます。 この方法は、Linux サーバーに NFS
ファイルシステムをマウントし、Windows ユーザーとファイルシステムを共有するシナリオに適用されます。 Samba では、同じ Samba ユーザー名を使用して
Windows と Linux の両方にログインし、2 つのオペレーティングシステムに個別のパスワードを設定することができます。 Samba ユーザーまたはグループを
valid users フィールドに指定して、ファイルシステムへのアクセス権限を付与することができます。 特定のファイルまたはディレクトリへのアクセスを制御するためには、NFSv4
ACE を設定しまる。Samba は ACE を SMB 権限に変換します。
手順
このトピックでは、CentOS オペレーティングシステムを例として取り上げます。NFSv4 ACE を設定し、Samba サービスを使用して ACE を SMB 権限に変換して
NFS ファイルシステムへのアクセスを制御する方法を説明します。 他の Linux ディストリビューションでも手順は同様です。ただしコマンドが異なる場合があります。
- Samba サービスをインストールします。
- Samba バージョン 4.11.2 のコードをダウンロードします。
- Samba のコンパイルに必要なパッケージの依存関係をインストールします。
- 以下のコマンドを実行して、Samba 4.11.2 パッケージからファイルを抽出します。
tar -zxvf ~/samba-4.11.2.tar.gz
cd ~/samba-4.11.2
- Samba サービスをコンパイルします。
sudo ./configure --sbindir=/sbin/ --sysconfdir=/etc/samba/ --mandir=/usr/share/man/ --with-static-modules=vfs_nfs4acl_xattr
コンパイルが成功すると、次のメッセージが返されます。 エラーが返された場合、
Build Samba from Sourceを参照してエラーのトラブルシューティングを行います 。
'configure' finished successfully (1m2.432s)
- Samba サービスをインストールします。
make
make test
sudo make install
- Samba ユーザーとグループを作成します。
この例では、ユーザー player、admini、anonym を作成します。 また、グループ player、adminis、および anonym_group を作成します。
player を players に、admini を adminis に、anonym を anonym_group に追加します。
- 次のコマンドを実行して、ユーザーとグループを作成し、対応するグループにユーザーを追加します。
sudo useradd player
sudo groupadd players
sudo usermod -g players player
sudo useradd admini
sudo groupadd adminis
sudo usermod -g adminis admini
sudo useradd anonym
sudo groupadd anonym_group
sudo usermod -g anonym_group anonym
- 以下のコマンドを実行して Samba ユーザーごとのパスワードを作成し、SMB プロトコルを使用してファイルシステムをマウントします。
sudo ~/samba-4.11.2/bin/smbpasswd -a player
sudo ~ /samba-4.11.2/bin/smbpasswd -a admini
sudo ~/samba-4.11.2/bin/smbpasswd -a anonym
注 smbpasswd ファイルは Samba の bin ディレクトリに保存されます。 コンパイルされた smbpasswd ファイルが実行されると、次のメッセージが表示されます。
smbpasswd ファイルがコンパイルされていない場合、メッセージは表示されません。
Registered MSG_REQ_POOL_USAGE
Registered MSG_REQ_DMALLOC_MARK and LOG_CHANGED
- smb.conf を編集します。
Samba サービスをインストールすると、
/etc/samba/smb.conf が作成されます。
/etc/samba/smb.conf を開いて 以下の内容を設定します。 ファイルに設定する項目の詳細については、「
smb.conf」をご参照ください 。
- path = /mnt/nfs4: /mnt/nfs4 は、マウントするディレクトリを示しています。 必要に応じて変更します。
- valid users:ファイルシステムにアクセスする権限が付与されているユーザーまたはグループです。 必要に応じて変更します。
[global] server
string = Samba Alibaba NAS NFS
Server server role = standalone server
min protocol = SMB2_10
log file = /var/log/samba/%m
log level = 2
valid users = @players, @adminis, @anonym_group
writable = yes
[nfs4]
comment = Secure File Server Share
path =/mnt/nfs4
vfs objects = nfs4acl_xattr
nfs4:mode = simple
nfs4acl_xattr:encoding = nfs
nfs4acl_xattr:version = 40
nfs4acl_xattr:xattr_name = system.nfs4_acl
nfs4acl_xattr:nfs4_id_numeric = yes
- 次のコマンドを実行して、Samba プロセス smbd を開始します。
- systemd サービスに smbd プロセスをカプセル化します。
- /etc/systemd/system/smbd.service という名前のファイルを作成します。
- 以下の内容を /etc/systemd/system/smbd.service に追加します。
[Unit]
Description=Samba Smbd Service
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/usr/sbin/smbd
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target
- 次のコマンドを実行して、systemctl ツールを再起動します。
sudo systemctl daemon-reload
- 以下のコマンドを実行して、smbd.service サービスを開始します。
sudo systemctl enable smbd.service
次のコマンドを実行して smbd.service サービスを開始することもできます。
sudo systemctl restart smbd.service
- Windows で Samba サービスを確認します。
net use
コマンドを実行し、NFSv4 ファイルシステムをマウントします。
net use * \\samba-IP\nfs4 <password> /user:<user>
ファイルシステムがマウントされると、すべての player、admini、および anonymous ユーザーがファイルシステムにアクセスできます。 ファイルとディレクトリを作成し、それらに対して読み取り/書き込み操作を実行できます。
- NFS ファイルシステムの NFSv4 ACE を設定します。
- NFSv4 ACL ツールをインストールします。
NFSv4 ACL ツールがインストールされている場合は、この手順をスキップしてください。
sudo yum -y install nfs4-acl-tools
- ユーザーまたはグループのディレクトリとファイルに NFSv4 ACE を設定します。
この例では、
dir0 という名前のディレクトリを作成します。 グループプレーヤーには、
dir0 ディレクトリ中のすべてのファイルに対する読み取り専用権限が付与されます 。 グループ admins には、ディレクトリ内のすべてのファイルに対する読み取り、書き込み、実行の権限が付与されます。
ユーザー anonym には、ファイルに対する権限が付与されていま せん。
sudo umask 777
sudo mkdir dir0
sudo nfs4_setfacl -a A:fdg:`id -g players`:RX dir0
sudo nfs4_setfacl -a A:fdg:`id -g admins`:RWX dir0
sudo nfs4_setfacl -a A:fdg:OWNER@: dir0
sudo nfs4_setfacl -a A:fdg:GROUP@: dir0
sudo nfs4_setfacl -a A:fdg:EVERYONE@: dir0
設定が完了したら、sudo nfs4_getfacl dir0
コマンドを実行し、結果を表示します。
- Windows で NFSv4 ACE の適合性を確認します。
- NFSv4 ファイルシステムを Windows サーバー上の Samba ユーザー admini としてマウントします。 dir0 ディレクトリにあるファイルとサブディレクトリを作成できます。
- NFSv4 ファイルシステムを Samba ユーザー player として Windows サーバーにマウントします。 dir0 にあるファイルとサブディレクトリを読むことができますが、ディレクトリの下にファイルとサブディレクトリを作成することはできません。
- NFSv4 ファイルシステムを Samba ユーザー anonym として Windows サーバーにマウントします。 dir0 ディレクトリにあるファイルとサブディレクトリにアクセスすることはできません。
Samba および NFSv4 ACL スイートの機能
- NFS ファイルシステムの NFSv4 ACE は SMB 権限に変換され、Windows システムのフォルダープロパティの [セキュリティ] タブに表示されます。
[セキュリティ] タブで、SMB アクセス権限の [許可] オプションが選択されていますが、[拒否] オプションは選択されていません。 さらに、NFSv4 ACE
は SMB 権限に変換されますが、Samba は引き続き NFSv4 ACE に基づいて Windows ユーザーからのアクセスを制御します。
- SMB クライアントで SMB 権限を設定し、それを NFSv4 ACE に変換し、変更を NFS ファイルシステムに保存できます。
- SMB 権限を NFSv4 ACE に変換できない場合、変更は失敗します。 たとえば、SMB 権限で [拒否] オプションが選択されている場合、NFSv4 ACEs
には [拒否] オプションが存在しないため、権限を変換できません。
- Linux サーバーでのみ ACE を構成し、Windows サーバーをクライアントとして使用することを推奨します。
- NFSv4 プロトコルはロックをサポートしています。 SMB および NFS クライアントは、同時読み取り/書き込み操作を実行できます。