我希望知道如何检查“用户”(非运行此程序的用户)是否对文件具有执行权限?[ C API ]
我查看了“access”,它提供关于调用者的信息。
我正在寻找类似于:
"<cmd> <user_name> <file_name>"
我正在尝试获取<user_name>
是否对<file_name>
具有执行权限?
我正在寻找C API?
可能的解决方案:我正在使用以下算法来获取此信息。
boolean_t
is_user_has_execute_permissions(char *run_as_user)
{
/* Check world execute permission */
if ((cmd_stat.st_mode & S_IXOTH) == S_IXOTH) {
return (TRUE);
}
/* group id for run_as_user */
getpwnam_r(run_as_user, &pw, buf, passwd_len);
/* Check group execute permission */
if ((cmd_stat.st_mode & S_IXGRP) == S_IXGRP) {
if (pw->pw_gid == cmd_stat.st_gid)
return (TRUE);
}
return (FALSE);
}
有人看到这个有错误吗?
setuid()
切换到相关用户并调用euidaccess()
。您可以尝试自己检查权限,但还存在更复杂的情况,如ACL或通过SELinux进行的其他访问策略。 - FatalError