gpt4 book ai didi

python - 如何在不影响安全性的情况下授予 celery 足够的权限来运行根文件?

转载 作者:行者123 更新时间:2023-12-04 13:26:46 35 4
gpt4 key购买 nike

我正在运行下面的代码作为 Celery 任务的一部分。

class HealthCheckIKEV2:
async def report(self):
try:
client = RedisClient()
proc1 = subprocess.Popen(
["sudo", "/usr/sbin/swanctl", "--list-sas"], stdout=subprocess.PIPE
)
proc2 = subprocess.Popen(
["grep", "INSTALLED"],
stdin=proc1.stdout,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
)
proc3 = subprocess.Popen(
["wc", "-l"],
stdin=proc2.stdout,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
universal_newlines=True,
)
proc1.stdout.close() # Allow proc1 to receive a SIGPIPE if proc2 exits.
proc2.stdout.close() # Allow proc2 to receive a SIGPIPE if proc3 exits.
out, err = proc3.communicate()
info = {
"users": out.rstrip(),
"timestamp": datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S"),
}
client.conn.hset(settings.REDIS_VPN_SUBDOMAIN, mapping=info)
但是 Celery 失败并显示以下错误消息:
Jun 13 08:46:42 de-vpn-1 sudo[2038]:   celery : user NOT in sudoers ; TTY=unknown ; PWD=/home/admin/app ; USER=root ; COMMAND=/usr/sbin/swanctl --list-sas
Jun 13 08:47:42 de-vpn-1 sudo[2045]: pam_unix(sudo:auth): conversation failed
这是因为子进程必须以 sudo 身份运行才能执行 /usr/sbin/swanctl .
proc1 = subprocess.Popen(
["sudo", "/usr/sbin/swanctl", "--list-sas"], stdout=subprocess.PIPE
)
我在这里有哪些选择? Celery 文档说不要给 celery 用户 root 访问权限。我该怎么做才能坚持最佳实践并成功执行此任务?
我的一个想法是创建一个新组并添加 rootcelery该组的用户。并将该文件的权限更改为该组。虽然听起来有点hacky。谢谢。

最佳答案

我会添加 celery用户到 sudoers文件,唯一允许的命令是需要的命令。使用 visudo并添加这些行

celery all = (root) NOPASSWD: /usr/sbin/swanctl --list-sas
NOPASSWD:指令确保 linux 不会要求输入密码。
注:这为可以控制此用户的任何人提供此级别的访问权限

关于python - 如何在不影响安全性的情况下授予 celery 足够的权限来运行根文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67956531/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com