在Python

时间:2016-04-01 01:41:47

标签: python permissions

我的Python程序(在Ubuntu和OS X上运行)将文件放在/tmp目录中,然后指示正在运行的守护程序进程读取这些文件。

守护程序进程在不同的用户下运行,而不是我们的代码。

如果守护程序对文件没有读取和执行权限,则守护程序会失败,但它也需要父目录的读取权限。

我需要修改Python程序以首先检查权限,如果没有必要的权限则向用户发出警告 - 问题是os.access函数仅评估运行Python进程的用户的权限,我看不出如何为其他用户获得有效权限。

我们也无法访问守护程序用户帐户的密码,因此我们不能简单地在该用户帐户下启动子流程来调用os.access并返回结果 - 尽管我们是admin / root有能力的用户。

1 个答案:

答案 0 :(得分:1)

您想检查是否

1。)守护程序用户拥有该文件并具有读取+执行权限

2。)守护程序用户属于拥有该文件的组,并且该组具有读取+执行权限。

或者你可以简单地设置文件的权限,以便允许守护进程用户读取+执行,从而保证公理1和2.这可能是最简单的方法。

下面是一些示例代码,为您提供一个起点。我没有经营或测试过它。

import pwd, grp, os

DAEMON_USER = 'service-account' # unix user running the daemon
FILE_PATH = '/tmp/somefile.sh' # these are the files your'e putting in tmp

group_id_of_file = os.stat(FILE_PATH).st_gid # get id of group owner of the file
file_owner = pwd.getpwuid(os.stat(FILE_PATH).st_uid)
group_members = grp.getgrgid(group_id_of_file).gr_mem

group_permissions = oct(os.stat(FILE_PATH).st_mode)[5:6]
owner_permissions = oct(os.stat(FILE_PATH).st_mode)[4:5]
if (file_owner == DAEMON_USER and owner_permissions >= 5) or (DAEMON_USER in group_members and group_permissions >= 5):
  print "The daemon will be able to read and execute the file"
else:
  print "not good"