過去記事 NIS/NFSv3 NIS/NFSv4

nfsサーバになってストレージを他の(Linux)マシンと共有させるには下記のようにする

/dev/sda は /(system disk) と /apps(アプリ共有部分) をもって、
/dev/sdb は /home(ホームディレクトリ共有部分) として用意したいと思います。

そしてnfsクライアントには nfs4_setfacl/getfacl でaclを敷設したいので、nfsサーバにはアカウント情報が必要となります. なので nis クライアントとして nisサーバからuid/gid情報を頂きます.
ここで同時にnisサーバで auto.master や auto.home 提供してたら、nfsサーバで /home や /apps は使えない. auto.master/auto.homeを使うので.

なので、nfs サーバで/homeや/appsは /nfs/home、/nfs/apps として提供して、auto.master/auto.homeで /home, /appsを提供する形にする.

まずは

[root@nfs ~]# cat /etc/redhat-release
Rocky Linux release 9.4 (Blue Onyx)
 
[root@nfs ~]# yum -y install nfs-utils
 
[root@nfs ~]# systemctl enable nfs-server --now
 
[root@nfs ~]# firewall-cmd --add-service=nfs --add-service=rpc-bind --add-service=mountd --permanent
 
[root@nfs ~]# firewall-cmd --reload

そしてストレージ(/home)の調整を行います.

[root@nfs ~]# mkdir /nfs/home /nfs/apps -p
 
[root@nfs ~]# echo "LABEL=home /nfs/home xfs defaults 0 0" >> /etc/fstab          # /dev/sdb1 を home と LABEL してます(xfs_admin -L home /dev/sdb1)
 
[root@nfs ~]# df -h / /nfs/home
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda4        14G  2.9G   11G  21% /
/dev/sdb1        16G  147M   16G   1% /nfs/home
 
[root@nfs ~]#
[root@nfs ~]# vi /etc/exports
/nfs         192.168.0.0/255.255.255.0(rw,sync,fsid=0,no_root_squash)
/nfs/home    192.168.0.0/255.255.255.0(rw,sync,nohide,no_root_squash)     # /dev/sdb1 の領域をexport
/nfs/apps    192.168.0.0/255.255.255.0(rw,sync,nohide,no_root_squash)     # /dev/sda1 の領域になります
 
[root@nfs ~]# exportfs -avr

nisのauto.masterとauto.homeは下記のようにします

[root@nis ~]# cat /etc/auto.master
 
/- auto.home --timeout=60 
 
[root@nis ~]# cat /etc/auto.home
/home   nfs:/home
/apps   nfs:/apps
 
[root@nis ~]#

auto.master/auto.home を使わないないで nfsノードにログインさせるなら

nfs の bindオプション を使います.

[root@nfs ~]# mount --bind /nfs/home /home
[root@nfs ~]# mount --bind /nfs/apps /apps
[root@nfs ~]# echo "/nfs/home /home none bind 0 0" >> /etc/fstab
[root@nfs ~]# echo "/nfs/apps /apps none bind 0 0" >> /etc/fstab
 
[root@nfs ~]# semanage fcontext -a -t home_root_t /nfs/home
[root@nfs ~]# restorecon -R  /nfs/home

smb共有

nfsで共有された場所をsmbで供出することは可能.
ただ場合によっては遅くなるとかの症状があるとのこと.

一応出来る. ただ問題が発生する可能性もあるよとのこと.

[root@nfs ~]# cat /etc/samba/smb.conf
[global]
        workgroup = SAMBA
        security = user
 
        passdb backend = tdbsam
 
        printing = cups
        printcap name = cups
        load printers = yes
        cups options = raw
 
[home]
        path = /home/
        browseable = yes
        read only = no
        inherit acls = Yes
 
[root@nfs ~]# systemctl enable smb && systemctl start smb
[root@nfs ~]# smbpasswd -a userA 
[root@nfs ~]# firewall-cmd --add-service=samba --permanent
[root@nfs ~]# firewall-cmd --reload
[root@nfs ~]# setsebool -P samba_enable_home_dirs 1
[root@nfs ~]# setsebool -P samba_share_nfs on

