【发布时间】:2012-07-07 17:04:32
【问题描述】:
我想知道如何检查“用户”(运行此程序的人除外) 对文件有执行权限? [C api]
我查看了“访问”,它提供了有关调用者的信息。
我正在寻找类似的东西:-
"<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);
}
有人看到这个有什么错误吗?
【问题讨论】:
-
@Arpit bash 中的解决方案可以接受吗?
-
如果您的进程可以以 root 身份运行,那么最可靠的方法可能就是向相关用户发送
setuid()并致电euidaccess()。您可以尝试自己检查权限,但还有更复杂的场景,例如 ACL 或其他访问策略(例如通过 SELinux)。 -
是的,UNIX 自主访问控制模型有些简单。虽然使用 stat 和 system 用户数据库很容易找出权限,但实际情况可能要复杂得多。你最好只处理访问文件的错误
-
@Arpit:不,你的代码错了。您必须从特定检查转移到更一般的检查:uid,而不是组,而不是其他检查。否则,您会错过例如文件所有者为自己删除 x 位的情况。
-
@Arpit:这不是基本权限的工作方式。它们按用户、组、其他的顺序进行检查。以先适用者为准。您可以通过创建一个文件然后
chmod u-r file来检查这一点。即使其他人有读取权限,您也没有。
标签: c linux unix permissions solaris