ceph-authtool – ceph 密钥环操作工具
提纲
ceph-authtool keyringfile [ -l | –list ] [ -C | –create-keyring ] [ -p | –print ] [ -n | –name entityname ] [ –gen-key ] [ -a | –add-key base64_key ] [ –caps capfile ]描述
ceph-authtool 工具用于创建、查看和修改 Ceph 密钥环文件。密钥环文件内存储着一或多个 Ceph 认证密钥、可能还有被授予的能力。每个密钥都与其类型名关联,格式为 {client,mon,mds,osd}.name 。
警告: 在私钥保护得当的前提下, Ceph 能提供认证和防中间人攻击的保护。然而,传输中的数据是未加密的,这些数据中可能就有配置密钥的消息。此系统意在运行于可信环境中。
选项
- -l, --list
列出密钥环内的所有密钥及其能力
- -p, --print
打印指定条目的已编码密钥,它适合作为 mount -o secret= 的参数
- -C, --create-keyring
创建新密钥环,覆盖已有密钥环文件
- --gen-key
为指定实体名生成新私钥
- --add-key
把已编码密钥加进密钥环
- --cap subsystem capability
设置指定子系统的能力
- --caps capsfile
在所有子系统内设置与给定密钥相关的所有能力
能力
subsystem 代表 Ceph 子系统的名字: mon 、 mds 、 osd 。
能力是一个字符串,描述了允许此用户干什么。格式为逗号分隔的允许声明列表,此声明包含一或多个 rwx (分别表示读、写、执行权限)。 allow * 将在指定子系统下授予完整的超级用户权限。
例如:
# 可读、写、执行对象 osd = "allow rwx" # 可访问 MDS 服务器 mds = "allow" # 可更改集群状态(即它是服务器守护进程) mon = "allow rwx"
被限定到单个存储池的 librados 用户的能力大致如此:
mon = "allow r" osd = "allow rw pool foo"
一个 RBD 客户端有一个存储池的读权限和另一个存储池的读写权限:
mon = "allow r" osd = "allow class-read object_prefix rbd_children, allow pool templates r class-read, allow pool vms rwx"
权限最小化的文件系统客户端,其能力大致如此:
mds = "allow" osd = "allow rw pool data" mon = "allow r"
OSD 能力
一般来说, OSD 能力遵循以下语法:
osdcap := grant[,grant...] grant := allow (match capspec | capspec match) match := [pool[=]<poolname> | object_prefix <prefix>] capspec := * | [r][w][x] [class-read] [class-write]
capspec 决定了此实体可执行哪些操作:
r = 可读取对象 w = 可写入对象 x = 可调用任何类方法(等同于 class-read 、 class-write ) class-read = 可调用读数据的类方法 class-write = 可调用写数据的类方法 * = 等价于 rwx ,另外还可运行 OSD 管理命令,即 ceph osd tell ...
匹配规则限制了授权是基于被访问存储池的,客户端满足匹配条件时授权会叠加。例如,假设客户端的 OSD 能力为: “allow r object_prefix prefix, allow w pool foo, allow x pool bar” ,那么它有 foo 存储池的读写权限( rw )、有 bar 存储池的读和执行权限( rx )、还有任意存储池中以 prefix 打头的对象的读( r )权限。
能力文件的格式
能力配置文件是格式化的零或多个键值对,每条一行。键和值以 = 分隔,且值内包含空格时必须用 ' 或 " 包起来。键是某个 Ceph 子系统( osd 、 mds 、 mon ),值是能力字符串(见上文)。
实例
给 client.foo 生成密钥并新建密钥环:
ceph-authtool -C -n client.foo --gen-key keyring
给此密钥关联一些能力(也就是挂载 Ceph 文件系统的能力):
ceph-authtool -n client.foo --cap mds 'allow' --cap osd 'allow rw pool=data' --cap mon 'allow r' keyring
查看密钥环内容:
ceph-authtool -l keyring
挂载 Ceph 文件系统时,你可以用此命令获取编码好的私钥:
mount -t ceph serverhost:/ mountpoint -o name=foo,secret=`ceph-authtool -p -n client.foo keyring`
使用范围
ceph-authtool 是 Ceph 的一部分,这是个伸缩力强、开源、分布式的存储系统,更多信息参见 http://ceph.com/docs 。
参考
ceph(8)