使用Python在Linux中检查文件权限


问题内容

我正在编写一个脚本来检查用户目录中文件的权限,如果它们不可接受,我将警告它们,但是我不仅要检查登录用户的权限,还要检查组和其他用户的权限。我怎样才能做到这一点?在我看来,os.access()在Python中只能检查运行脚本的用户的权限。


问题答案:

您是对的,就像底层访问syscall一样,os.access检查特定的用户(使用真实ID而不是有效ID来解决suid情况)。

os.stat是获取有关文件的更多常规信息(包括每个用户,组和其他用户的权限)的正确方法。返回st_mode的对象的属性os.stat具有文件的权限位。

为了帮助解释这些位,您可能需要使用stat模块。具体来说,你要定义的位掩码在这里,你会使用&操作符(位和)使用它们在屏蔽掉相关的位st_mode属性-
例如,如果你只需要在真/假支票某个文件是否可以组可读,一种方法是:

import os
import stat

def isgroupreadable(filepath):
  st = os.stat(filepath)
  return bool(st.st_mode & stat.S_IRGRP)

请注意:os.stat通话可能会有些昂贵,因此请确保通过一次通话提取您关心的所有信息,而不是继续对感兴趣的每一部分重复通话;-)。