【发布时间】:2021-03-04 03:49:21
【问题描述】:
在 python 中,我可以检查我自己的用户是否可以使用os.access 访问文件或目录。但是,是否可以检查其他用户是否可以这样做?
一种可能性是根据文件的权限检查用户的 uid 和组:
import os, grp, pwd, stat
def user_access(uid, path, perms=os.R_OK | os.W_OK):
stats = os.stat(path)
# other users
if stats.st_mode & perms == perms:
return True
# owner
if stats.st_uid == uid and (stats.st_mode >> 6) & perms == perms:
return True
# group
user = pwd.getpwuid(uid).pw_name
if (stats.st_mode >> 3) & perms == perms and user in grp.getgrgid(stats.st_gid).gr_mem:
return True
return False
但是,我想这是特定于 POSIX 系统的,我可以想象它会在某些极端情况下失败。事实上,access 上的 libc manual 专门警告反对这个解决方案:
还有另一种方法可以检查此访问,即...检查文件模式位并模拟系统自己的访问计算。这种方法是不可取的,因为许多系统都有额外的访问控制功能;您的程序无法移植地模仿它们,并且您不想尝试跟踪不同系统具有的各种功能。使用 access 很简单,并且会自动执行适合您使用的系统的任何操作。
是否有更简洁和/或更强大的解决方案来检查其他用户的访问权限?
2020 年 12 月 9 日编辑:修复了位旋转的错误。
【问题讨论】:
标签: python cross-platform posix file-permissions