用Python在Linux中检查文件权限

85

我正在编写一段脚本,用于检查用户目录中文件的权限,如果权限不可接受,我将对其进行警告。但我想要检查的是不仅登录用户的权限,还有组和其他用户的权限。我该如何做?在Python中,os.access()似乎只能检查运行脚本的用户的权限。

5个回答

118

你说得没错,os.access 和底层的 access 系统调用一样,检查特定用户(实际ID而非有效ID,以帮助处理suid情况)。

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

为了帮助解释这些位,您可能需要使用 stat 模块。 具体来说,您将需要在 这里 定义的位掩码,并使用 & 运算符(按位与)来在 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可能会比较昂贵,因此请确保一次性提取您关心的所有信息,而不是为每个感兴趣的位重复调用。


29

只是为了帮助像我这样来到这里寻找不同事物的其他人:

import os
import stat

st = os.stat(yourfile)
oct_perm = oct(st.st_mode)
print(oct_perm)
# -> 0o100664

你可能需要的是最后3到4位数字。

查看此链接以获取更多细节:https://dev59.com/YW435IYBdhLWcg3wlBCC#5337329


1
这个回答对我来说最有用,因为我正在寻找文件的ACL八进制值。 - user7851115

13
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

正如OP所说,这只返回当前用户的权限,而不是完整的权限集。 - Lampe2020

9

使用os.access()函数和os.R_OKos.W_OKos.X_OK标志来进行操作。

编辑: 如果您正在测试Windows上的目录权限,请查看这个相关问题


10
你没有仔细阅读问题,os.access 只检查当前用户的权限。 - Martin Konecny

9
你可以通过使用os.stat(path)stat模块一起解释结果来检查文件权限。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接