#author("2024-10-27T09:28:13+00:00","default:sysosa","sysosa") #author("2024-10-27T09:29:39+00:00","default:sysosa","sysosa") &size(10){過去記事 [[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を提供する形にする. まずは #code(nonumber){{ [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)の調整を行います. #code(nonumber){{ [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は下記のようにします #code(nonumber){{ [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ノードにログインさせるなら [#s579b2e2] nfs の bindオプション を使います. #code(nonumber){{ [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 }} ***/homeの対処 [#qa40c3a1] 単純に /home/userC, /home/userD をexportして login node の/home/userC, /home/userDにアサインする #code(nonumber){{ [root@nfs-2nd ~]# cat /etc/exports /home/userC 192.168.0.0/255.255.255.0(rw) /home/userD 192.168.0.0/255.255.255.0(rw) [root@nfs-2nd ~]# }} login nodeではautofsでカバーするなら #code(nonumber){{ [root@nfs ~]# cat /etc/auto.master /- /etc/auto.2nd-nfs --timeout=60 [root@nfs ~]# [root@nfs ~]# cat /etc/auto.2nd-nfs /home/userC -rw nfs-2nd:/home/userC /home/userD -rw nfs-2nd:/home/userD [root@nfs ~]# }} これでloginノードのlinux側面は対応OK 問題はsmb共有 ***smb共有 [#tbdcdf08] nfsで共有された場所をsmbで供出することは可能. ただ場合によっては遅くなるとかの症状があるとのこと. 一応出来る. ただ問題が発生する可能性もあるよとのこと. #code(nonumber){{ [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 }} ***ファイルロックとか [#s6609199] 問題点としてあるのがファイルロック機構がNFS由来とsmb由来が被ること. 片方を使うようにできれば大変宜しいみたい. nfsで統一なら、windows10にはnfsクライアント機能があるようでこれを活用する. macOSはそもそも持っているから大丈夫 &size(10){ただuid/gidのマッピングが面倒でしょうか}; smbで統一なら、計算ノードのmountをcifs mountにすれば解決可能みたい. https://wiki.centos.org/TipsAndTricks/WindowsShares ***nfsで染める [#q9f5559d] windowsクライアントマシンが nfs プロトコルを喋ればいい. そうしてsmb/cifsを排除できる. 昔HummingbirdからNFS Maestroとかでwindows向けNFSクライアントアプリが有償販売されていたが、OS側でもnfs機能を提供されているみたい. [コントロール パネル]->[すべてのコントロール パネル項目]->[プログラムと機能]を開き、nfsパッケージをインストールします &ref(2021y06m07d_140017720.png,nolink); これで「mount」「rpcinfo」コマンドが使えます 使い方は同じで「コマンドプロンプト」を立ち上げて下記のように実行します. #code(nonumber){{ mount nfs:/home S: (管理者権限は不要. 一般ユーザで実行可能) }} マウントポイント先がドライブ名になることに留意. &color(red){*};nfsサーバにおける/etc/exportsフォーマットは従来型なら大丈夫. 疑似ファイルシステムはどうもダメみたい. 一応これでnfs mountは出来ましたが、大事なのはユーザマッピング. windowsアカウントの userX は unixアカウントの誰に符合するのか. その定義が大事. windows側のアカウントとnfs側のアカウントが下記のような関係だった場合 |>|BGCOLOR(BLUE):&COLOR(WHITE){windows};|>|BGCOLOR(GREEN):&COLOR(WHITE){posixAccount(/etc/passwd)};| |BGCOLOR(YELLOW):ユーザ名|BGCOLOR(yellow):グループ名|BGCOLOR(yellow):UID|BGCOLOR(yellow):GID| |Administrator|BUILTIN\Administrators|0|0| |illya|Users|1000|1000| |saber|Users|1001|1000| ならwindows10の「%SystemRoot%\system32\drivers\etc\group」に下記を作ります #code(nonumber){{ BUILTIN\Administrators:x:0:root Users:x:1000:illya,saber }} そして「%SystemRoot%\system32\drivers\etc\passwd」も作成します #code(nonumber){{ 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で染める [#wba81691] windwos/macOSクライアントに手を加えず、smb/cifsプロトコルで全てをカバーするなら計算ノードとかのmountにsmb/cifsを宛がう必要がある. ***nfsでacl [#a0501526] ローカルなストレージデバイスならACLはsetfaclで行えますが、nfs mount先では機能しないです. #code(nonumber){{ [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」を使います ただ要件としては -nfsv4でnfs mount -nfsサーバ側でnfs-idmapd.serviceが動いている事 &size(10){(厳密には/etc/idmapd.confのDomain値が同じである必要があるが、dnsドメイン[sybyl.localとか]で同じ位置にいるホスト同士ならDomain値の定義は不要みたい)}; -nfs serverとclientで同じ認証系を使っている事 &size(10){(同じnis/ldap/adを参照している事. もし異なっていてidのマッピングが必要なら /etc/idmapd.conf の出番となる.)}; &size(10){(nfsサーバにアカウントは不要って思うのだが、こと「nfs4-acl-tools」を利用する場合には必要みたい. ならnfsサーバにアクセスできないようにsshの設定を変更するか「/etc/security/access.conf」を弄る)}; #code(nonumber){{ [root@nfs-client ~]# dnf install nfs4-acl-tools }} RHEL7系,RHEL8系,REHL9系にもあるみたい. &size(10){ubuntu20,22もあるみたい}; っで使い方. nfsマウント先の「/apps/cryo」にユーザsaberのみ書き込み権限を与えてみる. #code(nonumber){{ [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 ~]# }} 確認として #code(nonumber){{ [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 の値を参照した方がいいのかも. #code(nonumber){{ [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 ~]# }} 当然ながら権限を外しても既に作ったファイルの所有者情報は残ります.