Ubuntu RabbitMQ权限控制指南
RabbitMQ的权限控制通过用户角色分级、虚拟主机(vhost)隔离及资源权限分配实现,确保不同用户仅能访问和操作其授权的资源。以下是具体操作流程及关键说明:
若需通过Web界面管理权限,需先启用rabbitmq_management插件(默认已安装)。执行以下命令:
sudo rabbitmq-plugins enable rabbitmq_management
启用后,可通过http://<服务器IP>:15672访问管理界面(默认端口15672)。
RabbitMQ定义了5种用户角色,决定用户可执行的操作:
权限控制需结合用户创建、虚拟主机管理及权限分配三步:
使用rabbitmqctl add_user命令创建用户(替换<username>、<password>为实际值):
sudo rabbitmqctl add_user <username> <password>
例如,创建用户app_user,密码app_pass123:
sudo rabbitmqctl add_user app_user app_pass123
使用rabbitmqctl set_user_tags命令为用户分配角色(替换<username>、<tag>为实际值):
sudo rabbitmqctl set_user_tags <username> <tag>
例如,将app_user设为monitoring角色(可监控所有资源):
sudo rabbitmqctl set_user_tags app_user monitoring
若需最高权限,设为administrator:
sudo rabbitmqctl set_user_tags app_user administrator
虚拟主机是RabbitMQ的隔离单元,用于分隔不同业务资源(如队列、交换机)。
rabbitmqctl add_vhost命令(替换<vhost_name>为实际值):sudo rabbitmqctl add_vhost <vhost_name>
例如,创建vhostproject_queue:sudo rabbitmqctl add_vhost project_queue
rabbitmqctl delete_vhost命令(替换<vhost_name>为实际值):sudo rabbitmqctl delete_vhost <vhost_name>
rabbitmqctl list_vhosts命令。使用rabbitmqctl set_permissions命令为用户分配vhost内的资源权限(替换<vhost_name>、<username>、<conf>、<write>、<read>为实际值):
sudo rabbitmqctl set_permissions -p <vhost_name> <username> "<conf>" "<write>" "<read>"
-p <vhost_name>:指定虚拟主机(默认为/,即根vhost)。<conf>:配置权限(正则表达式,匹配可创建/删除的资源,如.*表示所有资源)。<write>:写权限(正则表达式,匹配可发送消息的资源,如.*表示所有队列/交换机)。<read>:读权限(正则表达式,匹配可接收消息的资源,如.*表示所有队列)。app_user在project_queue vhost下所有资源的完全权限:sudo rabbitmqctl set_permissions -p project_queue app_user ".*" ".*" ".*"
app_user仅在project_queue vhost下的order_queue队列发送消息的权限:sudo rabbitmqctl set_permissions -p project_queue app_user "^order_queue$" "" "order_queue"
(^order_queue$表示仅匹配order_queue队列,""表示无配置权限,order_queue表示仅能读取该队列)。rabbitmqctl list_permissions命令(替换<vhost_name>为实际值):sudo rabbitmqctl list_permissions -p <vhost_name>
例如,查看project_queue vhost下所有用户的权限:sudo rabbitmqctl list_permissions -p project_queue
输出示例:app_user .* .* .*
rabbitmqctl clear_permissions命令(替换<vhost_name>、<username>为实际值):sudo rabbitmqctl clear_permissions -p <vhost_name> <username>
例如,清除app_user在project_queue vhost下的权限:sudo rabbitmqctl clear_permissions -p project_queue app_user
```。
guest(密码guest)仅能通过localhost访问,建议删除或修改其密码并限制访问:sudo rabbitmqctl delete_user guest
write权限)。