gpt4 book ai didi

python - 允许python应用程序为任何用户创建和访问文件,但不允许用户直接访问文件

转载 作者:太空宇宙 更新时间:2023-11-04 03:55:01 25 4
gpt4 key购买 nike

我正在用 python 开发一个应用程序,但我在文件权限方面遇到了困难。

我的应用程序正在使用搁置日志记录模块创建、访问和修改多个文件。

此应用程序将位于服务器上,并将由属于不同组的多个用户使用。

我的问题是,这些文件被标记为由首次启动该应用程序的用户拥有,从而创建了这些文件,之后,当另一个用户启动该应用程序时,他没有访问这些文件所需的权限,并且该应用程序崩溃了。

我可以修改权限以允许所有用户访问和修改文件,但这并不能真正令人满意。

我发现使用setuid我也许可以允许应用程序在任何用户启动时访问文件,但不允许用户直接修改文件。这正是我所需要的。

但是,我找不到修改 umask 或 shelvelogging 模块创建的文件权限的方法。

我认为,也许对于通过 shelve 访问的文件,我可以在访问它们之前使用 os.umask 创建文件,但对于通过 logging 创建的文件似乎不起作用,因为我使用的是旋转文件处理程序,只要日志文件已满,它就可能会创建文件。

什么是更Pythonic的方式来处理这个问题?

编辑:

正如评论中所要求的,这里有一个简单的代码片段,可以复制我的问题。

#!/usr/bin/env python2.7
import logging

logger = logging.getLogger('test_logger')
logger.setLevel(logging.DEBUG)

fh = logging.FileHandler('logfile.log')
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter)
logger.addHandler(fh)

logger.info('Test')

现在,如果用户 A 启动应用程序,则会创建一个日志文件。如果用户 B 随后启动该应用程序,则会出现错误,因为他无权访问日志文件。

错误是 IOError:权限被拒绝 [...]/logfile.log

编辑2

一些附加信息:

我在我的应用程序所在的系统上没有 root 访问权限,因此专门为我创建一个仅用于我的应用程序的用户似乎不可能。

该应用程序很少使用,而且只有少数人使用,因此我现在假设他们不会同时访问它。

我不需要在应用程序中进行身份验证和授权。对于任何用户来说,它的工作方式都应该完全相同。

我认为,正如 goncalopp 所建议的那样,创建一个用户并以该用户身份运行应用程序将是最好的解决方案,但恐怕这是不可能的。我得询问系统管理员。

最佳答案

您的问题不清楚如果多个用户同时运行该应用程序会发生什么。您将有多个进程同时写入相同的文件,除非您有显式的锁定文件或其他同步机制。

假设您已经解决了同步问题,setuid 可能不是最好的解决方案。由于Python是一种解释性语言,it's particularly difficult to setup, and the usual security considerations apply

针对此类问题的常见 UNIX 解决方案是让您的程序作为特定系统用户运行,该用户是为此唯一目的而创建的。该程序可以作为守护进程运行,也可以在 cronjob 中运行。使用此方法,如果您需要用户交互,则必须在程序中向用户显式公开操作,并拥有身份验证和授权机制

对于交互,您可以使用(unix 或普通)套接字或监视/池目录,具体取决于程序的性质。对于身份验证,

当然,所有这些都意味着额外的开发工作,而您目前可能无法完成这些工作。 解决方法可能是允许 passwordless sudo to a specific user and command

关于python - 允许python应用程序为任何用户创建和访问文件,但不允许用户直接访问文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25035474/

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