uWSGI vassal未以指定cuckoo用户启动 权限异常问题求助
问题根因
你当前的问题核心是emperor-tyrant = true配置导致的:uWSGI Emperor开启暴君模式后,会完全忽略vassal配置文件内的uid、gid参数,强制以vassal配置文件的属主身份运行对应vassal进程。你当前/etc/uwsgi.d/cuckoo.ini属主为uwsgi:uwsgi,所以就算你在vassal配置里指定了uid = cuckoo也不会生效,最终vassal进程和创建的socket都归属uwsgi用户。
解决方案步骤
步骤1:修改vassal配置文件属主
执行命令匹配暴君模式的规则,让Emperor自动以cuckoo用户启动cuckoo vassal:
chown cuckoo:cuckoo /etc/uwsgi.d/cuckoo.ini
步骤2:修复socket目录权限
首先修改现有/var/run/cuckoo目录属主,确保cuckoo用户有权限在该目录下创建socket:
chown cuckoo:cuckoo /var/run/cuckoo
由于CentOS 7中/var/run是tmpfs临时文件系统,重启后目录会被重置,所以需要创建持久化权限配置:
新建/etc/tmpfiles.d/cuckoo.conf,写入以下内容:
d /var/run/cuckoo 0755 cuckoo cuckoo -
步骤3:调整权限配置(可选但推荐)
你当前vassal配置里chmod-socket = 766权限过大,socket不需要执行权限,建议改为660,同时将nginx用户加入cuckoo组,保证Nginx可以正常读写socket:
usermod -aG cuckoo nginx
再修改/etc/uwsgi.d/cuckoo.ini中的chmod-socket参数值为660即可。
步骤4:重启服务验证
重启uWSGI服务:
systemctl restart uwsgi
按以下维度验证效果:
- 查看socket属主:执行
ls -l /var/run/cuckoo/cuckoo.sock,应该显示归属cuckoo:cuckoo - 查看vassal进程运行用户:执行
ps aux | grep uwsgi,可以看到cuckoo对应的worker进程属于cuckoo用户 - 测试Nginx转发写入的文件,属主应为cuckoo
内容的提问来源于stack exchange,提问作者Astron
相关产品推荐
相关产品推荐

