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

时间:2014-07-30 11:18:57

标签: python linux permissions

我正在使用python开发应用程序,而且我正在努力处理文件权限。

我的应用是使用搁置记录模块创建,访问和修改多个文件。

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

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

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

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

但是,我无法找到修改umask或搁置记录模块创建的文件的权利的方法。

我认为也许对于搁置访问的文件,我可以使用 os.umask 在我访问它们之前创建文件,但似乎不会#n;适用于日志记录创建的文件,因为我使用的旋转文件处理程序可能会在日志文件已满时创建文件。

处理这个问题的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:Permission denied [...] / logfile.log

编辑2

其他一些信息:

我的应用程序所在的系统没有超级用户访问权限,因此设置用户专门为我创建用户而不能单独使用我的应用程序似乎是不可能的。

应用程序将很少使用,并且由少数人使用,因此我现在假设赢家不能同时访问它。

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

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

2 个答案:

答案 0 :(得分:0)

在您的问题中,如果有多个用户同时运行该应用程序,会发生什么情况并不清楚。除非您有明确的锁文件或其他同步机制,否则您将有多个进程同时写入相同的文件。

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

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

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

当然,所有这些都意味着额外的开发工作,此时您可能无法做到。 解决方法可能允许passwordless sudo to a specific user and command

答案 1 :(得分:0)

您可以尝试使用网络浏览器API打开文件

它不需要权限