今回は NFS の ACL についてです。通常の NFS サーバーであれば /etc/exports などでどのホストにどのディレクトリを公開するか、Read-Only か Read-Write かなどを設定できます。 Ganesha NFS ではどのようにすれば良いでしょうか。 /usr/libexec/ganesha/create-export-ganesha.sh では次のような export.vol1.conf ファイルが生成されます。
# WARNING : Using Gluster CLI will overwrite manual
# changes made to this file. To avoid it, edit the
# file and run ganesha-ha.sh --refresh-config.
EXPORT{
Export_Id = 2;
Path = "/vol1";
FSAL {
name = GLUSTER;
hostname="localhost";
volume="vol1";
}
Access_type = RW;
Disable_ACL = true;
Squash="No_root_squash";
Pseudo="/vol1";
Protocols = "3", "4" ;
Transports = "UDP","TCP";
SecType = "sys";
}
Access_type を RW から RO にすれば Read-Only での公開になりますが、クライアントホストの限定はできません。 EXPORT ブロック内には次のような client ブロックを入れることができ、ここでクライアント毎の access_type を上書き可能です。
client {
clients = "10.xx.xx.xx"; # IP of the client.
allow_root_access = true;
access_type = "RO"; # Read-only permissions
Protocols = "3"; # Allow only NFSv3 protocol.
anonymous_uid = 1440;
anonymous_gid = 72;
}
EXPORT 内の access_type を none にしておいて、client 内で RO や RW と指定すればその clients で指定した接続元IPアドレス毎のアクセス権設定が可能になります。client ブロックは次のように複数定義できます。
EXPORT {
...
access_type = none;
...
client {
clients = 192.168.122.71;
access_type = RW;
}
client {
clients = 192.168.122.0/24;
access_type = RO;
}
}
これで 192.168.122.71 からは書き込み可、192.168.122.0/24 内の他のホストからは読み込み専用、その他のホストからはマウント不可となります。 このファイルは変更後に次のコマンドで反映させる必要があります。
# /usr/libexec/ganesha/ganesha-ha.sh --refresh-config /var/run/gluster/shared_storage/nfs-ganesha vol1
Refresh-config completed on gluster2.
Success: refresh-config completed.
GlusterFS 側の制限のとの兼ね合いがあるため、NFS でアクセスさせる volume と glusterfs でアクセスさせる volume が混在する場合はちょっと面倒。glusterfs は volume 毎に port が割り当てられるのでそのあたりと組み合わせることもできるけど、どの volume がどの port かは固定ができそうにない。証明書を持ったクライアントからしか接続させないという機能もあるけれども Ganensha NFS では使えないらしい。