ファイルロックとか

問題点としてあるのがファイルロック機構がNFS由来とsmb由来が被ること.

片方を使うようにできれば大変宜しいみたい.
nfsで統一なら、windows10にはnfsクライアント機能があるようでこれを活用する. macOSはそもそも持っているから大丈夫
ただuid/gidのマッピングが面倒でしょうか

smbで統一なら、計算ノードのmountをcifs mountにすれば解決可能みたい.
https://wiki.centos.org/TipsAndTricks/WindowsShares

nfsで染める

windowsクライアントマシンが nfs プロトコルを喋ればいい. そうしてsmb/cifsを排除できる.
昔HummingbirdからNFS Maestroとかでwindows向けNFSクライアントアプリが有償販売されていたが、OS側でもnfs機能を提供されているみたい.
[コントロール パネル]->[すべてのコントロール パネル項目]->[プログラムと機能]を開き、nfsパッケージをインストールします
2021y06m07d_140017720.png

これで「mount」「rpcinfo」コマンドが使えます
使い方は同じで「コマンドプロンプト」を立ち上げて下記のように実行します.

mount nfs:/home S:
(管理者権限は不要. 一般ユーザで実行可能)

マウントポイント先がドライブ名になることに留意.
*nfsサーバにおける/etc/exportsフォーマットは従来型なら大丈夫. 疑似ファイルシステムはどうもダメみたい.
一応これでnfs mountは出来ましたが、大事なのはユーザマッピング. windowsアカウントの userX は unixアカウントの誰に符合するのか. その定義が大事.

windows側のアカウントとnfs側のアカウントが下記のような関係だった場合

windowsposixAccount(/etc/passwd)
ユーザ名グループ名UIDGID
AdministratorBUILTIN\Administrators00
illyaUsers10001000
saberUsers10011000

ならwindows10の「%SystemRoot%\system32\drivers\etc\group」に下記を作ります

BUILTIN\Administrators:x:0:root
Users:x:1000:illya,saber

そして「%SystemRoot%\system32\drivers\etc\passwd」も作成します

Administrator:x:0:0:root:/root:/bin/bash
illya:x:1000:1001:illya:/home/illya:/bin/bash
saber:x:1001:1001:saber:/home/saber:/bin/bash

「メモ帳」アプリを「管理者として実行」にて起動させ、該当の場所に保存すればいいみたい.
作成後一旦再起動して、面倒だが再度mount操作を行えばアクセスOK

groupとpasswdファイルをwindows側に用意できれば便利かもしれないが、エクスプローラーのアドレスで「\\nfs\home」と入力すれば即座に使えるのに比べるとやや面倒かな.

あとmacOSにはこのようなマッピング機能がない模様. なのでヘテロ環境ではこの方法は難しいかも.

smb/cifsで染める

windwos/macOSクライアントに手を加えず、smb/cifsプロトコルで全てをカバーするなら計算ノードとかのmountにsmb/cifsを宛がう必要がある.

nfsでacl

ローカルなストレージデバイスならACLはsetfaclで行えますが、nfs mount先では機能しないです.

[root@nfs-client ~]# mount |grep apps
nfs-rockylinux:/apps on /apps type nfs4 (rw,relatime,vers=4.2,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=192.168.0.23,local_lock=none,addr=192.168.0.11)
 
[root@nfs-client ~]# id saber
uid=1000(saber) gid=1000(saber) groups=1000(saber)
 
[root@nfs-client ~]# setfacl -m user:saber:rwx /apps/cryo
setfacl: /apps/cryo: Operation not supported
 
[root@nfs-client ~]#

っでnfs mountしたボリュームに ACL を掛けるには「nfs4-acl-tools」を使います
ただ要件としては

[root@nfs-client ~]# dnf install nfs4-acl-tools

RHEL7系,RHEL8系,REHL9系にもあるみたい. ubuntu20,22もあるみたい

っで使い方.
nfsマウント先の「/apps/cryo」にユーザsaberのみ書き込み権限を与えてみる.

[root@nfs-client ~]# ls -ld /apps/cryo/
drwxr-xr-x. 2 root root 6 Feb 13 03:22 /apps/cryo/
 
