1

我可以使用 stat() 来确定所有者、组或其他人拥有哪些权限,并且可以使用 geteuid() 和 getpwuid() 来获取进程的用户名。我不太确定如何在没有系统调用的情况下获取用户所属的组。

即使知道如何获取这些组,整合所有这些信息似乎也需要做很多工作。有没有更简单的方法?

4

3 回答 3

8

access() POSIX 函数可以在不打开的情况下检查权限。但是,它需要一个系统调用。

access() 函数应根据 amode 中包含的位模式检查由 path 参数指向的路径名命名的文件的可访问性,使用真实用户 ID 代替有效用户 ID,使用真实组 ID 代替有效组 ID。

例如:

access("/etc/passwd",W_OK)

检查您是否具有对 passwd 文件的写入权限。使用 R_OK,检查读取权限。

eaccess()函数(euidaccess是同义词) 使用有效的用户和组 ID 。虽然 eaccess 似乎得到了广泛的支持,但据我所知,它不是 POSIX 标准的一部分。

于 2009-07-16T15:47:37.753 回答
2

unistd.h定义了一个access()函数,

int access(const char *path, int amode);

其中path是您的文件名,amode是要检查的访问权限的按位或。

R_OK、W_OK 和 X_OK 分别保存用于检查读取、写入和搜索/执行权限的模式值。

int readable, readwritable;

//checking for read access
readable = access("/usr/bin/file", R_OK);

//checking for read and write access
readwritable = access("/usr/bin/file", R_OK|W_OK);

您可以在 unix 手册页中找到 access() 的完整描述。

于 2009-07-16T15:47:42.493 回答
1

accaccess() 检查路径参数指向的文件名。这里的缺点是每个文件权限都必须使用下面的标志单独检查。R_OK 测试读取权限。W_OK 测试写权限。X_OK 测试执行或搜索权限。F_OK 检查文件是否存在

于 2009-10-06T11:08:16.920 回答