检查非根用户是否可以访问路径

6 投票
1 回答
1071 浏览
提问于 2025-04-16 21:06

我有一个用Python写的安装脚本(在Linux系统上),这个脚本以管理员身份运行,需要检查某些文件是否可以被普通用户读取。

所以我不能使用os.path.exists()或者直接打开文件(然后捕捉可能出现的错误)。

现在我在考虑检查每个文件的权限位,但唯一的问题是,我还得检查文件路径上每个目录的权限位(目录需要有读取和执行的权限),如果我有成千上万的文件,这个过程可能会非常慢。

我这个解决方案算是最好的选择吗,还是有更好的办法呢?

补充一下:我需要在检查完文件后继续以管理员身份运行这个脚本,所以不能放弃管理员权限。

1 个回答

4

你可以使用 os.seteuid 来把当前的用户身份改成一个非管理员的用户。然后再尝试打开文件。如果没有权限的话,就会出现一个 IOError 错误。

import os
os.seteuid(65534)  # user 65534 is `nobody`
filename='/etc/passwd-'
try:
    open(filename,'r')
except IOError as err:
    print(err)

# [Errno 13] Permission denied: '/etc/passwd-'

撰写回答