CephFS 客户端能力¶
通过 Ceph 鉴权能力,你可以把文件系统客户端所需权限限制到尽可能低的水平。
Note
路径限定和布局更改限定是 Ceph 从 Jewel 版起才具备的新功能。
路径限定¶
默认情况下,客户端不会被限定在它们被允许挂载的路径下;而且,当客户端挂载了一个子目录后,如 /home/user , MDS 默认情况下也不会检查后续操作都“锁定”在那个目录里面。
要把客户端限定为只能挂载某个特定目录、且只能在其内工作,可以用基于路径的 MDS 鉴权能力实现。
语法¶
如果只想授予指定目录读写( rw )权限,我们在给这个客户端创建密钥时就要提及这个目录,语法如下:
ceph fs authorize *file_system_name* client.*client_name* /*specified_directory* rw
比如,要想把 foo
客户端限定为只能在 cephfs
文件系统的
bar
目录下写,命令如下:
ceph fs authorize cephfs client.foo / r /bar rw
results in:
client.foo
key: *key*
caps: [mds] allow r, allow rw path=/bar
caps [mon] allow r
caps: [osd] allow rw tag cephfs data=cephfs_a
要完全把此客户端限定在 bar
目录下,去掉根目录即可:
ceph fs authorize cephfs client.foo /bar rw
需要注意的是,如果一个客户端的读权限被限定到了某一路径,它们就只能挂载文件系统下的这个可读路径,在挂载命令里必须指定(如下)。
文件系统名指定为 all
或 *
时,权限将授予每个文件系统。注意,一般都得给 *
加引号,以免被 shell 误用。
关于用户管理的细节,请参阅用户管理 - 把用户加入密钥环。
要把客户端限定于指定的子目录,在挂载时还需指定这个目录,语法如下:
ceph-fuse -n client.*client_name* *mount_path* -r *directory_to_be_mounted*
例如,要把客户端 foo
限定于 mnt/bar
目录,命令是:
ceph-fuse -n client.foo mnt -r /bar
报告的空闲空间¶
默认情况下,在客户端挂载子目录时,报告的已用空间( df
)是根据这个子目录的配额计算出来的,而不是整个集群的已用空间。
如果你想让客户端报告整个文件系统的总体使用情况,而不止是已挂载子目录的配额使用情况,可以给客户端加如下配置:
client quota df = false
如果没有启用配额、或者没有给挂载的子目录设置配额,那么不管这个选项配置成什么,都会报告整个文件系统的使用情况。
布局和配额限定( p 标记)¶
要设置布局或配额,客户端不但得有 rw 标记,还得有 p 标记。这种方法会限制所有以 ceph.
为前缀的特殊扩展属性、也会限制以其它方法配置这些字段(如对布局进行 openc 操作)。
例如,在下面的配置片段中, client.0 可以更改 cephfs_a 文件系统的布局和配额,而 client.1 却不能。
client.0
key: AQAz7EVWygILFRAAdIcuJ12opU/JKyfFmxhuaw==
caps: [mds] allow rwp
caps: [mon] allow r
caps: [osd] allow rw tag cephfs data=data
client.1
key: AQAz7EVWygILFRAAdIcuJ12opU/JKyfFmxhuaw==
caps: [mds] allow rw
caps: [mon] allow r
caps: [osd] allow rw tag cephfs data=data
快照限定( s 标记)¶
To create or delete snapshots, clients require the ‘s’ flag in addition to ‘rw’. Note that when capability string also contains the ‘p’ flag, the ‘s’ flag must appear after it (all flags except ‘rw’ must be specified in alphabetical order).
For example, in the following snippet client.0 can create or delete snapshots
in the bar
directory of file system cephfs_a
.
client.0
key: AQAz7EVWygILFRAAdIcuJ12opU/JKyfFmxhuaw==
caps: [mds] allow rw, allow rws path=/bar
caps: [mon] allow r
caps: [osd] allow rw tag cephfs data=cephfs_a
网络限定¶
client.foo
key: *key*
caps: [mds] allow r network 10.0.0.0/8, allow rw path=/bar network 10.0.0.0/8
caps: [mon] allow r network 10.0.0.0/8
caps: [osd] allow rw tag cephfs data=cephfs_a network 10.0.0.0/8
The optional {network/prefix}
is a standard network name and
prefix length in CIDR notation (e.g., 10.3.0.0/16
). If present,
the use of this capability is restricted to clients connecting from
this network.