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

时间:2009-12-07 18:10:31

标签: python

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

6 个答案:

答案 0 :(得分:91)

你是对的os.access,就像底层access系统调用一样,检查特定用户(真实而不是有效的ID,以帮助解决suid情况)。

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

为帮助解释这些位,您可能需要使用stat模块。具体来说,您需要定义位掩码here,并且您将使用&运算符(位和)来使用它们来屏蔽st_mode属性中的相关位 - - 例如,如果您只需要对某个文件是否可读组进行True / False检查,则可以采用以下方法:

import os
import stat

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

注意:os.stat通话费用可能有点高,因此请务必通过一次通话提取您关心的所有信息,而不是为每个感兴趣的位继续重复通话; - )。

答案 1 :(得分:9)

您可以通过os.stat(path)stat模块一起检查文件权限,以便解释结果。

答案 2 :(得分:8)

os.access()与标记os.R_OKos.W_OKos.X_OK一起使用。

修改:如果您正在测试Windows上的目录权限,请查看this related question

答案 3 :(得分:6)

只是为了帮助像我这样的人来到这里寻找一些与众不同的东西:

import os
import stat

st = os.stat(yourfile)
oct_perm = oct(st.st_mode)
print(oct_perm)
>>> 0o100664 //the last 3 or 4 digits is probably what you want.

详情请见https://stackoverflow.com/a/5337329/1814774

答案 4 :(得分:3)

os.stat以及相关的bit masks模式。

答案 5 :(得分:2)

import os
os.access('my_file', os.R_OK) # Check for read access
os.access('my_file', os.W_OK) # Check for write access
os.access('my_file', os.X_OK) # Check for execution access
os.access('my_file', os.F_OK) # Check for existence of file