Skip to main content

用户管理

用户管理

  • list_users,用户列表
  • add_user {username} {password},添加用户
  • delete_user {username},删除用户
  • change_password {username} {newpassword},修改密码
  • clear_password {username},删除密码,密码删除后就不能访问了。This user now cannot log in with a password (but may be able to through e.g. SASL EXTERNAL if configured)
  • authenticate_user {username} {password},用户认证
  • set_user_tags {username} {tag ...},为用户设置角色,tag可以是0个、一个、或多个,eg:rabbitmqctl set_user_tags chris administrator,设置为管理员;rabbitmqctl set_user_tags chris,清除chris与角色的关联。

用户列表查看

$sudo rabbitmqctl list_users
Listing users
guest [administrator]

添加用户

$sudo rabbitmqctl add_user chris 123
Creating user "chris"

为用户分配权限

$sudo rabbitmqctl set_user_tags chris administrator
Setting tags for user "chris" to [administrator]

然后就可以通过http://host:15672 登录management界面管理rabbitmq了,但此时用户chris还没有访问队列资源的权限

权限管理

RabbitMQ客户端连接到一个服务端的时候,在它的操作指令中指定了一个虚拟主机。服务端首先检查是否有访问该虚拟主机的权限,没有权限的会拒绝连接。

对于exchanges和queues等资源,位于某个虚拟主机内;不同虚拟主机内即便名称相同也代表不同的资源。当特定操作在资源上执行时第二级访问控制开始生效。

RabbitMQ在某个资源上区分了配置、写和读操作。配置操作创建或者销毁资源,或者更改资源的行为。写操作将消息注入进资源之中。读操作从资源中获取消息。

要执行特定操作用户必须授予合适的权限。

下面介绍相关命令:

  • list_vhosts [vhostinfoitem ...],获取vhosts列表
  • add_vhost {vhost}, eg:rabbitmqctl add_vhost test
  • delete_vhost {vhost}
  • set_permissions [-p vhost] {user} {conf} {write} {read},给用户分在对应的vhost上分配相应的权限。eg:rabbitmqctl set_permissions -p /myvhost chris "^chris-." "." ".*",这条指令,给用户chris在myvhost分配了权限,权限包括:以"chris-"开头的全部资源的配置权限,和所有资源的读写权限
  • clear_permissions [-p vhost] {username},清除权限
  • list_permissions [-p vhost],vhost权限分配列表
  • list_user_permissions {username},user权限列表
$sudo rabbitmqctl set_permissions -p / chris ".*" ".*" ".*"
Setting permissions for user "chris" in vhost "/"
#此时用户chris才有访问队列资源的权限

访问端口

SELinux和与其机制类似的系统可能会阻止RabbtMQ绑定相应端口,所以安装完之后需要确保一下端口可以打开:

  • 4369,epmd(Erlang Port Mapper Daemon),是Erlang的端口/结点名称映射程序,用来跟踪节点名称监听地址,在集群中起到一个类似DNS的作用。
  • 5672, 5671, AMQP 0-9-1 和 1.0 客户端端口,used by AMQP 0-9-1 and 1.0 clients without and with TLS(Transport Layer Security)
  • 25672,Erlang distribution,和4369配合
  • 15672,HTTP_API端口,管理员用户才能访问,用于管理RbbitMQ,需要启用management插件,rabbitmq-plugins enable rabbitmq_management,访问http://server-name:15672/
  • 61613, 61614,当STOMP插件启用的时候打开,作为STOMP客户端端口(根据是否使用TLS选择)
  • 1883, 8883,当MQTT插件启用的时候打开,作为MQTT客户端端口(根据是否使用TLS选择)
  • 15674,基于WebSocket的STOMP客户端端口(当插件Web STOMP启用的时候打开)
  • 15675,基于WebSocket的MQTT客户端端口(当插件Web MQTT启用的时候打开)

System Limits

rabbitmq会维持大量的网络连接,所以系统允许同时打开的最大文件数需要调整。推荐的允许同时打开的最大文件数为65535。有两个地方需要设置:

  • 系统每个用户允许的最大同时打开文件数,ulimit -n,可以通过ulimit -n size设置
  • 系统允许的最大同时打开文件数,fs.file-max 系统级限制查看与设置:
#查看
$ cat /proc/sys/fs/file-max
184289
$ cat /proc/sys/fs/file-nr
1024 0 184289
#已分配文件句柄的数目 分配了但没有使用的句柄数 文件句柄最大数目

#设置
$echo 284289 > /proc/sys/fs/file-max

ulimit 命令详解

ulimit用于shell启动进程所占用的资源,是shell内建命令。

参数介绍:

  • -H 设置硬件资源限制.
  • -S 设置软件资源限制.
  • -a 显示当前所有的资源限制.
  • -c size:设置core文件的最大值.单位:blocks
  • -d size:设置数据段的最大值.单位:kbytes
  • -f size:设置创建文件的最大值.单位:blocks
  • -l size:设置在内存中锁定进程的最大值.单位:kbytes
  • -m size:设置可以使用的常驻内存的最大值.单位:kbytes
  • -n size:设置内核可以同时打开的文件描述符的最大值.单位:n
  • -p size:设置管道缓冲区的最大值.单位:kbytes
  • -s size:设置堆栈的最大值.单位:kbytes
  • -t size:设置CPU使用时间的最大上限.单位:seconds
  • -v size:设置虚拟内存的最大值.单位:kbytesLinux

可以通过rabbitmqctl status查看当前的限制状态,status中的file_descriptors描述了当前的限制:

{file_descriptors,
[{total_limit,65435},
{total_used,2},
{sockets_limit,58889},
{sockets_used,0}]},
{processes,[{limit,1048576},{used,330}]}