[root@nfs-client ~]# nfs4_getfacl /apps/cryo/
# file: /apps/cryo/
A::OWNER@:rwaDxtTcCy
A::GROUP@:rxtcy
A::EVERYONE@:rxtcy
 
[root@nfs-client ~]# id saber
uid=1000(saber) gid=1000(saber) groups=1000(saber)
 
[root@nfs-client ~]# nfs4_setfacl -a A::1000:RWX /apps/cryo/     <-- 1000はuid. これをidで行うには/etc/idmapd.confにdomain(sybyl.local)を定義して「A::saber@sybyl.local:RWX」とする
 
[root@nfs-client ~]# ls -ld /apps/cryo/
drwxr-xr-x+ 2 root root 6 Feb 13 03:22 /apps/cryo/
 
[root@nfs-client ~]# nfs4_getfacl /apps/cryo/
# file: /apps/cryo/
A::OWNER@:rwaDxtTcCy
A::1000:rwaDxtcy                   <-- 値1000はuid. これは/etc/idmapd.confを有効にしアカウント名での定義であってもuidになるみたい
A::GROUP@:rxtcy
A::EVERYONE@:rxtcy
 
[root@nfs-client ~]#

確認として

[saber@nfs-client ~]$ touch /apps/cryo/sample
[saber@nfs-client ~]$ mkdir /apps/cryo/data-sample
[saber@nfs-client ~]$ ls -l /apps/cryo/
total 0
drwxr-xr-x. 2 saber saber 6 Feb 13 04:53 data-sample
-rw-r--r--. 1 saber saber 0 Feb 13 04:53 sample
[saber@nfs-client ~]$
 
(他のユーザでは)
[illya@nfs-client ~]$ id illya
uid=1001(illya) gid=1001(illya) groups=1001(illya)
 
[illya@nfs-client ~]$ touch /apps/cryo/sample2
touch: cannot touch '/apps/cryo/sample2': Permission denied
 
[illya@nfs-client ~]$ mkdir /apps/cryo/data-sample2
mkdir: cannot create directory ‘/apps/cryo/data-sample2’: Permission denied
 
[illya@nfs-client ~]$

なんか/etc/idmapd.confのdomain定義なしで、uidベースで設定するのがいいのかも.

外し方. 「-x」を使います. 引数はnfs4_getfacl の値を参照した方がいいのかも.

[root@nfs-client ~]# nfs4_getfacl /apps/cryo/
# file: /apps/cryo/
A::OWNER@:rwaDxtTcCy
A::1000:rwaDxtcy
A::GROUP@:rxtcy
A::EVERYONE@:rxtcy
 
[root@nfs-client ~]# nfs4_setfacl -x A::1000:rwaDxtcy /apps/cryo/
 
[root@nfs-client ~]# nfs4_getfacl /apps/cryo/
# file: /apps/cryo/
A::OWNER@:rwaDxtTcCy
A::GROUP@:rxtcy
A::EVERYONE@:rxtcy
 
[root@nfs-client ~]# ls -l /apps/cryo/
total 0
drwxr-xr-x. 2 saber saber 6 Feb 13 04:53 data-sample
-rw-r--r--. 1 saber saber 0 Feb 13 04:53 sample
[root@nfs-client ~]#

当然ながら権限を外しても既に作ったファイルの所有者情報は残ります.

最新の60件
2024-12-08 2024-12-05 2024-12-04 2024-11-28 2024-11-23 2024-11-22 2024-11-15 2024-11-14 2024-11-12 2024-11-06 2024-11-05 2024-11-04 2024-11-02 2024-11-01 2024-10-29 2024-10-28 2024-10-27 2024-10-23 2024-10-18 2024-10-17 2024-10-15 2024-10-14 2024-10-13 2024-10-11 2024-10-10 2024-10-09 2024-10-08 2024-10-05 2024-10-04 2024-10-03 2024-10-02 2024-10-01 2024-09-30 2024-09-29 2024-09-28 2024-09-27 2024-09-22 2024-09-20 2024-09-17

edit


トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2024-10-27 (日) 18:29:39