【发布时间】:2014-07-30 11:18:56
【问题描述】:
我正在用 python 开发一个应用程序,但我正在努力解决文件权限问题。
我的应用程序正在使用 shelve 和 logging 模块创建、访问和修改多个文件。
此应用程序将在服务器上,并由属于不同组的多个用户使用。
我的问题是文件被标记为第一次启动应用程序的用户所有,因此创建了文件,之后,当另一个用户启动应用程序时,他没有访问该应用程序所需的权限文件,应用程序崩溃。
我可以修改权限以允许所有用户访问和修改文件,但这并不令人满意。
我发现使用 setuid 我也许可以允许应用程序在任何用户启动时访问文件,但不允许用户直接修改文件。这正是我所需要的。
但是,我找不到修改 umask 或 shelve 和 logging 模块创建的文件的权限的方法。
我认为也许对于 shelve 访问的文件,我可以使用 os.umask 在访问它们之前创建文件,但似乎行不通对于 logging 创建的文件,因为我正在使用旋转文件处理程序,它可能会在日志文件已满时创建文件。
处理这个问题的更 Pythonic 方式是什么?
编辑:
根据 cmets 的要求,这是一个简单的 sn-p 代码,可以复制我的问题。
#!/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 : Permission denied [...]/logfile.log
编辑 2
一些附加信息:
我在我的应用程序所在的系统上没有 root 访问权限,因此似乎不可能专门为我创建一个供我的应用程序单独使用的用户设置用户。
该应用程序将很少使用,并且被少数人使用,因此我现在假设不会同时访问它。
我不需要在应用程序中进行身份验证和授权。它应该对任何用户都以完全相同的方式工作。
我认为,正如 goncalopp 所建议的那样,创建一个用户并以该用户身份运行应用程序将是最好的解决方案,但恐怕这是不可能的。我得问问系统管理员。
【问题讨论】:
-
您能否发布一些简短的示例代码并告诉我们哪个部分不起作用?
-
@miindlek:完成。对于 shelve 创建的文件,问题完全相同。
-
最好的选择是修复应用程序,以便它为其创建的所有文件设置合理的所有权/权限。
os.umask是其中的一部分,但您也可以进行明确的chmod调用...
标签: python linux permissions